Qual codec de áudio devo usar?
Pergunta
Qual codec de áudio devo escolher para o meu projeto de desenvolvimento de software C#, onde o áudio bruto a ser transcodificado/transportado/usado é baseado no seguinte:
- Para codificar apenas o discurso
- O áudio pode ser estéreo ou mono
- Capaz de apoiar a transmissão ao vivo
- Boa troca entre o tamanho do arquivo e a qualidade
- A ser transportado sobre TCP/IP em sua forma codificada
- Pode ser reproduzido por um jogador gratuito prontamente disponível sem processamento adicional
Observe que se existe uma biblioteca de codec gratuita prontamente disponível para realizar a transcodificação não precisa ser levada em consideração.
Solução
O Speex é um codec de código aberto gratuito, projetado para codificar a fala em soluções em tempo real que precisam de baixa latência. Os esquemas de compressão de uso geral, como WMA ou MP3, provavelmente causarão mais atrasos e eles também podem não ser capazes de operar bem em taxas de bits muito baixas. http://www.speex.org/
Outras dicas
Uma alternativa mais recente e melhor seria o Codec Opus.
Confira o comparação com outros codecs para ver como ele se sai bem.
Como você mencionou C# para plataforma de destino, tenho que adicionar algo ao resposta aceita. Existe uma porta do codec speex na plataforma .NET em C# puro chamado Nspeex.
Você pode usar coxo para codificação de MP3 com as predefinições de 'voz'. Eu recomendaria testar diferentes, porém, por causa de questões como esta.
MP3 é o que kpfa.org (e agora KQED, eu acho), ambos usam para transmissão ao vivo. Funciona bem. Não sei qual servidor SW é usado.
Dada a sua escolha de linguagem, se for seguro supor que você esteja usando o Windows, eu recomendaria o WMA, o formato do Windows. Todas as bibliotecas serão construídas e, todas as coisas consideradas, são um codec muito sólido. Suporta todas as suas necessidades e muito mais.
No entanto, se você estiver empurrando para um terminal flash, use .fla, flash áudio. O Flash definitivamente otimiza para consumir isso e, embora não seja tão fácil de usar com o C#, você definitivamente apreciará a facilidade de consumo do outro lado.
Se você está segmentando apenas o Windows, o codec GSM é provavelmente uma boa opção para aplicativos de baixa largura de banda. Geralmente é considerado uma qualidade mais baixa que a Speex, mas também usa uma quantidade razoável de largura de banda.
O Windows Media Player pode reproduzir o GSM e o codificador faz parte da Media Foundation no Vista e acima (e presumivelmente alguma API Win32 no XP e abaixo?)