Não é possível calcular o comprimento final através do pipe, por isso não pode escrevê-lo no cabeçalho do flac. Ele não quebra o arquivo, salva como livestream, que você não deveria saber quando será o fim, e o cabeçalho está no começo do arquivo.
Estou tentando gravar áudio usando arecord
, codificá-lo para .flac usando a ferramenta flac
e, em seguida, canalizá-lo através de mais alguns processos (gzip, gpg, mas irrelevantes aqui).
Se eu gravar o resultado de flac
no arquivo usando o parâmetro -o
, tudo funcionará bem:
arecord -t raw -f S16_LE -r16000 -d 10 -D sysdefault:CARD=1 | flac - -f --endian little --sign signed --channels 1 --bps 16 --sample-rate 16000 -o test.flac
Se eu usar o parâmetro -c
e redirecionar a saída para um arquivo:
arecord -t raw -f S16_LE -r16000 -d 10 -D sysdefault:CARD=1 | flac - -f --endian little --sign signed --channels 1 --bps 16 --sample-rate 16000 -c > test.flac
... o arquivo resultante é reproduzido corretamente (o som funciona), mas o VLC não exibe um tamanho para a gravação de áudio, e o audacity inicia um processo de importação com um ETA de várias horas em constante crescimento e trava ao cancelar. / p>
A única diferença entre os dois comandos é -o test.flac
vs -c > test.flac
. Por que isso quebra o arquivo?
Se isso faz diferença: flac 1.3.2, arecord 1.1.3, executado no último raspbian em um Pi3 com microfone USB.
Não é possível calcular o comprimento final através do pipe, por isso não pode escrevê-lo no cabeçalho do flac. Ele não quebra o arquivo, salva como livestream, que você não deveria saber quando será o fim, e o cabeçalho está no começo do arquivo.
Tags alsa pipe flac io-redirection