On-Line разговоры: маскировка голоса (Часть 1)
Для ОС с winapi есть множество программ для изменения голоса при разговорах по сети.
В среде Linux этот вопрос освещается лишь вскользь. Найти же полноценное руководство по этому делу и вовсе не реально.
В таких условиях начинался наш поиск.
Вскоре выяснилось, что под Linux созданы очень мощные инструментарии обработки звуковых потоков. И есть множество способов их применения для достижения искомой цели. Ниже расмотрены и ещё будут расмотрены несколько таких вариантов. Но начнём с первого успешного.
0. Следующие пакеты должны присутствовать в вашей системе: jack-rack
, pulseaudio
. Следующие пакеты опциональны: qjackctl
, pavucontrol
, tap-plugins
1. Настройте и запустите jackd. В конкретном случе это выглядит так:
% cat .jackdrc /usr/bin/jackd -r -dalsa -dhw:0 -r48000 -p1024 -n2
2. Настройте и запустите PulseAudio
Как описано в ссылке, если вы хотите постоянно использовать PulseAudio через JACK, то пропачьте /etc/pulse/default.pa следующим образом:
--- /etc/pulse/default.pa.orig 2010-10-17 01:46:23.000000000 +0400 +++ /etc/pulse/default.pa 2010-10-17 01:47:02.000000000 +0400 @@ -47,15 +47,17 @@ #load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input #load-module module-null-sink #load-module module-pipe-sink +load-module module-jack-source +load-module module-jack-sink ### Automatically load driver modules depending on the hardware available -.ifexists module-udev-detect.so -load-module module-udev-detect -.else +#.ifexists module-udev-detect.so +#load-module module-udev-detect +#.else ### Alternatively use the static hardware detection module (for systems that ### lack udev support) -load-module module-detect -.endif +#load-module module-detect +#.endif ### Automatically load driver modules for Bluetooth hardware .ifexists module-bluetooth-discover.so
Либо, если хотите использовать такую конфигурацию PulseAudio временно, то запустите его как:
pulseaudio -L module-jack-sink -L module-jack-source
Если вы испытываете проблемы с производительностью PulseAudio, то можете в /etc/pulse/daemon.conf подправить:
default-fragments = 14 default-fragment-size-msec = 5
Увеличивайте значение default-fragments до тех пор, пока pulseaudio не перестанет ругаться на *run (не забывайте рестартить демона после каждой правки конфига).
4. Запустите jack-rack -n
и настройте цепочку фильтров по своему вкусу.
5. Настройте потоковые соединения в JACK согласно схеме:
В итоге, после назначения в pavucontrol
для воспроизведения и записи в целевой программе Jack sink и Jack source соответственно, у нас получится нечто вроде
Ниже пример наколенного скрипта для запуска скайпа с маскировкой голоса.
Обязательно протестируйте на 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 -p1024 -n2 & fi sleep 3 jack-rack -n "$FILTERS_CHAIN" & sleep 2 if pulseaudio --check; then pactl list | grep -q module-jack-sink ||\ pactl load-module module-jack-sink pactl list | grep -q module-jack-source ||\ pactl load-module module-jack-source else pulseaudio -L module-jack-sink -L module-jack-source --start fi echo "Disconnect all JACK clients" jack_lsp -c | grep -q -P "^\s+" && \ jack_lsp -c | grep -B 1 -s -P "^\s+" | 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" jack_connect "jack_rack:out_1" "PulseAudio JACK Source:front-left" jack_connect "jack_rack:out_2" "PulseAudio JACK Source:front-right" jack_connect "PulseAudio JACK Sink:front-left" "system:playback_1" jack_connect "PulseAudio JACK Sink:front-right" "system:playback_2" skype killall jack-rack killall jackd killall qjackctl
Продолжение следует...
- Блог пользователя - Шаманыш
- Для комментирования войдите или зарегистрируйтесь
Занятно.
Занятно.
Да я чайник ;)
Не совсем понятно
А где тут у вас задаются параметры маскировки? Что мне нужно делать если я хочу усилит или уменьшить эффект маскировки?
И не могли бы Вы выложить демонстрацию результата замаскированного голоса?
Буду рад, если ответите хотя бы на 1 вопрос. Спасибо.