if [ $( $2 or 0 ) xor $( $4 or 0 ) ]; then echo true; else echo false; fi
Объяснение:
На основе логической таблицы, которая является операцией XOR, поэтому используются $ 2
и $ 4
(второй и четвертый аргументы содержат данные, необходимые для выполнения этой операции)
, конечно, это не учитывает, когда кто-то переключает -a
и -b
.
Вот один из способов сделать это из ~ /.asoundrc ; Пример показывает встроенную карту и карту Soundblaster Live, объединенную в PCM по умолчанию.
# duplicate audio to both devices
pcm.!default plug:both
ctl.!default {
type hw
card SB
}
pcm.both {
type route;
slave.pcm {
type multi;
slaves.a.pcm "sblive";
slaves.b.pcm "onboard";
slaves.a.channels 2;
slaves.b.channels 4;
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;
bindings.4.slave b;
bindings.4.channel 2;
bindings.5.slave b;
bindings.5.channel 3;
}
ttable.0.0 1;
ttable.1.1 1;
ttable.0.2 1; # front left
ttable.1.3 1; # front right
ttable.0.4 1; # copy front left to rear left
ttable.1.5 1; # copy front right to rear right
}
ctl.both {
type hw;
card Live;
}
pcm.onboard {
type dmix
ipc_key 1024
slave {
pcm "hw:0,1"
period_time 0
period_size 2048
buffer_size 65536
buffer_time 0
periods 128
rate 48000
channels 4
}
bindings {
0 0
1 1
2 2
3 3
}
}
pcm.sblive {
type dmix
ipc_key 2048
slave {
pcm "hw:1,0"
period_time 0
period_size 2048
buffer_size 65536
buffer_time 0
periods 128
rate 48000
channels 2
}
bindings {
0 0
1 1
}
}
ctl.onboard {
type hw
card "SB"
}
ctl.sblive {
type hw
card "Live"
}
( Источник )
Вы хотите использовать мульти
-плагин.
Существует несколько хорошо задокументированных примеров его использования:
От людей, использующих alsa: https://alsa.opensrc.org/TwoCardsAsOne
От кого-то с похожим вопросом здесь: https: //unix.stackexchange.com/a/194631/127903