Как передать мой аудиовыход через фильтр высоких частот в ALSA?

Да, если у вас не самое последнее ядро, при использовании устройств цикла в Linux возникают значительные накладные расходы: данные, к которым осуществляется доступ через устройство цикла, должны проходить через два уровня файловой системы, каждый из которых выполняет свои собственное кеширование, поэтому данные дважды кэшируются, тратя много памяти (печально известная проблема «двойного кеширования»)

Помимо случайного использования, лучшими альтернативами было бы использование выделенного раздела или chroot , поэтому данные могут быть доступны напрямую.

Или используйте последнее ядро, проблема исправлена ​​в linux 4.4 и новее :

Более быстрое и экономичное устройство цикла с поддержкой прямого и асинхронного ввода-вывода

В этом выпуске добавлена ​​поддержка прямого ввода-вывода и асинхронного ввода-вывода для блочного устройства контура. Использование прямого ввода-вывода и AIO в резервном файле цикла чтения / записи дает несколько преимуществ: избегается двойного кеширования благодаря прямому вводу-выводу, который значительно снижает использование памяти; в отличие от прямого ввода-вывода в пользовательском пространстве, закрепление страниц не требует затрат; в некоторых случаях позволяет избежать переключения контекста, поскольку можно избежать одновременных отправок. См. Коммиты для тестов.

4
30.11.2016, 01:11
1 ответ

Вот соответствующий раздел из моего ~ / .asoundrc . Мои динамики подключены к аудиоустройству USB, которое отображается как hw: 3 для ALSA. В моей личной настройке уже есть устройство hw3mix , как описано здесь , которое микширует несколько клиентских потоков на hw: 3 . Возможны и другие варианты, как показано в закомментированных строках:

pcm.hw3highpass {
    type ladspa
    slave.pcm "plug:hw3mix";
    # you can choose a different hardware device (no mixing) like this:
#    slave.pcm "plughw:0,0";
    # and you can even specify basic mixing in the same line:
#    slave.pcm "plug:dmix:0"

    # but note that the following doesn't work, we need 'plug' to
    # convert to/from floating point
#    slave.pcm "hw3mix";

    path "/usr/lib/ladspa";
    plugins [{
        label hpf
        input {
            controls [ 1000 ]
        }
    }]
    hint {
        show on
        description "Highpass filter for hw:3"
    } 
}

pcm.!default plug:hw3highpass

Фильтр высоких частот - это плагин LADSPA (метка hpf ). Доступны и другие плагины, которые могут быть полезны в моей жизненной ситуации, например, для добавления компрессора .

Плагин plug , который я вызываю дважды, представляет собой несколько волшебный плагин, который выполняет автоматическое преобразование формата. Это необходимо для взаимодействия с LADSPA, которому нужна плавающая точка. Вы можете увидеть цепочку фильтров и наблюдать за тем, что выполняется преобразование с плавающей запятой, выполнив команду aplay -v some.wav . Без префикса plug: в определении подчиненного устройства hw3mix вы получите непонятное сообщение об ошибке «ALSA lib pcm_params.c: 2162: (snd1_pcm_hw_refine_slave) Slave PCM not usable». Без plug: в псевдониме по умолчанию в последней строке вы получите еще одно непонятное сообщение об ошибке «aplay: set_params: 1292: Тип доступа недоступен».Ура Linux!

Я задаю и отвечаю на свой вопрос, потому что документация ALSA была непонятной, а другие решения, которые я нашел в сети, были излишне сложными - либо с использованием числового идентификатора id вместо метки ] для раздела плагинов LADSPA; или определение двух дополнительных именованных устройств для ручного преобразования целых чисел с плавающей точкой <-> вместо использования префикса plug: , как показано здесь; или без упоминания возможности алиасинга непосредственно для plug: ... устройства, как я сделал в последней строке. Я был удивлен, обнаружив, насколько проста конфигурация, и насколько полезной и мощной может быть ALSA / LADSPA, когда человек понимает основы.

Я нашел учебник Фолькера Шаца «Внимательный взгляд на ALSA» , незаменимым для выяснения некоторых из этих вещей. Очевидно, ALSA немного изменилась с момента написания его учебника, так как, например, он говорит, что никогда не заставлял Dmix работать, и он говорит, что псевдонимы для устройств с аргументами недопустимы (мой pcm.default такой пример псевдоним).

3
27.01.2020, 20:57

Теги

Похожие вопросы