Estou tentando salvar as mensagens do correio de voz do telefone Verizon Fios com a melhor qualidade possível. As mensagens do correio de voz estão disponíveis online , mas apenas para reprodução (reprodutor baseado em Java), sem economia. Oficialmente, não há maneira suportada de como salvar mensagens de voz digital originais como arquivos do serviço Fios Digital Voice (sem serviço pago, sem nada, sem motivo).
Minha única idéia era gravar dados digitais do player enquanto estava no caminho para a placa de som. Eu tentei a configuração do Linux ALSA com dispositivo de loop.
# cat /etc/asound.conf
# default device
pcm.!default {
type plug
slave.pcm "loop"
}
# output device
pcm.loopout {
type dmix
ipc_key 328211
slave.pcm "hw:Loopback,0,0"
}
# input device
pcm.loopin {
type dsnoop
ipc_key 686592
slave.pcm "hw:Loopback,1,0"
}
# duplex plug device
pcm.loop {
type plug
slave {
pcm {
type asym
playback.pcm "loopout"
capture.pcm "loopin"
}
}
}
Isso parece estar funcionando e grava áudio; por exemplo, ao reproduzir algo no Youtube, a saída de áudio vai para o dispositivo de loop (saída de áudio padrão) e posso capturá-lo (sem ter certeza de como funciona exatamente, testei 44.1kHz e 48 Khz )
arecord -f cd -D loop | aplay -f cd -D hw:0,0
arecord -f dat -D loop | aplay -f dat -D hw:0,0
Mas quando tentei capturar a saída do player de áudio Verizon Java, ela fica distorcida e o comprimento parece não coincidir. Eu suspeito que possa ser mono a 8 kHz e tentei coisas diferentes, alterando a frequência e os formatos, mas nada ajudou.
Você tem alguma idéia do que está errado aqui e como gravar as mensagens? O problema está na configuração do ALSA? Ou possivelmente problema com o kernel? (Eu estou usando 3.4.88). Qualquer idéia seria muito bem-vinda.
Respostas:
Pergunta interessante: há muito tempo eu estava pensando em uma gravação simples de áudio e vídeo digital, possível através de alguns drivers virtuais de áudio e vídeo, mas nunca cheguei lá.
Usei seu arquivo de configuração e tive exatamente o mesmo problema que você descreveu. (Eu removi os drivers de compatibilidade OSS do ALSA para ter certeza, testei diferentes kernels - não parecia importar e usei o Debian Wheezy)
todos os comandos acima são reproduzidos OK nos alto-falantes
agora gravando do loop e tocando para frente
tudo enviando áudio para loop e tocando nos alto-falantes OK
mas aqui o som está quebrado - muito distorcido !!! Apenas jogando no dispositivo padrão. A reprodução especificada via loop funcionou!
Depois de tentar várias alterações, testei esta modificação do asound.conf
Resolveu o problema! Quando o dispositivo padrão está em loop, ele funciona. Tentar
arecord -f cd -D loopin | aplay -f cd -D front
não teve nenhum efeito. Não tenho certeza de como o loop funciona, mas isso foi capaz de capturar o áudio. Ou um bug no ALSA? Você está usando o Debian? Funciona para você?Notas para outras sugestões para resolver o problema:
Para despejar o fluxo da rede: Presumo que, se o aplicativo não deseja que você salve dados, a transferência seria criptografada (https ???). Caso o jogador não verifique o certificado do servidor, como você captura os dados? Qual é o seu método rápido e fácil favorito de como se tornar homem no meio e capturar o fluxo?
Pulseaudio: Como faço para rodar no Debian Wheezy? O Wiki diz que simplesmente funciona. Isso não aconteceu.
Como solucionar problemas do que está acontecendo? (Ferramentas, diag?)
Jack: Não encontrei instruções simples sobre como instalar o Jack. Parece bastante complexo. Supõe que o Pulseaudio esteja sendo executado? A documentação é confusa. Você tem um link para um bom começo rápido (como instalar e testar para garantir que está funcionando?)
Você supõe que a maioria dos aplicativos de áudio (como o Fios Voicemail Java player) poderá tocar no Pulseaudio ou Jack e não enviar áudio para o ALSA?
fonte
Você se lembrou de "modprobe snd-aloop"? Eu tentei e funciona para mim com o seu asound.conf no youtube, pandora, tunein, vonage e este java player . Pode ser algo específico para o Fios, mas não tenho o Fios para testar. Você pode encontrar outro site publicamente disponível que também cause o problema?
Além disso, tente gravar em um arquivo e reproduza-o:
fonte
Melhor ideia
Em primeiro lugar, lendo sua pergunta, eu não faria assim. Eu estaria bisbilhotando a rede e tentando capturar o fluxo. Provavelmente está em um lugar bastante previsível que pode ser roteirizado com uma simples chamada para
tshark
. Essa é outra questão, no entanto.Melhoria sobre ALSA
Embora seu método seja uma abordagem válida, eu não usaria o ALSA. ALSA é uma camada de abstração de hardware. Eu estaria usando o daemon de som que está em quase toda parte PulseAudio. Isso faz mais sentido. Crie um nulo-coletor.
Esse comando retornará seu
module id
. Isso não serve para nós.Agora basta definir a variável ambiental
PULSE_SINK
. (nome_coletor no exemplo acima é "MySink")Ou, inicie um programa com
PULSE_SINK=MySink
e esse coletor nulo capturará o fluxo.Sempre que você quiser transmiti-lo para um arquivo, basta executar:
Opus de baixa taxa de bits é a melhor aposta para gravar conversas telefônicas.
Notas de rodapé:
sox
ao fluxo para isso. Vejaman sox
, procurevad
.--downmix-mono
em um fluxo estéreo. Você pode muito bem experimentar experimentar o envio dochannels=1
argumentomodule-null-sink
na primeira etapa. Os telefones são todos mono.fonte
Depois de passar mais de uma hora tentando configurar em vão o dispositivo de loopback ALSA no Debian, a solução mais eficaz e menos demorada foi soldar um dispositivo real em 5 minutos.
Sério, recompilei o kernel para ativar o loopback ALSA, ajustei o /etc/asound.conf e o ~ / .asound.rc sem resultados.
fonte
Eu recomendo usar o JACK. Esse é um acrônimo recursivo para o JACK Audio Connection Kit. Ele é adaptado exatamente para o que você está fazendo, direcionando o áudio de um software, no seu caso, a ferramenta de reprodução Java, para outro, um software de gravação. É muito bom para gravação de baixa latência, o que acho que pode ajudá-lo a obter a qualidade que você está procurando.
Com ele, você pode direcionar facilmente o áudio de qualquer fonte do seu computador para muitas ferramentas de gravação diferentes. De fato, existe uma interface gráfica muito boa chamada QjackCtl .
Esta página descreve como encaminhar o áudio do navegador (Flash e possivelmente sua ferramenta Java) para Jack. Como isso é feito depende do seu sistema.
Por exemplo:
Modifique seu
~/.asoundrc
ou~/asound.conf
:Então você deve poder usar
fonte
pavucontrol
fará a mesma coisa que vocêQjackCtl
e você sempre poderá se moverpacmd move-sink-input
.pasuspender -- jackd
. No entanto, se o pôster estiver com problemas de qualidade, pode ser valioso tentar algo tão fácil. Além disso, o QjackCtl facilita muito o ajuste de configurações que fornecem feedback visível sobre latência e xruns, que geralmente são uma causa de áudio ilegível .