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