Pergunta

Eu tenho um servidor que envia dados através de uma tomada, os dados é um 'arquivo' wav. Eu posso facilmente gravar os dados no disco e, em seguida, jogá-lo no WMP, mas não tenho idéia de como posso jogá-lo como eu lê-lo da tomada. É possível?

Bônus pergunta: como é que eu faço isso se o fluxo estava em mp3 ou outro formato

Isto é para janelas em C ++ nativo.

Foi útil?

Solução

Porque você disse WMP, eu estou supondo que a questão se aplica a tentar reproduzir um arquivo wav em uma máquina Windows. Se não, esta resposta não é relevante.

O que você quer fazer não é trivial. Há um bom artigo aqui no projeto de código que descreve o áudio do Windows modelo. Ele descreve como configurar o dispositivo de áudio e como transmitir dados para o dispositivo para reprodução. Você "simplesmente" necessidade de fornecer dados provenientes de sua tomada como dados para os buffers de reprodução. Mas é aí que todo o trabalho complicado é. Você tem que ter certeza de que

  • Você tem dados suficientes para começar a reprodução
  • Lidar com o caso quando o soquete é carente de dados e você não tem nada para enviar para a reprodução tampão
  • Você é capaz de ler dados do soquete com velocidade suficiente para manter os buffers de reprodução integral

É um exercício interessante. Mas complicado.

Outras dicas

Mark está certo sobre este ser um problema complicado. Pode ser menos complicado se você usar DirectSound vez de waveOut. Aqui está um artigo em streaming de arquivos de onda a partir do disco: streaming a partir da rede é essencialmente o mesmo processo. Certifique-se de coletar dados suficientes a partir da rede antes de começar - você vai querer mais do que os 2 buffers O artigo menciona.

Ainda menos complicado seria FMOD . Do FAQ :

Internet recursos avançados

  • streaming de áudio Internet. internet personalizado código de streaming está incluído, que permite a perfeita SHOUTcast, Icecast e http suporte para streaming.
  • Capacidade Download. Um efeito colateral do sistema de arquivo modular de FMOD que suporta arquivos de rede, até mesmo amostras estáticos pode ser carregado fora da internet.

suporte ao formato de arquivo : FMOD atualmente suporta uma ampla gama de formatos de arquivos de áudio. lista parcial :

  • MP3 - (MPEG I / II Layer 3, incluindo suporte VBR)
  • OGG - (formato Ogg Vorbis)
  • WAV -. (Arquivos Microsoft onda, inlcluding wavs comprimido PCM, MP3 e IMA ADPCM compactado wav

Mark está certo sobre este ser um problema complicado. A API waveOutXXXX é antiga (que antecede o Windows 95) e requer mais codificação do que você pensa propenso a erros. Você terá um tempo mais fácil interagir com a API em C ++ do que com C #. Apenas certifique-se este é algo que você realmente quer fazer.

Se o seu fluxo é algum formato diferente de dados de arquivo WAV (como MP3 ou WMA), você terá que executar o passo adicional de descodificar os dados em formato WAV e jogá-lo com a API waveOutXXXX. Encontrar um bom componente para fazer a decodificação de MP3 é mais complicado do que seria de esperar -. Eu acho que isso está relacionado com a Fraunhofer licenciamento situação (que você deveria pagar-lhes se você usar o código de MP3 de qualquer forma)

Eu gostaria de encontrar um produto off-the-shelf para fazer isso, a menos que você deseja que a experiência de aprendizagem.

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