Verizon Fios 휴대폰의 음성 메일을 가능한 최고 품질로 저장하려고 합니다. 음성 메일 메시지 사용 가능온라인, 그러나 재생(Java 기반 플레이어)에만 해당되며 저장은 불가능합니다. Fios Digital Voice 서비스에서 원시 디지털 음성 메시지를 파일로 저장하는 방법은 공식적으로 지원되지 않습니다(유료 서비스 없음, 콘텐츠 없음, 이유 없음).
내 유일한 아이디어는 사운드 카드로 전송하는 동안 플레이어의 디지털 데이터를 기록하는 것입니다. Linux ALSA 구성에 루프 장치를 사용하려고 합니다.
# 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"
}
}
}
이것은 작동하고 오디오를 녹음하는 것 같습니다. 예를 들어 Youtube에서 무언가를 재생할 때 오디오 출력은 루프 장치(기본 오디오 출력)로 이동하여 캡처할 수 있습니다(정확히 작동하는지는 모르겠지만 44.1kHz 및 48Khz를 테스트했습니다). )
arecord -f cd -D loop | aplay -f cd -D hw:0,0
arecord -f dat -D loop | aplay -f dat -D hw:0,0
하지만 Verizon Java Audio Player 출력을 캡처하려고 하면 왜곡되고 길이가 일치하지 않는 것 같습니다. 8kHz 모노일지도 모른다고 생각합니다. 주파수와 형식을 변경하는 등 다양한 방법을 시도했지만 아무 도움이 되지 않습니다.
여기서 무슨 문제가 발생하고 메시지를 기록하는 방법을 알고 있나요? ALSA 구성에 문제가 있습니까? 아니면 커널 문제일까요? (저는 3.4.88을 사용하고 있습니다). 어떤 아이디어라도 매우 환영받을 것입니다.
답변1
흥미로운 질문은 오래 전에 가상 오디오 및 비디오 드라이버를 통해 단순히 디지털 오디오 및 비디오를 녹음하는 것에 대해 생각했지만 결코 그런 일이 발생하지 않았다는 것입니다.
귀하의 구성 파일을 사용했는데 귀하가 설명한 것과 똑같은 문제가 발생했습니다. (저는 ALSA에서 OSS 호환 드라이버를 제거하고 다른 커널을 테스트했습니다. 문제가 되지 않는 것 같으며 Debian Wheezy를 사용했습니다)
$ alsaplayer -d front audio.mp3
$ mplayer -vo null -ao alsa:device=front video.mp4
AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample)
$ mplayer -ao alsa:device=front audio.mp3
AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample)
위의 명령은 모두 스피커에서 정상적으로 재생됩니다.
$ arecord -f cd -D loop | aplay -f cd -D front
Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
이제 루프에서 녹음하고 앞쪽으로 재생하세요.
$ alsaplayer audio.mp3
$ alsaplayer -d loop audio.mp3
$ mplayer -vo null video.mp4
$ mplayer -vo null -ao alsa:device=loop video.mp4
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
$ mplayer -ao alsa:device=loop audio.mp3
AO: [alsa] 48000Hz 2ch floatle (4 bytes per sample)
루프로 오디오를 보내고 스피커로 재생하는 모든 것이 잘 작동합니다.
$ mplayer audio.mp3
AO: [alsa] 48000Hz 2ch floatle (4 bytes per sample)
그러나 여기서는 소리가 망가졌습니다. 매우 왜곡되었습니다! 기본 장치에서만 재생됩니다. 루핑으로 지정된 재생이 유효합니다!
다양한 변경을 시도한 후 asound.conf에 대한 수정 사항을 테스트했습니다.
pcm.!default {
type plug
slave.pcm "loopout"
}
문제가 해결되었습니다! 기본 장치가 루프일 때 작동합니다. 효과가 없었 습니다 arecord -f cd -D loopin | aplay -f cd -D front
. 루프가 어떻게 작동하는지 잘 모르겠지만 오디오를 캡처할 수 있습니다. 아니면 ALSA의 버그인가요? 데비안을 사용하고 있나요? 당신에게 효과가 있나요?
문제 해결을 위한 추가 제안 사항에 대한 참고 사항:
네트워크 스트림을 덤프하려면: 애플리케이션이 데이터 저장을 원하지 않으면 전송이 암호화될 것이라고 가정합니다(https???). 플레이어가 서버 인증서를 확인하지 않는 경우 데이터를 캡처하는 방법은 무엇입니까? 중개자가 되어 스트림을 캡처하는 가장 빠르고 쉬운 방법은 무엇입니까?
Pulseaudio: Debian Wheezy에서 어떻게 실행하나요?위키피디아작동한다고 말해보세요. 그렇지 않았습니다.
/etc/init.d/pulseaudio start
[warn] PulseAudio configured for per-user sessions ... (warning).
발생하는 문제를 어떻게 해결하나요? (도구, 진단?)
Jack: Jack을 설치하는 방법에 대한 간단한 지침을 찾지 못했습니다. 상당히 복잡해 보입니다. Pulseaudio가 실행 중이라고 가정합니까? 문서가 혼란스럽습니다. 빠른 시작(작동하는지 확인하기 위해 설치하고 테스트하는 방법)에 대한 링크가 있습니까?
대부분의 오디오 애플리케이션(예: Fios Voicemail Java Player)이 Pulseaudio 또는 Jack을 재생할 수 있지만 오디오를 ALSA로 보낼 수 없다고 생각하십니까?
답변2
"modprobe snd-aloop"를 기억하시나요? 나는 그것을 시도했고 youtube, pandora, tunein, vonage 및에서 asound.conf와 함께 작동했습니다.이 자바 플레이어. Fios와 관련된 것일 수도 있지만 테스트할 Fios가 없습니다. 이 문제를 일으키는 다른 공개 웹사이트를 찾을 수 있습니까?
또한 파일에 녹음한 후 재생해 보세요.
arecord -f cd -D loop > recording.wav
aplay -f cd -D hw:0,0 recording.wav
답변3
최고의 아이디어
첫째, 귀하의 질문을 읽으면 그렇게하지 않을 것입니다.나는 네트워크를 듣고 스트림을 캡처하려고 노력했습니다. 아마도 간단한 호출로 스크립트를 작성할 수 있는 상당히 예측 가능한 위치에 있을 것입니다 tshark
. 그러나 그것은 또 다른 질문입니다.
ALSA에 대한 개선 사항
귀하의 방법은 유효한 방법이지만나는 ALSA를 사용하지 않을 것이다.ALSA는 하드웨어 추상화 계층입니다. 저는 거의 모든 곳에서 사용할 수 있는 사운드 데몬인 PulseAudio를 사용하겠습니다. 이것이 더 의미가 있습니다. 빈 수신기를 만듭니다.
$ pactl load-module module-null-sink sink_name=MySink
이 명령 module id
은 우리에게 쓸모가 없습니다.
이제 환경 변수를 설정하기만 하면 됩니다 PULSE_SINK
. (위 예에서 싱크_이름은 "MySink"입니다)
export PULSE_SINK=MySink;
또는 프로그램을 시작하면 PULSE_SINK=MySink
null 수신기가 스트림을 캡처합니다.
파일로 스트리밍하고 싶을 때마다 다음을 실행하세요.
parec -v -d MySink.monitor | opusenc --raw --downmix-mono --bitrate 64 - out.opus
낮은 비트레이트 제작은 전화 대화를 녹음하는 데 가장 적합한 선택입니다.
각주:
- 당신은 또한 원할 수도 있습니다치다전후의 침묵에서 벗어나십시오.
sox
이를 위해 스트림에 추가하십시오. 봐man sox
봐vad
. - 우리는
--downmix-mono
스테레오 스트림을 사용하고 있습니다. 첫 번째 단계에서channels=1
매개변수를 전송해 보고 싶은 유혹을 느낄 수도 있습니다.module-null-sink
전화 통화는 모두 모노입니다.
답변4
JACK을 사용하는 것이 좋습니다. JACK Audio Connection Kit의 재귀적 약어입니다. 이는 특정 소프트웨어(귀하의 경우 Java 재생 도구)에서 다른 소프트웨어(녹음 소프트웨어)로 오디오를 라우팅하는 등 귀하가 수행 중인 작업에 맞게 조정되었습니다. 지연 시간이 짧은 녹음에 적합하며 원하는 품질을 얻는 데 도움이 될 것이라고 생각합니다.
이를 사용하면 컴퓨터의 모든 소스에서 다양한 녹음 도구로 오디오를 쉽게 라우팅할 수 있습니다. 실제로 다음과 같은 매우 멋진 GUI가 있습니다.QjackCtl.
이 페이지브라우저(Flash 및 Java 도구도 가능)에서 Jack으로 오디오를 라우팅하는 방법을 설명합니다. 이것이 수행되는 방법은 시스템에 따라 다릅니다.
예를 들어:
귀하의 것을 수정 ~/.asoundrc
하거나 ~/asound.conf
:
pcm.rawjack {
type jack
playback_ports {
0 system:playback_1
1 system:playback_2
}
capture_ports {
0 system:capture_1
1 system:capture_2
}
}
pcm.jack {
type plug
slave { pcm "rawjack" }
hint {
description "JACK Audio Connection Kit"
}
}
그러면 당신은 사용할 수 있어야합니다
arecord -D pcm.jack <file>