#!/bin/bash # # ▗▄▖ ▄▄ █ #▗▛▀▜ ▐▛▀ ▀ #▐▙ ▟██▖▐▙█▙ ▟█▙ ▐███ ██ ▝█ █▘ # ▜█▙ ▘▄▟▌▐▛ ▜▌▐▛ ▜▌ ▐▌ █ ▐█▌ # ▜▌▗█▀▜▌▐▌ ▐▌▐▌ ▐▌ ██▌ ▐▌ █ ▗█▖ #▐▄▄▟▘▐▙▄█▌▐█▄█▘▝█▄█▘ ▐▌ ▗▄█▄▖ ▟▀▙ # ▀▀▘ ▀▀▝▘▐▌▀▘ ▝▀▘ ▝▘ ▝▀▀▀▘▝▀ ▀▘ # ▐▌ # # a tts bash script by Christos Angelopoulos, February 2022 #Attempts to fix errors in wav files generated by sapo.sh (txt to wav) #using the all powerful https://github.com/coqui-ai/TTS FILE="$(yad --file-selection --filename=Desktop --height='400' --width='800' --title='Sapo-fix' --window-icon=$HOME/git/sapo/sapo-fix.png --hscroll-policy=never --vscroll-policy=never)" case $? in 0) ;; 1) exit ;; esac DIRECTORY=${FILE%/*}/ NAME=${FILE##*/} ####### FIXING ERRORS ONE BY ONE or EDIT THE FILE LINE BY LINE############ yad --image "$HOME/git/sapo/sapo.png" \ --height=40 --width=200 --title="${NAME} - Sapo" \ --text="Which lines do you want to fix?" \ --button=gtk-cancel:1 \ --button='All Lines':2 \ --button='Just Errors':3 \ --window-icon=$HOME/git/sapo/sapo.png case $? in 1) exit ;; 2) LINES_TO_EDIT="ALL" ;; 3) LINES_TO_EDIT="ERRORS" ;; esac if [[ $LINES_TO_EDIT == "ALL" ]] then TOTAL_ERRORS=$(cat "$DIRECTORY""Sapo_""$NAME"/"$NAME"sentenced.txt|wc -l) else TOTAL_ERRORS=$(cat "$DIRECTORY""Sapo_""$NAME"/errors.tsv|wc -l) fi ERROR_LINE=1 BROWSE_NEXT=false while [ $ERROR_LINE -le $TOTAL_ERRORS ] do if [[ $LINES_TO_EDIT == "ALL" ]] then CURRENT_ERROR_LINE=$ERROR_LINE ERROR_TEXT_LINE=$ERROR_LINE else CURRENT_ERROR_LINE=$(cat "$DIRECTORY""Sapo_""$NAME"/errors.tsv|head -$ERROR_LINE|tail +$ERROR_LINE) ERROR_TEXT_LINE=$(echo $CURRENT_ERROR_LINE|awk '{print $1}') fi ERROR_WAV="$(printf "%.6d" $ERROR_TEXT_LINE)".wav TEXT_TO_CORRECT="$(cat "$DIRECTORY""Sapo_""$NAME"/"$NAME"sentenced.txt|head -$ERROR_TEXT_LINE|tail +$ERROR_TEXT_LINE)" GO=false while [[ $GO == false ]] do if [[ $BROWSE_NEXT == true ]] then celluloid "$DIRECTORY""Sapo_""$NAME"/$ERROR_WAV & fi BROWSE_NEXT=false yad --image "$HOME/git/sapo/sapo.png" \ --height=40 --width=400 \ --title="Line $ERROR_TEXT_LINE ( of $TOTAL_ERRORS )- $NAME" \ --button=gtk-cancel:1 \ --button='▶️ Play Audio':2 \ --button='🔃 Re-Render':3 \ --button='✂️ Trim Clutter':4 \ --button='🗡 Split-Render':5 \ --button='🎵 Edit audio':7 \ --button='❌ Remove audio':6 \ --button='⬅️ Previous Line':8 \ --button='➡️ Next Line':0 \ --button='👉 Go To Line':10 \ --button='⏩ Browse Next':9 \ --text="Text of line $ERROR_TEXT_LINE ( of $TOTAL_ERRORS ): $TEXT_TO_CORRECT -What would you like to do?" \ --window-icon=$HOME/git/sapo/sapo.png case $? in 0) GO=true ;; 1) exit ;; 2) if [[ -e "$DIRECTORY""Sapo_""$NAME"/$ERROR_WAV ]];then celluloid "$DIRECTORY""Sapo_""$NAME"/$ERROR_WAV & else notify-send "There is no file ""$DIRECTORY""Sapo_""$NAME"/"$ERROR_WAV"".";fi ;; 3) s="$(yad --entry --width="600" --text="This is the original text of the line $ERROR_TEXT_LINE. Edit as you wish, then hit OK to render." --entry-text="$TEXT_TO_CORRECT" --window-icon=$HOME/git/sapo/sapo.png --title="Line $ERROR_TEXT_LINE - $NAME")";tts --text "$s" --out_path "$DIRECTORY""Sapo_""$NAME"/$ERROR_WAV ;; 4)sox -V3 "$DIRECTORY""Sapo_""$NAME"/$ERROR_WAV "$DIRECTORY""Sapo_""$NAME"/temp.wav silence 1 0.50 0.1% 1 0.5 0.1%;sox "$DIRECTORY""Sapo_""$NAME"/temp.wav "$DIRECTORY""Sapo_""$NAME"/$ERROR_WAV pad 0 0.5;rm "$DIRECTORY""Sapo_""$NAME"/temp.wav ;; 5)s="$(yad --entry --width="600" --text="Split the printed text roughly in half with the pipe symbol (|), so that it can be rendered in two batches: " --entry-text="$TEXT_TO_CORRECT" --window-icon=$HOME/git/sapo/sapo.png --title="Line $ERROR_TEXT_LINE - $NAME")";s1="$(echo $s|sed 's/|.*$//')";s2="$(echo $s|sed 's/^.*|//')"; echo $s1;echo $s2 ; tts --text "$s1" --out_path "$DIRECTORY""Sapo_""$NAME"/1temp.wav; tts --text "$s2" --out_path "$DIRECTORY""Sapo_""$NAME"/2temp.wav;sox "$DIRECTORY""Sapo_""$NAME"/1temp.wav "$DIRECTORY""Sapo_""$NAME"/2temp.wav "$DIRECTORY""Sapo_""$NAME"/$ERROR_WAV ; rm "$DIRECTORY""Sapo_""$NAME"/1temp.wav "$DIRECTORY""Sapo_""$NAME"/2temp.wav ;; 6) if [[ -e "$DIRECTORY""Sapo_""$NAME"/$ERROR_WAV ]];then rm "$DIRECTORY""Sapo_""$NAME"/$ERROR_WAV;notify-send "$DIRECTORY""Sapo_""$NAME"/"$ERROR_WAV"" has been deleted."; else notify-send "There is no file ""$DIRECTORY""Sapo_""$NAME"/"$ERROR_WAV"". Already deleted?";fi;GO=true ;; 7)audacity "$DIRECTORY""Sapo_""$NAME"/$ERROR_WAV ;; 8) GO=true; ERROR_LINE=$(($ERROR_LINE - 2)) ;; 9) BROWSE_NEXT=true; GO=true ;; 10) ERROR_LINE="$(yad --entry --height=40 --width=400 --text="Go To Line:" --entry-text="$ERROR_LINE" --window-icon=$HOME/git/sapo/sapo.png --title="Go To Line ")";((ERROR_LINE--));GO=true esac done ((ERROR_LINE++)) done sox "$DIRECTORY""Sapo_""$NAME"/*.wav "$DIRECTORY""Sapo_""$NAME"/"$NAME".wav yad --image "$HOME/git/sapo/sapo.png" --height=40 --width=400 --title="${NAME} - Sapo" --text="Reading of ""$NAME"" is complete!" --window-icon=$HOME/git/sapo/sapo.png