.asoundrc 파일에 가상 장치 생성

.asoundrc 파일에 가상 장치 생성

순수 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. https://bbs.archlinux.org/viewtopic.php?id=167830

답변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.

  1. hw:0,0(PCH는 나의 메인 사운드 카드입니다.)
  2. hw:2,1( Loopback가상 장치).

일반적으로 hw장치의 형식은 다음과 같습니다 hw:X,Y. 우리의 목적에 따르면 Y메인 카드에는 항상 가 있고 0우리에게는 같음이 Loopback있는 것 같습니다 .Y1

이제 이 모든 작업을 수행하려면 ~/.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장치의 위치를 ​​변경해야 합니다.Loopbackhw:2,1

arecord나는 사용하는 것도 효과가 있다고 생각합니다 .

관련 정보