Pregunta

Estoy usando este código para reproducir un archivo WAV desde un recurso y el audio se reproduce correctamente, pero luego recibo una breve ráfaga de estática después de reproducirlo (aproximadamente 1/2 segundo):

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

Si descomento el System.Media.SystemSounds.Beep.Play() línea de arriba, entonces el pitido y el sonido de Notificación de mis recursos se reproducen correctamente y no hay estática.Probé algunas variaciones diferentes del código anterior y siempre obtuve la estática.Intenté hacer que todas las variables fueran estáticas, en caso de que hubiera algo relacionado con la recolección temprana de basura, pero eso no ayudó.

El archivo WAV es solo uno del que copié c:\WINDOWS\Media\ding.wav (en Windows XP) y funciona bien en Windows Media Player.Además, si uso nuevo SoundPlayer("c:\WINDOWS\Media\ding.wav"), se reproduce correctamente desde el archivo.

Me imagino que tiene algo que ver con UnmanagedMemoryStream eso Resources.Notify es, y tal vez primero necesito cargarlo en una transmisión administrada?Sé que he tenido problemas con los archivos PNG si no los uso new Bitmap(Resource.MyPNG) y trata de usar Resource.MyPNG directamente en su lugar, entonces ¿tal vez algo similar con los recursos WAV?

Actualizar : Originalmente pensé que sucedía cada vez que se reproducía el sonido, pero ahora parece que solo sucede la primera vez que reproduzco el sonido en mi aplicación.Entonces, ¿tal vez sea necesario realizar alguna inicialización?

También probé esto, el mismo problema:

SoundPlayer sndPlayer = new SoundPlayer(Resources.Notify);
sndPlayer.Play(); 
¿Fue útil?

Solución 2

Fue solo un problema en una PC.Nunca lo descubrí, y otras aplicaciones no parecen tener este problema, pero no vale la pena dedicarle tiempo aunque solo sea en 1 PC (de quizás 15 probadas) hasta ahora.Informaré de una mejor respuesta si alguna vez obtengo una.

Otros consejos

Esta es la implementación interna que usa MS. Mi.Audio.Play(), vea cómo crean instancias de la clase SoundPlayer, aprovechan el constructor sobrecargado que toma una ruta de archivo Como se muestra abajo o una corriente:

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

¿Puedes intentar pasar una secuencia al crear una instancia de SoundPlayer?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top