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

Для ОС с winapi есть множество программ для изменения голоса при разговорах по сети.
В среде Linux этот вопрос освещается лишь вскользь. Найти же полноценное руководство по этому делу и вовсе не реально.
В таких условиях начинался наш поиск.

Вскоре выяснилось, что под Linux созданы очень мощные инструментарии обработки звуковых потоков. И есть множество способов их применения для достижения искомой цели. Ниже расмотрены и ещё будут расмотрены несколько таких вариантов. Но начнём с первого успешного.

LADSPA

JACK+PulseAudio

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 вопрос. Спасибо.

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

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