Gravar usando o arecord cria milhares de arquivos

2

Eu estava tentando usar arecord para gravar um arquivo wav, mas em vez de gravar em um arquivo, ele criou dezenas de milhares de arquivos (cerca de 60000). Isso aconteceu depois que eu instalei o pacote alsaequal. Eu costumava gravar usando o -f dat flag com arecord , mas depois que eu instalei o alsaequal, isso parou de funcionar, então eu tentei usar -f cd , que é quando esse problema ocorreu. Eu não sei se é alsaequal que está causando esse comportamento ou o uso do formato cd . Eu estou usando o Arch Linux em um Raspberry Pi. O comando completo que eu executei era arecord -f cd test.wav e os arquivos que foram gerados eram todos denominados test-xxxxx.wav Alguém tem alguma idéia do que pode estar causando esse problema?

Atualização: Isso parece acontecer aleatoriamente. Ele funcionará bem para várias gravações e, em seguida, reiniciei ou executei arecord com argumentos ligeiramente diferentes, o que fará com que o problema ocorra sempre que eu gravar (não importando quais argumentos eu use). Não consegui encontrar um padrão reproduzível.

    
por lopsided98 17.04.2013 / 03:05

1 resposta

1

Parece que quando o arecord recebe um SIGINT, ele fica chateado e cria milhares de arquivos. (Isso vai acontecer se você Ctrl-C, enquanto ele está gravando.) Não tenho certeza de como "consertar" (eu classificaria como bug, de qualquer forma), mas vou oferecer duas soluções alternativas:

  1. Não SIGINT, apenas SIGKILL ( killall -KILL arecord )

  2. Para evitar que milhares de arquivos sejam criados, faça o seguinte:

    arecord - > /tmp/sample.wav 2> /dev/null

    Agora, em vez de produzir sample-1.wav, sample-2.wav, etc, arecord envia todos os seus dados para STDOUT, que você redireciona para um arquivo de seu escolha. As mensagens são impressas no STDERR, que é redirecionado para / dev / null neste caso. A desvantagem é que, em vez de milhares de arquivos sendo criados, esse arquivo único ficará muito grande - que pode ou não ser considerado como uma melhoria!

Como presente de bónus; já que o clássico " rm /tmp/sample*.wav " é provável reportar "muitos arquivos"; aqui está como limpar a bagunça (ajuste como apropriado):

find /tmp -type f -name sample*.wav -exec rm {} \+

Apenas para o registro:

$ arecord --version
arecord version 1.0.27 by Jaroslav Kysela <[email protected]>
    
por 31.05.2013 / 16:00