
特定のサウンドカードにオーディオを録音する簡単でアプリケーションに依存しない方法はありますか?
USBヘッドセットが接続されているとマークされているとします/dev/snd/foo
。
次に、Zoom、Skype、その他のアプリを使って電話をかけます。
アプリケーションがローカル録音を許可していない場合は、サウンドカードレベルで独立してオーディオを録音できますか?
私はalsaを使用しており、サウンドカードに接続したり「ミラーリング」したり、オーディオをファイルにダンプしたりするインフラストラクチャがあると思いますか? 2つのチャンネル(マイク、スピーカー)を録音する必要がありますが、少しミキシングが必要ですか?
私のOSはDebian 10で、alsa(pulseaudioではない)を使用しています。
答え1
特定のサウンドカードにオーディオを録音する簡単でアプリケーションに依存しない方法はありますか?
はい!持っている!
あなたが探しているのは、単にサウンドカードの出力を録音することです。
最も簡単な方法は、おそらく出力を入力に接続することです。ループalsaドライバはワイヤレスモードを提供します。
A/まずドライバがロードされ、正しく初期化されていることを確認してください。
arecord -l
(私のシステムでは)以下を表示してこれを知らせることができます。
card 0: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 0: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
もちろん、実装によってはカードIDが上記のリストと異なる場合があります。
その出力が得られない場合は、おそらくドライバがロードされていない可能性があります。従ってfire: modprobe snd-aloop
。
それでも失敗する場合は、カーネルの.configファイル(CONFIG_SND_ALOOPのgrep)でドライバが選択されていることを確認してください。
B/基本的に期待どおりに機能していることを確認してください。
このドライバは、クロスリンクデバイスのペアを提供し、全二重サラウンドエコーサウンドカードを形成します。あるデバイスを開く最初のアプリケーションは、別のデバイスを開こうとする2番目のアプリケーションに設定されたパラメータを使用するように強制します。したがって、速度、フォーマット、またはチャンネル番号の変換は発生しません。結論は、再生アプリケーションを最初に実行する必要があることです。それでは、期待どおりに機能していることを確認してみましょう。
1/.wavファイルを見つけて、カード0デバイス0サブデバイス0で再生します。aplay -D hw:0,0,0 whatever.wav
2/接続されたクロス接続デバイスカード0デバイス1サブデバイス0のレコード:arecord -D hw:0,1,0 record.wav
もちろん、設定によってはカードIDを調整する必要があるかもしれません。
サム/alsa基本デバイスでRecord.wavを再生して、正しく機能していることを確認してくださいaplay record.wav
。音が聞こえない場合は、おそらく基本的な alsa 設定エラーが原因であろう。 (必要であれば詳しく説明できます)
もちろん、このように動作すると(再生をループバックとして指定)、出力はデフォルトの再生デバイスに送信されないため、録音中に音は聞こえません。とにかく、これはいくつかの特定のalsa設定で可能です。
C/オーディオを耳で再生し、録音を有効にします。
警告する! :alsaプロファイルは常に必要なので、これは仕事の最も難しい部分になります...魔法の重要な部分です。
これを行うには、/etc/asound.confファイル(構成がシステム全体の場合)または$ HOME / .asoundrc(構成が唯一のユーザーに適している場合)から最初から複数の仮想サウンドデバイスを作成する必要があります。
1/準エイリアス定義の開始
pcm.MAUDIO{
type hw
card M2496
device 0
subdevice 0
nonblock true}
ctl.MAUDIO{
type hw
card M2496}
この例は私のシステムに関連しています。
- MAUDIO(必要に応じて選択)は、ハードウェアサウンドデバイスの将来の参照のためのエイリアスとして機能します。
- M2496は、私が好むサウンド再生ハードウェアデバイスに接続されているCARD = M2496から来ます(出力に応じて調整する必要があります
aplay -L
)。 - nonblock trueは、Alsaがサウンドカードデバイスドライバに関連付けられている文字特殊ファイル(/dev/snd/pcmwhatever)をロックしたくないのでtrueです。 (したがって、他のどのアプリケーションよりも必要に応じて開くことができます)
その後、ループバックデバイスを引き続き使用します。
pcm.loopin {
type plug
slave.pcm "hw:Loopback,0,0"
}
pcm.loopout {
type plug
slave.pcm "hw:Loopback,1,0"
}
2/もちろんミキサーが必要です。
pcm.dmixer{
type dmix
ipc_key 219345
slave{
pcm MAUDIO
format S32_LE
period_size 1024
buffer_size 4096 }}
~のためipc_キー一意の共有メモリーキーを選択します(ipcs -ma
選択したものが使用されていないことを確認してください)。 period_sizeとbuffer_sizeの値は、予想待ち時間(低い値、低い待ち時間)とシステムパフォーマンス(低い値、XRunの確率が高い)によって異なります。
3/もちろん、すべてが以前のように動作したいと思います。(構成なし)
pcm.!default{
type plug
slave.pcm "dmixer"
hint{
show on
description "Alsa Default Device"}}
これは、オーディオ出力デバイスの選択を許可するすべてのアプリケーションで説明されているalsa基本デバイスを定義します。
ここで必要なのは、ハードウェアサウンドデバイスとループバックデバイスに入力をコピーできる疑似デバイスを定義することだけです。これはアルサのおかげです。たくさんはめ込む。
4/オーディオをハードウェアサウンドデバイスにルーティングしてループバックにコピー
pcm.multi {
type route;
slave.pcm {
type multi;
slaves.a.pcm "MAUDIO";
slaves.b.pcm "loopin";
slaves.a.channels 2;
slaves.b.channels 2;
bindings.0.slave a;
bindings.0.channel 0;
bindings.1.slave a;
bindings.1.channel 1;
bindings.2.slave b;
bindings.2.channel 0;
bindings.3.slave b;
bindings.3.channel 1;
}
ttable.0.0 1;
ttable.1.1 1;
ttable.0.2 1;
ttable.1.3 1;
}
Slavs.a.pcm "MAUDIO"の代わりにslaves.a.pcm "dmixer"を好むかもしれません。
製品のエイリアスを定義します。
pcm.pbnrec {
type plug
slave.pcm "multi"
hint{
show on
description "Alsa Playback & Record"}}
D/行こう!
システム全体を設定するにはシステムをシャットダウンして再起動し、独自の.asoundrcを設定するにはログアウトしてください。その時点から、好みのオーディオ出力デバイスを選択できる正直なオーディオアプリケーションで、「Alsaの再生と録音」デバイスを選択してから、コマンドラインから再生を開始できます。
- デバイスの「ループ」記録
- リサンプリング/他のファイル形式が必要な場合は、「ループ」デバイスでffmpegを使用してください。
- より便利な録音デスクトップユーティリティを実行します。勇敢な。
へ/ハ!これはプレーヤーA、B、Cでは機能しますが、D、E、Fアプリケーションでは機能しません。
残念ながら、多くの最適ではないアプリケーションでは、目的の出力デバイスを選択することはできません。特にブラウザ。 alsa default pcmとして出力されるので、設定ファイルを調整してpcm.!defaultの説明を次のように変更する必要があります。
pcm.!default {
type plug
slave.pcm "pbnrec"
}
F/FTS! FirefoxとChromeではまだ機能しません。
1/クロム合金
正直なところ…私が書いたので言うことはできませんクロム。 --alsa-output-deviceオプションを指定しないと、Chromiumはデフォルトでパルスオーディオ出力を使用します。そのため、Chromeを起動して動作して--alsa-output-device='default'
いるかどうかを聞く必要があります。現在使用しているChrome 96でも機能します。
2/Firefoxブラウザ
重大な理由が何であれ、Firefoxはpluseaudio権限を付与することにしました。ただし、ソースからFirefoxをビルドするときにalsaバックエンドビルドを有効にするmakeオプションがあります。 Debian でこれを達成する方法がわかりませんが、ほぼ確実に可能です。私が言うことができるのは、現在のバージョンである91.4.0で動作することだけです。
クレジット取引:OPは権威のあるソースを望んでいるので、この回答のすべての内容については後で詳しく説明します。
選ぶ
サウンドサーバは、上記で説明した alsa バイオリンに対する実行可能な代替手段となり得る。 (一部の処理能力が犠牲になった) サウンドサーバーは数十年にわたって選択されてきました。ジャックオーディオ接続キット。Pulseaudioは競争したことがない。
しかし…それはもう一つの話です。
コメント後の追加情報
1/サンプリングレート
snd-aloopドライバ自体は固定サンプルレートには拘束されません。必要に応じて、すべてのサブデバイスを異なるサンプリングレートで実行できます。
ただし、サブデバイスを開く最初のアプリケーションは、クロスペアリングされたサブデバイスのサンプリングレートを決定します(変換が完了していないため)。
実際には、再生アプリケーションがPBSourceHzに出力し、録音アプリケーションがPBSourceHzサンプルレートでサンプルをキャプチャすることを意味します。
これが不便でリサンプリングが必要な場合は、録音アプリケーションを示します。
ffmpegはデスクトップ録音アプリケーションと同様に、すぐにこれを行うことができます(おそらくffmpegのおかげです)。
実際、これはハードウェアサウンドデバイスにサウンドをプッシュするために使用される擬似デバイスがPBSource Hzで入力をサンプリングすることを意味します。
実際、サウンドデバイスの(固定)HW hzサンプリングレートと矛盾するため、音質が低下する可能性があります。
Alsaはこの問題を克服するための2つの方法を提供しています。
- 使用スピードプラグインは特定の周波数でリサンプリングを強制します。 alsaは体系的に再サンプリングするため、これはやや次善策です。 (ソースのサンプルレートが与えられたサンプルレートと同じであっても同様)
- 使用ミックスプラグイン(上記の§C-2、3を参照)は、必要な場合にのみ自動的にリサンプリングします。
defaults.pcm.rate_converter の定義によって、好みのリサンプリングアルゴリズムを選択することもできます。