Gravação de entrada de áudio USB 3.3x muito lenta, reprodução 3.3x muito rápida e truncada

0

Estou desenvolvendo um dispositivo de áudio USB que funciona como um microfone. Ele produz um fluxo de áudio isócrono (conversação USB em tempo real) a 8000 Hz, PCM de 16 bits. Com o Ubuntu 13.10, a gravação ocorre cerca de 3.3x muito lenta. Ou seja, gravar por 10 segundos produz um arquivo WAV de 3 segundos, que é reproduzido muito rápido. (A melhor medição da proporção é de 3,27.) A reprodução é pior que a acelerada, também é distorcida. Por exemplo, contando "um ..... dois ..... três" soa como "bzt..bzt..bzzt". Eu tentei 3 programas de áudio diferentes (arecord, ocenaudio, Audacity) e dois computadores diferentes. Confundido, dizer ao gravador para limitar a gravação a 10 segundos (- = 10 = duração) leva cerca de 33 segundos e resulta em um arquivo WAV de 10 segundos. É como se o motorista estivesse em um intervalo de tempo.

Gravar a partir do microfone em um fone de ouvido USB da Logitech produz um arquivo bom, com a velocidade correta e um áudio compreensível. Eu sei que isso soa como um dispositivo USB de entrada de áudio ruim da minha parte, mas a gravação funciona bem no Windows (via GoldWave). Meu instinto diz que há um bug no driver de áudio do Ubuntu quando os dados isócronos estão chegando a apenas 8.000 Hz , o que é único. A maioria dos microfones oferece, através da enumeração USB, amostras para você em uma variedade de taxas, por exemplo 44100, 22050, 8000, etc. Por motivos estranhos, estou confinado a 8000 Hz.

Alguém mais vê algo como um driver USB de áudio com bugs? Alguma idéia de como ganhar provas incriminando ou exonerando os drivers do Ubuntu?

    
por Bob Stein 15.11.2013 / 17:16

1 resposta

1

O Linux precisa de pacotes uniformes na entrada de áudio USB. Importa quantas amostras de som estão em cada pacote.

Na minha aplicação na amostragem de 8000 Hz, com os intervalos de polling padrão de 1ms de USB "full speed", que medem em média 8 amostras por pacote. Devido a um capricho eu estava enviando minhas amostras agrupadas, 32 amostras de áudio em um pacote, então 0, 0, 0, 32, 0, 0, 0, 32, .... Nada de errado com essa largura de banda, há muito do quarto. O Windows processa bem, mas o Linux bloqueia.

Quando enviei as amostras uniformemente: 8, 8, 8, 8, ... o áudio passou bem. Eu estou supondo que algo em um nível baixo nos drivers de áudio USB no Linux está fazendo suposições erradas. Mas minha solução é clara.

    
por Bob Stein 20.11.2013 / 03:57