プロセスの一時停止中のステレオマイクのALSA動作

プロセスの一時停止中のステレオマイクのALSA動作

ターゲット

  • リスニング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以下の設定を使用しました。正しいマイクにアクセスするためにセカンダリプロセスを一時停止すると、arecordrunが使用されますが、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保持しているソース/シンクとそれを使用するアプリケーションを理解し、ボリュームを設定するために使用されます。

関連情報