Já faz algum tempo e eu não tenho mais o carro com o rádio. Atualmente, eu não posso mais dizer qual rádio é, mas aqui está o que eu finalmente fiz. (A resposta é de alguma forma fora do tópico porque a solução final não foi exatamente o que eu inicialmente pedi. Mas ainda é interessante porque ajuda a detectar problemas com mp3 players limitados, e também escrevo isso por causa do crescente número de votos para a pergunta: -). A coisa realmente interessante não é o resultado em si, mas como eu achei):
Minha abordagem foi a seguinte:
- Gerar muitos arquivos de amostra com codificações diferentes
- Reproduzir todos eles no rádio e marcar os bons e os ruins em um papel
Mas ouvir longas amostras de áudio levou muito tempo. Reproduzir amostras rápidas e manter a exibição e o papel à minha vista não funcionou para mim, eu sempre pulei as linhas. Então, finalmente, decidi usar uma ferramenta tts (text-to-speech) para incluir o número do teste dado acusticamente em cada arquivo de teste, para que eu ouvisse algo como:
O que significa: os testes A1, B1 e B3 foram bons, enquanto A2, B2 e A3 não foram reproduzidos. Escrever tudo isso finalmente resultou em uma lista que me ajudou a preparar o quadro a seguir usando o recurso de ativação do libreoffice:
Esteéoscriptqueeuuseiparagerarosarquivosdeteste.Esperoqueajudealguémaresolverumproblemasemelhante:
forencinaconvlame;doi=1case"$enc" in
aconv)
test=A
;;
lame)
test=B
;;
esac
mkdir "$test/"
for freq in 8000 11025 12000 16000 22050 24000 32000 44100 48000 ; do
for bitrate in 8 16 24 32 40 48 56 64 80 96 112 128 144 160 192 224 256 320 ; do
echo "=== ${test} ${i} ${freq} ${bitrate} ==="
basename="$test/'printf "%s_%03d_" $test $i'"
rm "$basename"*
basename="${basename}${freq}_${bitrate}"
espeak -v german "$test $i" -w "$basename.wav"
case "$enc" in
aconv)Selection_001
cmd=( avconv -i "$basename.wav" -b "${bitrate}k" -ar "$freq" "$basename.mp3" )
;;
lame)
cmd=( lame --resample "$freq" -m s -b "$bitrate" "$basename.wav" "$basename.mp3" )
;;
esac
"${cmd[@]}" || continue
[ -s "$basename.mp3" ] || continue
t="'file -b "$basename.mp3"'"
[ "$t" != "$ot" ] || continue
ot="$t"
echo "$test;$i;$enc;$bitrate;$freq;\"$basename.mp3\";\"$cmd[*]\"" >"$basename.csv"
i=$((i+1))
done
done
done
cat ?/*.csv >alltests.csv
rm ?/*.wav ?/*.csv
Observação: como você pode ver: na versão acima da implementação, $i
não corresponde exatamente aos codificadores A
e B
no caso de alguns formatos não serem convertidos, mas isso não é limitação para a análise final, apenas um pouco confuso para o ouvinte, e fácil de corrigir se for muito confuso.