Liquidsoap

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Liquidsoap
Логотип программы Liquidsoap
Тип Потоковое мультимедиа
Разработчик The Savonet Team
Написана на OCaml
Операционные системы Unix, Linux, Microsoft Windows and Mac OS X.
Первый выпуск 2003
Последняя версия 2.2.3 (14 декабря 2023)
Репозиторий github.com/savonet/liqui…
Состояние Активный
Лицензия GPL
Сайт liquidsoap.info

Liquidsoap — язык программирования для аудио, разработанный первоначально для создания аудио- и видеопотоков, передаваемых из исходного потока на Icecast сервер. Различие с любыми другими доступными утилитами — это то, что Liquidsoap интерпретирует отдельный скриптовой язык, что делает его очень универсальным и адаптирующимся к различным применениям.

Последние релизы Liquidsoap также включают в себя возможность взаимодействовать с локальной звуковой картой для вывода аудиоданных на устройство воспроизведения, а также сохранять в локальные файлы, используя различные форматы. Таким образом, Liquidsoap является не только источником аудио- и видео потока для Icecast, но и общецелевым специализированным языком аудио, с возможностью автоматизации обработки и трансляции аудио и видео.

Liquidsoap опубликован под GNU General Public License (GPL), является частью проекта Savonet, и разрабатывается на языке OCaml. Проект Savonet так же поддерживает OCaml модули, используемые для различных дополнительных возможностей, поддерживаемых в Liquidsoap.

Дизайн[править | править код]

Описание аудиопотока может быть очень сложным: некоторые входные источники (файлы, перенаправление потока, вход звуковой карты) могут быть объединены различными способами (обработки звука, воспроизведение планирования, микширование, fall-back’и) и в конечном итоге могут быть выведены в любом другом виде (на несколько серверов или в нескольких форматах). Чтобы сделать это простым без больших затрат энергии, Liquidsoap использует собственный небольшой скриптовой язык для настройки.

В этом языке есть понятие аудиопотока и запроса, и встроенные функции для объединения потоков разными способами. Некоторые из его основных особенностей:

Потоки[править | править код]

Поток в 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)

Ссылки[править | править код]