マイク入力を監視するにはどうすればよいですか?

マイク入力を監視するにはどうすればよいですか?

Linux でマイク入力を監視するにはどうすればよいですか?

注意: モニタリングは、記録したものを記録および再生することと同じではありません。


Windows では、次の方法で自分のマイクを聞くことができます。

  1. マイクをキャプチャしてサウンドカードに送信して再生するプログラム。たとえば、ffplayコマンド

    ffplay -f dshow -i audio="Front panel mic (Realtek High Definition Audio)"
    

    最大数秒の大幅な遅延が発生します。

  2. 入力デバイスのプロパティの「聞く」オプションを使用

    ここに画像の説明を入力してください

    最大 1 秒までの小さな遅延が発生します。

  3. サウンドカードウィジェット付き

    ここに画像の説明を入力してください

    遅延はゼロになります。これにより、入力サウンドがサウンド カードを離れることなく出力されるようになると思いますが、確実ではありません。

Linux コマンドラインでオプション #2 が必要です。

答え1

PulseAudioのマイクをモニターできるはずですループバックモジュールモジュールは利用可能な入力デバイスに対して自動的にループバック出力を作成します。モジュールを手動でロードするには

pactl load-module module-loopback

変更を永続化するには/etc/pulse/default.pa

load-module module-loopback

答え2

アナログ入力とアナログ出力がある場合は、(PulseAudio Volume Control) を使用して、入力オーディオをミキサーの出力にルーティングすることをお勧めしますpavucontrol。ただし、たとえば USB マイクを使用している場合は、オーディオをミックスするだけでは不十分で、何らかのソフトウェアでオーディオを録音してから再生して出力ストリームに送る必要があります。また、ハードウェアによっては、この録音と再生によって遅延 (または高い遅延) が発生する可能性があります。

これを試すこともできます:

まず、使用したい入力と出力の名前を取得します。

$ pactl list short | egrep "alsa_(input|output)" | fgrep -v ".monitor"

私の場合、結果は次のようになります。

0   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   RUNNING
0   alsa_input.usb-Microsoft_Microsoft___LifeCam_HD-5000-02.analog-mono module-alsa-card.c  s16le 1ch 44100Hz   SUSPENDED

つまり、 の出力デバイスは と呼ばれalsa_output.pci-0000_00_1b.0.analog-stereo、USB ウェブカメラ/マイクの名前は ですalsa_input.usb-Microsoft_Microsoft___LifeCam_HD-5000-02.analog-mono

次のように USB マイクから録音し、オーディオ出力に出力できるようになりました。

$ pacat -r --latency-msec=1 -d alsa_input.usb-Microsoft_Microsoft___LifeCam_HD-5000-02.analog-mono | pacat -p --latency-msec=2 -d alsa_output.pci-0000_00_1b.0.analog-stereo

つまり、1 つのpacatプロセスがマイクから読み取り、オーディオ スタックにレイテンシーを 1 ミリ秒 (0.001 秒) にするように要求します。そして、別のpacatプロセスがオーディオを出力デバイスに書き込み、レイテンシーを 2 ミリ秒 (0.002 秒) にするようにします。出力レイテンシーを 1 ミリ秒に減らすこともできますが、少なくとも私のかなり古いハードウェアでは、その場合、オーディオが少し簡単にクリップしすぎます。

ただし、録音と再生出力の組み合わせを長期間実行し続けると、遅延が徐々に増加するようです。USB マイクのクロックが出力オーディオ クロックよりもわずかに速いため、バッファーが徐々に増加すると考えられます。pactl プロセスがオーディオをスキップして出力をリアルタイムに保つための適切な方法はわかりません。そのためにはカスタム アプリを作成する必要があると思います。

上記のpacat ... | pacatパイプラインの場合、PREEMPT が有効になっている Linux カーネル (Ubuntu カーネルなど) を使用しているときに、私のハードウェアの最良のケースのレイテンシは、音波がマイクに当たってから出力スピーカーから音波が放出されるまでの約 6 ミリ秒のようですlinux-lowlatency

関連情報