1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wksuper-lark-release

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Введение

Lark — это бесплатное, лёгкое и мощное программное обеспечение для обработки звука (DSP). Оно предоставляет гибкий и масштабируемый способ проектирования аудиомаршрутов с высокой эффективностью, небольшими размерами и низкой задержкой, что позволяет вам создавать свою аудиосистему подобно конструктору.

Основные функции

  • Поддержка манипулирования аудиомаршрутами в реальном времени:
    • Загрузка и выгрузка блоков в реальном времени;
    • Изменение маршрутов в реальном времени;
    • Настройка параметров блоков в реальном времени.
  • Поддержка предварительно созданных блоков ввода/вывода:
    • file-reader, file-writer, stream-in, stream-out, alsa-capture, alsa-playback, tinyalsa-capture, tinyalsa-playback, portaudio-capture, portaudio-playback.
  • Поддержка предварительно созданных алгоритмических блоков:
    • gain, mixer, duplicator, multiplexer, interleave, de-interleave, format-adapter, delay, align, buffer, fade-in, fade-out;
    • speexdsp algo: speex-resampler, speex-preprocessor;
    • soundtouch algo: pitch, tempo, rate;
    • sox-effects: vol, flanger, tremolo, echos, chorus, oops, equalizer, highpass, lowpass и др.
  • Широкая поддержка настройки блоков.
  • Поддержка до 32 конечных точек ввода и 32 конечных точек вывода для каждого блока.
  • Поддержка временных меток для каждого кадра / каждого образца.
  • Поддержка инструмента отладки в реальном времени:
    • Печать статуса;
    • Создание снимка маршрутов в файл;
    • Изменение уровня журнала;
    • Сброс журнала в файл;
    • Сохранение аудиоданных каждого блока в файлы.
  • Кроссплатформенность:
    • Linux (x86_64, aarch64, armv7l);
    • MacOS (x86_64);
    • Android (aarch64).

Начало работы

Lark состоит из базовой разделяемой библиотеки liblark.so, различных дополнительных блоков (динамически загружаемых библиотек), таких как libblkmixer.so, и дополнительной утилиты отладки lkdb. На основе Lark вы можете легко создавать простые или сложные аудиомаршруты по своему усмотрению, запускать/останавливать любой маршрут в реальном времени или устанавливать/получать параметры любого блока в реальном времени.

Шаг 1

Поскольку Lark зависит от библиотеки klogging, сначала необходимо установить klogging. Перейдите на https://gitee.com/wksuper/klogging, чтобы установить klogging. В качестве альтернативы в этом репозитории также доступна предварительно собранная библиотека libklogging.so. Она будет установлена вместе с установкой Lark.

Шаг 2

Установите Lark на свой компьютер с Linux.

cd lark-release
sudo ./install.sh
sudo ldconfig

Вы можете использовать sudo ./uninstall.sh для удаления Lark, когда он вам не нужен.

Шаг 3

Запустите аудиомаршрут(ы).

Пример 1: Запустить один маршрут для воспроизведения стереофонического музыкального файла

RouteA

libblkfilereader.so     libblkalsaplayback.so
*******************      ******************
*                 *      *                *
* filereader_0   *0--->0* alsaplayback_0 *
*                 *      *                *
*******************      ******************
x86_64-linux-gnu/bin/larkexample1

Если ошибок нет, музыкальный файл должен начать воспроизводиться. Исходный код этого примера показан в larkexample1.cpp.

Пример 2: Запустить один маршрут для воспроизведения музыки, где два входных файла смешиваются с отдельным усилением

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***


  • dummykwd_0 0<--0 * * * * 0<--0 deinterleave_0 0<--0 0<--0 alsacapture_0 * * streamin_0 *
  •        *     *            *     *           *     *                     *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*                  *
  • filewriter_0 0<--1 * * * * * * 1<--0 mixer_0 1<---1 speexresampler_0 *



ffplay -i pipe:0 -f s32le -ar 48000 -ac 2 -autoexit

Если ошибок нет, начнётся воспроизведение, и на экране ffplay будет отображаться аудиоспектр следующим образом.

larkexample7-1

В другой оболочке:

lkdb status    # Показывает статус lark. Обнаружено, что имя блока фильтра высоких/низких частот — «blksoxeffect_highpass_0» / «blksoxeffect_lowpass_0», соответственно.
lkdb setparam RouteA blksoxeffect_highpass_0 0 800    # Только музыкальные сигналы выше 800 Гц идут в левый динамик

Будет отображаться аудиоспектр.

larkexample7-2

Советы: В спектре ffplay красный цвет означает левый канал, а зелёный — правый. Если в определённый момент времени на определённой частоте отображается серый цвет, это означает, что мощность левого и правого каналов на этой частоте в этот момент одинакова.

lkdb setparam RouteA blksoxeffect_lowpass_0 0 800    # Только музыкальные сигналы ниже 800 Гц идут в правый динамик

Отобразится аудиоспектр.

larkexample7-3

Изменение цвета спектра 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 также может управлять аудиомаршрутами, делать снимки маршрутов, изменять уровень логирования, настраивать дамп аудиоданных и т. д.

Для запуска того же маршрута, что и в примере 1, через 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.

Приложения с открытым исходным кодом на основе Lark

  • kplay — проигрыватель WAV-файлов с настройкой звука в реальном времени.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Unlicense
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/wksuper-lark-release.git
git@api.gitlife.ru:oschina-mirror/wksuper-lark-release.git
oschina-mirror
wksuper-lark-release
wksuper-lark-release
master