web-dev-qa-db-ja.com

アルササウンドモジュールsnd_aloop

Snd_aloopモジュールに頭を巻き付けるのに問題があります。

私はpulseaudioを使わずにすべてのオーディオをalsa経由でルーティングしようとしています。ジャックを開始した場合、alsa以外のアプリからの音は聞こえませんが、rhythmboxやその他のネイティブジャックでサポートされているソフトウェアなどは問題なく動作します。

主な理由は、私は主にオーディオ編集を行っていますが、オンラインでもビデオを聴いているからです。

私はalsa snd_aloopモジュール を使用して仮想ハードウェアをセットアップし、ジャック以外のアプリのオーディオをルーティングしてうまく再生できることを読んでいましたalsa_inおよびalsa_outメカニズムを介したジャック付き。

私は これこれ のようなかなりの数のチュートリアルを読みました多くのドキュメント herehere も調べました。

私にとって最も混乱しているのは、ループバックのセットアップと、alsa_inとalsa_outの動作方法です。

たとえば、snd_aloopモジュールでは、8つのサブデバイスを持つ2つのデバイスがあります

僕の aplay-lこんな感じ

**** List of PLAYBACK Hardware Devices ****
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
card 1: PCH [HDA Intel PCH], device 0: CS4208 Analog [CS4208 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 1: CS4208 Digital [CS4208 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

次のようにシステムをセットアップしようとすると、次のようになります。

#jack capture and playback
pcm.jack_capture_1 {
    type plug
        slave.pcm "hw:Loopback,0,0"
}

pcm.jack_playback_1 {
    type plug
        slave.pcm "hw:Loopback,0,1"
}

#alsa capture and playback
pcm.alsa_input_1 {
    type plug
        slave.pcm "hw:Loopback,1,0"
}

pcm.alsa_output_1 {
    type plug
        slave.pcm "hw:Loopback,1,1"
}


#playback devices
pcm.jack_audio_1 {
  type asym
  playback.pcm "jack_playback_1"
  capture.pcm "jack_capture_1"
}

次にalsa_out -j "playback" -d jack_audio_1 sound.wav

ジャックルーティングマップで接続した後も出力が得られません。

私の質問:セットアップを見ると、ループバックjack_capture_1がhw:0,0に関連付けられています。ループバックjack_playback_1がhw:0,1に関連付けられています。

つまり、jack_capture_1に送信されたサウンドは、jack_playback_1からエコーアウトする必要があります。それは正しいですか?

また、alsa_inはジャックセッションに入るalsaオーディオストリームであり、alsa_outはジャックが終了後に出力するalsaオーディオストリームですか?

私はsnd_aloopでできることをすべて読んでいますが、彼らの 公式ドキュメント でさえ少し不足しているようです。

誰かが私がこれを整理するのを手伝ってもらえますか?

3
user1610950

答えが少し遅れていますが、誰かがこれが役立つと思うかもしれません;)

/etc/modprobe.d/alsa.conf
alias snd-card-8 snd-aloop
options snd_aloop index=8 id=loop0 enable=1

/etc/asound.conf

#### Linrad ####                                                                                                                                                                                                                              

pcm.loop0_0_0 {                                                                                                                                                                                                                               
  type plug                                                                                                                                                                                                                                   
    slave {                                                                                                                                                                                                                                   
      pcm "hw:loop0,0,0"                                                                                                                                                                                                                      
      format FLOAT_LE                                                                                                                                                                                                                         
      rate 96000                                                                                                                                                                                                                              
    }                                                                                                                                                                                                                                         
}                                                                                                                                                                                                                                             

pcm.linrad_alsa {                                                                                                                                                                                                                             
  type asym                                                                                                                                                                                                                                   
  playback.pcm "loop0_0_0"                                                                                                                                                                                                                    
  capture.pcm "loop0_0_0"                                                                                                                                                                                                                     
  hint {                                                                                                                                                                                                                                      
    show on                                                                                                                                                                                                                                   
    description "Linrad: ALSA"                                                                                                                                                                                                                
  }
}

pcm.loop0_1_0 {
  type plug
    slave {
      pcm "hw:loop0,1,0"
      format FLOAT_LE
      rate 96000
    }
}

pcm.linrad_jack {
  type asym
  playback.pcm "loop0_1_0"
  capture.pcm "loop0_1_0"
  hint {
    show on
    description "Linrad: JACK"
  }
}

#### WSJTX ####

pcm.loop0_0_1 {
  type plug
    slave {
      pcm "hw:loop0,0,1"
      format FLOAT_LE
      rate 96000
    }
}

pcm.wsjtx_alsa {
  type asym
  playback.pcm "loop0_0_1"
  capture.pcm "loop0_0_1"
  hint {
    show on
    description "WSJTX: ALSA"
  }
}

pcm.loop0_1_1 {
  type plug
    slave {
      pcm "hw:loop0,1,1"
      format FLOAT_LE
      rate 96000
    }
}

pcm.wsjtx_jack {
  type asym
  playback.pcm "loop0_1_1"
  capture.pcm "loop0_1_1"
  hint {
    show on
    description "WSJTX: JACK"
  }
}

....

そして、このようなものをジャックするための配管(jackdの開始後に実行されるシェルスクリプトに配置されます)

alsa_in -j "WSJTX source" -d wsjtx_jack -q 1 &> /dev/null &
alsa_out -j "WSJTX sink" -d wsjtx_jack -q 1 &> /dev/null &
2
Dragan