표적
- 듣기 Python 프로세스 일시중지
pcm.record_right
(Google-Assistant용) pcm.record_left
다른 Python 프로세스에서 계속 사용됩니다(예:눈 소년 뜨거운 단어발각)
사용 사례
- Snowboy를 사용하여 인기 단어를 감지한 다음 추가 음성 상호작용을 Google 어시스턴트에 전달하고 싶습니다. 대화가 끝난 후 Snowboy를 다시 요청할 때까지 Google 어시스턴트를 비활성화하고 싶습니다.
- Google-Assistant Library SDK를 사용하고 있으며 내가 허용하지 않는 한 이 SDK가 듣지 않도록 하고 싶습니다! (따라서 SDK의 mic-mute 명령을 사용하는 것만으로는 충분하지 않습니다.)
- 저는 Raspberry Pi 3B+와 외부 USB 스테레오 마이크(Blue Snowball)를 사용하고 있습니다.
- 어시스턴트 프로세스를 일시 중지하고 일시 중지를 해제하려는 이유는 프로그램을 완전히 중지했다가 시작하면 시간이 오래 걸리기 때문입니다(Snowboy가 핫 워드를 감지한 시간과 어시스턴트가 준비되는 시간 사이).
내가 시도한 것
- 저는
.asoundrc
아래 설정을 사용했습니다. 올바른 마이크에 액세스하기 위해 보조 프로세스를 일시 중지하면arecord
run을 사용record_left
하지만 다음 오류가 발생합니다. 테스트 목적으로kill -STOP <pid>
및 를 사용하고 있습니다kill -CONT <pid>
. - 또한 왼쪽과 오른쪽 채널을 분할하지 않고 마이크 공유(dsnoop 사용)를 시도했지만 동일한 오류가 발생했습니다.
- 또한 Google의 SDK가 마이크를 비활성화하는 위치를 추적해 보았지만 샘플 Python 코드는
libassistant_embedder.so
다음과 같은 공유 개체를 로드합니다.오픈 소스가 아님.
질문
- ALSA 장치를 사용하는 Linux 프로세스를 일시 중단하고 해당 장치를 계속 사용할 수 있도록 할 수 있습니까?
- 그렇지 않다면 JACK-Audio가 이것을 할 수 있는지 아는 사람이 있습니까?
- 효과가 있는 다른 방법이 있나요?
실수
ALSA lib pcm_dsnoop.c:618:(snd_pcm_dsnoop_open) 슬레이브 레코드를 열 수 없습니다: main:788: 오디오 열기 오류: 장치 또는 리소스가 사용 중입니다.
~/.asoundrc의 내용
pcm.!default {
type asym
capture.pcm "mic"
playback.pcm "speaker"
}
pcm.mic {
type plug
slave {
pcm "hw:1,0"
}
}
pcm.speaker {
type plug
slave {
pcm "hw:0,0"
}
}
# see: https://alsa.opensrc.org/Dsnoop, section 1.2.3
pcm.record_left {
type dsnoop
ipc_key 234884
slave {
pcm "hw:1,0"
channels 2
rate 48000
}
bindings.0 0 #pick one of the stereo mic channels
}
pcm.record_right {
type dsnoop
ipc_key 2241234
slave {
pcm "hw:1,0"
channels 2
rate 48000
}
bindings.0 1 #pick the other of the stereo mic channels
}
답변1
ALSA가 이를 수행할 수 있는지 확실하지 않습니다.
Pulseaudio는 옵션인가요? 이는 소스/싱크에서 전송을 분리하여 Pulseaudio 모듈을 사용하여 왼쪽과 오른쪽에 대한 두 개의 소스를 생성합니다. 그런 다음 애플리케이션이 다른 소스에서 데이터를 계속 읽는 동안 애플리케이션이 한 소스에서 데이터를 읽는 것을 일시 중지할 수 있습니다.
두 개가 필요해모듈 재매핑 소스. 사용하거나 pacmd
만들어 pactrl
보세요. 작동할 때까지 시도해 보고( unload-module
변경하려면 먼저 제거하세요) Pulseaudio 구성 파일에 넣으세요. pavucontrol
보유하고 있는 소스/싱크와 이를 사용하는 애플리케이션을 이해하고 볼륨을 설정하는 데 사용됩니다 .