C#.NET で MP3 の再生終了を捉える

C#.NET で音楽再生をしようと思うと、サードパーティー製のコントロールを使う方法などいくつかあるようだが、俺が今作っている「別所畑盆踊り大会専用プレーヤー Born Audrey(ボーン・オードリー)」では WindowsMediaPlayer コントロールを使っている。

インスタンスを作って、controls.play()メソッドで再生を始め、controls.stop()メソッドで再生をやめる。実に簡単。

しかし、困ったことに、WindowsMediaPlayer コントロールには「再生終了」のイベントがない。

MediaPlayer クラスで組めば MediaEnded イベントで再生終了後の処理が書ける。
状況が変化したら、MediaChange イベントが発生するので、そこでステータスが終了かどうかを見ることができる・・・という噂も聞いたが、これは本当かどうか確認してない(笑)

まあ、どちらにしても、MediaPlayer クラスで組めば再生終了は捉えることができるのである。

・・・が、悲しいことに、上に書いたように WindowsMediaPlayer コントロールを使うと「再生終了」のイベントはないので、自力でチェックするしかないのである。

どうするかというと、再生開始時にタイマーを使った定期的な監視処理をスタートさせ、終了のステータスを拾うしかない。

gTimer が Timer のインスタンスで、gWmp が WindowsMediaPlayer のインスタンスだとすると、

gTimer1.Interval = 1000; // 1秒ごとに処理を行う
gTimer1.Elapsed += Timer_Elapsed; // Elapsedイベントハンドラーを設定

とタイマーを設定し、ボタンが押されるなどして再生が開始されるとき、

gWmp.settings.volume = 20; // ボリュームを 20に
gWmp.URL = filepath.Text; // MP3ファイルのパスを設定
gWmp.controls.play(); // 再生開始

gTimer1.Start(); // タイマーを開始

という具合に、1秒毎に Timer_Elapsed を実行する。そして、Timer_Elapsed の中で、

private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
if (gWmp.playState == WMPPlayState.wmppsStopped) { // WMP のステータスが「終了」?
gTimer1.Stop(); // タイマーを終了
<再生終了時の処理>
}
}

これで、プレイリストに沿って連続で曲を再生する処理が書けるね。

トラックバック(0)

このブログ記事を参照しているブログ一覧: C#.NET で MP3 の再生終了を捉える

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/6534

コメントする

このブログ記事について

このページは、shinodaが2023年6月19日 12:47に書いたブログ記事です。

ひとつ前のブログ記事は「周東町戦没者追悼式が執り行われた」です。

次のブログ記事は「今年始めてのカープ戦は勝利」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら