Linux под музыку
Аудиоприложения для Linux: личное мнение

В Linux проблем не меньше, чем в Windows. ОС долгое время в области звука была позади планеты всей. К сожалению, разработчики Linux слишком долго не обращали внимания на аудиоприложения для своей системы. Когда несколько лет назад Линусу Торвалдсу (Linus Torwalds) прислали первые патчи low latency kernel, он вообще послал ребят подальше, сказав, что оптимизация Linux для работы с аудио - bad idea.

В результате такой политики линуксоиды получили отставание в развитии от сверстников в Windows года на три. В 1995 году, когда Dave Phillips www.bright.net/~dlphilp/linuxsound начал собирать свою знаменитую коллекцию аудиопрограмм под Linux, он смог найти только 30 приложений (сейчас их больше 800). Ядра, драйверы и звуковые серверы с low latency (низкими задержками) появились совсем недавно. Поэтому программ, способных воспользоваться этими новыми возможностями, пока немного. Остановимся поподробней на проблемах и найденных решениях.
Latency

Первая аудиозадача, которую необходимо было решить, - Latency. Некоторые иностранные словари толкуют это слово так: "Latency - это время между тем, когда вы хотите, чтобы что-то случилось, и тем, когда это реально случается". Например, когда вы поете в микрофон или играете на миди-клавиатуре, то звук записывается не сразу, а через определенное время. Это время и есть latency. Задержка, в общем. Для работы со звуком в реальном времени задержки должны быть минимальны. Хотя latency измеряется миллисекундами, задержки в 100 мс вы услышите.

Будет свистеть или щелкать по-взрослому. 10 мс можно не расслышать, но музыканты характеризуют такой звук как "туман". Идеальный результат - 3 мс для аудио и 1 мс для миди. Кстати, большие задержки звука - это проблема не только Linux. Windows и Mac также изначально не проектировались как платформы реального времени. И в прошлом latency в этих ОС были - мама не горюй. 

По умолчанию Linux работает с аудиодрайверами OSS/Free. Latency - 150 мс. Как вы понимаете, цифры запредельные и они никого не устраивают. Поэтому и возник проект ALSA (Advanced Linux Sound Architecture). Во все новые дистрибутивы уже включены ALSA-драйверы. Audio latency - не больше 6 мс. Лучше, чем у Windows 2000 с ASIO. 

Также с целью снижения latency программисты начали исследовать святое святых - ядро системы. И нашли способ уменьшить latency. Патчи можно скачать с www.zip.com.au/~akpm/linux/schedlat.html.

Ради интереса посмотрите тест mambo.peabody.jhu.edu/~karlmac/
publications/latency-icmc2001.pdf. Красивые цифры получаются. На первом месте Mac OS X с родными драйверами (CoreAudio API), на втором Linux 2.4 с ALSA (4,3 мс). Третье место делят Mac OS 9 и Windows 2000 с ASIO. Другие конфигурации Windows и Mac OS далеко позади. Таким образом, можно считать, что проблему с latency в Linux удалось решить.

Аудиосерверы

Еще один тяжелый случай. Проведем эксперимент. Запустим программный синтезатор и какой-нибудь секвенсор, умеющий работать с аудио, например, JAZZ++. Импортируем в секвенсор любой WAVE. Давим на кнопку Play. Что, ничего не работает? Так и должно было случиться. Синтезатор захватил аудиопорт, и секвенсор пытается сделать то же самое. Можно запустить сколько угодно аудиоприложений в одно и тоже время, но только одно из них сможет писать/читать в/из аудиопорт(а).

Ведь у вас только один девайс (dev/dsp). Дабы избежать подобных конфликтов, необходимо, чтобы приложения обращались не к драйверам саундкарты, а к аудиосерверу. Только он, аудиосервер, получает доступ к железу напрямую, а другие программы об аудиодрайверах ничего знать не должны. Теоретически все выглядит славно, и аудиосерверы в Linux есть, и аудиопрогаммы могут работать с их библиотеками. Но на практике не все так шоколадно.

Во-первых, разных серверов слишком много. В KDE - aRts, в Gnome - ESD, в WindowMaker - WMSound. Во-вторых, у них неправильная архитектура и, как следствие, слишком большие задержки (latency). Конечно, хаять проще, чем создавать. Разработчики этих серверов наверняка не согласятся с моей оценкой. Автор aRts, например, утверждает, что его сервер имеет latency меньше 1 мс, да и с архитектурой все OK.

Я бы ему поверил, но группа программистов из LAD (Linux Audio Development) потратила два года на изучение алгоритмов разделения ресурсов в "Маках" (Apple's Core Audio, Steinbepg ASIO) и создание нового low latency - сервера JACK jackit.sourceforge.net. Что, им делать было нечего?

Между прочим, сервер получился замечательный. Быстрый, с маленькими задержками, с удобным интерфейсом для клиентских приложений. Единственный недостаток - программ, умеющих с ним работать, пока слишком мало. Мало, зато какие. Alsaplayer (аудиоплейер), Ardour (аудиорекордер), MusE (секвенсор) - лучшие в своих категориях.

Плагины

Вообще-то, обработка звука - это способ неестественными средствами добиться естественного звучания. И она необходима, чтобы ваша музыка и ваш голос звучали как можно натуральнее, а не наоборот. Если же хочется петь, как Витас, пусть вас укусит Шура.

Программные и аппаратные средства обработки звука можно условно разделить на две категории: процессоры и эффекты. Процессоры обрабатывают сигнал целиком, а эффекты смешивают обработанный и сухой сигнал. Процессоры - это эквалайзеры, компрессоры/лимитеры, экспандеры/гейты, энхансеры и т. п. Эффекты - линии задержки, ревербераторы, хорусы, фленджеры, pitch shifters (устройства сдвига высоты тона) и т. д. Алгоритмы работы этих приборов - ни для кого не секрет.

И их программные аналоги входят в состав любого уважающего себя аудиоредактора. Однако многие фирмы с успехом продают дополнительные программные модули (плагины). Если программа-хост (аудиоредактор, секвенсор) поддерживает плагин-технологию, то вы можете подключить эти плагины и "оживить" звук. Самые распространенные плагин-форматы: VST (Virtual Studio Technology) от Steinberg и DirectX от Microsoft. Рынок музыкальных плагинов огромен.

Есть Vsi - миди-инструменты (например, какой-нибудь супер орган), есть модули обработки звука (компрессоры, нормализаторы и т. д.). На сегодняшний день без плагинов трудно представить любую виртуальную студию. Так как VST появился намного раньше аналогов от MS, к нему привыкли, накопили большие коллекции плагинов, поэтому для звукорежиссеров VST - профессиональный стандарт.

Поддерживают ли аудиоприложения в Linux VST? И да, и нет. Да, потому что хакеры портировали некоторые VST-плагины для Windows в Linux PC. И если бы Steinberg позволил, то можно было бы создать что-нибудь подобное aviplay, но для звука (aviplay - библиотека, позволяющая использовать в Linux AVI-кодеки под Windows). Однако Linux - это не только РС. Есть еще Alfa, UltraSPARC, Pover ПК.

Поэтому, чтобы решить проблему с VST, нужны исходники. Но алгоритмы обработки звука - это тайна за семью печатями. Раскрыть алгоритм - это понести значительные финансовые потери... Можно, конечно, как Opera, не раскрывая секретов, выпускать бинарники для различных UNIX-платформ. Однако желающих пока нет. Steinberg заявляет, что он не против Linux. Но портировать VST в Linux не хочет и другим не разрешает. Переговоры еще продолжаются, но покамест безрезультатно.

Чтобы не терять времени даром, в Linux, на основе первых спецификаций VST, была создана похожая технология - LADSPA. Все новые аудиоприложения ее поддерживают. Существует еще несколько подобных разработок, но LADSPA пока самая популярная. Понятно, что в отличие от LADSPA, VST и DirectX плагины стоят денег, причем немалых. Иной плагин стоит больше $500.

Почему народ все это покупает, что же там такого интересного? Не что, а как. Возьмем, к примеру, эквалайзер. Прибор нужный - он усиливает либо ослабляет отдельные частоты. Например, уменьшив усиление на частотах 50 и 100 Гц, устраняем шумы сети питания (50 Гц) и "плевки" вокалистов. Так вот, чтобы усилить или уменьшить уровень звука в определенном частотном диапазоне, необходимо эту частоту выделить из общего сигнала.

А КАК это делается - секрет фирмы. Если в реальном времени применить дискретное преобразование Фурье - не хватит мощности компьютера, если использовать упрощенную математику - страдает качество. Или другой пример - компрессор. При записи неопытных певцов компрессор усилит "тонущие" в музыки слова и ослабит слишком громкие. Экспандер делает то же самое, но в точности наоборот, поэтому часто используется для борьбы с шумами.

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

Там не только высшая математика, там высшая биология и психология. Одни названия чего стоят: Brainwave Synchronizer (синхронизация звучания сэмпла с ритмами головного мозга), Waves MaxxBass (реальный супербас на 100 Гц китайских колонках) и т. д. Как сделать подобные эффекты, в принципе, понятно. Берешь сигнал, выделяешь определенные частоты, добавляешь гармоники, задержки.

Потом, по определенным правилам, мешаешь все это с сухим звуком и получаешь суперзвучание. Но, как и в любом кулинарном блюде, успех - в пропорциях. А это секрет фирмы. Linux - система с открытыми исходниками, поэтому понятно, что фирменных эффектов там нет. А что есть? Есть только инструменты. А что, как и с чем мешать - экспериментируй сам. И потихоньку народ начинает заниматься этим делом. Каждый месяц появляются новые плагины. Похоже, год, два, и встанет вопрос: "А так ли хороши VST-модули?". Возможно, к тому времени в Linux они никому не будут нужны.

Аудиоредакторы

Из программ, которые не стыдно показать друзьям, я бы выделил Ardour (ardour.sourceforge.net). Автор проекта утверждает, что Ardour - это профессиональный многоканальный аудиорекордер/аудиоредактор. Программа делает то же самое (или даже лучше), что и ProTools, Samplitude, Logic Audio, Nuendo и Cubase VST. Насчет профпрограммы, наверное, он прав. Это видно по поддержке профессионального железа, такого, как многопортовые звуковые карты и MMC-контроллеры.

Ardour в реальном времени может записывать одновременно звук с 24 и более каналов с разрешением 32 бит @ 96 кГц (количество виртуальных каналов ограниченно только мощностью компьютера). Судя по всему, разработчики поставили перед собой сверхзадачу - программа должна все делать в реальном времени. Поэтому они ориентируются на самые передовые разработки.

Тут тебе и low-latency kernel, и ALSA-драйверы, и JACK-сервер. Создать быстрый движок - вот, что для автора главное. Такие "мелочи", как звуковые эффекты и синтез звука, отданы на откуп другим производителям. Все это подключается к Ardour через плагины, совместимые с LADSPA. Если переговоры с Steinberg закончатся удачно, то обещается поддержка VST. Для меня главный недостаток программы - это отсутствие стабильной версии.

Пока разработчики предлагают только бета-релиз. А знаете, что это такое в Linux? Лучше вам этого не знать. Одна головная боль, да и только.

Вторым номером по списку идет Audacity audacity.sourceforge.net. Главная "изюминка" проекта - кроссплатформенность. Есть Windows-, Mac- и Linux-версии. Audacity получил хорошую оценку, входит в десятку наиболее скачиваемых проектов на www.soureforge.net. Некоторые горячие головы сравнивают его с Cool Edit. Проверим.

Двоякое впечатление. С одной стороны, хочется похвалить. Все основные функции, положенные аудиоредактору, имеются: осциллограммы каналов, спектральный анализатор, врезки, вставки, амплитудные и частотные преобразования, звуковые эффекты, экспорт в MP3 и т. п. Однако при ближайшем рассмотрении оказалось слишком много НО. Начнем по порядку. Во-первых, любой редактор - это не только Cut, Paste, Copy, но и большое количество поисковых функций.

К сожалению, Audacity ничего не знает о таких режимах поиска, как Zero Crossings (определение точки пересечения звуковой волны нулевого уровня), Find Beats (выделение границ тактов), Auto Cut (поиск фраз или долей) и т. п. Во-вторых, если win-версия программы может работать с VST-плагинами, то к Audacity for Linux на момент написания статьи никаких дополнительных модулей обработки звука подключить было нельзя.

Поддержка LADSPA обещается в следующей версии. В-третьих, самое неприятное, даже если ваша аудиокарта поддерживает работу в дуплексном режиме (одновременное воспроизведение и запись звука), воспользоваться этим в Audacity невозможно. Кроме того, не поддерживаются многоканальные профессиональные аудиокарты. Да и разрешение 16 бит @ 48 кГц - это на сегодняшний день очень мало.

У профессиональных звуковых карт оцифровка не меньше, чем 24/48. Не говоря уже о том, что для предотвращения неконтролируемого транкейта (truncate) поддержка звукового разрешения 32 бит не помешает. Про разделение аудиоресурсов я вообще молчу. Причины этих болезней хорошо известны - это OSS/Free-драйверы.

При работе через JACK приложению ничего не надо знать о драйверах, и поддержка этого сервера в Audacity решила бы кучу проблем. Однако в данном случае это не возможно, так как редактор кроссплатформенный, а JACK пока никто не собирается портировать. Я посмотрел бета-релиз Audacity.

Насколько я понял, разработчики решили ориентироваться на PortAudio. Это кроссплатформенная библиотека. Есть реализации для Windows (MME и DirectX), UNIX/OSS, Mac OS 9, Mac OS X, Linux/ALSA. PortAudio позволяет манипулировать аудиоданными, подобно аудиосерверу. Однако какие буду там задержки, я пока не знаю. Как бы там ни было, но стоит признать, что даже с учетом недостатков, для простых юзеров Audacity - хороший выбор.

Напоследок пару слов о Snd www-ccrma.stanford.edu/software/snd. Это легендарная программа. Широко известная в узких кругах. Создана на основе аудиобиблиотек Стэнфордского университета, в котором был организован научный центр по компьютерному исследованию в области звука и музыки (CCRMA, Stanford University's Center for Computer Research in Music and Acoustics). Кстати, обязательно загляните на их страничку www.stanford.edu/planetccrma/software/packages.html.

У них хорошая коллекция rpm, ядер low latency, свежих драйверов и музыкального софта с подробными мануалами. Кроме того, познакомитесь с вузом, который живет за счет аудиоприложений под Linux. Там за деньги (!) обучают студентов и представителей коммерческих фирм работать с аудиоданными в Linux. Так вот, в недрах этого замечательного заведения для создания приложений синтеза и обработки звука был придуман язык программирования - CLM (Common LISP Music). Так как Snd пользуется библиотеками CLM, то его возможности почти безграничны.

Можно программировать и создавать не только новые функции обработки звука, но и новые инструменты. Рекомендую наведаться и на сайт www.oreillynet.com.

Там есть несколько полезных статей по настройке программы. Во всем остальном Snd - стандартный аудиоредактор. Имеется весь джентльменский набор - record/edit/transform/mix. Плюс поддержка LADSPA и других динамически загружаемых модулей (STK, SoX, CLM). Между прочим, вся обработка звука - в реальном времени.

Синтезаторы

Году эдак в 92-м я видел по телевизору занятное выступление симфонического оркестра. К сожалению, сейчас не помню название исполняемого произведения, но никогда не забуду, как я обалдел, когда в середине концерта из оркестра выдвинулся мужчина во фраке с двуручной пилой и стал ею трясти. Это он исполнял партию пилы.

Звук напоминал что-то среднее между терменвоксом и песней пьяных марсиан. Я вспомнил то выступление, когда услышал звучание программного синтезатора SpiralSynth www.pawfal.org/SpiralSynth.

На его примере я хочу рассказать, как подключить к software synthesizer виртуальную клавиатуру или секвенсор. Надеюсь, ALSA-драйверы у вас уже стоят. SpiralSynth работает с OSS-драйверами, поэтому надо организовать эмуляцию OSS и виртуальные МИДИ-порты (ALSA-драйвер - virmidi).

Подправим /ets/modules.conf, добавив несколько строчек:
# Поддержка OSS. Конфигурация вашей "железной" саундкарты (card 0)
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-8 snd-seq-oss
# Конфигурация виртуальной мидикарты virmidi (card 1)
alias sound-slot-1 snd-card-1
alias snd-card-1 snd-virmidi
Если все сделано без ошибок, то после перезапуска в директории /proc/asound/dev/ и (или) /dev/snd/ появятся четыре новых девайса: midiC1D0 - midiC1D3. Знающие люди рекомендуют сделать линки:
$ ln -s /dev/snd/midiC1D0 /dev/midi10
$ ln -s /dev/snd/midiC1D1 /dev/midi11
[.....]

В SuSe такие ссылки можно не делать. Там четыре девайса возникают автоматом - /dev/midi1, /dev/midi2 и т. д.

Для управления роутингом существует довольно много утилит. Мне нравится Kaconnect из набора утилит Kalsatools www.suse.de/~mana/kalsatools.html.

При работе с программами, которые не поддерживают ALSA, обращаться к виртуальным портам надо не по номеру порта (73:0), а по имени девайса /dev/midi11. Ищем в домашней директории конфигурационный файл .Sprialrc и меняем там /dev/midi на /dev/midi11. Запускаем синтезатор, виртуальную клавиатуру vkeybd www.suse.com и kaconnect. В правой части (readable ports) выделяем строчку 129:0 Virtual Keyboard, в левой части (writeable ports) - 73:0 Virtual Raw MIDI 1-1. Давим на кнопку connect. Все, можно послушать, как звучит неземная тоска. Тот же эффект можно получить и без kaconnect. Просто наберите в консоли aconnect 129:0 73:0.

Аналогичным способом можно подключить любой программный синтезатор к любому секвенсору. Если же синтезатор поддерживает ALSA-драйверы, то никакого virmidi устанавливать не надо. Программа сама организует виртуальный порт, и в секвенсоре останется только направить MIDI-данные в этот порт.

SpiralSynth, естественно, не единственный программный синтезатор под Linux. Вообще-то, синтез звука - это область мультимедиа в Linux, которая всегда опережала подобные разработки в Windows. Государственные структуры и частные фирмы охотно финансируют научно-исследовательские работы в области акустики и звука. Получить тайные знания о воздействии звука на человека - заветная мечта и первых, и вторых.

Понятно, что там, где наука, Windows популярностью не пользуется. Чаще всего компьютерной платформой для научных исследований служит что-нибудь с открытым исходником, какой-нибудь nix. А портировать любую программу под UNIX в Linux - как два байта переслать. Наиболее популярные платформы синтеза - это Csound www.csounds.com, Common LISP Music ccrma-www.stanford.edu, OpenMusic www.ircam.fr/equipes/repmus/OpenMusic и jMax www.ircam.fr/equipes/temps-reel/jmax/en от IRCAM, Pd gige.xdv.org/pages/pd, crca.ucsd.edu/~msp/software.html).

Программирование звука - интересная тема. Тем, кому нравится звучание "ямаховского" DX7, рекомендую обратить внимание на совсем юный проект LegaSynth (reduz.com.ar/legasynth) - программный эмулятор Yamaha DX7 FM. Любители модульных синтезаторов наверняка найдут все, что им необходимо, в проекте aRts - это стандартный KDE-шный сервер, синтезатор и сэмплер.

Как аудиосервер и сэмплер aRts мне не нравится, однако читать фирменные CD-ROM со звуковыми библиотеками в формате Akai в Linux может только он. У профессионалов CD с банками звуков AKAI S1000/S3000 немереное количество, но у вас, скорее всего, их нет. Не смертельно. Все самое интересное давно уже перегнали в формат SF2. И даже если у вас не SB Live!, коллекциями SF2-сэмплов можно воспользоваться с помощью программного сэмплера iiwusynth www.hanappe.com/iiwusynth.html.

Если лень читать документацию, небольшой совет - чтобы сэмплер стал доступен для секвенсора, необходимо запустить его с ключом alsa_seq (iiwusynth -m alsa_seq). Кстати, о способах подключения программных синтезаторов к секвенсорам толково написано на linux-sound.org/quick-toots/4-sequencers_and_
softsynths/quick-toot-midisynth_howto.html. Если что не понятно, ответы ищите там.

Библиотеки звуков

Создание и редактирование библиотек звуков - не такое уж редкое явление. Существует довольно много разных форматов файлов для хранения сэмплов. Про Akai S1000/S3000 я уже упоминал. Банки звуков в формате GIG для GigaStudio (Gigasempler) for Windows - то же не редкость. В старые времена в Linux получили распространение патчи Gravis Ultrasound.

Повторюсь, форматов много, но все самые интересные библиотеки звуков давно уже конвертированы в SoundFont 2.x. Этот кроссплатформенный формат придумали в EMU, а Creative сделал его самым распространенным в мире. Поэтому рекомендую сохранять ваши пресеты в формате SF2. В этом деле нам поможет редактор саунд-фонтов Swami swami.sourceforge.net.

С его помощью можно редактировать или создавать свои собственные SF2-банки. Редактор прекрасно ладит с программным сэмплером iiwusynth, посему можно работать с любой аудиокарточкой, а не только с продукцией Creative.

Принцип действия программы, надеюсь, понятен. Берете встроенную в редактор виртуальную клавиатуру, вешаете на каждую клавишу WAVE, обрабатываете, а потом перегоняете это в SF2. Когда будете обрабатывать, обратите внимание не только не только такие эффекты, как реверберация или хорус, но и на панораму. Орган, да и фортепиано - это все-таки стереоинструмент.

Секвенсоры

К сожалению, современная музыка - сплошное MIDI, иногда разбавленное живой гитарой и барабанами. На сегодняшний день MIDI-синтезатор - основной инструмент для музыкантов. Поэтому секвенсор (программа для записи и редактирования MIDI) - один из основных инструментов звукорежиссеров. Из секвенсоров неплохое впечатление производят JAZZ++ www.jazzware.com.

Как и положено современному секвенсору, он может редактировать не только MIDI, но и Audio. JAZZ++ - кроссплатформенная программа. Однако в отличие от Audacity секвенсор поддерживает ALSA-драйверы и вроде бы будет поддерживать JACK. Пока этого нет, одновременная работа с программным синтезатором и аудиоданными не возможна. Если же вы пользуетесь встроенным в вашу саундкарту синтезатором или внешним аппаратом, то эти проблемы вас не должны волновать.

MusE muse.seh.de - секвенсор-фаворит. Интерфейс программы, да и возможности напоминают привычный Sonar. В его дистрибутив входит сэмплер iiwusynth и три программных синтезатора. Так как все это хозяйство работает внутри секвенсора, то проблем с разделением ресурсов и конфликтов между MIDI и audio не наблюдается. Начиная с версии 06, в программу включена поддержка аудиосервера JACK, что есть очень даже хорошо.

MusE - самый продвинутый секвенсор. Авторы внимательно наблюдают за тем, что происходит в Linux. И все самое интересное включают в свой проект. MusE первым из секвенсоров стал поддерживать ALSA-драйверы, LADSPA-плагины и JACK API. Возможность редактирования в секвенсоре звука и включение в программу программных синтезаторов доказывает, что разработчики хотят превратить MusE в полноценную виртуальную студию. А виртуальная студия - это сейчас очень модно. Sonar и Cubase давно движутся в этом направлении. И если MusE уступает им в чем-то, то ненамного.

Итого

По-моему, в одном из произведений Салтыкова-Щедрина была фраза: "Обыватели с полной порции перешли на полпорции". Надеюсь, мне удалось показать, что Linux - это не полпорции, а уже полнофункциональная мультимедийная платформа. После решения системных проблем количество аудиоприложений под Linux стремительно растет.

Уже сегодня с помощью описанных выше программ можно создавать фонограммы профессионального качества. А завтра? Перспективы обнадеживающие. Нашлись деньги для разработчиков со стороны Евросоюза. Недавно Европейская Комиссия учредила новый проект - AGNULA (A GNU/Linux Audio distribution). Задача - за два года создать дистрибутив с аудиоприложениями для профессионалов.