Библиотека сайта rus-linux.net
Audacity
Глава 2 из книги "Архитектура приложений с открытым исходным кодом", том 1.
Оригинал: Audacity,
глава из книги "The Architecture of Open Source Applications" том 1.
Автор: James Crook
Перевод: Н.Ромоданов
2.7. Использование сценариев
В Audacity есть экспериментальный плагин, поддерживающий несколько языков сценариев. Он предоставляет интерфейс для сценариев, реализованный поверх конвейера, имеющего имя. Команды сценариев вводятся в текстовом формате, в том же формате выдаются ответы. С помощью языка сценариев можно писать текст и читать текст из именованного конвейера и, таким образом, управлять Audacity. В конвейер не нужно направлять аудиозаписи и другие большие объемы данных (рис. 2.6).
Рис.2.6: Плагин сценариев позволяет писать сценарии, которые перенаправляются в конвейер, имеющий имя.
Самому плагину ничего не известно о содержании текстового трафика, который он передает. Он отвечает только за его передачу. Интерфейс плагинов (или рудиментарная точка расширения), используемый в плагине сценариев и предназначенный для подключения к Audacity, просто в текстовом формате передает команды Audacity. Поэтому плагин сценариев небольшой, а основное содержится в коде конвейера.
К сожалению из-за конвейера возникает проблема с безопасностью, аналогичная той, которая есть в соединениях TCP/IP, и мы по соображениям безопасности исключили из Audacity соединения TCP/IP. Чтобы уменьшить этот риск, плагин был сделан в виде дополнительной DLL. Вы должны принять сознательное решение, чтобы получить и использовать его, и он поставляется с соответствующим предупреждением, касающимся безопасности.
После того, как функция сценария уже была запущена, то согласно предложению, появившемуся на странице запросов нашей wiki-документации, нам бы следовало рассмотреть возможность использования стандарта D-Bus, имеющегося в KDE, для того, чтобы предоставить механизм межпроцессных вызовов с использованием протокола TCP/IP. Мы уже начали идти по другому пути, но, возможно, по-прежнему есть смысл адаптировать интерфейс, который мы сделали, к D-Bus.
Истоки возникновения кода сценария
Возможность использования скриптов возникла из попытки одного энтузиаста адаптировать Audacity для решения особой задачи, что вело к выделению в разработке отдельной ветки. Эти особенности, вместе называемые как CleanSpeech, были предназначены для преобразования проповедей в формат mp3. В CleanSpeech были добавлены новые эффекты, например, усечение пауз — в аудиозаписи находятся и вырезаются длительные паузы, а также применяется определенная последовательность эффектов по удалению существующих шумов, нормализации и преобразования в mp3 целой группы аудиозаписей. Для этого нам потребовались специальные функциональные возможности, но то, как они были написаны, было слишком специальным случаем в Audacity. Перенос их в основную часть Audacity потребовало бы от нас закодировать использование меняющихся, а не фиксированных последовательностей. Меняющаяся последовательность позволила бы использовать любой из эффектов, указав его с помощью справочной таблицы имен команд, а также класса Shuttle
, который сохранял бы параметры команды в текстовом формате в пользовательских настройках. Такая функция называется цепочкой команд потоковой обработки (batch chains). Мы совершенно сознательно воздержались от добавления условий и вычислений с тем, чтобы не изобретать специальный язык сценариев.
В ретроспективе, усилия, затраченные на то, чтобы избежать выделения отдельной ветки, оказались правильными. Режим CleanSpeech все еще есть в Audacity, который можно включить при помощи изменения пользовательских настроек. При этом также упрощается пользовательский интерфейс и убираются расширенные возможности. Упрощенная версия Audacity потребовалась для других целей, в первую очередь, в школах. Проблема в том, что каждый по-своему считает, какие возможности являются расширенными, а какие - незаменимыми. Мы впоследствии реализовали простую хитрость, представляющую собой специальный вариант отображения. Когда выполняется отображение пункта меню, который начинается с "#", то этот пункт не показывается в меню. Таким образом, те, кто хотят уменьшить меню, могут сделать этот выбор самостоятельно и без перекомпиляции - более общим и менее инвазивным способом, чем использование в Audacity флага mCleanspeech
, который мы со временем сможем полностью удалить.
Работа с CleanSpeech дала нам цепочки команд потоковой обработки и возможность сокращать паузы. Обе возможности внесли дополнительные улучшения. Цепочки команд потоковой обработки непосредственно привели к возможности использования сценариев. Что, в свою очередь, запустило процесс адаптации в Audacity поддержки плагинов общего назначения.
Продолжение статьи: Эффекты режима реального времени.