![.asoundrc 파일에 가상 장치 생성](https://linux55.com/image/94560/.asoundrc%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EA%B0%80%EC%83%81%20%EC%9E%A5%EC%B9%98%20%EC%83%9D%EC%84%B1.png)
순수 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
감사해요.
답변1
나는 다음과 같이 문제를 해결했습니다.
먼저 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
위에 표시된 정보를 기반으로 두 개의 장치를 만들어야 합니다 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
나는 사용하는 것도 효과가 있다고 생각합니다 .