Русская Википедия:Liquidsoap
Шаблон:Infobox Software Liquidsoap — это язык программирования для аудио, разработанный первоначально для создания аудио- и видеопотоков, передаваемых из исходного потока на Icecast сервер. Различие с любыми другими доступными утилитами — это то, что Liquidsoap интерпретирует отдельный скриптовой язык, что делает его очень универсальным и адаптирующимся к различным применениям.
Последние релизы Liquidsoap также включают в себя возможность взаимодействовать с локальной звуковой картой для вывода аудиоданных на устройство воспроизведения, а также сохранять в локальные файлы, используя различные форматы. Таким образом, Liquidsoap является не только источником аудио- и видео потока для Icecast, но и общецелевым специализированным языком аудио, с возможностью автоматизации обработки и трансляции аудио и видео.
Liquidsoap опубликован под GNU General Public License (GPL), является частью проекта Savonet, и разрабатывается на языке OCaml. Проект Savonet так же поддерживает OCaml модули, используемые для различных дополнительных возможностей, поддерживаемых в Liquidsoap.
Дизайн
Описание аудиопотока может быть очень сложным: некоторые входные источники (файлы, перенаправление потока, вход звуковой карты) могут быть объединены различными способами (обработки звука, воспроизведение планирования, микширование, fall-back’и) и в конечном итоге могут быть выведены в любом другом виде (на несколько серверов или в нескольких форматах). Чтобы сделать это простым без больших затрат энергии, Liquidsoap использует собственный небольшой скриптовой язык для настройки.
В этом языке есть понятие аудиопотока и запроса, и встроенные функции для объединения потоков разными способами. Некоторые из его основных особенностей:
- Он статически типизирован: сервер никогда не рухнет, если сделал опечатку в темном углу конфигурации.
- Типы выводятся сами: вам не придется прописывать их.
- Это функциональный язык: Вы можете задать свои составные операции, но также используются функции для описания переходов от одного потока к другому.
Потоки
В языке Liquidsoap, аудио- и видеопотоки представлены переменными. Тем не менее, поток является бесконечным объектом, следовательно, потоковой переменной в Liquidsoap нельзя управлять напрямую. Вместо этого, они обрабатываются с помощью операторов, которые производят с ними некоторые операции.
Кроме того, поток — это объект высокого порядка, что представляет собой бесконечную последовательность звуковых или видео выборок данных, а также метаданные и разрывы, которые представлены границами треков-композиций.
Например, поток может быть выбран из внешнего потока аудио следующим образом:
s = input.http("http://server.org:8000/stream")
В дальнейшем, если пользователь хочет, изменить громкость этого потока, он использует:
s = amplify(2.0, s)
В конце концов, поток прошел к выходу, который может быть и звуковой картой, и JACK-сервером и файлом, и т. д., или можно выводить на удаленный сервер. Например, на сервер Icecast:
output.icecast.vorbis(host="server.org",mount="my_radio", s)
Функциональный язык
Язык Liquidsoap — это язык функционального программирования. Таким образом, функции могут быть использованы в качестве переменных. В частности, так как потоки — это бесконечные объекты, единственный способ, чтобы применить операцию для каждого элемента потока, является определением обобщенной функции, которая применяется к каждому элементу, когда он создается.
Например, вы можете определить операцию для всех метаданных, переносимых потоком:
# Функция, исполняющая какое-то действие с метаданными
def f(m) =
(.. Какие-то операции с m ..)
end
# Переопределение s и применение f
# для всех метаданных
s = on_metadata(f, s)
Ссылки