On-Line разговоры: маскировка голоса (Часть 2)

В предыдущей части был расмотрен вариант с использованием JACK и PulseAudio.
А теперь попробуем обойтись без PulseAudio. И так, начнём.

JACK+ALSA

0. Как и в предыдущий раз, нам потребуется пакет jack-rack, А также иогут пригодиться пакеты: qjackctl и tap-plugins. Кстати, tap-plugins - не единственные фильтры LADSPA присутствующие в портеджах, другие наборы плагинов вы можете найти по команде $ eix -csS ladspa

1. Настройте и запустите jackd. В конкретном случе это выглядит так:

% cat .jackdrc
/usr/bin/jackd -r -dalsa -dhw:0 -r48000 -p4096 -n4 -s

Как вы, наверно, уже успели заметить, запуск jackd немного изменился. В первую очередь это связано с тем, что skype очень привередлив к стабильности входящего потока и лучше размер периода и буфер поставить как можно больше. Или же, вы можете попробовать запустить jackd в режиме реального времени, предварительно настроив систему подобающим образом.

2. Настройте PCM устройство ALSA для использования совместно c JACK-RACK. Для этого добавьте в $HOME/.asoundrc либо в /etc/asound.conf:

pcm.jackrack {
        type jack
        playback_ports {
                0 jack_rack:in_1
                1 jack_rack:in_2
        }
        capture_ports {
                0 jack_rack:out_1
                1 jack_rack:out_2
        }
}

pcm.jackrackplug {
        type plug
        slave.pcm jackrack
}

4. Запустите jack-rack -n и настройте цепочку фильтров по своему вкусу.

5. Соедините в JACK выходы system:capture_1 и system:capture_2 с входами jack_rack:in_1 и jack_rack:in_2, можно через qjackctl, или в консоли:

jack_connect "system:capture_1" "jack_rack:in_1"
jack_connect "system:capture_2" "jack_rack:in_2"

6. В итоге, после назначения в настройках целевой программы устройства "jackrackplug (plug)" для записи(микрофона), всё будет готово.

Ниже пример изменённого скрипта из предыдущей части для запуска скайпа с маскировкой голоса.
Обязательно протестируйте на echo123, прежде чем делать настоящий звонок!

#! /bin/bash

# Set path to saved filters chain
: ${FILTERS_CHAIN:="$HOME/MyDocuments/sounds/sound/skype"}

if [[ -x "$(which qjackctl)" ]]; then
        qjackctl -s &
else
        /usr/bin/jackd -r -dalsa -dhw:0 -r48000 -p4096 -n4 -s &
fi
sleep 3

jack-rack -n "$FILTERS_CHAIN" &
sleep 2

echo "Disconnect all JACK clients connected to system:capture"
jack_lsp -c | grep -q -P "^\s+system:capture" && \
jack_lsp -c | grep -B 1 -s -P "^\s+system:capture" | grep -v "^\-\-$" | sed s/"^\s\+"// |\
sed s/'^\|$'/'"'/g | xargs -r -L2 jack_disconnect

echo  "Make connections"
jack_connect "system:capture_1" "jack_rack:in_1"
jack_connect "system:capture_2" "jack_rack:in_2"

skype

killall jack-rack
killall jackd
killall qjackctl

Вот мы и разобрали два варианта обработки потока с помощью JACK.

Какие ещё могут быть методы? Давайте посмотрим.

  • Применение фильтров LADSPA через модули PulseAudio. При этом отпадает необходимость в JACK. Но вам придется вручную настраивать фильтры, никаких крутилок/вертелок типа jack-rack пока не нашлось.
  • Применение фильтров LADSPA через LADSPA-плагин ALSA. Нет необходимости ни в джеке ни в пульсе. Круто! Но, я, на данный момент, решительно не понимаю как передавать звуковой поток с микрофона на определеннное PCM устройство. Если решу этот вопрос, то откроется ещё ряд методов, например таких как использование сторонних конвертеров через плагин file.
  • Ну, и для любителей, есть возможность использовать мосты созданные с помощью виртуальной звуковой карты (snd-aloop).

Продолжение следует...

Первая часть

мегореспектище за инфу!!!!

мегореспектище за инфу!!!! заинтересовало!!! буду пробовать и прикалываться! ))

P.S. может на работе какому-нибудь оператору голос масяни прикручу )))

Нагуглил эту статью в надежде

Нагуглил эту статью в надежде сделать так, чтобы skype не падал при работе через jack. Т.е. не сам скайп как процесс падает, а его jack connections отваливаются. Jack висит демоном (комп - студия), как описано здесь: http://en.gentoo-wiki.com/wiki/JACK , /etc/asound.conf тоже был взят оттуда же, использовался alsa-jack-plugin. Замена alsa-jack-plugin на jack-rack с пустой цепью фильтров и соответственно замена asound.conf на указанный в этой статье ничего не дала. Выставление большого буфера тоже не помогло, зато latency стало неприемлемо большим. Jack кстати в realtime-режиме работает. Короче говоря, всё плохо с этим скайпом. Не знаю, куда ещё рыть. :'(

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".