ターゲット
- リスニング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モジュールを使用して左右の2つのソースを生成します。その後、アプリケーションが別のソースからデータを読み続けながら、アプリケーションがあるソースからデータを読み取ることを一時停止できます。
二つ必要モジュール再マッピングソース。使用またはpacmd
作成してpactrl
みてください。動作するまで試してみてください(unload-module
変更するにはまず削除してください)、Pulseaudio設定ファイルに入れてください。pavucontrol
保持しているソース/シンクとそれを使用するアプリケーションを理解し、ボリュームを設定するために使用されます。