LINUX.ORG.RU

KLANG — проект новой аудиоподсистемы для ядра Linux и FreeBSD

 , klang


1

4

Некий разработчик объявил о запуске проекта KLANG по созданию новой аудиоподсистемы для ядра Linux и FreeBSD. KLANG должен предоставить пользователям профессиональное качество работы с аудиоматериалом, минимальные задержки и минимальную загрузку ЦП при обработке звука.

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

Что не устраивает автора проекта в существующих аудиосистемах?

  • ALSA не имеет поддержки микшировавния, даже при использовании dmix.
  • JACK слишком сильно загружает ЦП.
  • PulseAudio все еще требует RealtimeKit для работы.
  • ESD — не для обычного домашнего использования.
  • OSS не поддерживает MIDI-синтезаторы, слишком быстро расходует батарею. Зато имеет прекрасный API.

Почему аудиосистема помещена внутрь ядра? Во-первых, это единственный благоразумный вариант. Для аудиопотока наиважнейшим параметром является время задержки. Даже при коротких на первый взгляд задержках восприятие такого звука ухом неприятно. Например, для видеосистемы задержки даже в 20 мс трудно различимы, а для звука уже 4 мс — это слишком много.

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

Существующая аудиоподсистема ALSA позволяет прямо воздействовать на аудиоустройство с пользовательского уровня. Представьте, что подсистема по работе с сетью передает на пользовательский уровень пакеты в сыром виде, которые обрабатывает либо демон, либо отдельный процесс, целиком и полностью обладающий правами на единоличное использование интерфейса. Нужна ли вам такая система?

API разрабатываемой аудиоподсистемы будет изначально подразумевать правильную работу со звуком:

  • open(2) — обращение к одной из конечных точек;
  • ioctl(2) — конфигурация работы с конечной точкой;
  • write(2) — запись аудиоданных;
  • read(2) — получение аудиоданных.

Очень сильно напоминает OSS. Да, подобный OSS-совместимый API будет предоставлен KLANG для пользовательского уровня. Данный API, конечно, ни для кого не станет открытием, но он достоин повторного использования и дальнейшего расширения.

На данный момент KLANG еще слишком нестабилен для внедрения и опробования. И разработчик не собирается выпускать его для всех на слишком ранней стадии. По адресу вскоре можно ожидать появления дополнительной информации и официального баг-трекера проекта.

>>> Подробности

★★★★★

Проверено: JB ()
Последнее исправление: Silent (всего исправлений: 4)

Ответ на: комментарий от AiFiLTr0

и для юзабельности и многих фичей не может работать без весьма стремного пульсаудио

У меня она юзабельна и фичаста без всяких стремных пульсов. Может, стоит просто научиться ее готовить?

segfault ★★★★★
()
Ответ на: комментарий от thriller

Вот после этой картинки я осознал, насколько мало всё же я знаю (в частности, насколько всё плохо). Нет, я серьёзно.

agentgoblin
()

желаю всяческих успехов проекту! надеюсь, он будет жить, а богомерзкое творение поттеринга сдохнет.

только вот как быть с драйверами? даже для alsa/oss их слишком мало.

anonymous
()

Накуа? Зоопарк и так большой. Еще и в ядро пихать..

craftwr
()
Ответ на: комментарий от Rubbiroid

Это потому, что «Klang» это немецкое слово, означает «звук».

Lennart Poettering - немец. Совпадение ли это? :)

unfo ★★★★★
()
Ответ на: комментарий от Rubbiroid

Хм, разработчик - немец? Тогда можно чего-то путного ждать, немцы вроде как умеют разделять порно и программирование.

agentgoblin
()
Ответ на: комментарий от quiet_readonly

JACK слишком сильно загружает ЦП;

автор не осилил конфиги / минимальные правки чужого кода

Патчиком для Jack не поделитесь? А лучше предложите его разработчикам.

A-234 ★★★★★
()
Ответ на: комментарий от anonymous

Я видел, и на уровне добавления квирков в ядреный модуль для ALCшного HDA кодека, и для написания дров для своего доморощенного аудио девайса для работы в ПЛИСе (тупо FIFO + PWM DAC на верилоге в несколько модулей). Так вот скажу вам не шибко оно мне понравилось.
В общем все зависит от того, что это будут за сырцы, и что предложат взамен.
Если сделают еще вменяемый синтаксис в своем аналоге asoundrc (если он будет), и сетевую прозрачность с jack retasking'ом по-человечески - будет великолепно. Но это мечты. Астрал подсказывает, что это может так и остаться надписью на заборе.

AiFiLTr0 ★★★★★
()

И тут это... Vaporware же.

anonymous
()
Ответ на: комментарий от AiFiLTr0

Возможно, стоило писать драйвер для jack. Чуваки из Harrison вон хвалят.

anonymous
()
Ответ на: комментарий от segfault

Оукей.
ДАНО: Есть эмбеддед ARM железка, к которой подцеплена 5.1 аудиосистема, она зацеплена по сети и висит где-то под потолком.
НАДО: перенаправлять звуковой поток туда с нескольких десктопных компов, а если идет уведомление приглушать музыку, чтобы его услышать.
Мое решение - пульсаудия на эмбеддед железке, и твики в asoundrc на хостах + пара самописных костылей. Ваше решение на чистой альзе без пульсы?

AiFiLTr0 ★★★★★
()

судя по названию, автор немец.

anonymous
()
Ответ на: комментарий от unfo

Lennart Poettering - немец. Совпадение ли это? :)

Да Леннарт-то, вроде, уже привык в открытую велосипеды производить и заявлять об этом не стесняется. Непонятно как-то.

SoulThreads
()
Ответ на: комментарий от agentgoblin

Не факт. Просто слово немецкое. Да и вместо того, чтобы править альсу или осс решил писать свое. Так что сомневаюсь. С другой стороны кода ни того ни другого не видел, может и проще взять чейнить апи и написать все заново.

Rubbiroid
()
Ответ на: комментарий от AiFiLTr0

А как в этом случае железка понимает, что пришло уведомление и нужно все приглушить?

Напиши статью, кстати, про сетап. Думаю, не только мне интересно.

anonymous
()
Ответ на: комментарий от Rubbiroid

Не факт. Просто слово немецкое.

Да я понимаю. Это было петросянство ниже пояса, не более. :)

С другой стороны кода ни того ни другого не видел, может и проще взять чейнить апи и написать все заново.

Вот и я так думаю. Иногда проще переписать.

З.Ы. Кода тоже не видел.

agentgoblin
()
Ответ на: комментарий от Deleted

Не знаю, картинка не моя. Но там и без этого со звуком беда: стандартная звуковая система является одним сплошным недоразумением, калечащим звук так, что глухой заметит, а корявая подпорка ASIO доступна не всем, да ещё и корявая она. Это про Win 7.

anonymous
()
Ответ на: комментарий от anonymous

Статью писать ОЧЕНЬ лень, ибо там все очень черезжопно местами. Уведомление вообще черезжопно посылается.
echo «filename»|nc audioserver 8080
Там это ловит самописный демон на луа, который дергает пульсу понижая громкость плавно, потом запускает отдельным потоком плеер с аудиофайлом, потом вертает в зад.
Второй сценарий:
На x86 железке еще работает cepstral'овский синтез речи, который самописной оберткой синтезит в wav'ку, вавка шлется scp в /tmp/ (который в tmpfs), далее неткатом дергается демон, который приглушает аудиопотоки, воспроизводит уведомление, сносит файл и восстанавливает громкость.
И матерился я очень много, пока все это безобразие компелял и пытался заставить работать.

AiFiLTr0 ★★★★★
()

JACK слишком сильно загружает ЦП;

феерический бред, даже на атомном недобуке всего 3% при одном работающем приложении

lazyklimm ★★★★★
()
Ответ на: комментарий от AiFiLTr0

ну и на уведомление обертка стоит, rnotify. В кедах на нужные уведомления вызывается она вместо воспроизведения файлов.

AiFiLTr0 ★★★★★
()

PulseAudio все еще требует RealtimeKit для работы.

Да, действительно из-за этого стоит запилить велосипед в ядро без драйверов.

anonymous
()
Ответ на: комментарий от Deleted

А их в винде нет? Погугли VirtualDubMod - весьма популярный велосипед для распилки видеофайлов перед скармливания проприетарным комбайнам.

Napilnik ★★★★★
()

В кои-то веки сходил по ссылке, а там такое

dexpl ★★★★★
()
Ответ на: комментарий от Napilnik

Повторяю медленно. При чём тут Windows? Велосипедисты опенсорсники принесли свои велосипеды в систему и теперь Windows виновата? Ололо.

Deleted
()
Ответ на: комментарий от PrikPavel

Почему не soundd (это не опечатка)?

Разработчик не из redhat, видать...

atrus ★★★★★
()
Ответ на: комментарий от geekless

Предлагаю запихать туда <...> wayland.

Скотинко одобряэ... :)

atrus ★★★★★
()
Ответ на: комментарий от Reset

отвратительное качество звука

Странно, не замечал

и ужасный API

мне как пользователю - абсолютно пофиг, какой там у него API

lazyklimm ★★★★★
()

Отлично. Надеюсь, с новой системой удастся побороть большинство недостатков предшественников

anonymous
()
Ответ на: комментарий от merheaste

берет звук с альсы <...> и перенаправляет в пульс

а с каких пор пульс умеет плеваться звуком прямо в железо?

thriller ★★
()
Ответ на: комментарий от r

Так работает если специально конфигуришь или потому что карточка умеет аппаратный миксинг.

Ни разу в жизни не видел железки, на которой микширование бы не работало без настройки. Так в чём проблема-то?

Axon ★★★★★
()
Ответ на: комментарий от Napilnik

Любимая там проприетарщинка, что, так или иначе, не превращает это в «ой, в Windows так много слоёв, ой-ой-ой». Прекрати прикидываться валенком :}

Deleted
()
Последнее исправление: Mystra_x64 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.