arecord, parec 또는 jackd를 사용하여 오디오 입력을 재생하거나 모니터링하는 이상적인 방법은 무엇입니까?

arecord, parec 또는 jackd를 사용하여 오디오 입력을 재생하거나 모니터링하는 이상적인 방법은 무엇입니까?

레코드 후 티에 출력을 파이프하려는 최선의 노력에도 불구하고 녹음된 오디오 입력을 내 오디오 장치(alsa로 구동되는 하이파이버리 및 라즈베리 파이에서 호스팅되는 ADC)로 파이프할 수 없습니다. 펄스오디오를 설치하고 설정하고 활용합니다. parec은 jackd 및 jack_capture와 함께 아래와 같습니다.

내 작업의 주요 다이어그램:

라인 레벨 오디오->ADC->PCM/Wav 파일->DAC->라인 레벨 오디오.

문제는 녹음 중에 출력이 재생되지 않는다는 것입니다.

라인 레벨 입력을 녹음하고 있는데 듣고 싶습니다. 지연 시간은 중요하지 않지만 200밀리초 이하가 될 것으로 예상됩니다.

나는 하나의 터미널 창에서 "arecord"를 사용하고 다른 터미널 창에서는 "aplay"를 사용하는 엄청나게 해킹된 솔루션을 구현했지만 이것이 내 문제의 해결책이 될 수는 없습니다.

문제를 더욱 복잡하게 만들기 위해 Google에 대한 나의 시도는 비참하게 실패했습니다. 왜냐하면 Google은 제가 응용 프로그램의 출력을 파일에 캡처하려고 한다고 생각했기 때문입니다. 난 아니다. 사운드 카드의 입력을 모니터링하고 싶습니다. Apple의 Logic Pro에서는 이를 "소프트웨어 모니터링"이라고 합니다. 꽤 쉽다고 생각했습니다. 나는 또한 그것을 "플레이 쓰루(play-through)"라고 부르는 것을 보았지만 아마도 그것은 다른 것일 수도 있습니다.

나는 펄스오디오에 대한 희망을 품고 있습니다. 그들은 그것이 단지 "소스 앤 싱크"일 뿐이라고 말합니다.

나는 pulseaudio의 parec, alsa의 arecord 및 jackd + jack_capture를 사용하여 pcm 파일을 성공적으로 녹음했습니다. 나는 분명히 뭔가를 놓치고 있습니다.

parec -d alsa_input.platform-soc_sound.stereo-fallback | sox -t raw -b 16 -e signed -c 2 -r 44100 - /mnt/audio/pulsetest.wav

분명히 내 OS와 하드웨어는 동시에 기록하고 재생할 수 있다는 점에서 "이중화"할 수 있습니다.

이것이 가능합니까, 아니면 arecord와 aplay를 계속 사용해야 합니까?

답변1

다음과 같은 것을 시도하십시오

pacmd load-module module-loopback source="alsa_input.platform-soc_sound.stereo-fallback" sink="alsa_output.whatever"

여기서 "alsa_output.whatever"는 라인 출력 수신기의 실제 이름입니다. 싱크대가 보이시죠

pacmd list-sinks | grep name:

"루프백"은 시스템 오디오 캡처에 특별히 사용되는 용어인 것 같습니다.

"루프백"은 일부 출력을 일부 입력으로 다시 보내는 데 사용되는 일반적인 용어입니다. 네트워크용 루프백 인터페이스( lo), 실제 LAN 장치의 루프백 기능, ALSA 루프백 드라이버, Pulseaudio 루프백 모듈 등이 있습니다.

펄스 구성에서 기본 샘플 형식과 속도를 설정했습니다.

이렇게 하지 마세요. Pulseaudio가 다시 샘플링합니다. 다른 것을 건드리지 말고 module-loopback소스에서 싱크로 연결하기만 하면 됩니다.

그것은 매우 간단해야합니다.

매우 간단합니다. 뭘 하려고 이렇게 힘들게 하는지 모르겠어요.

나는 스니퍼를 꺼내 칩을 조사해 알사가 무엇을 하고 있는지 알아봐야겠다고 생각했습니다.

흥미로운 점입니다(특히 Intel HDA 드라이버를 사용하는 실제 PC에서 - RaspPi에서는 꽤 지루함). 그러나 ALSA가 아닌 Pulseaudio 레벨을 다루기 때문에 아마도 도움이 되지 않을 것입니다. 직업이 있으니 문제 aplayarecord되지 않습니다.


소스 및 싱크가 96k/24비트를 사용하기 위한 추가 요구 사항(질문에서 언급하지 않은)이 있는 경우 이는 Pulseaudio에서의 여정이 될 것입니다. Pulseaudio는 ALSA 하드웨어 소스/싱크를 합리적인 방식으로 변환기 기본값으로 실행하도록 설계되었습니다. 그런 다음 스트리밍하는 동안 필요에 따라 업샘플링/다운샘플링합니다. 이를 변경하기 위해 Pulseaudio 내부 장치를 사용하는 것은 까다롭습니다.

보세요모듈 루프백 문서: 추가 매개변수를 사용하여 원하는 속도와 형식을 설정할 수 있지만(이렇게 해야 합니다) 소스와 싱크가 이 모드로 종료된다는 보장은 없으며 Pulseaudio가 어딘가에서 리샘플링하지 않을 것입니다.

또한 이 요구 사항이 어디서 왔는지 밝히지 않았습니다. RaspPi를 전문적인 수준의 오디오 처리(DAW, 디지털 오디오 워크스테이션)에 사용하려는 경우 Pulseaudio보다 JACK이 더 나은 선택입니다. 그러나 그것은 모두 귀하의 상황에 따라 다릅니다.

즉 , 다음 module-loopback과 같이 실행 하면parec --rate=96000 --format=s24le틀림없이실행 중인 수신기의 비트 전송률과 형식을 변경할 수는 없지만 원하는 형식과 비트 전송률을 이미 얻었으면 잊어버리고 만족하세요.

예, Pulseaudio를 사용하면 소스의 여러 스트림뿐만 아니라 여러 스트림을 싱크에 넣을 수 있습니다.

관련 정보