純粋なALSAを使用して、サウンドカードの内部オーディオを録音する仮想デバイスを作成しようとしています。何度も検索したところ、探しているものに非常に近い.asoundrc
ファイル_が見つかりました。
pcm.mycard {
type hw
card 0
}
ctl.mycard {
type hw
card 0
}
pcm.myconvert {
type plug
slave {
pcm "myrecord"
format S16_LE
}
}
pcm.myrecord {
type file
format "raw"
slave.pcm "mycard"
file "| oggenc -Q -q6 -r -B %b -C %c -R %r -o /tmp/record-$(date +%%Y-%%m-%%d_%%H%%M%%S).ogg -"
}
pcm.!default{
type asym
playback.pcm "myconvert"
capture.pcm "mycard"
}
この構成により、コンピューターで再生されるすべてのオーディオを含むogg
ファイルを記録できます。次に、構成のpcm.myrecord
の部分を変更して、音声を、たとえばarecord
でキャプチャできる仮想カードに「ストリーミング」できるようにします。誰かがこれを手伝ってくれるとうれしいです。
私はこれを試しました: 再生されるすべてを記録できる仮想ALSAデバイスをどのように作成しますか? しかし、それは私にとってはうまくいきませんでした。以下は、arecord -L
からの出力です。
muammar@zarathustra /tmp
% arecord -L !10015
null
Discard all samples (playback) or generate zero samples (capture)
default:CARD=PCH
HDA Intel PCH, CS4208 Analog
Default Audio Device
sysdefault:CARD=PCH
HDA Intel PCH, CS4208 Analog
Default Audio Device
front:CARD=PCH,DEV=0
HDA Intel PCH, CS4208 Analog
Front speakers
dmix:CARD=PCH,DEV=0
HDA Intel PCH, CS4208 Analog
Direct sample mixing device
dsnoop:CARD=PCH,DEV=0
HDA Intel PCH, CS4208 Analog
Direct sample snooping device
hw:CARD=PCH,DEV=0
HDA Intel PCH, CS4208 Analog
Direct hardware device without any conversions
plughw:CARD=PCH,DEV=0
HDA Intel PCH, CS4208 Analog
Hardware device with all software conversions
default:CARD=Loopback
Loopback, Loopback PCM
Default Audio Device
sysdefault:CARD=Loopback
Loopback, Loopback PCM
Default Audio Device
front:CARD=Loopback,DEV=0
Loopback, Loopback PCM
Front speakers
surround21:CARD=Loopback,DEV=0
Loopback, Loopback PCM
2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Loopback,DEV=0
Loopback, Loopback PCM
4.0 Surround output to Front and Rear speakers
surround41:CARD=Loopback,DEV=0
Loopback, Loopback PCM
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Loopback,DEV=0
Loopback, Loopback PCM
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Loopback,DEV=0
Loopback, Loopback PCM
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Loopback,DEV=0
Loopback, Loopback PCM
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
dmix:CARD=Loopback,DEV=0
Loopback, Loopback PCM
Direct sample mixing device
dmix:CARD=Loopback,DEV=1
Loopback, Loopback PCM
Direct sample mixing device
dsnoop:CARD=Loopback,DEV=0
Loopback, Loopback PCM
Direct sample snooping device
dsnoop:CARD=Loopback,DEV=1
Loopback, Loopback PCM
Direct sample snooping device
hw:CARD=Loopback,DEV=0
Loopback, Loopback PCM
Direct hardware device without any conversions
hw:CARD=Loopback,DEV=1
Loopback, Loopback PCM
Direct hardware device without any conversions
plughw:CARD=Loopback,DEV=0
Loopback, Loopback PCM
Hardware device with all software conversions
plughw:CARD=Loopback,DEV=1
Loopback, Loopback PCM
Hardware device with all software conversions
ありがとう。
私はこの問題を次のように解決しました:
まず、snd-aloop
モジュールをロードします。
Sudo modprobe snd-aloop
これにより、Loopback
という新しいデバイスが作成されます。
± % cat /proc/asound/cards !10017
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0xc1814000 irq 60
1 [HDMI ]: HDA-Intel - HDA Intel HDMI
HDA Intel HDMI at 0xc1810000 irq 61
2 [Loopback ]: Loopback - Loopback
Loopback 1
上記の情報から、2つのhw
デバイスを作成する必要があります。
hw:0,0
(PCHは私のメインサウンドカードです)。hw:2,1
(Loopback
仮想デバイス)。通常、hw
デバイスの形式はhw:X,Y
です。私たちの目的のために、メインカードのY
は常に0
であるようですが、Loopback
の場合、Y
は1
と等しくなります。
このすべてを機能させるために、次の~/.asoundrc
ファイルが必要です。
pcm.!default {
type asym
playback.pcm "LoopAndReal"
#capture.pcm "looprec"
capture.pcm "hw:X1,Y1"
}
pcm.looprec {
type hw
card "Loopback"
device 1
subdevice 0
}
pcm.LoopAndReal {
type plug
slave.pcm mdev
route_policy "duplicate"
}
pcm.mdev {
type multi
slaves.a.pcm pcm.MixReale
slaves.a.channels 2
slaves.b.pcm pcm.MixLoopback
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
}
pcm.MixReale {
type dmix
ipc_key 1024
slave {
pcm "hw:X1,Y1"
rate 48000
#rate 44100
periods 128
period_time 0
period_size 1024 # must be power of 2
buffer_size 8192
}
}
pcm.MixLoopback {
type dmix
ipc_key 1025
slave {
pcm "hw:Loopback,0,0"
rate 48000
#rate 44100
periods 128
period_time 0
period_size 1024 # must be power of 2
buffer_size 8192
}
}
hw:X1,Y1
をメインカードの値で変更します(私の場合はhw:0,0
)。
コンピューターで何かを再生して、この構成が機能することをテストできます。聞けば大丈夫です。次に、コンピューターで何かを再生し、ffmpeg
を使用してこの仮想デバイスから記録します。
ffmpeg -f alsa -i hw:X2,Y2 -c:a libmp3lame -b:a 256k -vn capture.mp3
hw:X2,Y2
はLoopback
デバイスに置き換える必要があります。この場合はhw:2,1
です。
arecord
の使用もうまくいくと思います。
私は指示に従いましたが、1つの例外を除いて期待どおりに動作します。Chromeとしてアプリケーションが別のループバックインターフェイスへのアクセスを取得した後でサウンドカードにアクセスすると失敗します。たとえば、最初にループバックで録音を開始します。
arecord -f cd -Dhw:Loopback,1,0 sample1.wav
次に、ブラウザーを開き(新しいプロセスを開始することが重要です)、次にビデオを開きます。このような手順を実行すると、2つの結果が考えられます(何に依存しているかはわかりません)。最初のシナリオ:音声が聞こえず、arecordは何も録音しません。 2番目のシナリオ:ビデオを再生することもできず、ブラウザーがサウンドデバイスにアクセスできないことを通知するメッセージが表示されます。
最初にブラウザーを開いてビデオを再生してから録画を開始すると、常に期待どおりの結果が得られます。音声が聞こえ(サウンドカードのルーティングへのルーティング)、データがファイルに保存されます(ループバックのルーティングへのルーティングも同様)。
@muammarそのような問題も経験しましたか?