1

このコードを使用してリソースからWAVファイルを再生し、オーディオは正しく再生されますが、再生後に静的な短いブラストが発生します(約1/2秒)。

//System.Media.SystemSounds.Beep.Play();
SoundPlayer sndPlayer = new SoundPlayer();
sndPlayer.Stream = Resources.Notify;
sndPlayer.Play();

上記の行のコメントを外すSystem.Media.SystemSounds.Beep.Play()と、リソースからのビープ音と通知音の両方が正しく再生され、静的な音は鳴りません。私は上記のコードのいくつかの異なるバリエーションを試しましたが、常に静的なものを取得しています。初期のガベージコレクションに関連するものがある場合に備えて、すべての変数を静的にしようとしましたが、それは役に立ちませんでした。

WAVファイルは私がc:\WINDOWS\Media\ding.wav(Windows XPで)コピーしたものであり、WindowsMediaPlayerで正常に再生されます。また、newを使用するSoundPlayer("c:\WINDOWS\Media\ding.wav")と、ファイルから正しく再生されます。

UnmanagedMemoryStreamそれはそれと関係があると思いますResources.Notify、そして多分私はそれを最初に管理されたストリームにロードする必要がありますか?new Bitmap(Resource.MyPNG)使用せずに直接使用しようとすると、PNGファイルで問題が発生したことはわかっているResource.MyPNGので、WAVリソースと似たようなものがありますか?

更新:当初はサウンドが再生されるたびに発生すると思っていましたが、今ではアプリでサウンドを再生するのは初めてのようです。では、初期化を行う必要があるのではないでしょうか。

私もこれを試しました、同じ問題:

SoundPlayer sndPlayer = new SoundPlayer(Resources.Notify);
sndPlayer.Play(); 
4

2 に答える 2

0

これは、MSがMy.Audio.Play()を使用する内部実装です。SoundPlayerクラスをインスタンス化する方法を確認し、以下に示すようにfilePathまたはストリームを取得するオーバーロードされたコンストラクターを利用します。

http://msdn.microsoft.com/en-us/library/system.media.soundplayer.aspx

public void Play(string location, AudioPlayMode playMode)
{
    this.ValidateAudioPlayModeEnum(playMode, "playMode");
    SoundPlayer sound = new SoundPlayer(this.ValidateFilename(location));
    this.Play(sound, playMode);
}

SoundPlayerをインスタンス化するときにストリームを渡してみることができますか?

于 2012-05-22T00:39:36.400 に答える
0

1台のPCでの問題でした。それを理解したことはなく、他のアプリにもこの問題はないようですが、これまでに1台のPC(おそらく15台のテスト済み)だけを使用している場合は、時間をかける価値はありません。私がそれを手に入れたら、より良い答えを報告します。

于 2012-05-29T15:28:59.210 に答える