第03回 フォルダ内のファイルを順番に再生する

前回「第02回 ループ再生する」作成したものは同じ曲を何度もループ再生するものでした。
今回はフォルダ内にあるmp3ファイルを順番に再生するようにします。

音楽ファイルの検索はDirectory.EnumerateFiles()を利用し、これで音楽ファイル以外も含めた全ファイルの一覧を取得。その中から拡張子がmp3/m4aのファイルのみを抜き出して、_liststrFilesへ追加します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;		//追加
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WMPLib;

namespace MP3Player
{
	public partial class Form1 : Form
	{
		WindowsMediaPlayer _mediaPlayer = new WindowsMediaPlayer();

		Timer _timer = new Timer();

		//以下を追加
		List<string> _liststrFiles;			//音楽ファイル一覧
		int _nCurrentIndex = -1;			//↑へのインデックス

		public Form1()
		{
			InitializeComponent();

			//以下を追加
			_liststrFiles = EnumFiles(@"G:\Desktop\mp3\");		//再生したいmp3保存フォルダを指定
			if (_liststrFiles.Count > 0)
				_nCurrentIndex = 0;

			_timer.Interval = 300;			//300msecごとに処理を実行
			_timer.Tick += delegate
			{
				//止まっていたら再び再生
				if (_mediaPlayer.playState == WMPPlayState.wmppsStopped)
				{
					//以下を追加/変更
					if (_liststrFiles.Count > 0)
					{
						_nCurrentIndex++;
						if (_nCurrentIndex >= _liststrFiles.Count)
							_nCurrentIndex = 0;
						_mediaPlayer.URL = _liststrFiles[_nCurrentIndex];	//次の曲をセット
						_mediaPlayer.controls.play();
					}
				}
			};
			_timer.Start();


			//以下を追加/変更
			_mediaPlayer.settings.volume = 20;
			if (_liststrFiles.Count > 0)
				_mediaPlayer.URL = _liststrFiles[_nCurrentIndex];			//最初の再生曲をセット
			_mediaPlayer.controls.play();
		}


		//以下を追加
		/// <summary>
		/// フォルダ内のファイルを一覧して返す
		/// </summary>
		List<string> EnumFiles(string strFolder)
		{
			List<string> ret = new List<string>();

			//指定フォルダ以下の全子フォルダから全ファイルを抜き出す
			IEnumerable<string> listFiles = Directory.EnumerateFiles(strFolder, "*.*", SearchOption.AllDirectories);

			foreach (string strFile in listFiles)
			{
				//見つかったファイルの拡張子を取り出し
				string strExt = Path.GetExtension(strFile).ToLower();
				if (strExt == "")
					continue;

				//mp3/m4a以外なら無視
				if (strExt != ".mp3" && strExt != ".m4a")
					continue;

				ret.Add(strFile);
			}

			return ret;
		}
	}
}

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


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