Frage

Ich verwende diesen Code, um eine WAV-Datei von einer Ressource abzuspielen, und der Ton wird korrekt abgespielt, aber nach der Wiedergabe erhalte ich ein kurzes Rauschen (ca. 1/2 Sekunde):

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

Wenn ich das auskommentiere System.Media.SystemSounds.Beep.Play() Zeile oben, dann werden der Piepton und der Benachrichtigungston von meinen Ressourcen korrekt und ohne Rauschen abgespielt.Ich habe ein paar verschiedene Variationen des obigen Codes ausprobiert und bekomme immer die statische Aufladung.Ich habe versucht, alle Variablen statisch zu machen, für den Fall, dass etwas mit der frühen Speicherbereinigung zu tun hat, aber das hat nicht geholfen.

Die WAV-Datei ist nur eine, aus der ich kopiert habe c:\WINDOWS\Media\ding.wav (unter Windows XP) und die Wiedergabe im Windows Media Player funktioniert einwandfrei.Auch wenn ich neue verwende SoundPlayer("c:\WINDOWS\Media\ding.wav"), wird die Datei korrekt abgespielt.

Ich kann mir vorstellen, dass es etwas damit zu tun hat UnmanagedMemoryStream Das Resources.Notify ist, und vielleicht muss ich es zuerst in einen verwalteten Stream laden?Ich weiß, dass ich Probleme mit PNG-Dateien habe, wenn ich sie nicht verwende new Bitmap(Resource.MyPNG) und versuchen Sie es zu nutzen Resource.MyPNG stattdessen direkt, also vielleicht etwas Ähnliches mit WAV-Ressourcen?

Aktualisieren : Ich dachte ursprünglich, dass es jedes Mal passiert, wenn der Ton abgespielt wird, aber jetzt scheint es, dass es nur passiert, wenn ich den Ton zum ersten Mal in meiner App abspiele.Vielleicht muss also eine Initialisierung durchgeführt werden?

Ich habe es auch versucht, dasselbe Problem:

SoundPlayer sndPlayer = new SoundPlayer(Resources.Notify);
sndPlayer.Play(); 
War es hilfreich?

Lösung 2

War nur auf einem PC ein Problem.Ich habe es nie herausgefunden, und andere Apps scheinen dieses Problem nicht zu haben, aber es ist meine Zeit nicht wert, wenn ich bisher nur auf einem PC (von vielleicht 15 getesteten) war.Ich werde eine bessere Antwort melden, wenn ich jemals eine bekomme.

Andere Tipps

Dies ist die interne Implementierung, die MS verwendet My.Audio.Play(), Sehen Sie sich an, wie sie die SoundPlayer-Klasse instanziieren. Dabei nutzen sie den überladenen Konstruktor aus Nimmt einen Dateipfad an Wie nachfolgend dargestellt oder ein Stream:

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);
}

Können Sie versuchen, beim Instanziieren des SoundPlayers einen Stream zu übergeben?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top