C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 音楽の再生


(過去ログ 60 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■34416 / inTopicNo.1)  音楽の再生
  
□投稿者/ マエダス (1回)-(2009/03/28(Sat) 19:13:18)

分類:[C#] 

音楽の再生について教えてください。
WinXP SP3 C# VS2008です。

C:\tmpにある複数の音楽ファイルを順番に再生したいのです。
http://dobon.net/vb/dotnet/programing/playmidifile.html
を参考に、次のようにしてみました。
string[] musicFiles = Directory.GetFiles("C:\tmp", "*.mp3");
foreach (string musicFile in musicFiles)
{
WMPLib.WindowsMediaPlayer mediaPlayer = new WMPLib.WindowsMediaPlayer();
mediaPlayer.URL = musicFile;
if (mediaPlayer.status.ToString().Contains("メディアを開いています")) {;}
else if (mediaPlayer.status.ToString().Contains("を再生中")) {;}
else if (mediaPlayer.status.ToString() == null) {;}
else {mediaPlayer.controls.play();}
}
これで、ファイルがひとつだけのときは再生できるのですが、
複数ある場合は、複数のファイルを同時に再生してしまいます。
条件わけがうまくいってないことはわかるのですが、
どう修正したらよいか見当がつきません。
再生時にフラグを立て、
再生終了時にフラグをオフにすればよいのだろうとは思うのですが、
再生終了時をどう表現したらよいかがわからないでいます。
statusで、現在のステータスを獲得できることはわかって、
それを条件づけてみたのですが、まだ多重再生されてます。

どなたかアドバイスをよろしくお願いします。

引用返信 編集キー/
■34419 / inTopicNo.2)  Re[1]: 音楽の再生
□投稿者/ Hongliang (352回)-(2009/03/28(Sat) 20:47:50)
条件分け以前に考え方が良くありません。
play は非同期的に実行されるので、呼出し後すぐに処理が返ります(そうでないと GUI が固まってしまいます)。
一つの方法として、PlayStateChange イベントを使って再生の完了を感知し、そこで次の曲の再生、というやり方があります。この場合、ファイル一覧や今何を実行しているかをフィールド(メンバ変数)に持っておくと楽でしょう。
ほかに、Playlist オブジェクトを利用する手もあります。
引用返信 編集キー/
■34420 / inTopicNo.3)  Re[2]: 音楽の再生
□投稿者/ マエダス (2回)-(2009/03/28(Sat) 21:14:06)
やっぱりそうですか。
なんか考え方じたいがそもそもよくない感じはしていました。
PlayStateChangイベントで再生の終了を感知する、
というのは、具体的にはどうしたらよいですか?

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -