

# 背景

現在，人が発した問いかけに応じて，音声応答を返すロボットを開発しております．  
そんな中，システムの仕様上，マイクとスピーカの位置が近いため，ロボットが返した音声応答を再び問いかけとして入力してしまう問題が発生してしまいます．  
この問題を解決するために，「スピーカからの音声応答中はマイクをミュートにする」という方向で検討しているのですが，中々うまくいきません．この問題を解決したいです．

# 使用機器等

PC：Raspberry Pi 4 Model B Rev 1.5  
OS：Linux raspberrypi 5.10.103-v71+ #1529 SMP Tue Mar 8  
音声認識エンジン：Julius4.6  
デバイスドライバ：ALSA  
使用コマンド：alsamixer, amixer, arecord, pacmd,
pulseaudio,(sox:なぜかrecordが動作しない．デフォルトデバイスが設定されていないかららしい)

プログラミング言語：Python3.7  
マイクとスピーカの接続方法：Teensy4.0とRaspberry Pi 4をUSB接続  
マイク（Teensy4.0とI2S接続）：SPH0645LM4H搭載 I2S MEMSマイクモジュール  
スピーカアンプ（Teensy4.0とI2S接続）：Adafruit MAX98357 I2S クラス D モノアンプ

# システム概要

マイクから取得した音声データをJuliusサーバによりテキストに変換．  
並列して実行しているPythonプログラムがJuliusサーバと接続し，Juliusサーバから得たテキストを基に応答を行う．

# やりたいこと

Pythonプログラムでsubprocessモジュールをインポートし，音声認識プログラム内でターミナルを動かす．  
ターミナルでは，下記のようなオーディオをミュートにするコマンドを実行することで，外部からの音声入力を遮断する．

  * amixer sset PCM off  
その間に音声応答を出力する．

# やったこと1

  1. amixer sset PCM off
  2. arecord -D sysdefault:CARD=MIDIAudio -c2 -r 48000 -f S32_LE -t wav -V stereo -v file_stereo.wav

1.のコマンドでPCMをミュートにしたうえで，2.を実行することで設定の変更が反映されるか確認しましたが，音が録音されており，ミュートされませんでした．offではなくnocap,
mute にしても設定が反映されませんでした．

  * amixer sset PCM nocap
  * amixer sset PCM mute

# やったこと2

<https://qiita.com/propella/items/4699eda71cd742cba8d3>  
上記のURLを基に/usr/share/alsa/alsa.confを編集して再挑戦しましたが結果は変わりませんでした．

# やったこと3

別のUSBマイクを接続しamixerで下記のコマンドを打って録音した場合はミュートすることができました．  
1.amixer -c3 sset Mic 0% nocap

これらのことからTeensy 4.0のTeensy MIDI/Audioを使っていることが原因でミュート出来ないのかもしれないと考えて今調査中です．

# 知りたいこと

「おまけ」に載せている設定を見るとTeensy MIDI/Audioの設定が'PCM'になっています．  
Simple mixer control 'PCM'の'PCM'が'Mic'になればよいのですが...何が違うのでしょう？

-Teensy 4.0 を使った，Audioのミュート  
-amixerでの'PCM'の正しい設定方法  
について詳しい方がおりましたらご教授いただければ幸いです．  
よろしくお願いします．

# おまけ

amixerのSimple mixer controlの設定？を下記に残しておきます．ご参考までに．

amixer：全体的な「Master」と「Capture」の設定（多分）？

[code]

    pi@raspberrypi:~ $ amixer
    Simple mixer control 'Master',0
      Capabilities: pvolume pswitch pswitch-joined
      Playback channels: Front Left - Front Right
      Limits: Playback 0 - 65536
      Mono:
      Front Left: Playback 52432 [80%] [on]
      Front Right: Playback 52432 [80%] [on]
    Simple mixer control 'Capture',0
      Capabilities: cvolume cswitch cswitch-joined
      Capture channels: Front Left - Front Right
      Limits: Capture 0 - 65536
      Front Left: Capture 53728 [82%] [on]
      Front Right: Capture 53728 [82%] [on]
    pi@raspberrypi:~ $
    
[/code]

amixer -c0：サウンドカード0番の設定．これがTeensyと接続している時のサウンドカード

[code]

    pi@raspberrypi:~ $ amixer -c0
    Simple mixer control 'PCM',0
      Capabilities: pvolume pswitch pswitch-joined
      Playback channels: Front Left - Front Right
      Limits: Playback 0 - 255
      Mono:
      Front Left: Playback 0 [0%] [0.00dB] [on]
      Front Right: Playback 0 [0%] [0.00dB] [on]
    
[/code]

amixer -c3：サウンドカード3番の設定．これがUSBマイクと接続している時のサウンドカード

[code]

    pi@raspberrypi:~ $ amixer -c3
    Simple mixer control 'Mic',0
      Capabilities: cvolume cvolume-joined cswitch cswitch-joined
      Capture channels: Mono
      Limits: Playback 0 - 62
      Mono: Capture 30[40%] [6.75dB] [on]
    
[/code]


CC BY-SA 4.0
2022-11-18T12:53:27.623
92300
2022-11-18T16:33:42.900
2022-11-18T16:33:42.900
3060
55479
question
python python3 linux raspberry-pi
RasPi で Teensy 4.0 を使ったTeensyAudioのミュート方法について