Pergunta

Eu tenho um modem ZyXEL USB Omni56K Duo e quero enviar e receber fluxos de voz nele, mas para alcançar a qualidade adequada, provavelmente preciso implementar alguma codificação "ZyXEL ADPCM" porque o PCM simples fornece uma taxa de amostragem muito pequena para transmitir voz de qualidade média, e também não funciona através de USB (provavelmente porque mesmo essa taxa de bits é muito alta para o conversor USB-Serial).

Este misterioso codec aparece em todas as bibliotecas relacionadas ao Microsoft WAV como um dos muitos codecs teoricamente suportados por ele, mas não encontrei nenhuma implementação.

Alguém pode oferecer uma implementação em qualquer idioma ou talvez alguma documentação?Escrever um algoritmo de decodificação mu-law personalizado não será um problema para mim.

Obrigado.

Foi útil?

Solução

Não tenho certeza de como o ZyXEL ADPCM varia de outros tipos de ADPCM, mas várias implementações de ADPCM podem ser encontradas em algumas pesquisas no Google.

Porém, o verdadeiro motivo da minha postagem é o porquê da escolha da ADPCM.ADPCM é modulação de código de pulso diferencial adaptativo.Isso significa que os dados que estão sendo transmitidos são a diferença nas amostras, não o valor atual (e é também por isso que você vê uma compactação tão grande).Em um ambiente limpo sem perda de bits (por exemplo, unidade de disco), tudo bem.No entanto, em um ambiente de streaming, geralmente assume-se que os bits podem ser periodicamente mutilados.Qualquer pequeno dano aos dados e você ouvirá estática ou outros artefatos de áudio muito rapidamente e, geralmente, bastante mal.

O mecanismo de redefinição do ADPCM não é baseado em quadros, o que significa que os problemas de áudio podem persistir por um longo período de tempo, dependendo do codificador.O código de redefinição geralmente é um conjunto de 0s (16 vem à mente, mas já se passaram anos desde que escrevi minhas próprias portas).

O ADPCM no ambiente de telefonia geralmente converte uma amostra PCM de 12 bits em uma amostra ADPCM de 4 bits (nada mal).Quanto à qualidade do áudio... nada mal para conversas telefônicas e palavras faladas, mas a maioria das pessoas, em um teste cego, consegue detectar facilmente a queda na qualidade.

Em sua última frase, você lança uma bola curva na questão.Você começa a mencionar muLaw.muLaw é uma implementação PCM que pega uma amostra de 12 bits e a transforma usando uma escala logarítmica em uma amostra de 8 bits.Este é o mecanismo de compressão típico para redes TDM (telefone) na América do Norte (a maior parte do resto do mundo usa um algoritmo semelhante chamado ALaw).

Então, estou confuso com o que você está realmente tentando encontrar.

Você também mencionou as implementações da Microsft e WAV.Você provavelmente sabe, mas por precaução, que WAV é apenas um invólucro em torno dos dados de áudio que fornece formato, informações de amostragem, canal, tamanho e outras informações úteis.Sem WAV, AU ou outros wrappers envolvidos, muLaw e ADPCM são geralmente apresentados como dados brutos.

Outra dica se você estiver implementando o ADPCM.Como indiquei, eles usam 4 bits para representar uma amostra de 12 bits.Eles escapam disso porque ambos os lados têm uma tabela multiplicadora.Sua posição na tabela muda com base no valor de 4 bits (em outras palavras, o valor é múltiplo em relação ao tamanho do passo e é usado para descobrir o novo tamanho do passo).Já vi vários algoritmos usarem tabelas ligeiramente diferentes (não faço ideia do porquê, mas normalmente você vê os sinais enviados e recebidos se desviando lentamente do viés).Um dos pacotes de som mais antigos e populares era diferente do que eu normalmente via nos fornecedores de hardware de telefonia.

E, para mais curiosidades inúteis, existem vários sabores de ADPCM.As variações envolvem a tabela, o tamanho da amostra de origem e o tamanho da amostra de destino, mas nunca precisei trabalhar com elas.Apenas sabores documentados que encontrei quando fiz minha pesquisa na Internet por especificações para os diversos formatos de áudio usados ​​​​na telefonia.

Outras dicas

Voltando seu PCM através ffmpeg -f u16le -i - -f wav -acodec adpcm_ms - provavelmente funcionará.

http://ffmpeg.org/

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