Показано с 1 по 14 из 14

Тема: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

  1. #1
    Новичок
    Автор темы
    Аватар для Кичай Данил
    Регистрация
    12.12.2016
    Сообщений
    75

    По умолчанию Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    Написал для себя мини компилятор/генератор КИХ/FIR кроссоверов для упрощения создания LADSPA плагинов под ALSA и PulseAudio. Получаемые при помощи компилятора плагины соответствуют требованиям LADSPA_PROPERTY_HARD_RT_CAPABLE. Для генерации плагина достаточно создать заголовочный файл (.h) с массивом коэффициентов и откомпилировать фильтр с указанием этого файла.

    https://github.com/kichay/ladspa-fir-crossover - репозиторий с кодом и инструкцией
    https://github.com/kichay/ladspa-fir...xample/3band.h - пример кроссовера

    Если кому-нибудь кроме меня интересны LADSPA плагины, но нет опыта их низкоуровневого использования, я могу помочь с разъяснениями о том, как можно подключать LADSPA прямо в ALSA минуя создание ненужных прослоек и буферов. А если нет - так на нет и суда нет.
    Последний раз редактировалось Кичай Данил; 22.12.2020 в 13:47. Причина: обновил

  2. #2
    Завсегдатай Аватар для mellowman
    Регистрация
    14.04.2009
    Адрес
    рядом с Москвой
    Сообщений
    4,447

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    А зачем их так низкоуровнево использовать?

  3. #3
    Завсегдатай Аватар для ditter
    Регистрация
    04.07.2004
    Адрес
    RUS
    Возраст
    50
    Сообщений
    1,068

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    может быть для поканалки, но как с ARM тогда звук через TDM вытаскивать ?

  4. #4
    Новичок
    Автор темы
    Аватар для Кичай Данил
    Регистрация
    12.12.2016
    Сообщений
    75

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    Цитата Сообщение от mellowman Посмотреть сообщение
    А зачем их так низкоуровнево использовать?
    "Поканально" использовать в роли оконченного кроссовера для многоканальной звуковой карты в Linux. Плагин, на примере интеграции в ALSA, интегрируется в user-space состовляющую подключаемой звуковой библиотеки Linux. То есть, каждая запущенная программа сама строит в своей памяти (user-space) граф из функций плагинов для звукового тракта при инициализации/подключении библиотеки звука asoundlib (руководствуется глобальным конфигом), при чём, запускаемые программы для этого подготавливать вообще ни как не нужно, это функционал самой библиотеки. Плагины таким образом "вклиниваются" в процесс передачи звуковых данных из программ в аппаратный буфер звуковой карты.

    Цитата Сообщение от ditter Посмотреть сообщение
    может быть для поканалки, но как с ARM тогда звук через TDM вытаскивать ?
    Подключение плагинов в ALSA справедливо как для ARM, так и для x86/x86_64. В ядре Linux ALSA - основная актуальная звуковая подсистема. Всё, что мы видим в современных дистрибутивах, это ALSA + ещё какой-либо звуковой сервер, например, PulseAudio. Все эти звуковые серверы также в конечном итоге работают через ALSA.
    Последний раз редактировалось Кичай Данил; 07.12.2020 в 06:21. Причина: безграмотность

  5. #5
    Завсегдатай Аватар для ditter
    Регистрация
    04.07.2004
    Адрес
    RUS
    Возраст
    50
    Сообщений
    1,068

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    Цитата Сообщение от Кичай Данил Посмотреть сообщение
    В ядре Linux ALSA - основная актуальная звуковая подсистема.
    я рад за нее, но у железки на котором "крутится" этот Linux вместе с нужной нам ALSA, всего лишь 1 аппаратный порт I2S выведен наружу, т.е. от выводов процика на плату.
    *для многоканалки нужно несколько портов (каждый дает только 2 канала) или чтобы был вывод в TDM который выдает по одним и тем же выводам аж до 8 каналов.
    может быть можно както на скоростном SPI вымутить TDM но к чему такие заморочки когда полно ДСП камешков уже готовых.
    **т.е. все кроссоверы и остальное уходят куда им и положено - в ДСП. там же задержки и вся остальная обработка звука которая может понадобиться.
    и даже сделано внешнее управление к ДСП - ставь крутилки, кнопки, светодиоды.
    вот собственно и вопрос - каким боком тут ваше творение ???

  6. #6
    Новичок
    Автор темы
    Аватар для Кичай Данил
    Регистрация
    12.12.2016
    Сообщений
    75

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    Я о конкретном железе ничего не писал, мой вариант железа - Raspberry PI Zero + Audiotrak U5, сомневаюсь, что найдётся подходящий DSP с подобной ценой. На карте есть SPDIF out и SPDIF in, что позволяет реализовать схему с тактированием источника часам из карты, но на самом деле это и не нужно, если реализовать алгоритм синхронизации/передискретизации или заиспользовать уже готовый из alsaloop.

    ---------- Сообщение добавлено 17:07 ---------- Предыдущее сообщение было 16:55 ----------

    Цитата Сообщение от ditter Посмотреть сообщение
    я рад за нее, но у железки на котором "крутится" этот Linux вместе с нужной нам ALSA, всего лишь 1 аппаратный порт I2S выведен наружу, т.е. от выводов процика на плату.
    Кто вам мешает взять 3 железки?

    Ну и у меня нет цели рекламировать своё решение, мне оно нужно самому. Я опубликовал его только с целью, если вдруг оно кому-то пригодится. Использовать его или нет, - ваше дело.
    Последний раз редактировалось Кичай Данил; 07.12.2020 в 13:26. Причина: дополнил

  7. #7
    самый главный Аватар для Игорь Гапонов
    Регистрация
    03.03.2010
    Адрес
    Одесса
    Возраст
    12
    Сообщений
    3,156

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    2 диттер. Асинхронный USB-аудио в линухе решает все проблемы, например, та же аманера (немного надо, как говорят- сам не пробовал, потанцевать для дсд-нэйтив). ТС просто предлагает многоканал с фильтрацией формировать в компе и эти потоки отправлять в железо хоть в потоке, хоть не в риал тайм (последнее - практически точность обработки не ограничена, если время обработки особо не напрягает - складываем обработанное в отдельный файл и из него потом выливаем в железо). Для этого существуют соотв. плагины джек и алса. По железу, если требуется, например, 8 потоков (четырёх полоска или кинотеатр 7+1), то нужно четыре аманеры. И забываем про SPI или I2S из малин-олвинеров навсегда.

    Я так думаю, что смысл ветки в том, что ТС доверяет своим алгоритмам обработки больше, чем готовым известным (обычно закрыты и хрен разберёшься, шо там накручено "правильно/неправильно"). Вот и всё.
    Электричество дисциплинирует

  8. #8
    Завсегдатай Аватар для ditter
    Регистрация
    04.07.2004
    Адрес
    RUS
    Возраст
    50
    Сообщений
    1,068

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    Цитата Сообщение от Игорь Гапонов Посмотреть сообщение
    По железу, если требуется, например, 8 потоков (четырёх полоска или кинотеатр 7+1), то нужно четыре аманеры.
    угу, сравните это с ценой чипса ADAU1701 на али, ну ладно, готовой платы в чипдипе разница от 10 до 30 раз а потом я как то не уверен что все 4 платки нормально отработают от одного хаба усб.
    +
    а я ведь еще пытался аффтору намекнуть что кроме фир/пыр нужно еще как минимум крутить задержку в каждом канале иначе это будет просто решение абстрактной математической задачи- обсчет фир силами CPU. но никак не программный кроссовер.
    аффтор копнул и освоил тему на глубоком уровне, это просто констатация факта, но вот практическое применение какое ? я его не вижу, о чем и написал.
    * если есть желание сделать чего либо эдакого то почему бы не сделать "обертку" над тем же пульсаудио, которая выдавала бы в терминал (UART/I2C) все параметры текущего звукового потока (уровень громкости, бит,сэмпл и т.д)
    ** ну или просто включить обещанный в том же пульсаудио встроенный преобразователь форматов + его терминальное управление и перенастройка на лету
    вот это стоящие вещи

  9. #9
    самый главный Аватар для Игорь Гапонов
    Регистрация
    03.03.2010
    Адрес
    Одесса
    Возраст
    12
    Сообщений
    3,156

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    А кто мешает вам купить/сделать внешнюю юэсби ЗК с нужным оптимумом выхлоп/упрвление/цена? Ведь, "аманеромания" - лишь пример. И не вижу в ваших "звёздочках" ни одного достоинсва - весь обмен интерактивный возможен через юэсби-ауди, причём, в линухе без драйверов ДОЛЖНО работать. Карту выбираете тщательно (включая отзывы по практике под линухом, например, на сайте студийщиков-музыкантов rrrmмедиа... да, надо поработать глазами-мозгом) и пипец.
    Электричество дисциплинирует

  10. #10
    Частый гость Аватар для Traktorist3d
    Регистрация
    06.01.2015
    Адрес
    Хабаровск, Камчатка
    Сообщений
    472

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    Цитата Сообщение от ditter Посмотреть сообщение
    я рад за нее, но у железки на котором "крутится" этот Linux вместе с нужной нам ALSA, всего лишь 1 аппаратный порт I2S выведен наружу, т.е. от выводов процика на плату.
    *для многоканалки нужно несколько портов (каждый дает только 2 канала) или чтобы был вывод в TDM который выдает по одним и тем же выводам аж до 8 каналов.
    может быть можно както на скоростном SPI вымутить TDM но к чему такие заморочки когда полно ДСП камешков уже готовых.
    **т.е. все кроссоверы и остальное уходят куда им и положено - в ДСП. там же задержки и вся остальная обработка звука которая может понадобиться.
    и даже сделано внешнее управление к ДСП - ставь крутилки, кнопки, светодиоды.
    вот собственно и вопрос - каким боком тут ваше творение ???
    Миникомп beaglebone, может выводить 8 каналов pcm через i2s, или 4 канала dsd

  11. #11
    Новичок
    Автор темы
    Аватар для Кичай Данил
    Регистрация
    12.12.2016
    Сообщений
    75

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    https://github.com/kichay/ladspa-fir...le/asound.conf - добросил в репозиторий пример конфигурационного файла ALSA. Микширование тут добавлено, так как данная конфигурация предназначена для работы без PulseAudio сервера.
    Последний раз редактировалось Кичай Данил; 22.12.2020 в 13:49. Причина: актуализировал

  12. #12
    Завсегдатай Аватар для Михаил45
    Регистрация
    09.03.2007
    Адрес
    Санкт-Петербург
    Возраст
    62
    Сообщений
    2,124

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

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

  13. #13
    Новичок
    Автор темы
    Аватар для Кичай Данил
    Регистрация
    12.12.2016
    Сообщений
    75

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    Сделал возможность работы нескольких КИХ фильтров вокруг одного буфера. Теперь починена опция, позволяющая задавать задержки для полос. Применена более рациональная (на уровне инструкций процессора) логика адресации буфера фильтра. Теперь вход и выходы кроссовера имеют текстовые метки, которыми удобно оперировать в конфигурационном файле asound.conf. Обновлён пример конфигурации asound.conf.
    Использование общего буфера позволяет экономить на инструкциях процессора в сравнении с по-канальным использованием фильтров с отдельными буферами. Длина буфера округлена вверх до ближающей степени двойки с целью оптимизации адресации внутри буфера это существенно повысило производительность фильтра, и немного подняло требования к потреблению памяти.
    Добавил в репозиторий "бонус" в виде фреймворка для LabVIEW. С его помощью вы можете облегчить расчёты собственных КИХ фильтров. Фреймворк включает VI для прямого и обратного дискретных преобразований Фурье (НЕ быстрых/FFT). В LabVIEW при помощи данного фреймворка можно очень просто и удобно строить необходимые графики и многое другое.
    Нажмите на изображение для увеличения. 

Название:	FIR.png 
Просмотров:	79 
Размер:	24.4 Кб 
ID:	386952
    Нажмите на изображение для увеличения. 

Название:	frequency response.png 
Просмотров:	66 
Размер:	17.2 Кб 
ID:	386951
    Последний раз редактировалось Кичай Данил; 26.12.2020 в 07:23.

  14. #14
    Новичок
    Автор темы
    Аватар для Кичай Данил
    Регистрация
    12.12.2016
    Сообщений
    75

    По умолчанию Re: Генератор FIR/КИХ LADSPA плагинов для Linux Audio

    На данный момент планирую оптимизировать КИХ буфер, - использовать двухсвязанный кольцевой список с дополнительными связями. Также планирую добавить возможность сборки кроссовера с применением параллельного умножителя и сумматора инструкциями AVX/SSE, что даст прирост производительности фильтра до 8ми раз. Возможно подумаю и над CUDA, если захочу обслуживать длиннющие фильтры.
    Сама тема, как я вижу, мало кому интересна из-за возможной неочевидности применения этого кроссовера. Тему я закрою, позже выложу описание конкретной системы с инструкцией её построения, возможно кому-либо оно пригодится...

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •