電気ウナギ的○○

About Home

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

shinoda (2023年6月19日 12:47)
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(); // タイマーを終了
<再生終了時の処理>
}
}

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

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/6534

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE