Pergunta

Fui confrontado com uma situação. Estou escrevendo um aplicativo Windows no C# .NET. Eu quero reproduzir vários arquivos .wav um após o outro e fazer isso continuamente.

Existe uma aula que pode permitir isso? Caso contrário, como eu o implementaria?

Tentei usar o MCI e ele funciona, usando o sinalizador Notify e a interceptação da mensagem MM_MCINOTIFY, mas é bastante confusa e complica meu código.

Foi útil?

Solução

Se a lista de arquivos for corrigida, basta fazer uma lista de reprodução e passar para uma instância do MediaPlayer. O media player aceita a lista de reprodução no formato .m3u ou o .wvx formato.

Mas se você precisar escolher o pedido dos arquivos dinamicamente, um se a maneira mais fácil é usar o PlaySound (). Você entrega nomes de arquivos individuais ou ponteiros para acenar dados na memória (você teria que marcar isso para a memória não gerenciada). Dedique um tópico ao som e pegue -o apenas chamando PlaySound em um loop, ou usar SND_ASYNC.

Observe que é possível apenas olhando para o cabeçalho de um arquivo de onda para saber quanto tempo levará para reproduzir um arquivo com um alto grau de precisão.

[DllImport("WinMM.dll")]    
public static extern bool  PlaySound(string name, int hModule, int flags);

// see mmsystem.h for these flags
public int SND_SYNC      = 0x00000000; // don't return until playback is done
public int SND_ASYNC     = 0x00000001; // play asynchronously    
public int SND_NODEFAULT = 0x00000002; // don't play the default sound if n
public int SND_MEMORY    = 0x00000004; // name is actual a pointer to a WAVEHEADER
public int SND_LOOP      = 0x00000008; // loop the sound until next call to PlaySound (use with SND_ASYNC)
public int SND_NOSTOP    = 0x00000010; // don't stop any currently playing sound
public int SND_FILENAME  = 0x00020000; // name is a filename (it's a sound name otherwise)
public int SND_NOSTOP    = 0x00000010; // don't stop any currently playing sound

Ambos os métodos permitirão misturar arquivos de profundidade de bits diferentes e taxa de amostragem. Mas eles também colocarão uma pequena quantidade de silêncio entre os arquivos. Se você precisar das transições entre os arquivos para serem perfeitos, precisará encontrar um mecanismo de áudio de terceiros ou rolar o seu.

Ou você pode escrever um leitor de fluxo de arquivos de arquivo de onda múltipla (em C ++, não C#, ele deve ser um código não gerenciado). E use -o em vez do leitor de arquivo .wav padrão para reproduzir os arquivos no MediaPlayer.

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