Программное микширование в Linux. asoundrc.

Через ALSA
 
+
-
edit
 

Balancer

администратор
★★★★★
ALSA asoundrc Linux Skype Surround
Наконец, когда вчера у меня в системе появился уже третий звуковой девайс (звуковуха на материнке, на видеокарте и на USB-скайп-мыше), я понял, что система окончательно запуталась в том, что куда выводить. Кроме того, решил разобраться с уже доставшим глюком Skype, когда при наличии на звуковухе дефолтовой оцифровке в 48кГц у него сносит башню и твой голос становится похожим на пропущенный через скрэмблер. Погуглил, поковырялся и... о чудо! Всего минут за 30 экспериментов и тестов:
— Получил полное аппаратное неблокирующее смешение разнокалиберных звуковых источников (от моно до surround 5.1)
— Задействовал лишнюю пару дырок от 7.1 для подключения наушников, пустив туда фронтальную стерео-пару
— Естественно, прозрачное разведение 2.0 в 5.1 для качественного прослушивания музыки, чтобы задействовать сабвуфер и создать псевдообъём.
— Сделал неблокирующийся аналоговый микрофон, разделяемый между любыми девайсами одновременно. Ну и с исправлением Скайп-бага.

Помню, СКОЛЬКО я с этими вопросами в своё время мучился в Windows... Частично они, конечно, решались, но редкостным и мало где работающим шаманством. И только частично. А тут — прямо приятно посмотреть и послушать :D Если кому-то интересно, могу попозже поделиться получившимся .asoundrc (сейчас машину с ним уже вырубил). Воистину, на Linux'е можно творить чудеса, если поймёшь, где крутить :)

// Транслировано с juick.com
 

  • Balancer [01.11.2010 12:36]: Тема создана из Gentoo Linux
+
-
edit
 

Balancer

администратор
★★★★★
Linux звук ALSA asoundrc skype микширование
Вот, обещанный .asoundrc:

code text
  1. pcm.!default {
  2.      type plug
  3.      slave.pcm "stereo20"
  4. }
  5.  
  6. pcm.!stereo20 {
  7.     type asym
  8.     playback.pcm "upmix2to6"
  9.     capture.pcm "dsnooped"
  10. }
  11.  
  12. pcm.!skype {
  13.     type asym
  14.     playback.pcm "upmix2to6"
  15.     capture.pcm "skype_dsnoop"
  16. }
  17.  
  18. pcm.!surround51 {
  19.     type asym
  20.     playback.pcm "swmixer"
  21.     capture.pcm "hw:1,0"
  22. }
  23.  
  24. pcm.snd_card {
  25.     type plug
  26.     slave.pcm "swmixer"
  27. }
  28.  
  29. pcm.upmix2to6 {
  30.     type route
  31.     slave.pcm "snd_card"
  32.     slave.channels 6
  33.  
  34.     ttable.0.0 1    # left to left
  35.     ttable.0.2 0.5  # left to back left
  36.     ttable.0.4 0    # left to center
  37.  
  38.     ttable.1.1 1    # right to right
  39.     ttable.1.3 0.5  # right to back right
  40.     ttable.1.4 0    # right ti center
  41.  
  42.     ttable.0.5 0.15 # left to SW
  43.     ttable.1.5 0.15 # right to SW
  44. }
  45.  
  46. pcm.swmixer {
  47.     type dmix
  48.     ipc_key 1234
  49.     slave {
  50.         pcm "hw:1,0"
  51.         channels 6
  52.         period_time 0
  53.         period_size 1024
  54.         buffer_size 4096
  55.         rate 48000
  56.     }
  57. }
  58.  
  59. # software mixing of capture information (needed for new skype)
  60. pcm.dsnooped {
  61.   ipc_key 1026
  62.   type dsnoop
  63.   slave {
  64.     pcm "hw:1,0"# HW ID HERE
  65.   }
  66. }
  67.  
  68. # For Skype (asym duplexes half-duplex plugins like dsnoop and dmix into a full-duplex device)
  69. pcm.duplex {
  70.     type asym
  71.     playback.pcm "upmix2to6"
  72.     capture.pcm "dsnooped"
  73. }
  74.  
  75. # aoss emulation
  76. # http://forum.skype.com/index.php?showtopic=525851&st=20
  77. pcm.skype {
  78.   type plug
  79.   slave.pcm "duplex"
  80. }


  • Основная карта у меня имеет hw id = 1,0.
  • Скайп работает через устройство "skype". И на вывод и на ввод.
  • Вывод стерео идёт через stereo20, и оно же - по умолчанию
  • Surround - через surround51
  • VLC в настройках он не хочет понимать конкретные девайсы кроме аппаратных. Приходится ручками править ~/.config/vlc/vlcrc: alsa-audio-device=snd_card.
  • С smplayer сейчас на память не помню, что ему прописывал. Дома посмотрю.


Ну а фильмы я обычно смотрю через mplayer через такой скрипт:
/usr/local/bin/mpl
code bash
  1. #!/bin/bash
  2.  
  3. AUDIO_CH=$(mediainfo "$1"|grep 'Channel(s)'|grep -v Front|sort -r|head -n1|sed -r 's/^.*: (\w)+.*/\1/') #'
  4. if [[ "$AUDIO_CH" == "" ]]; then
  5. AUDIO_CH=$(avinfo "$1"|grep audio|sort -r|head -n1|sed -r 's/^.*KHz//'|cut -d' ' -f 4)
  6. fi
  7. echo AUDIO_CH=$AUDIO_CH
  8.  
  9. FLAGS="-vsync -double"
  10.  
  11. if [ -e VIDEO_TS ]; then
  12.     FLAGS="$FLAGS -dvd-device $(pwd)"
  13.     WIDTH="768"
  14. else
  15.     WIDTH=$(mplayer "$1" -vo null -ao null -frames 0|grep VIDEO:|cut -d' ' -f5|cut -d'x' -f1)
  16.     echo WIDTH=${WIDTH}
  17.  
  18.     if [ "${WIDTH}." == "." ]; then echo "Can't get width"; exit; fi
  19. fi
  20.  
  21. case "${AUDIO_CH}" in
  22.     6) FLAGS="${FLAGS} -channels 6 -ao alsa:device=surround51";;
  23.     Stereo) FLAGS="${FLAGS} -channels 2 -ao alsa:device=stereo20";;
  24.     Mono) FLAGS="${FLAGS} -channels 2 -ao alsa:device=mono10";;
  25.     *) FLAGS="${FLAGS} -channels 2 -ao alsa:device=stereo20";;
  26. esac
  27.  
  28. if [[ ($(basename "$1" .mov) == "$1.mov") || ($(basename "$1" .MOV) == "$1.MOV") ]]
  29. then
  30.     FLAGS="${FLAGS} -demuxer mov"
  31. fi
  32.  
  33. if [[ $WIDTH -lt 720 ]]; then
  34.     FLAGS="$FLAGS -vf pp=lb -autoq 100"
  35. fi
  36.  
  37. if [ "$WIDTH" -ge 1280 ]; then
  38.     FLAGS="$FLAGS -cache 2000 -vfm ffmpeg -lavdopts fast=1:skiploopfilter=all:threads=5 -cache-min 1 -cache-seek-min 1 -vc ffwmv3vdpau,ffvc1vdpau,ffh264vdpau,ffmpeg12vdpau"
  39. fi
  40.  
  41. if [[ $(xvinfo | grep 'X-Video Extension version'|wc -l) == 0 ]]; then
  42.     FLAGS="$FLAGS -vo x11"
  43. fi
  44.  
  45. echo ===============================================================================
  46. echo mplayer $FLAGS "$1" $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12}
  47. echo -------------------------------------------------------------------------------
  48.  
  49. export DISPLAY=:0.0
  50. mplayer $FLAGS "$1" $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12}
 3.6.123.6.12
+
-
edit
 

Balancer

администратор
★★★★★
Сейчас вид у конфига такой:
code text
  1. pcm.!default {
  2.      type plug
  3.      slave.pcm "stereo20"
  4. }
  5.  
  6. pcm.!stereo20 {
  7.         type asym
  8.         playback.pcm "upmix2to6"
  9.         capture.pcm "dsnooped"
  10. }
  11.  
  12. pcm.!skype {
  13.         type asym
  14.         playback.pcm "upmix2to6"
  15.         capture.pcm "skype_dsnoop"
  16. }
  17.  
  18. pcm.!surround51 {
  19.         type asym
  20.         playback.pcm "swmixer"
  21.         capture.pcm "intel_card"
  22. }
  23.  
  24. pcm.snd_card {
  25.         type plug
  26.     slave.pcm "swmixer"
  27. }
  28.  
  29. pcm.upmix2to6 {
  30.         type route
  31.         slave.pcm "snd_card"
  32.         slave.channels 6
  33.  
  34. #ttable.from.to weight
  35.  
  36.         ttable.0.0 1    # left to left
  37.         ttable.0.2 0.5  # left to back left
  38.         ttable.0.4 0    # left to center
  39.  
  40.         ttable.1.1 1    # right to right
  41.         ttable.1.3 0.5  # right to back right
  42.         ttable.1.4 0    # right ti center
  43.  
  44.         ttable.0.5 0.15 # left to SW
  45.         ttable.1.5 0.15 # right to SW
  46. }
  47.  
  48. pcm.intel_card {
  49.         type hw
  50.         card "Intel"
  51.         device 0
  52. }
  53.  
  54. pcm.card_usb {
  55.         type hw
  56.         card "default"
  57.         device 0
  58. }
  59.  
  60. pcm.swmixer {
  61.         type dmix
  62.         ipc_key 1234
  63.         slave {
  64.                 pcm "intel_card"
  65.                 channels 6
  66.                 period_time 0
  67.                 period_size 1024
  68.                 buffer_size 4096
  69.                 rate 48000
  70.         }
  71. }
  72.  
  73. # software mixing of capture information (needed for new skype)
  74. pcm.dsnooped {
  75.   ipc_key 1026
  76.   type dsnoop
  77.   slave {
  78.         pcm "intel_card"
  79.   }
  80. }
  81.  
  82. # For Skype (asym duplexes half-duplex plugins like dsnoop and dmix into a full-duplex device)
  83. pcm.duplex {
  84.         type asym
  85.         playback.pcm "upmix2to6"
  86.         capture.pcm "dsnooped"
  87. }
  88.  
  89. # aoss emulation
  90. # http://forum.skype.com/index.php?showtopic=525851&st=20
  91. pcm.skype {
  92.   type plug
  93.   slave.pcm "duplex"
  94. }


Поменял жёсткую привязку хардверных ID на имена карт. А то при втыкании USB-скайпо-мышки нумерация ID едет.
 3.6.123.6.12

Yars

новичок
Спасибо Вам большое за конфигурацию alsa! Не мог настроить звук в браузере firefox, магическим образом после ввода вашего .asoundrc с небольшими корректировками, браузер заиграл, видео youtube, видео, музыка vk. Вначале пробовал
code text
  1. pcm.!default {
  2.     type hw
  3.     card 1
  4.     device 9
  5. }

(вывожу звук через hdmi на видеокарте nvidia к ресиверу) speaker-test завелся, браузер молчал. С вашим конфигом все работает отлично. Для меня так и осталось непонятным, почему моя простая подмена pcm.default не стала работать. В любом случае спасибо и удачи! :-) благодаря вам стал лучше понимать синтаксис alsa.
 51.051.0
Последние действия над темой

в начало страницы | новое
 
1945: День победы! (72 года).
Поиск
Поддержка
Поддержи форум!
ЯндексЯндекс. ДеньгиХочу такую же кнопку
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru