第19回 NGアーティスト/NGワードの利用処理を入れる

前回「第18回 NGアーティスト/NGワード登録処理を作る」はNG指定機能を作りました。
今回は登録されたNG情報に基づいて再生スキップする処理を追加します。

■Utility.csへ以下を追加
		/// <summary>
		/// MP3ファイルからの曲名情報取得
		/// </summary>
		public static bool GetMp3Info(AudioItem item, out string strTitle, out string strArtist, out string strAlbum)
		{
			//zipファイル以外はそのまま情報取得
			if (item.nEntryIndex < 0)
				return GetMp3Info(item.strFile, out strTitle, out strArtist, out strAlbum);

			//zipファイルは解凍して取得
			try
			{
				bool ret;
				string strFile;

				strArtist = "";
				strTitle = "";
				strAlbum = "";

				ret = ExtractFileFromZip(item.strFile, item.nEntryIndex, GetTmpFile(), out strFile);

				if (ret)
					ret = GetMp3Info(strFile, out strTitle, out strArtist, out strAlbum);

				File.Delete(strFile);

				return ret;
			}
			catch (Exception)
			{
			}
			strArtist = "";
			strTitle = "";
			strAlbum = "";
			return false;
		}
■Form1.csのGetNextIndex()を以下のように変更
		/// <summary>
		/// 次の再生曲インデックスを決める
		/// </summary>
		int GetNextIndex()
		{
			if (_listFiles.Count == 0)
				return -1;

			int nIndex;
			Random rnd = new Random(Environment.TickCount);

			while (true)
			{
				if (_listPlayNext.Count == 0)
				{
					//未来の曲リストが空ならランダムで曲を決定
					nIndex = rnd.Next(0, _listFiles.Count);
				}
				else
				{
					//未来の曲リストから次の曲を決定
					nIndex = _listPlayNext[0];
					_listPlayNext.RemoveAt(0);
				}

				//同じ曲は連続で演奏しない
				if (nIndex == _nCurrentIndex)
					continue;

				//NGファイル指定されていないかチェック
				if (_option.IsNGFile(_listFiles[nIndex]))
					continue;

				//以下を追加
				//mp3情報を取得
				string strTitle;
				string strArtist;
				string strAlbum;
				Utility.GetMp3Info(_listFiles[nIndex], out strTitle, out strArtist, out strAlbum);

				//以下を追加
				//アーティストがNG指定されていないかチェック
				if (_option.IsNGArtist(strArtist))
					continue;

				//以下を追加
				//曲名がNGワードを含まないかチェック
				if (_option.IsNGWord(strTitle))
					continue;

				break;
			}

			return nIndex;
		}

プロジェクトファイルをダウンロード


カテゴリー「MP3プレーヤーを作る(C#)」 のエントリー