현재 스피커 볼륨 찾기(신호 강도)

현재 스피커 볼륨 찾기(신호 강도)

볼륨을 제어하고 모니터링하는 멋진 wm용 위젯을 만들려고 합니다.

ALSA 및 PulseAudio에서는 스피커 볼륨을 얻고 설정하는 것이 쉽지만 실제 신호 강도를 얻는 것은 어떻습니까?

이는 여러분이 듣는 실제 소음을 의미합니다. 예를 들어 소리가 재생되지 않으면 0입니다. 증폭기(VU-모니터)에서 볼 수 있는 것과 같습니다.

/proc/일반적으로 사용되는 항목(예: CPU 사용량)에 대한 일부 값을 포함하는 파일을 찾을 수 있지만 /proc/stat이번에는 그렇지 않습니다.

실제로 목표는 증폭기의 게인 VU 모니터와 유사한 실시간 오디오 디스플레이(가급적이면 별도의 L/R 채널)를 보여주는 것입니다.

문제는 멋진 wm을 위해 이것을 프로그래밍하는 방법에 관한 것이 아니라 이를 수행하는 데 사용할 수 있는 값을 얻는 방법에 관한 것입니다.

답변1

나는 이것이 사소한 일이라고 생각하지 않으며 이 질문은 아마도 stackoverflow로 옮겨져야 할 것입니다.

내가 아는 한 최종(ALSA) [오디오] 믹스에 액세스하기 위한 인터페이스가 sysfs없습니다 . procfs일부 하드웨어(예: )가 자체 믹싱을 수행하기 때문에 소프트웨어에 그러한 기능이 있다는 보장조차 없습니다. emu10k1물론 그것이 어떻게 작동하는지 전혀 모릅니다.

다중 카드의 가능성은 말할 것도 없고 동일한 카드에 다중 오디오 출력(디지털(예: SPDIF), 아날로그, 헤드폰 또는 스피커 등)과 다중 스피커 구성의 문제도 있습니다.

가장 좋은 방법은 아마도 사용되는 ALSA 장치를 활용하는 것입니다(아마도 hw0pulseaudio와 같은 사운드 하위 시스템에서 믹싱이 발생하거나 dmix사운드 하위 시스템이 사용되지 않는 경우). 이는 오디오가 하드웨어에 도달하기 전의 "마지막 단계"이기 때문입니다. . 즉, 이것이 가능한지 전혀 모르겠습니다. 아마도 그렇지 않을 것입니다.

사용자가 pulseaudio와 같은 것을 사용하고 있다고 가정할 수 있다면 작업이 훨씬 쉬워집니다. 다음과 같은 소프트웨어파부컨트롤아래에서 볼 수 있듯이 이미 이를 구현합니다.재생탭과 사전 최종 믹스 단계출력 기기들. 기술적으로 여기에는 오디오 스트림 자체를 가져온 다음 이를 주파수 도메인으로 변환하는 작업이 포함됩니다(예:StFt) 어떤 방식으로든 시각화하기 위해; 이를 위해 실제로 필요한 것은 오디오 스트림에 대한 액세스이며, pulseaudio는 싱크를 통해 pavucontrol과 마찬가지로 이를 제공할 수 있습니다.

나는 그다지 도움이 되지 않는군요, 그렇죠? 만약 내가 당신이고 이것을 데스크탑용으로 원하고 펄스오디오(나도 사용하고 있음)를 사용하고 있다면 나의 첫 번째 목표는 최종 믹스 스트림을 얻으려고 시도하는 것입니다. 안에 있는 놈들이 스레드pactland 만 사용하여 이를 수행하는 설득력 있는 방법을 알아낸 것 같습니다 pacmd. 이는 프로그래밍 방식으로도 매우 쉽게 수행할 수 있습니다.

오디오 스트림을 확보하면 수학만 남습니다 :-)

관련 정보