arecord: Crie gravação de áudio grande (7 dias)

3

Para uma experiência científica, estamos tentando criar uma gravação de áudio grande (7 dias) usando arecord de um rashi usando um microfone USB. O pipeline para a gravação é o seguinte:

arecord -f S16_LE -r16000 -d 259200 -D sysdefault:CARD=1 | gzip > test.wav.gz

Ao gravar assim, a gravação termina reprodutivelmente após exatamente 18h 38m 28s. Isso provavelmente está relacionado ao tamanho máximo do arquivo wav de 2 GB que o parâmetro --max-file-time menciona na página man , como o arquivo do arquivo wav não compactado é quase exatamente 2 GB nesse ponto.

Como precisamos enviar os dados de áudio para o gzip (e, posteriormente, para o GPG) sem salvá-los no disco primeiro, não podemos usar a divisão automatizada de arquivos oferecida pela ALSA para contornar isso (pelo menos não ciente de qualquer método para combinar isso com tubos). Existe alguma maneira de contornar este problema de uma forma em que as seguintes condições sejam atendidas:

  • Não há lacunas na gravação (parar e reiniciar a gravação não funcionaria para nós, já que precisamos de uma gravação contínua de 7 dias sem intervalos).
  • Idealmente, o formato resultante ainda deve ser .wav (ou pelo menos algo similarmente sem perdas).
  • O tamanho do arquivo não deve aumentar muito (precisamos de ~ 16k de taxa de amostragem, som mono e temos aproximadamente 20 GB de espaço disponível).
  • A coisa toda deve ser executada em um RasPi3 que também está fazendo algumas outras coisas (ou seja, não deve levar muitos recursos do sistema).

No momento, estamos pensando em gravar em um formato de dados brutos e depois recodificar para wav em outra máquina, ou recodificar para FLAC em tempo real, mas qualquer solução mais simples seria apreciada.

    
por malexmave 23.10.2017 / 10:32

1 resposta

1

No final, acabei usando a solução "encode to flac". Aqui está a cadeia de comando que usei:

arecord -t raw -f S16_LE -r16000 -d 604800 -D sysdefault:CARD=1 | flac - -f --endian little --sign signed --channels 1 --bps 16 --sample-rate 16000 -s -c | gzip > test.flac.gz

(Personalize os comandos arecord e flac de acordo com suas necessidades)

Note que estou passando a stdout e gzipping a coisa toda agora - isso é devido a um requisito especial que você pode não ter. Se você quiser pular essa etapa, substitua o -c por um -o filename.flac . Isso também eliminará alguns problemas que a versão stdout pode causar .

    
por 03.11.2017 / 10:13