Beispiel #1
0
        public static void SongInfoAnalysis(string file, List <string> SongLangKeyWordList, List <string> SingerTypeKeyWordList, List <string> SongTrackKeyWordList)
        {
            string   SongAddStatus  = "";
            string   SongID         = "";
            string   SongLang       = "";
            string   SongSingerType = "";
            string   SongSinger     = "";
            string   SongSongName   = "";
            string   SongTrack      = "";
            string   SongSongType   = "";
            string   SongVolume     = "";
            string   SongWordCount  = "";
            string   SongPlayCount  = "";
            float    SongMB         = 0;
            DateTime SongCreatDate  = new DateTime();
            string   SongSpell      = "";
            string   SongSpellNum   = "";
            string   SongSongStroke = "";
            string   SongPenStyle   = "";
            string   SongPlayState  = "";
            string   SongSrcPath    = Path.GetFullPath(file);
            string   SongSortIndex  = "";

            string SongLangStr       = "";
            string SongSingerTypeStr = "";
            string SongTrackStr      = "";
            string SongSongTypeStr   = "";

            List <string> list = new List <string>();

            // 從檔案名稱查找歌曲資訊
            string FileStr = Path.GetFileNameWithoutExtension(file);

            if (Global.SongAddEnableConvToTC == "True")
            {
                FileStr = CommonFunc.ConvToTraditionalChinese(FileStr);
            }

            // 特殊歌手及歌曲名稱處理
            list = new List <string>(Regex.Split(Global.SongAddSpecialStr, @"\|", RegexOptions.IgnoreCase));
            foreach (string str in list)
            {
                FileStr = Regex.Replace(FileStr, str, "%%" + str + "%%", RegexOptions.IgnoreCase);
            }
            list.Clear();

            // 去除檔案開頭的編號
            FileStr = Regex.Replace(FileStr, @"^(\d{2}|\d{1})\.", "", RegexOptions.IgnoreCase);

            // 歌手-歌名(語系-類別-聲道) 名稱處理
            MatchCollection BracketMatches = Regex.Matches(FileStr, @"[\{\(\[{([【].+?[】])}\]\)\}]", RegexOptions.IgnoreCase);

            if (BracketMatches.Count > 0)
            {
                foreach (Match m in BracketMatches)
                {
                    if (m.Value.ContainsAny("-", "_"))
                    {
                        FileStr = FileStr.Replace(m.Value, "%%" + m.Value + "%%");
                    }
                }
            }

            List <string> SongSongTypeList        = new List <string>(Global.SongMgrSongType.Split(','));
            List <string> SongSongTypeLowCaseList = SongSongTypeList.ConvertAll(str => str.ToLower());
            List <string> FileNameRemoveList      = new List <string>();

            string SeparateStr = "[-_](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))";

            list = new List <string>(Regex.Split(FileStr, SeparateStr, RegexOptions.None));

            foreach (string str in list)
            {
                if (SongSingerType != "" && SongSinger != "" && SongLang != "" && SongTrack != "" && SongSongType != "")
                {
                    break;
                }
                string splitstr = Regex.Replace(str, @"%%|^\s*|\s*$", "");

                // 查看檔案名稱中有無歌手
                if (SongSinger == "")
                {
                    if (SingerDataLowCaseList.IndexOf(splitstr.ToLower()) >= 0)
                    {
                        SongSinger = SingerDataList[SingerDataLowCaseList.IndexOf(splitstr.ToLower())];
                        if (SongSingerType == "")
                        {
                            SongSingerType = SingerDataTypeList[SingerDataLowCaseList.IndexOf(splitstr.ToLower())];
                        }
                    }
                    else
                    {
                        Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                        if (r.IsMatch(splitstr.ToLower()))
                        {
                            string[] singers = Regex.Split(splitstr.ToLower(), "[&+]", RegexOptions.None);
                            foreach (string singer in singers)
                            {
                                string SingerName = Regex.Replace(singer, @"^\s*|\s*$", ""); //去除頭尾空白
                                if (SingerDataLowCaseList.IndexOf(SingerName.ToLower()) >= 0)
                                {
                                    SongSinger = splitstr;
                                    if (SongSingerType == "")
                                    {
                                        SongSingerType = "3";
                                    }
                                    break;
                                }
                            }
                        }
                    }
                }

                // 查看檔案名稱中有無歌手類別
                if (SingerTypeKeyWordList.IndexOf(splitstr) >= 0)
                {
                    SongSingerType    = GetSongInfo("SongSingerType", splitstr);
                    SongSingerTypeStr = splitstr;
                }

                // 括號字串處理
                MatchCollection matches = Regex.Matches(splitstr, @"[\{\(\[{([【].+?[】])}\]\)\}]", RegexOptions.IgnoreCase);
                if (matches.Count > 0)
                {
                    foreach (Match match in matches) // 比對括號內字串
                    {
                        string MatchStr = Regex.Replace(match.Value, @"^[\{\(\[{([【]|[】])}\]\)\}]$", "", RegexOptions.IgnoreCase);
                        if (MatchStr.ContainsAny("_", "-")) // 括號字串有分隔符號
                        {
                            List <string> BracketStrlist     = new List <string>(Regex.Split(MatchStr, SeparateStr, RegexOptions.None));
                            string        FileNameRemoveStr  = "";
                            string        BracketSeparateStr = (MatchStr.Contains("_")) ? "_" : "-";

                            foreach (string BracketStr in BracketStrlist)
                            {
                                if (SongLangKeyWordList.IndexOf(BracketStr) >= 0)
                                {
                                    SongLang           = GetSongInfo("SongLang", BracketStr);
                                    FileNameRemoveStr += ((BracketStrlist.IndexOf(BracketStr) == 0) ? BracketStr : BracketSeparateStr + BracketStr);
                                }
                                else if (SongTrackKeyWordList.IndexOf(BracketStr.ToLower()) >= 0 || BracketStr.ToLower() == "l" || BracketStr.ToLower() == "r")
                                {
                                    SongTrack          = GetSongInfo("SongTrack", BracketStr.ToLower());
                                    FileNameRemoveStr += ((BracketStrlist.IndexOf(BracketStr) == 0) ? BracketStr : BracketSeparateStr + BracketStr);
                                }
                                else if (SongSongTypeLowCaseList.IndexOf(BracketStr.ToLower()) >= 0)
                                {
                                    SongSongType       = SongSongTypeList[SongSongTypeLowCaseList.IndexOf(BracketStr.ToLower())];
                                    FileNameRemoveStr += ((BracketStrlist.IndexOf(BracketStr) == 0) ? BracketStr : BracketSeparateStr + BracketStr);
                                }
                                else if (BracketStr.ContainsAny("合唱", "對唱"))
                                {
                                    SongSingerType = "3";
                                }
                            }
                            if (FileNameRemoveStr != "")
                            {
                                FileNameRemoveList.Add(FileNameRemoveStr);
                            }
                        }
                        else // 括號字串無分隔符號
                        {
                            if (SongLangKeyWordList.IndexOf(MatchStr) >= 0)
                            {
                                SongLang = GetSongInfo("SongLang", MatchStr);
                                FileNameRemoveList.Add(MatchStr);
                            }
                            else if (SongTrackKeyWordList.IndexOf(MatchStr.ToLower()) >= 0 || MatchStr.ToLower() == "l" || MatchStr.ToLower() == "r")
                            {
                                SongTrack = GetSongInfo("SongTrack", MatchStr.ToLower());
                                FileNameRemoveList.Add(MatchStr);
                            }
                            else if (SongSongTypeLowCaseList.IndexOf(MatchStr.ToLower()) >= 0)
                            {
                                SongSongType = SongSongTypeList[SongSongTypeLowCaseList.IndexOf(MatchStr.ToLower())];
                                FileNameRemoveList.Add(MatchStr);
                            }
                            else if (MatchStr.ContainsAny("合唱", "對唱"))
                            {
                                SongSingerType = "3";
                            }
                        }
                    }
                }

                // 查看檔案名稱中有無語系類別
                if (SongLang == "")
                {
                    if (SongLangKeyWordList.IndexOf(splitstr) >= 0)
                    {
                        SongLang    = GetSongInfo("SongLang", splitstr);
                        SongLangStr = splitstr;
                    }
                }

                // 查看檔案名稱中有無歌曲聲道
                if (SongTrack == "")
                {
                    if (SongTrackKeyWordList.IndexOf(splitstr.ToLower()) >= 0)
                    {
                        SongTrack    = GetSongInfo("SongTrack", splitstr.ToLower());
                        SongTrackStr = splitstr;
                    }
                }

                // 查看檔案名稱中有無歌曲類別
                if (SongSongType == "")
                {
                    if (SongSongTypeLowCaseList.IndexOf(splitstr.ToLower()) >= 0)
                    {
                        SongSongType    = SongSongTypeList[SongSongTypeLowCaseList.IndexOf(splitstr.ToLower())];
                        SongSongTypeStr = splitstr;
                    }
                }
            }
            SongSongTypeList.Clear();
            SongSongTypeLowCaseList.Clear();
            list.Clear();

            string        DirStr           = Path.GetDirectoryName(file);
            List <string> DirStrRemoveList = new List <string>();

            if (SongSingerType == "" || SongSinger == "" || SongLang == "")
            {
                list = new List <string>(Regex.Split(DirStr, @"\\", RegexOptions.None));

                foreach (string str in list)
                {
                    if (SongSingerType != "" && SongSinger != "" && SongLang != "")
                    {
                        break;
                    }
                    string splitstr = Regex.Replace(str, @"%%|^\s*|\s*$", "");

                    // 查看資料夾名稱中有無歌手
                    if (SongSinger == "")
                    {
                        if (SingerDataLowCaseList.IndexOf(splitstr.ToLower()) >= 0 && Global.SongAddSongIdentificationMode == "1")
                        {
                            SongSinger = SingerDataList[SingerDataLowCaseList.IndexOf(splitstr.ToLower())];
                            if (SongSingerType == "")
                            {
                                SongSingerType = SingerDataTypeList[SingerDataLowCaseList.IndexOf(splitstr.ToLower())];
                            }
                        }
                        else
                        {
                            Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                            if (r.IsMatch(splitstr.ToLower()))
                            {
                                string[] singers = Regex.Split(splitstr.ToLower(), "[&+]", RegexOptions.None);
                                foreach (string singer in singers)
                                {
                                    string SingerName = Regex.Replace(singer, @"^\s*|\s*$", ""); //去除頭尾空白
                                    if (SingerDataLowCaseList.IndexOf(SingerName.ToLower()) >= 0)
                                    {
                                        SongSinger = splitstr;
                                        if (SongSingerType == "")
                                        {
                                            SongSingerType = "3";
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                    }

                    // 查看資料夾名稱中有無歌手類別
                    if (SingerTypeKeyWordList.IndexOf(splitstr) >= 0)
                    {
                        if (SongSingerType == "")
                        {
                            SongSingerType = GetSongInfo("SongSingerType", splitstr);
                        }
                        DirStrRemoveList.Add(str);
                    }


                    // 查看資料夾名稱中有無語系類別
                    if (SongLangKeyWordList.IndexOf(splitstr) >= 0)
                    {
                        if (SongLang == "")
                        {
                            SongLang = GetSongInfo("SongLang", splitstr);
                        }
                        DirStrRemoveList.Add(str);
                    }
                }
                list.Clear();
            }

            if (DirStrRemoveList.Count > 0)
            {
                foreach (string RemoveStr in DirStrRemoveList)
                {
                    DirStr = Regex.Replace(DirStr, @"\\?" + RemoveStr, "");
                }
            }

            // 套用預設歌曲聲道
            if (SongTrack == "")
            {
                if (Global.SongAddDefaultSongTrack == "6")
                {
                    var task = Task.Factory.StartNew(() => CommonFunc.AutoDetectSongTrack(SongSrcPath));
                    SongTrack = task.Result;
                }
                else
                {
                    SongTrack = Global.SongAddDefaultSongTrack;
                }
            }

            // 套用預設歌曲類別
            if (SongSongType == "")
            {
                string str = "";
                if (Global.SongMgrSongType != "")
                {
                    str = "無類別," + Global.SongMgrSongType;
                }
                else
                {
                    str = "無類別";
                }
                list = new List <string>(str.Split(','));
                if (list[int.Parse(Global.SongAddDefaultSongType) - 1] == "無類別")
                {
                    SongSongType = "";
                }
                else
                {
                    SongSongType = list[int.Parse(Global.SongAddDefaultSongType) - 1];
                }
                list.Clear();
            }

            // 套用預設歌曲音量
            if (SongVolume == "")
            {
                SongVolume = Global.SongAddDefaultSongVolume;
            }

            // 判斷歌手及歌曲名稱
            if (SongSongName == "")
            {
                list = new List <string>()
                {
                    SongLangStr, SongSingerTypeStr, SongTrackStr, SongSongTypeStr
                };
                string str = FileStr;

                foreach (string s in list)
                {
                    str = Regex.Replace(str, "^" + s + "[_-]|[_-]" + s + "[_-]|[_-]" + s + "$", "_", RegexOptions.IgnoreCase);
                    str = Regex.Replace(str, "^[_-]|[_-]$", "", RegexOptions.IgnoreCase);
                }
                list.Clear();

                // 去除括號內要移除的字串
                if (FileNameRemoveList.Count > 0)
                {
                    foreach (string RemoveStr in FileNameRemoveList)
                    {
                        str = Regex.Replace(str, @"([\{\(\[{([【](.+)?)" + RemoveStr + @"([】])}\]\)\}])", "$1$3", RegexOptions.IgnoreCase);
                        str = Regex.Replace(str, @"[\{\(\[{([【]" + @"[】])}\]\)\}]", "", RegexOptions.IgnoreCase);
                    }
                }
                FileNameRemoveList.Clear();

                list = new List <string>(Regex.Split(str, SeparateStr, RegexOptions.None));

                switch (Global.SongAddSongIdentificationMode)
                {
                case "1":
                    switch (list.Count)     // 智能辨識模式
                    {
                    case 1:
                        if (SongSinger == "")
                        {
                            Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                            if (r.IsMatch(Path.GetFileName(DirStr)))
                            {
                                SongSingerType = "3";
                            }
                            SongSinger = Regex.Replace(Path.GetFileName(DirStr), @"%%|^\s*|\s*$", "");
                        }
                        SongSongName = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                        break;

                    case 2:
                        if (SongSinger == "")         // 未找到歌手
                        {
                            Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                            if (r.IsMatch(list[0]))
                            {
                                SongSingerType = "3";
                            }
                            SongSinger   = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                            SongSongName = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                        }
                        else         // 已找到歌手
                        {
                            if (SongSinger.ToLower() == Regex.Replace(list[0], @"%%|^\s*|\s*$", "").ToLower())
                            {
                                SongSongName = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                            }
                            else
                            {
                                SongSongName = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                            }
                        }
                        break;

                    default:
                        if (SongSinger == "")         // 未找到歌手
                        {
                            if (CommonFunc.IsSongId(list[0]))
                            {
                                SongID = list[0];
                                Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                                if (r.IsMatch(list[1]))
                                {
                                    SongSingerType = "3";
                                }
                                SongSinger   = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                                SongSongName = Regex.Replace(list[2], @"%%|^\s*|\s*$", "");
                            }
                            else
                            {
                                Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                                if (r.IsMatch(list[0]))
                                {
                                    SongSingerType = "3";
                                }
                                SongSinger   = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                                SongSongName = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                            }
                        }
                        else         // 已找到歌手
                        {
                            if (CommonFunc.IsSongId(list[0]))
                            {
                                SongID = list[0];
                                if (SongSinger.ToLower() == Regex.Replace(list[1], @"%%|^\s*|\s*$", "").ToLower())
                                {
                                    SongSongName = Regex.Replace(list[2], @"%%|^\s*|\s*$", "");
                                }
                                else
                                {
                                    SongSongName = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                                }
                            }
                            else         // List[0] 不是歌曲編號
                            {
                                if (SongSinger.ToLower() == Regex.Replace(list[0], @"%%|^\s*|\s*$", "").ToLower())
                                {
                                    SongSongName = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                                }
                                else
                                {
                                    SongSongName = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                                }
                            }
                        }
                        break;
                    }
                    break;

                case "2":
                case "3":
                    switch (list.Count)     // 歌手_歌名 & 歌名_歌手
                    {
                    case 1:
                        if (SongSinger == "")
                        {
                            Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                            if (r.IsMatch(Path.GetFileName(DirStr)))
                            {
                                SongSingerType = "3";
                            }
                            SongSinger = Regex.Replace(Path.GetFileName(DirStr), @"%%|^\s*|\s*$", "");
                        }
                        SongSongName = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                        break;

                    default:
                        if (SongSinger == "")         // 未找到歌手
                        {
                            Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                            switch (Global.SongAddSongIdentificationMode)
                            {
                            case "2":
                                if (r.IsMatch(list[0]))
                                {
                                    SongSingerType = "3";
                                }
                                SongSinger   = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                                SongSongName = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                                break;

                            case "3":
                                if (r.IsMatch(list[1]))
                                {
                                    SongSingerType = "3";
                                }
                                SongSinger   = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                                SongSongName = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                                break;
                            }
                        }
                        else         // 已找到歌手
                        {
                            if (SongSinger.ToLower() == Regex.Replace(list[0], @"%%|^\s*|\s*$", "").ToLower())
                            {
                                SongSongName = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                            }
                            else
                            {
                                SongSongName = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                            }
                        }
                        break;
                    }
                    break;

                case "4":
                    switch (list.Count)
                    {
                    case 1:
                        if (SongSinger == "")
                        {
                            Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                            if (r.IsMatch(Path.GetFileName(DirStr)))
                            {
                                SongSingerType = "3";
                            }
                            SongSinger = Regex.Replace(Path.GetFileName(DirStr), @"%%|^\s*|\s*$", "");
                        }
                        SongSongName = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                        break;

                    case 2:
                        if (SongSinger == "")
                        {
                            Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                            if (r.IsMatch(list[0]))
                            {
                                SongSingerType = "3";
                            }
                            SongSinger   = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                            SongSongName = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                        }
                        else
                        {
                            if (SongSinger.ToLower() == Regex.Replace(list[0], @"%%|^\s*|\s*$", "").ToLower())
                            {
                                SongSongName = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                            }
                            else
                            {
                                SongSongName = Regex.Replace(list[0], @"%%|^\s*|\s*$", "");
                            }
                        }
                        break;

                    default:
                        if (CommonFunc.IsSongId(list[0]))
                        {
                            SongID = list[0];
                        }

                        if (SongSinger == "")
                        {
                            Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                            if (r.IsMatch(list[1]))
                            {
                                SongSingerType = "3";
                            }
                            SongSinger   = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                            SongSongName = Regex.Replace(list[2], @"%%|^\s*|\s*$", "");
                        }
                        else
                        {
                            if (SongSinger.ToLower() == Regex.Replace(list[1], @"%%|^\s*|\s*$", "").ToLower())
                            {
                                SongSongName = Regex.Replace(list[2], @"%%|^\s*|\s*$", "");
                            }
                            else
                            {
                                SongSongName = Regex.Replace(list[1], @"%%|^\s*|\s*$", "");
                            }
                        }
                        break;
                    }
                    break;
                }
                list.Clear();
            }

            // 問題歌曲處理
            if (Global.SongAnalysisExceptionSingerList.IndexOf(SongSinger) >= 0)
            {
                int i = Global.SongAnalysisExceptionSingerList.IndexOf(SongSinger);

                switch (SongSinger)
                {
                case "台灣女孩":
                    if (SongSongName == "羅百吉&寶貝")
                    {
                        if (FileStr.ContainsAll(Global.SongAnalysisExceptionSongList[i].Split('|')))
                        {
                            SongLang       = "國語";
                            SongSinger     = "羅百吉&寶貝";
                            SongSongName   = "台灣女孩";
                            SongSingerType = "3";
                        }
                    }
                    break;

                case "梁靜茹":
                case "張懸":
                    if (SongLang == "兒歌")
                    {
                        if (FileStr.ContainsAll(Global.SongAnalysisExceptionSongList[i].Split('|')))
                        {
                            SongLang     = "國語";
                            SongSongName = "兒歌";
                        }
                    }
                    break;

                case "莫文蔚":
                    if (SongLang == "台語")
                    {
                        if (FileStr.ContainsAll(Global.SongAnalysisExceptionSongList[i].Split('|')))
                        {
                            SongLang     = "國語";
                            SongSongName = "台";
                        }
                    }
                    break;
                }
            }

            // 套用預設歌手類別
            if (SongSingerType == "")
            {
                string str = CommonFunc.GetSingerTypeStr(int.Parse(Global.SongAddDefaultSingerType) - 1, 3, "null");
                SongSingerType = CommonFunc.GetSingerTypeStr(0, 1, str);
            }

            // 統一資料庫中合唱歌手分隔符號
            if (SongSingerType == "3")
            {
                Regex r = new Regex("[&+](?=(?:[^%]*%%[^%]*%%)*(?![^%]*%%))");
                if (r.IsMatch(SongSinger))
                {
                    SongSinger = Regex.Replace(SongSinger, "[&+]", "&", RegexOptions.IgnoreCase);
                }
            }

            // 套用預設語系類別
            if (SongLang == "")
            {
                SongLang = CommonFunc.GetSongLangStr(int.Parse(Global.SongAddDefaultSongLang) - 1, 0, "null");

                int SongDataIndex = CommonFunc.MatchCashboxSongLang(SongSinger, SongSongName, SongSingerType);

                if (SongDataIndex >= 0)
                {
                    string CashboxSongDataLang = Global.CashboxSongDataLangList[SongDataIndex];
                    if (Global.CrazyktvSongLangList.IndexOf(CashboxSongDataLang) >= 0)
                    {
                        SongLang = Global.CrazyktvSongLangList[Global.CrazyktvSongLangList.IndexOf(CashboxSongDataLang)];
                    }
                }
            }

            // 計算歌曲字數
            List <string> SongWordCountList = new List <string>();

            SongWordCountList = CommonFunc.GetSongWordCount(SongSongName);
            SongWordCount     = SongWordCountList[0];

            if (Global.SongAddEngSongNameFormat == "True")
            {
                if (SongWordCountList[1] == "True")
                {
                    TextInfo ti = new CultureInfo("en-US", false).TextInfo;
                    SongSongName = ti.ToTitleCase(SongSongName.ToLower());
                }
            }

            // 點播次數初始值
            SongPlayCount = "0";

            // 計算歌曲大小
            FileInfo f = new FileInfo(file);

            SongMB = float.Parse(((f.Length / 1024f) / 1024f).ToString("F2"));

            // 取得加歌日期
            SongCreatDate = DateTime.Now;

            // 取得歌曲拼音
            List <string> SongSpellList = new List <string>();

            SongSpellList = CommonFunc.GetSongNameSpell(SongSongName);
            SongSpell     = SongSpellList[0];
            SongSpellNum  = SongSpellList[1];
            if (SongSpellList[2] == "")
            {
                SongSpellList[2] = "0";
            }
            SongSongStroke = SongSpellList[2];
            SongPenStyle   = SongSpellList[3];

            // 播放狀態初始值
            SongPlayState = "0";

            // 排序索引
            if (SongLang == "未知")
            {
                SongSortIndex = "1";
            }
            if (SongSortIndex == "")
            {
                if (SongSingerType == "10")
                {
                    SongSortIndex = "2";
                }
            }
            if (SongSortIndex == "")
            {
                if (SongID != "")
                {
                    SongSortIndex = "3";
                }
            }
            if (SongSortIndex == "")
            {
                SongSortIndex = "4";
            }

            // 加歌狀態
            if (SongLang == "未知")
            {
                SongAddStatus = "語系類別必須有值才能加歌!";
            }
            if (SongAddStatus == "")
            {
                if (SongSingerType == "10")
                {
                    SongAddStatus = "此歌手尚未設定歌手資料!";
                }
            }

            // 歌庫監視
            if (Global.SongMgrSongAddMode == "4")
            {
                if (SongLang == "未知")
                {
                    Global.SongLogDT.Rows.Add(Global.SongLogDT.NewRow());
                    Global.SongLogDT.Rows[Global.SongLogDT.Rows.Count - 1][0] = "【歌庫監視】檔案結構中須有語系類別資訊才能加歌: " + SongSrcPath;
                    Global.SongLogDT.Rows[Global.SongLogDT.Rows.Count - 1][1] = Global.SongLogDT.Rows.Count;
                }
                else
                {
                    CreateDataRow(SongAddStatus, SongID, SongLang, SongSingerType, SongSinger, SongSongName, SongTrack, SongSongType, SongVolume, SongWordCount, SongPlayCount, SongMB, SongCreatDate, SongSpell, SongSpellNum, SongSongStroke, SongPenStyle, SongPlayState, SongSrcPath, SongSortIndex);
                }
            }
            else
            {
                CreateDataRow(SongAddStatus, SongID, SongLang, SongSingerType, SongSinger, SongSongName, SongTrack, SongSongType, SongVolume, SongWordCount, SongPlayCount, SongMB, SongCreatDate, SongSpell, SongSpellNum, SongSongStroke, SongPenStyle, SongPlayState, SongSrcPath, SongSortIndex);
            }
        }