Lark — это бесплатное, лёгкое и мощное программное обеспечение для обработки звука (DSP). Оно предоставляет гибкий и масштабируемый способ проектирования аудиомаршрутов с высокой эффективностью, небольшими размерами и низкой задержкой, что позволяет вам создавать свою аудиосистему подобно конструктору.
Lark состоит из базовой разделяемой библиотеки liblark.so, различных дополнительных блоков (динамически загружаемых библиотек), таких как libblkmixer.so, и дополнительной утилиты отладки lkdb. На основе Lark вы можете легко создавать простые или сложные аудиомаршруты по своему усмотрению, запускать/останавливать любой маршрут в реальном времени или устанавливать/получать параметры любого блока в реальном времени.
Поскольку Lark зависит от библиотеки klogging, сначала необходимо установить klogging. Перейдите на https://gitee.com/wksuper/klogging, чтобы установить klogging. В качестве альтернативы в этом репозитории также доступна предварительно собранная библиотека libklogging.so. Она будет установлена вместе с установкой Lark.
Установите Lark на свой компьютер с Linux.
cd lark-release
sudo ./install.sh
sudo ldconfig
Вы можете использовать sudo ./uninstall.sh для удаления Lark, когда он вам не нужен.
Запустите аудиомаршрут(ы).
RouteA
libblkfilereader.so libblkalsaplayback.so
******************* ******************
* * * *
* filereader_0 *0--->0* alsaplayback_0 *
* * * *
******************* ******************
x86_64-linux-gnu/bin/larkexample1
Если ошибок нет, музыкальный файл должен начать воспроизводиться. Исходный код этого примера показан в larkexample1.cpp.
RouteA
libblkfilereader.so libblkdeinterleave.so libblkgain.so libblkmixer.so libblkinterleave.so libblkpaplayback.so
******************* ****************** ************* ************** ******************* ******************
* * * *0-->0* *0-------->0* *0---->0* * * *
* filereader_0 *0-->0* deinterleave_0 *1-->1* *1---+ * mixer_0 * * interleave_0 *0--->0* paplayback_0 *
* * * * * * | +-->1* * +->1* * * *
******************* ****************** * * | | ************** | ******************* ******************
* gain_0 *
``` **Пример 3: Запуск двух маршрутов, один для воспроизведения музыки, другой для захвата микрофона с распознаванием ключевых слов**
**************** ****************** ***************
RouteA * * * * * *
* filereader_0 *0--->0* alsaplayback_0 *0--->0* streamout_0 *
* * * * * *
**************** ****************** ********|******
v
========================================================================================================================================================[FIFO]===== | ************** ************** ************* *********************** ****************** *********** ***************** v***
* * * * * * *1<--1* * * * * * * *
************** * * * * * * ****************** * * ***************** 0* * * * * * * * * v duplicator_00<--0* dummybf_0 0<--0 speexpreprocessor_0 * * align_0 * ***0 * * * 1<--1 (aec, denoise, ...) * * * RouteB * deinterleave_1 * * * * * * * * * 01 * * * * * * * * v v **************** * * * * * * * * *********** ******01
* * * * * * *16<------------------------1* * * *0<---0* *
ffplay -i pipe:0 -f s32le -ar 48000 -ac 2 -autoexit
Если ошибок нет, начнётся воспроизведение, и на экране ffplay будет отображаться аудиоспектр следующим образом.
В другой оболочке:
lkdb status # Показывает статус lark. Обнаружено, что имя блока фильтра высоких/низких частот — «blksoxeffect_highpass_0» / «blksoxeffect_lowpass_0», соответственно.
lkdb setparam RouteA blksoxeffect_highpass_0 0 800 # Только музыкальные сигналы выше 800 Гц идут в левый динамик
Будет отображаться аудиоспектр.
Советы: В спектре ffplay красный цвет означает левый канал, а зелёный — правый. Если в определённый момент времени на определённой частоте отображается серый цвет, это означает, что мощность левого и правого каналов на этой частоте в этот момент одинакова.
lkdb setparam RouteA blksoxeffect_lowpass_0 0 800 # Только музыкальные сигналы ниже 800 Гц идут в правый динамик
Отобразится аудиоспектр.
Изменение цвета спектра ffplay в реальном времени подтверждает, что эффекты sox на маршруте lark действуют в реальном времени.
Исходный код этого примера показан в larkexample7.cpp.
Блог автора: <Мой инженерный папа — серия DIY для аудиоприложений> демонстрирует использование lark для решения повседневных аудиозадач с помощью серии коротких рассказов.
lkdb
в реальном времениКогда lark работает в процессе, утилита отладки lkdb
может взаимодействовать с ним, чтобы получать информацию от lark и отправлять ему команды.
Использование:
lkdb status [--dot]
- Вывести текущий статус работы lark
- При включённой опции '--dot' вывести точечный код
lkdb newroute ROUTENAME
- Создать маршрут с именем
lkdb newblock ROUTENAME SOLIB ISFIRST ISLAST [ARGS]
- Создать блок на маршруте из библиотеки динамической загрузки
lkdb newlink ROUTENAME RATE FORMAT CHNUM FRAMESIZEINSAMPLES SRCBLKNAME SRCBLKOUTEPIDX SINKBLKNAME SINKBLKINEPIDX
- Создать ссылку для соединения исходного блока и конечного блока на маршруте
lkdb start ROUTENAME
- Запустить маршрут
lkdb stop ROUTENAME
- Остановить маршрут
lkdb setparam ROUTENAME BLOCKNAME PARAMID [PARAMS]
- Установить параметр для блока в маршруте
lkdb getparam ROUTENAME BLOCKNAME PARAMID
- Получить параметр из блока в маршруте
lkdb delete ROUTENAME LINKNAME
- Удалить ссылку с маршрута
lkdb delete ROUTENAME BLOCKNAME
- Удалить блок и связанные ссылки с маршрута
lkdb delete ROUTENAME !
- Удалить весь маршрут
lkdb loglevel LEVEL
- Указать уровень ведения журнала: 0 = выключен, 1 = фатальный, 2 = ошибка, 3 = предупреждение, 4 = информация (по умолчанию), 5 = отладка, 6 = подробный
lkdb setdump DIRECTORY
- Включить дамп журнала и данных, когда DIRECTORY является допустимым путём
- Отключить дамп журнала и данных, когда DIRECTORY равен --
Помимо печати статуса в реальном времени, установки параметров, показанных в приведённых выше примерах, lkdb
также может управлять аудиомаршрутами, делать снимки маршрутов, изменять уровень логирования, настраивать дамп аудиоданных и т. д.
lkdb
, не требуется кодированиеВ одной оболочке:
x86_64-linux-gnu/bin/larkexample0 # Запустить lark
В другой оболочке:
$ lkdb newroute RouteA
Created RouteA
$ lkdb newblock RouteA libblkfilereader.so true false examples/kanr-48000_16_2.pcm
Created blkfilereader_0 from libblkfilereader.so on RouteA
$ lkdb newblock RouteA libblkalsaplayback.so false true
Created blkalsaplayback_0 from libblkalsapplayback.so on RouteA
$ lkdb newlink RouteA 48000 S16_LE 2 960 blkfilereader_0 0 blkalsaplayback_0 0
Created lnk_0 on RouteA
$ lkdb start RouteA # Должна начаться музыка
Started RouteA
$ lkdb stop RouteA
Stopped RouteA
$ lkdb delete RouteA !
Deleted RouteA
Исходный код этого примера можно найти в... Разделены на несколько маршрутов. Например, один ввод — alsacapture, другой ввод — echo-reference.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )