LINUX.ORG.RU

Настройка аудио 5.1 в Linux

 , , , ,


2

2

С помощью speaker-test установил, что сейчас у меня обычное стерео, которое распределяется так:

1. FrontLeft - идет на FrontLeft, Center и RearLeft.

2. FronRight - идет на FrontRigh, LFE и RearRight.

$aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
default:CARD=SB
    HDA ATI SB, ALC889 Analog
    Default Audio Device
sysdefault:CARD=SB
    HDA ATI SB, ALC889 Analog
    Default Audio Device
front:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    Front speakers
surround40:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    4.0 Surround output to Front and Rear speakers
surround41:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Digital
    IEC958 (S/PDIF) Digital Audio Output
$lspci
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA) (rev 40)
        Subsystem: Gigabyte Technology Co., Ltd Device a002
        Kernel driver in use: snd_hda_intel

Изъезженная тема, много гуглил, но есть ряд вопросов:

1. Как правильно распределять стерео на 5.1? Чтобы и сабвуфер задействовать для обоих каналов, а не только для FrontRight.

2. Как при этом корректно воспроизводить 5.1 (в фильмах, например), чтобы из-за предыдущего пункта в сабвуфер не подмешивались звуки из FR и FL? Т.е., чтобы был полноценный 5.1?

pactl? можно еще jack-ом, там наверняка будет.

reprimand ★★★★★
()

У меня звушка сама стерео раскидывает. А кинцо:

mplayer -channels <number>

erfea ★★★★★
()
Ответ на: комментарий от Chaser_Andrey

чтобы настроить это на альзе, надо поставить десяток плагинов и повертеть их, и в итоге получится та же пульса только вид с боку.Я тоже не сразу пришёл к тому, что пульса всё же нужна. Но мне надоело настраивать альзу для каждого случая.В итоге сейчас пульса+ 3 прагина к ней и всё, не какого секса, чтобы отключить шум достаточно вырубить системные звуки ....

erzent ☆☆
()
Ответ на: комментарий от erzent

не надо никаких плагинов.
ТС, ищи решение от KRoN73

megabaks ★★★★
()
Ответ на: комментарий от Chaser_Andrey

конечно нинужна, вы, главное, пилите, Шура, пилите, не отвлекайтесь

anonymous
()
Ответ на: комментарий от tyakos

Ну ты как знаешь, заставлять никто не будет, но ты хоть пробовал-то её?

Я, вот, не осилил. То, что в alsa делается одной левой (как по ссылке выше) в pulse требует таких изысканий, что я не разобрался. Готовым рецептом тоже никто не поделился.

KRoN73 ★★★★★
()
Ответ на: комментарий от darkenshvein

Спасибо, не знал. Но это рецепт только для smplayer, хотя и пригодится для тестов.

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Наконец добрался до настройки. Я кое-что поменял, кое-что выбросил. Появилось пару вопросов.

Текущий конфиг ~/.asoundrc

# по-умолчанию выводим звук через "stereo20"
pcm.!default {
    # Тип "plug" для автоматического ресемплирования
    type plug
    slave.pcm "stereo20"
}
     
#сообщаем, что настройка вывода 2-канального звука будет называться stereo20
pcm.!stereo20 {
     # asym is an ALSA PCM plugin that combines half-duplex PCM plugins like dsnoop and dmix into one full-duplex device.
    type asym
    playback.pcm "upmix2to6"
    capture.pcm "sb_card"
}
     
pcm.!surround51 {
    type asym
    playback.pcm "swmixer"
    capture.pcm "sb_card"
}
    
pcm.upmix2to6 {
    type route
    slave.pcm "swmixer"
    slave.channels 6

   #ttable.from.to weight     
    ttable.0.0 1    # FrontLeft[0] to FrontLeft[0] - 100% volume
    ttable.0.2 0.5  # FrontLeft[0] to RearLeft[2] - 50% volume
     
    ttable.1.1 1    # FrontRight[1] to FrontRight[1] - 100% volume
    ttable.1.3 0.5 # FrontRight[1] to RearRight[3] - 50% volume
}

pcm.sb_card {
    type hw
    card "SB"
    device 0
}
     
pcm.swmixer {
    type dmix
    ipc_key 1234
    slave {
        pcm "sb_card"
        channels 6
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 48000
    }
}

1. Чем ты руководствовался при выборе параметров period_time, period_size, buffer_size, rate в pcm.swmixer?

2. Зачем тебе понадобился pcm.snd_card, если его можно выбросить и напрямую указывать swmixer?

3. С вышеуказанным конфигом вываливается speaker-test, хотя в других приложениях всё нормально работает. У тебя работает speaker-test? При speaker-test -c 6 -D «surround51» всё нормально, а при попытке вывести через default она крашится.

$speaker-test -c 2

speaker-test 1.0.27.1

Playback device is default
Stream parameters are 48000Hz, S16_LE, 2 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 2048 to 4096
Period size range from 1024 to 1024
Using max buffer size 4096
Periods = 4
was set period_size = 1024
was set buffer_size = 4096
*** Error in `speaker-test': free(): invalid next size (fast): 0x00007f7e3245b7b0 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x861de)[0x7f7e303fc1de]
/lib64/libc.so.6(+0x86f68)[0x7f7e303fcf68]
/usr/lib64/libasound.so.2(+0x7c79a)[0x7f7e309d479a]
speaker-test(main+0x1189)[0x7f7e31196aa9]
/lib64/libc.so.6(__libc_start_main+0x11b)[0x7f7e3039afdb]
speaker-test(+0x3d55)[0x7f7e31196d55]

// дальше идет длинный  отладочный Memory map

4. Ты писал, что

— Задействовал лишнюю пару дырок от 7.1 для подключения наушников, пустив туда фронтальную стерео-пару

Но в конфиге я этого не нашел. Я пробовал сделать так (правильно?)

@@ -24,7 +24,7 @@
     type route
     #slave.pcm "snd_card"
     slave.pcm "swmixer"
-    slave.channels 6
+    slave.channels 8
 #     
 #    #ttable.from.to weight
 #     
@@ -41,9 +41,9 @@
     ttable.0.5 0.5 #  FrontLeft[0] to subwoofer[5] - 50% volume
     ttable.1.5 0.5 # FrontRight[1] to subwoofer[5] - 50% volume

+    # stereo to headphones
+    ttable.0.6 1
+    ttable.1.7 1
 }
      
 pcm.sb_card {
@@ -58,7 +58,7 @@
     ipc_key 1234
     slave {
          pcm "sb_card"
-         channels 6
+         channels 8
         period_time 0
         period_size 1024
         buffer_size 4096

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

5. Зачем роутить Left и Right на Center с нулевой громкостью?

ttable.0.4 0    # left to center
ttable.1.4 0    # right ti center

Ведь можно это выкинуть, и звук и так не будет идти на center.

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от Chaser_Andrey

Появилось пару вопросов.

Увы, сейчас ответить не могу :-/ Я в настоящее время звук 5.1 не использую, система совсем другая. А по памяти не помню.

Зачем роутить Left и Right на Center с нулевой громкостью?

Насколько я помню, в некоторых случаях пускал немного звука на центр, чтобы точнее центрировать его (колонки немного несимметрично стояли), в смысле, чтобы стоящий спереди источник прямо «из монитора» говорил. С параметрами играл периодически, так и остались, видно.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Хех, и на этом спасибо, я наконец-то смог нормально настроить многоканальную алсу, более того, я на примере этого конфига вообще начал разбираться, как происходит настройка микширования, роутинг, и прочее.

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от funeralismatic

Выше я написал про свой конфиг, на базе конфига KRoN73. Удалось настроить?

Chaser_Andrey ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.