私は遊んでいます。コンソールサウンドビジュアライザー独自のALSAデバイスが聞きたいです。編集中です~/.asoundrc
。私は私が必要だと知っていますmulti
入れるサウンドデータを別々のデバイスに分割します。しかし、私のサウンドカードにはハードウェアミキシング機能がなく、dmix
ソフトウェアミキシングのためのプラグインも必要です。
multi
aをスレーブとして追加しようとすると、次のエラー(改行)dmix
が発生します。
ALSA lib pcm_direct.c:1525:(_snd_pcm_direct_get_slave_ipc_offset)
Invalid type 'multi' for slave PCM
「仮想仲介者」を奴隷plug
にして指してみました。multi
dmix
それしかし、まだ同じエラーが発生します。dmix
チェーン全体が欲しいplug
ようですhw
...
dmix
モジュールを依存モジュールとして追加しようとすると、multi
次の結果が表示されます。
Device or resource busy
予想通り、ソフトウェアミキシングはパイプラインの最初のステップではなく、複数のプログラムがサウンドカードにアクセスしようとすることです。
これら2つ(ループバックデバイスのdmix
ingと-ing)は単独でうまく機能します。multi
なぜ一緒に働き、一緒に働かないのですdmix
かmulti
?どうすればいいですか?
~/.asoundrc
オプションが提供される場所は私のものです。スレーブPCMの無効なタイプ 'multi':
# thx
# http://wiki.ubuntuusers.de/.asoundrc
# http://alsa.opensrc.org/Dmix
# http://forums.linuxmint.com/viewtopic.php?f=196&t=94877
pcm.snd_card {
type hw
card 1
device 0
}
# allows multiple programs to output sound simultanously ("software mixing")
pcm.dmixer {
type dmix
ipc_key 1024
ipc_perm 0666 # allow other users
slave.pcm "out"
slave {
period_time 0
period_size 1024
buffer_size 4096
### if having problems
# rate 44100
### some sound cards need the exact data format
# format S32_LE
### Available formats: S8 U8 S16_LE S16_BE U16_LE U16_BE S24_LE S24_BE
### U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE
### FLOAT_LE FLOAT_BE FLOAT64_LE FLOAT64_BE
### IEC958_SUBFRAME_LE IEC958_SUBFRAME_BE MU_LAW
### A_LAW IMA_ADPCM MPEG GSM
channels 2 # must match bindings
}
bindings {
0 0
1 1
}
}
# allows multiple programs to capture simultaneously
pcm.dsnooper {
type dsnoop
ipc_key 2048
ipc_perm 0666
slave.pcm "snd_card"
slave
{
period_time 0
period_size 1024
buffer_size 4096
channels 2
}
bindings {
0 0
1 1
}
}
pcm.!default {
type asym
playback.pcm "dmixer"
capture.pcm "dsnooper"
}
pcm.out {
type plug
slave.pcm {
type multi
slaves {
a { channels 2 pcm "snd_card" }
b { channels 2 pcm "hw:Loopback,0,0" }
}
bindings {
0 { slave a channel 0 }
1 { slave a channel 1 }
2 { slave b channel 0 }
3 { slave b channel 1 }
}
}
ttable [
[ 1 0 1 0 ] # left -> a.left, b.left
[ 0 1 0 1 ] # right -> a.right, b.right
]
}
# In case I ever want to use PulseAudio, for bluetooth speakers or such.
#pcm.!default {
# type pulse
#}
#ctl.!default {
# type pulse
#}
答え1
各出力デバイスには独自のデバイスが必要であることがわかりましたdmix
。
[!default] → multi → dmix → hw [normal]
↳ dmix → hw [loopback]
ループバックとループバックの間に1秒を逃したdmix
ので、通常のカードは問題ありませんでしたが、ループバックカードは混在しませんでした。multi
hw
非常にありがとうCL忍耐と専門知識。
技術的な詳細は次のとおりです~/.asoundrc
。
pcm.snd_card { # my usual sound card
type hw
card 2
}
ctl.!default { # default control; alsamixer and such will use this
type hw
card 2
}
# software mixer for sound card
pcm.dmixer {
type dmix
ipc_key 1024
ipc_perm 0666 # allow other users
slave.pcm "snd_card"
slave {
period_time 0
period_size 1024
buffer_size 4096
channels 2 # must match bindings
}
bindings {
0 0
1 1
}
}
# software mixer for loopback device
pcm.dmixerloop {
type dmix
ipc_key 2048
ipc_perm 0666 # allow other users
slave.pcm "hw:Loopback,0,0"
slave {
period_time 0
period_size 1024
buffer_size 4096
channels 2 # must match bindings
}
bindings {
0 0
1 1
}
}
# allows multiple programs to capture simultaneously
pcm.dsnooper {
type dsnoop
ipc_key 2048
ipc_perm 0666
slave.pcm "snd_card"
slave
{
period_time 0
period_size 1024
buffer_size 4096
channels 2
}
bindings {
0 0
1 1
}
}
pcm.!default {
type asym
playback.pcm "out"
capture.pcm "dsnooper"
}
# Multi, splitting onto usual card and loopback
pcm.out {
type plug
slave.pcm {
type multi
slaves {
a { channels 2 pcm "dmixer" }
b { channels 2 pcm "dmixerloop" }
}
bindings {
0 { slave a channel 0 }
1 { slave a channel 1 }
2 { slave b channel 0 }
3 { slave b channel 1 }
}
}
ttable [
[ 1 0 1 0 ] # left -> a.left, b.left
[ 0 1 0 1 ] # right -> a.right, b.right
]
}