alsaとの最初の構成戦争以来(CL)確認するこの問題...
今私はさらに一歩進みたいです。
私の設定ではマルチチャンネルサウンドを再生できますが、今は同時に再生する必要があります!
dmixを使用すると役に立つことがわかりましたが、正しいasound.confファイルを設定するのにまだ問題があります。以下は、私が試したさまざまなソリューションとその結果です。
初期(複数のチャネルを使用しているが同時に使用しない)asound.conf:
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm "surround40:CA0106"
}
capture.pcm {
type plug
slave.pcm "hw:CA0106"
}
}
初期(同時再生ですがマルチチャンネルではない、ここでは2チャンネルのみ)asound.conf:
pcm.dmixed {
type dmix
ipc_key 1024
ipc_key_add_uid 0
slave.pcm "hw:CA0106"
}
pcm.duplex {
type asym
playback.pcm "dmixed"
}
# Instruct ALSA to use pcm.duplex as the default device
pcm.!default {
type plug
slave.pcm "duplex"
}
上記の設定に関する注意事項 このasound.confを使用すると、同時に2つのサウンドを再生できますが、2つのチャンネルでのみ再生でき、マルチチャンネル機能が失われます。
また、最初のasound.conf(上記の最初の抜粋)で機能していた一部のサウンドは、このasound.confでは機能しなくなりました。失敗メッセージです:
[root@server Sons]# aplay -N Apparition.wav
Playing WAVE 'Apparition.wav' : Signed 32 bit Little Endian, Rate 22050 Hz, Channels 4
aplay: set_params:1015: Unable to install hw params:
ACCESS: RW_INTERLEAVED
FORMAT: S32_LE
SUBFORMAT: STD
SAMPLE_BITS: 32
FRAME_BITS: 128
CHANNELS: 4
RATE: NONE
PERIOD_TIME: 125000
PERIOD_SIZE: NONE
PERIOD_BYTES: (44096 44112)
PERIODS: (1 2)
BUFFER_TIME: (249977 249978)
BUFFER_SIZE: 5512
BUFFER_BYTES: 88192
TICK_TIME: 0
有効なサウンドの例は次のとおりです。
[root@server Sons]# aplay -vN Disparition.wav
Playing WAVE 'Disparition.wav' : Signed 32 bit Little Endian, Rate 22254 Hz, Channels 4
Plug PCM: Route conversion PCM (sformat=S32_LE)
Transformation table:
0 <- 0
1 <- 1
Its setup is:
stream : PLAYBACK
access : RW_INTERLEAVED
format : S32_LE
subformat : STD
channels : 4
rate : 22254
exact rate : 22254 (22254/1)
msbits : 32
buffer_size : 5563
period_size : 2781
period_time : 125000
tstamp_mode : NONE
period_step : 1
avail_min : 2781
period_event : 0
start_threshold : 5563
stop_threshold : 5563
silence_threshold: 0
silence_size : 0
boundary : 729153536
Slave: Rate conversion PCM (48000, sformat=S16_LE)
Its setup is:
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : S32_LE
subformat : STD
channels : 2
rate : 22254
exact rate : 22254 (22254/1)
msbits : 32
buffer_size : 5563
period_size : 2781
period_time : 125000
tstamp_mode : NONE
period_step : 1
avail_min : 2781
period_event : 0
start_threshold : 5563
stop_threshold : 5563
silence_threshold: 0
silence_size : 0
boundary : 729153536
Slave: Direct Stream Mixing PCM
Its setup is:
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 16
buffer_size : 12000
period_size : 6000
period_time : 125000
tstamp_mode : NONE
period_step : 1
avail_min : 6000
period_event : 0
start_threshold : 12000
stop_threshold : 12000
silence_threshold: 0
silence_size : 0
boundary : 1572864000
Hardware PCM card 0 'CA0106' device 0 subdevice 0
Its setup is:
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 16
buffer_size : 12000
period_size : 6000
period_time : 125000
tstamp_mode : ENABLE
period_step : 1
avail_min : 6000
period_event : 0
start_threshold : 1
stop_threshold : 1572864000
silence_threshold: 0
silence_size : 1572864000
boundary : 1572864000
「-N」オプションを使用して、非常に短いサウンドを順番にすばやく再生しますが、この動作を削除することはできません。
簡単に言うと、マルチチャンネル容量を維持しながら、同時に2つの異なるサウンドを再生できるasound.confファイルを探しています。
2つのサウンドの1つはフロントスピーカー2つ、もう1つはリアスピーカー2つ、どちらも4つのチャンネルで構成されています。
私が少し理解したところでは、まず「カスタムデバイス」(プラグタイプまたは他のタイプ?)を指定してから、変更しようとするときに「混合」する必要があります。Slave.pcmハードウェアアドレス内部に -PCM.dmixedただし、これによりブロックが正しいタイプではないというエラーが発生します(または同様のもの、必要に応じて正確なメッセージを提供できます...)。
hw:CA0106
到着
surround40:CA0106
この問題を解決するのに役立つ情報とアイデアを歓迎します。
アップデート_1: CL.の提案に従って、次のようにasound.confを作成しました。
pcm.dmixed {
type dmix
ipc_key 1024
ipc_key_add_uid 0
slave {
pcm "hw:0,0"
channels 4
}
}
pcm.dmixed2 {
type dmix
ipc_key 1025
ipc_key_add_uid 0
slave {
pcm "hw:0,1"
channels 4
}
}
pcm.quad {
type multi
slave.pcm "dmixed"
slave.pcm "dmixed2"
}
# Instruct ALSA to use pcm.quad as the default device
pcm.!default {
type plug
slave.pcm "quad"
}
しかし、まだ動作しません。次のエラーで失敗します。
ALSA lib pcm_multi.c:1042:(_snd_pcm_multi_open) Unknown field slave
スレーブ定義が欠けているようですが、どこにあるのかわかりません...
アップデート_2: CLのおかげで、これは私の最新の「ほぼ」作業ファイルです。まだサウンドを再生する2つの部分があります(詳細については説明を参照)、何もないよりも優れています。
pcm.!default { # The "!" is used to overwrite an existing definition (pcm.default in this case ...)
type asym
playback.pcm {
type plug # plug is the "automatic conversion" plugin : convert data rate, channel and format on demand
slave.pcm "quad"
}
}
pcm.dmix_front { # Define the front speakers device : hw:0,0
type dmix
ipc_key 12345
ipc_key_add_uid 0
slave.pcm "hw:0,0"
}
pcm.dmix_rear { # Define the rear speakers device : hw:0,1
type dmix
ipc_key 67890
ipc_key_add_uid 0
slave.pcm "hw:0,1"
}
pcm.quad {
type multi
slaves {
a { pcm dmix_front channels 2 }
b { pcm dmix_rear channels 2 }
}
bindings [
{ slave a channel 0 }
{ slave a channel 1 }
{ slave b channel 0 }
{ slave b channel 1 }
]
}
最終的に私のアプリケーションでプラグ:dmix_frontとプラグ:dmix_frontを使用するようになりました。
ありがとう、CL。ご支援と忍耐に感謝します。
答え1
~によると文書、次のように動作する必要があります。
pcm.dmix_front {
type dmix
ipc_key 12345
ipc_key_add_uid 0
slave.pcm "hw:0,0"
}
pcm.dmix_rear {
type dmix
ipc_key 67890
ipc_key_add_uid 0
slave.pcm "hw:0,1"
}
pcm.quad {
type multi
slaves {
a { pcm dmix_front channels 2 }
b { pcm dmix_rear channels 2 }
}
bindings [
{ slave a channel 0 }
{ slave a channel 1 }
{ slave b channel 0 }
{ slave b channel 1 }
]
}