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(); 
Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top