電子書籍の厳選無料作品が豊富!

C#SoundPlayerクラスの同期再生PlaySyncメソッドで再生すると仕様と違って再生終了を待たずに曲の途中で停止してしまいます。何が原因なのか判断できずにとても困っております。ちなみに非同期再生のPlayメソッドでは上手く仕舞いまで再生できます。原因に心当たりの方がいらっしゃいましたら教えて頂けないでしょうか?

A 回答 (1件)

ソースも何も無いからどうやって処理しているのかわかりませんが…


一般的な要因として考えられるのは

(1)
データ読み込みがタイムアウトしていて途中までしか読み込まれていない。
確か、読み込み時間指定のプロパティがあったと思います。

(2)
再生中にメモリの再配置が発生してデータの連続性が途切れた。
再配置が起きないように読み込み先のメモリを固定する必要があります。

PlaySyncメソッドはPlayメソッドのように新しいスレッドを立てて動くのでなく、それまでの処理をしてるスレッドで動作します。したがって、この辺りの動作状況が異なってくる場合があります。

この回答への補足

早速のご回答ありがとうございました。以下に示すソースで実行しています。現在はコメント部を生かして凌いでいます。ご検討かたよろしくお願いもうしあげます。
System.Media.SoundPlayer player = null;


try
{
player = new System.Media.SoundPlayer(waveFile);
int time = player.LoadTimeout;
//Console.WriteLine("player.LoadTimeout={0}", time); //以下は演奏時間の推測
//FileInfo finf = new FileInfo(waveFile);
//double dln = (double)finf.Length; ;
//time = (int)((dln / 55514000.0) * 311000.0 + 5000.0);
//player.LoadTimeout = time + 100 ;
//Console.WriteLine("player.LoadTimeout={0}", time);
player.Load();
while (true){if(player.IsLoadCompleted){Console.WriteLine("player.Load completed", time);break;}}
player.PlaySync(); //これを止めて以下の非同期再生にすると上手く終わる
//player.Play();
//Thread.Sleep(time);
}
catch (Exception ex){Console.WriteLine("例外発生(SoundPlayComplete)" + ex.Message);}

補足日時:2010/04/15 16:10
    • good
    • 0
この回答へのお礼

ありがとうございました。演奏時間の長めの推定値を求め、その値を設定してもそれより短い時間で停止してしまうので、非同期再生で凌ぐことにしました。

お礼日時:2010/05/26 22:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!