C# SoundPlayer estático após WAV reproduz
-
12-12-2019 - |
Pergunta
Eu estou usando este código para reproduzir um arquivo WAV a partir de um recurso, e o áudio é reproduzido corretamente, mas em seguida eu recebo uma curta explosão de estática depois que ele é reproduzido (cerca de 1/2 segundo):
//System.Media.SystemSounds.Beep.Play();
SoundPlayer sndPlayer = new SoundPlayer();
sndPlayer.Stream = Resources.Notify;
sndPlayer.Play();
Se eu descomente a System.Media.SystemSounds.Beep.Play()
a linha acima, em seguida, o sinal sonoro e a Notificar o som da minha recursos jogar corretamente, e não estática.Eu tentei algumas variações diferentes do código acima, e sempre ficar estático.Eu tentei fazer todas as variáveis estáticas, meter lá foi algo relacionado ao início da coleta de lixo, mas que não ajuda.
O arquivo WAV é apenas um copiei do c:\WINDOWS\Media\ding.wav
(no Windows XP) e joga bem no Windows Media Player.Também, se eu usar de novo SoundPlayer("c:\WINDOWS\Media\ding.wav")
, ele reproduz corretamente a partir do arquivo.
Eu imagino que ele tenha algo a ver com o UnmanagedMemoryStream
que Resources.Notify
é, e talvez eu precise carregá-lo para uma gestão de fluxo de primeira?Eu sei que eu já tive problemas com arquivos PNG se eu não usar new Bitmap(Resource.MyPNG)
e tente usar Resource.MyPNG
diretamente, em vez, então, talvez, algo semelhante com o WAV recursos?
Atualização : Originalmente, eu pensei que estava a acontecer toda vez que o som reproduzido, mas agora parece que só acontece na primeira vez que eu tocar o som no meu app.Então, talvez alguns de inicialização precisa ser feito?
Eu também tentei isso, mesmo problema:
SoundPlayer sndPlayer = new SoundPlayer(Resources.Notify);
sndPlayer.Play();
Solução 2
Foi apenas um problema em um PC.Nunca percebi isso, e outros apps parecem não ter esse problema, mas não vale o meu tempo se somente em 1 PC (de talvez 15 testada) até agora.Vai relatório de uma resposta melhor, se eu conseguir um.
Outras dicas
Esta é a implementação interna que a MS usa O meu.O áudio.Play(), ver como eles instanciar o SoundPlayer classe, elas aproveitam o construtor sobrecarregado que leva um filePath como mostrado abaixo ou um fluxo:
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);
}
Você pode tentar passar em um córrego ao instanciar o SoundPlayer?