Linux Skype звук — Комутування звуку в Linux

2012.02.25

Для ведення прямих ефірів з Linux треба вміти віддавати в ефір (і співрозмовнику) свій голос і додаткові звукові потоки: джингли, музику, звук від відеороликів і що ще прийде в голову. Операційні системи зазвичай вміють все це змішувати і видавати результат звуковий карті, щоб його було чутно через колонки або навушники, а от передавати звукові потоки від однієї програми до іншої або до декількох — не вміють.

  • Список пакунків Debian: jackd2 jack-tools pulseaudio-module-jack.
  • Для автоматичного налаштування JACK, PulseAudio і маршрутизації і відновлення вихідної конфігурації в кінці сеансу можна використовувати скрипт jack_pulse_bridge, який автоматизує всі описані в статті процеси.

Більшість сучасних дистрибутивів Linux використовують в якості основної звукової підсистеми PulseAudio. Це звуковий сервер, за допомогою якої програми, не замислюючись, можуть використовувати будь-яку доступну локально звукову карту або мікрофон, і навіть використовувати аналогічні ресурси інших комп’ютерів, доступні по мережі. Програми просто використовують вхідний потік і віщають у вихідний, не вникаючи в деталі роботи з кожним типом пристрою, а PulseAudio на ходу підсовує їм зовнішню звукову карту, підключену через USB, програми цього навіть не помічають. Це зручно, раніше все було набагато складніше.

Схема поширення звуку при використанні PulseAudio виглядає так:

Більш детальна схема є у Вікіпедії. Головна проблема в тому, що при мовленні потрібно відправляти джингли і музику не тільки в навушники, але ще й співрозмовнику в Skype. PulseAudio цього поки не вміє, зате це вміє JACK — сервер звуку, який працює тільки з однією звуковою картою, зате він вміє перенаправляти потоки з одного додатка в інше, в будь-яких комбінаціях і кількостях. З допомогою JACK можна створити таку схему маршрутизації звуку:

Тобто звук з мікрофона повинен йти в Skype, звук з Skype повинен йти в колонки, а звук з Flash (або будь-якого іншого програвача) повинен йти і Skype, і колонки. JACK це вміє, проте Skype не знає, що таке JACK. У мережі можна знайти багато рецептів рішення цієї проблеми, проте всі вони занадто інвазивні і ненадійні. Найпростіший і надійний спосіб — відправити PulseAudio в JACK, щоб схема вийшла приблизно такий:

Реалізується така схема в три прийоми: налаштовується JACK, налаштовується PulseAudio і настроюється маршрутизація.

JACK працює просто: це процес, який запускається при початку програвання звуку (ніякої не системний демон), а закривається, коли він нікому не потрібен. Є бібліотека, через яку програми його використовують, і ця бібліотека вміє сама запускати сервер, якщо він ще не запущений вручну, використовуючи параметри, описані у файлі ~/.jackdrc. У мене цей файл виглядає так:

Значення для параметра -dhw зазвичай «Intel», «USB», «PCH» або «default» (їх можна дізнатися з виводу команди aplay -l). Можна змінити частоту дискретизації, якщо звукова карта воліє 48000Гц, більше нічого міняти зазвичай не треба.

Налаштування PulseAudio зберігаються у файлі ~/.pulse/default.pa. Щоб відправити звук JACK, файл може виглядати приблизно так:

Перші два рядки включають драйвер jack, інші включають внутрішні протоколи PulseAudio, не відносяться до звукових пристроїв. Після цього можна перезапустити PulseAudio командою pulseaudio -k (всі запущені додатки, що використовують звук, зависнуть). Сервер перезавантажити і сам запустить jackd, в чому можна пересвідчитись командою:

Щоб переконатися, що все працює, можна програти тестовий звук (або здійснити тестовий дзвінок) в Skype. Звук повинен успішно надходити з мікрофона та виходити в колонки або навушники. Музичний програвач, який буде запускати музику і джингли (я рекомендую mplayer або moc), теж повинен працювати, але звук в Skype йти поки не має — піде після налаштування маршрутизації.

Для того, щоб знову повернути PulseAudio повний контроль над звуком, достатньо видалити або перейменувати файл ~/.pulse/default.pa і перезапустити сервер командою pulseaudio -k.

Маршрутизацією звуку займається утиліта jack.plumbing, яка читає налаштування файлу ~/.jack.plumbing. Кожен рядок цього файлу описує зв’язку джерела і одержувача одного каналу звуку. Утиліта займається відстеженням клієнтів і комутує їх виявлення. Наприклад, щоб відправити mplayer в Skype, потрібні такі правила:

Кількість правил зазвичай більше, можна подивитися в мої налаштування, що зв’язують PulseAudio, mplayer, moc, darkice і IDJC. Список активних на даний момент каналів можна подивитися командою jack_lsp, а маршрутизатор (jack.plumbing) потрібно запускати вручну.

Налаштування стороннього ПО

Щоб mplayer використовував драйвер jack, можна в командному рядку використовувати ключ -ao jack, а можна в файл ~/.mplayer/config додати список переваг:

Налаштування для moc зберігаються у файлі ~/.moc/config і виглядають так:

Після виконання всіх цих дій можна здійснити тестовий дзвінок через Skype (echo123), поговорити в мікрофон і програти музику. Все це повинно повернутися. Якщо щось не працює — пишіть.

Додатковий матеріал

  • Системи мовлення для Linux

Стежити за розвитком подій можна через RSS-стрічку або поштову розсилку.

Поділитися з друзями
Корисні поради - Вказівка