diff options
Diffstat (limited to 'voice_changer.sh')
-rwxr-xr-x | voice_changer.sh | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/voice_changer.sh b/voice_changer.sh new file mode 100755 index 0000000..b381dc5 --- /dev/null +++ b/voice_changer.sh @@ -0,0 +1,119 @@ +#!/bin/bash + +set -e + +MIC_NAME="" +MIC_SOURCE="" +SINK_SOURCE="" +SWAP_FLAG=0 + +function load_sinks () +{ + if [[ -z "$(pactl list short modules | grep "VoiceChangerSink")" ]]; then + pactl load-module module-null-sink sink_name=VoiceChangerSink + else + echo -e "\nSinks already loaded." + fi +} + +function configure_mic () +{ + MIC_NAME=$( pactl list source-outputs | grep -B 17 "WEBRTC VoiceEngine" | grep "Source Output \#" | sed -r "s|^.*\#||g" ) + MIC_SOURCE=$( pactl list source-outputs | grep -B 17 "WEBRTC VoiceEngine" | grep "Source\:" | sed -r "s|^.*\:\ ||g" ) + SINK_SOURCE=$( pactl list sources | grep -B 3 "VoiceChangerSink.monitor" | grep "Source \#" | sed -r "s|^.*\#||g" ) + MIC_DEFAULT=$( pactl list sources | grep -B 3 "alsa_input.usb-C-Media_Electronics_Inc._YMC_1040-00.mono-fallback" | grep "Source \#" | sed -r "s|^.*\#||g" ) +} + +function toggle () +{ + if [[ "$MIC_SOURCE" -ne "$SINK_SOURCE" ]]; then + pactl move-source-output "$MIC_NAME" "VoiceChangerSink.monitor" && $HOME/stuf/scripts/notification_wrapper.sh "\nMICROPHONE\nHAS BEEN MOVED TO SINK\n$SINK_SOURCE" "VOICHANG" + else + pactl move-source-output "$MIC_NAME" "$MIC_DEFAULT" && $HOME/stuf/scripts/notification_wrapper.sh "\nMICROPHONE\nHAS BEEN MOVED TO SINK\n$MIC_DEFAULT" "VOICHANG" + fi +} + +function normal () +{ + sox -t pulseaudio default -t pulseaudio VoiceChangerSink +} + +function bladewolf () +{ + if [[ $SWAP_FLAG -eq 1 || -z $( pgrep -f "sox" ) ]]; then + pgrep -f "sox" >/dev/null 2>&1 && pkill -f "sox" + while [[ -n $(pgrep -f "sox") ]]; do + : + done + nohup sh -c "sox -t pulseaudio default -p pitch -225 | sox - -m -t pulseaudio default -t pulseaudio VoiceChangerSink pitch +75 echo 0.4 0.8 40 0.8 gain +7.5 bass +25" >/dev/null 2>&1 & + else + echo -e "\nOne voice is already loaded and a swap wasn't explicitly requested." + fi +} + +function demonbot () +{ + if [[ $SWAP_FLAG -eq 1 || -z $( pgrep -f "sox" ) ]]; then + pgrep -f "sox" >/dev/null 2>&1 && pkill -f "sox" + while [[ -n $(pgrep -f "sox") ]]; do + : + done + nohup sh -c "sox -t pulseaudio default -p pitch -225 | sox - -m -t pulseaudio default -t pulseaudio VoiceChangerSink pitch -75 echo 0.4 0.8 40 0.8 gain +7.5 bass +25" >/dev/null 2>&1 & + else + echo -e "\nOne voice is already loaded and a swap wasn't explicitly requested." + fi +} + +function looper () +{ + # gain +7.5 + if [[ $SWAP_FLAG -eq 1 || -z $( pgrep -f "sox" ) ]]; then + pgrep -f "sox" >/dev/null 2>&1 && pkill -f "sox" + while [[ -n $(pgrep -f "sox") ]]; do + : + done + nohup sh -c "sox -t pulseaudio default -p pitch +15 | sox - -m -t pulseaudio default -t pulseaudio VoiceChangerSink pitch -15 echo 0.4 0.8 30 0.75 bass +25 treble +12" >/dev/null 2>&1 & + else + echo -e "\nOne voice is already loaded and a swap wasn't explicitly requested." + fi +} + +function unload_sinks () +{ + read -r -p "Are you sure? [y/N] " response + response=${response,,} # tolower + if [[ "$response" =~ ^(yes|y)$ ]]; then + pactl move-source-output "$MIC_NAME" "$MIC_DEFAULT" && $HOME/stuf/scripts/notification_wrapper.sh "\nMICROPHONE\nHAS BEEN MOVED TO SINK\n$MIC_DEFAULT" "VOICHANG" + pgrep -f "sox" >/dev/null 2>&1 && pkill -f "sox" + while [[ -n $(pgrep -f "sox") ]]; do + : + done + pactl list short modules | grep "VoiceChangerSink" | cut -f1 | xargs -L1 pactl unload-module + echo -e "\nSinks unloaded." + else + echo -e "\nSink unloading aborted." + fi +} + +[[ -z $( grep -E "^alsa_output.pci-0000_03_04.0.analog-stereo$" $HOME/.config/pulse/* ) || -z $( grep -E "^alsa_input.pci-0000_03_04.0.iec958-stereo$" $HOME/.config/pulse/* ) ]] \ +&& $HOME/stuf/scripts/notification_wrapper.sh "\nSYSTEM CHANGE DETECTED, TERMINATING PROGRAM" "VOICHANG" && exit + +load_sinks +looper +configure_mic + +while getopts "hlunrt" opt; do + case $opt in + h) echo -e "usage: $0 [-h help] [-n notify-send sinks] [-l load sinks] [-u unload sinks] [-r reset sinks]\n\nSuggested Keyboard Shortcuts:\n"; printf '%s\n' "${SHORTCUTS[@]}"; exit ;; # PRINT HELP IN TERMINAL + l) load_sinks; exit ;; # LOAD ALL SINKS + u) unload_sinks; exit ;; # UNLOAD ALL SINKS + # n) notify_sinks; exit ;; # LIST ALL SINKS VIA WRAPPER + # r) reset_sinks; exit ;; # RESET ALL SINKS + t) toggle; exit;; + ?) echo "error: option -$OPTARG is not implemented"; exit ;; + esac +done + + +#trap 'echo "penis"' SIGINFO +#trap cleanup EXIT |