On-Line разговоры: маскировка голоса (Часть 2)
В предыдущей части был расмотрен вариант с использованием JACK и PulseAudio.
А теперь попробуем обойтись без PulseAudio. И так, начнём.
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-режиме работает. Короче говоря, всё плохо с этим скайпом. Не знаю, куда ещё рыть. :'(