Настройка вещания под ОС Linux

З пляцоўкі Беларуская энцыклапедыя фальклору і інтэрнэту.
Перайсці да: рух, знайсці

Как выйти в эфир anon.fm из Linux

В силу необычайной гибкости и разноообразия софта в GNU/Linux, производить вещание можно самыми различными способами. В данной статье рассматриваются два из них:

  • полноценное интерактивное вещание из idjc
  • предоставление слушателям возможности наслаждаться вашим изысканным музыкальным вкусом через mpd


Интерактивное вещание через idjc

Это предпочитаемый способ вещания, позволяющий проигрывать любую музыку по усмотрению ведущего, подавать признаки интерактива голосом, принимать звонки по скайпу — в общем, делать все что делают на «большом радио». Вся эта красота настраивается и эксплуатируется на порядки проще, чем аналогичные windows-схемы с ворованным софтом, репитерами и отваливающимися виртуальными кабелями.

Установка

Для реализации этой чудесной схемы нам понадобится:

  • jack-audio-server — нужен для управления и перенаправления аудиопотоков. Прост в установке и использовании.
  • alsa-plugins, конкретно говоря, нас интересует libasound_module_pcm_jack.so — эта штуковина поможет завернуть скайп в idjc; самая сложная часть, поскольку требует умения патчить и собирать из исходников.
  • idjc — сама вещательная станция

Установка jack-audio-server

Настоятельно рекомендую не выпендриваться и ставить версию из дистрибутива. На момент написания статьи автор успешно использует 0.118.0, но в вашем дистрибутиве может найтись и что-то поновее. Итак, как называются эти пакеты:

Ubuntu, Debian

apt-get install jackd

Gentoo

emerge media-sound/jack-audio-connection-kit

Установка jack alsa plugin

Поскольку данный плагин написан прыщебыдлокодерами, которые не могут в eventfd, а само alsa pcm API является ахтунгом еще большим, чем паскалевские исходники Windows-1.0, версия из дистрибутива нам не подойдет, потому что с ней не будет работать интересующий нас софт: skype. Поэтому идем на http://www.alsa-project.org/ и качаем оттуда исходники alsa-plugins. Думаю, подойдет и самая свежая версия, но если будет облом с накладыванием патчей, то качаем ftp://ftp.alsa-project.org/pub/plugins/alsa-plugins-1.0.24.tar.bz2 и не выеживаемся. Далее накладываем патч http://anon.fm/alsa-plugins-jack-skype.diff, делаем

./configure --enable-jack --prefix=/usr && make && cp -L jack/.libs/libasound_module_pcm_jack.so /usr/lib/alsa-lib/

Опытный прыщепадаван наверняка заметил, что что вместо полного make install копируется только один плагин. Все верно. Остальные плагины лучше взять из репозитория — чем стандартнее схема, тем лучше.

Для ленивых рутовый однострочник:

cd /tmp && wget ftp://ftp.alsa-project.org/pub/plugins/alsa-plugins-1.0.24.tar.bz2 && tar xf alsa-plugins-1.0.24.tar.bz2 && cd alsa-plugins-1.0.24 && curl http://anon.fm/alsa-plugins-jack-skype.diff | patch -p1 && ./configure --enable-jack --prefix=/usr && make -C jack && cp -L jack/.libs/libasound_module_pcm_jack.so /usr/lib/alsa-lib/

Однако у любителей «паставить 64 бита, патамучта 21 век» могут возникнуть проблемы: скайп-то 32-битный и клал он с высокой колокольни на эти 64-битные потуги. Ставим 32-битные alsa-lib и jack (в Gentoo для этого достаточно сделать emerge app-emulation/emul-linux-x86-soundlibs), затем повторяем те же махинации:

cd /tmp 
wget -c  ftp://ftp.alsa-project.org/pub/plugins/alsa-plugins-1.0.24.tar.bz2 
tar xf alsa-plugins-1.0.24.tar.bz2 
cd alsa-plugins-1.0.24 
curl http://anon.fm/alsa-plugins-jack-skype.diff | patch -p1 
./configure --enable-jack --prefix=/usr 
make -C jack
# Здесь make завершается с ошибкой вроде
# x86_64-pc-linux-gnu-gcc -shared  .libs/pcm_jack.o  /usr/lib64/libjack.so -lpthread -lrt -lasound  -m32 -Wl,-soname -Wl,libasound_module_pcm_jack.so -o .libs/libasound_module_pcm_jack.so
# /usr/lib64/libjack.so: could not read symbols: File in wrong format
# Линкуем вручную
x86_64-pc-linux-gnu-gcc -shared  jack/.libs/pcm_jack.o  /usr/lib32/libjack.so -lpthread -lrt -lasound  -m32 -Wl,-soname -Wl,libasound_module_pcm_jack.so -o jack/.libs/libasound_module_pcm_jack.so
cp -L jack/.libs/libasound_module_pcm_jack.so /usr/lib32/alsa-lib/

Ура, вы подебили!

Установка idjc

Для начала попробуйте поискать в необъятных репозиториях родного дистрибутива:

Ubuntu/Debian

apt-cache search idjc

Gentoo — искать бесполезно, в стандартных репозиториях его нет, но устаревшая версия есть в оверлее pro-audio (man layman); для ленивых, как всегда, имеется готовый ebuild

Если вы пользуетесь отличным от упомянутых дистрибутивов Linux, или в Ubuntu еще не завезли idjc, тогда добро пожаловать в сборку ручками: http://idjc.sourceforge.net/install_build.html. Сущие пустяки после alsa-jack квеста!

В общем, счастливые пользователи Debian выполняют

apt-get install idjc

Не менее счастливые пользователи gentoo добавляют ebuild в свой локальный оверлей, делают ebuild digest, как положено, и затем наслаждаются бегущими строчками, порожденными командой

emerge idjc

Готово!

Вещание

Каждый раз для вещания придется запускать jackd:

jackd -d alsa

В случае ошибки будет соответствующая ругань и управление вернется в консоль. Если текст ошибки выглядит наподобии

JACK compiled with System V SHM support.
loading driver ..
creating alsa driver ... hw:0|hw:0|1024|2|48000|0|0|nomon|swmeter|-|32bit
control device hw:0
the playback device "hw:0" is already in use. Please stop the application using it and run JACK again
cannot load driver module alsa

Значит, что какое-то приложение использует звуковую карту. Отрубаем все браузеры-шмаузеры, проигрыватели и все, что потенциально может использовать звуковую подсистему и пробуем снова. Если после выключения всего, вы опять SOSNOOLEY, значит, скорее всего, вы счастливый последователь церкви им. пресвятого Поттеринга и на вас снизошло просветление под названием pulseaudio. Срочно покидайте эту секту дистрибутивоспецифичным образом и возвращайтесь в единственно истинную версию первородной ALSA.

Если же все прошло успешно, самое время запустить в соседней консоли богоподобный IDJC:

idjc

В этом месте ваш разум должен ох*ть от интуитивно понятного интерфейса, но не нужно пугаться, добрый дядька Метастаза сейчас объяснит, что тут к чему (скриншоты далее по тексту актуальны для idjc-0.8.7)

Основное окно программы

Idjc-main v2.png

  1. плейлист левой деки
  2. плейлист правой деки
  3. кнопка включения/выключения микрофона, чтобы кукарекать в эфир голосом
  4. входящий звонок — переговоры вне эфира
  5. входящий звонок — запустить в эфир (автоматически включает кнопку микрофона)
  6. меню настроек, к которому вернемся позже
  7. запустить в эфир канал для «фоновой музыки»
  8. эта кнопка контролирует слышымость деки в эфире (если она не нажата, что бы не происходило в этой деке, в эфир это транслироваться не будет)
  9. эта кнопка контролирует, слышимость этой деки в наушниках диджея — очень удобно для предпрослушивания треков: делаем эту кнопку ненажатой в эфирной деке, нажатой — в другой, и слушаем, что же за реквест нам прислали, а потом уже решаем, пускать ли эту композицию в эфир
  10. миксует деки в эфир. наиболее часто употребляется в крайних положениях, отправляя слушателю незамутненный звук из правого или левого плейлиста. Можно делать ручной кроссфейдинг с посощью мыши и этого ползунка, или автоматический через кнопку «↔» (Pass)
  11. что играется у диджея в наушниках — поток, миксуемый для радио (см п №8), или поток диджея

Не отмечена на рисунке очень важная кнопка справа от микрофона. Она делает следующее

  • если играет какой-либо трек, останавливает воспроизведение, включает микрофон и переключает активную деку на следующий трек
  • если активная дека остановлена, отключает микрофон и запускает выбранный трек на воспроизведение

Этой очень важной кнопкой я рекомендую пользоваться для врывания в эфир голосом: дожидаемся, когда текущая песня подойдет к концу, жмем на нее, говорим, снова жмем — вуаля, мы сказали что-то умное в перерывах между треками.

Также внимательный диджей наверняка заметил вертикальный ползунок громкости между деками. Если ты решишься кукарекать на фоне трека, дерни ползунок пониже, чтобы тебя было слышно, а потом не забуть выкрутить обратно на максимум!

Настройки выходного потока

Ну, гонять музычку для локалхоста это, безусловно, достижение, но чтобы запилиться в эфир, нужно сделать еще кое-что: зарегистрироваться в диджейке, выпросить персональный пароль для вещания и настроить idjc для вывода на наш icecast. Рассмотрим подробнее последнюю часть квеста. Как уже говорилось выше, при нажатии на кнопку №6 появляется меню, в котором есть мега-важный пункт Output. При первом запуске он выглядит как-то так:

Idjc-out-short.png

Вне нужное и интересное скрыто за надписями «Individual controls» и «Configuration». Смело жамкаем на них и получаем более развернутую картинку:

Idjc-out-full.png

Что мы здесь видим:

  1. чтобы выйти в эфир или закончить эфир, нужно нажать эту кнопку
  2. список серверов для трансляции потока — первоначально он будет пустым
  3. на эту кнопку надо будет жать в первую очередь, чтобы создадь запись для вещания на anon.fm
  4. если вы обосрались с настройками, или сменился пароль, маунт или адрес вещания, нужно будет воспользоваться этой кнопкой
  5. ежу понятно, что такое «Delete»

Итак, давим на «New» (или «Edit») и видим такое окошечко:

Idjc-conn-details.png

Ставим все как на картинке, подкорректировав имя маунта (пишем любой свободный) и пароля. Логин оставляем source, и снимаем галочку This server is to be scanned for audience figures. Давим ОК.

Готово! Теперь достаточно нажать первую кнопку из диалога Output — и ты звезда прямого эфира!

Также рекомендую посмотреть на вкладки «Format» — мы рекомендуем использовать 192kbps MP3 — и «Stream Info», где можно задать имя диджея и название эфира.

Skype howto

Те, кто прошли квест по сборке патченного alsa-jack плагина могут невозбранно принимать звонки и устраивать интерактивную содомию голосом с помощью широко растпространненого руткита для головосого общения — skype. Для этого создаем файл ~/.asoundrc следующего содержания:

pcm.!default {
   type plug
   slave { pcm "jack" }
}
pcm.jack {
   type jack
   playback_ports {
       0 alsa_pcm:playback_1
       1 alsa_pcm:playback_2
   }
   capture_ports {
       0 alsa_pcm:capture_1
       1 alsa_pcm:capture_2
   }
}
pcm.aux {
   type plug
   slave.pcm {
       type jack
       playback_ports {
           0 idjc-mx_default:ch_in_3
           1 idjc-mx_default:ch_in_4
       }
   }
}
pcm.skype {
   type plug
   slave.pcm {
       type jack
       playback_ports {
           0 idjc-mx_default:voip_in_l
           1 idjc-mx_default:voip_in_r
       }
       capture_ports {
           0 alsa_pcm:capture_1
           1 alsa_pcm:capture_2
       }
   }
}

Затем перезапускаем скайп (для непонятливых: перезапускаем = полностью выходим из программы и запускаем ее заново!), заходим в окно настроек скайпа и выбираем в качестве устройства вывода «skype». Готово. теперь при запущенном idjc (без него звука просто не будет) все говорильные звуки скайпа будут доступны по нажатию красной (dj only) или зеленой (эфир) кнопки телефона.

ВАЖНО: не забудьте потом удалить/переименовать ~/.asoundrc, иначе все приложения будут пытаться играть звук через jackd, который уже не запущен!

Поздравляю, вы диджей уровня «ньюфаг Радио Анонимус»!