Files
soprano_to_rvc/launch_soprano_rvc.sh

261 lines
7.6 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Soprano TTS to RVC Pipeline Launcher
# This script helps you set up and run the soprano->RVC pipeline
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VENV_PATH="$SCRIPT_DIR/.venv"
RVC_DIR="$SCRIPT_DIR/Retrieval-based-Voice-Conversion-WebUI"
RVC_GUI="$RVC_DIR/gui_v1.py"
SOPRANO_SCRIPT="$SCRIPT_DIR/soprano_to_virtual_sink.py"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Print colored output
print_info() {
echo -e "${BLUE} ${NC}$1"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
print_header() {
echo ""
echo -e "${BLUE}═══════════════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE} $1${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════════════${NC}"
echo ""
}
# Check prerequisites
check_prerequisites() {
print_header "Checking Prerequisites"
# Check if virtual environment exists
if [ ! -d "$VENV_PATH" ]; then
print_error "Virtual environment not found at: $VENV_PATH"
exit 1
fi
print_success "Virtual environment found"
# Check if RVC GUI exists
if [ ! -f "$RVC_GUI" ]; then
print_error "RVC GUI not found at: $RVC_GUI"
exit 1
fi
print_success "RVC GUI found"
# Check if soprano script exists
if [ ! -f "$SOPRANO_SCRIPT" ]; then
print_error "Soprano script not found at: $SOPRANO_SCRIPT"
exit 1
fi
print_success "Soprano script found"
# Check if pactl is available (PulseAudio)
if ! command -v pactl &> /dev/null; then
print_error "pactl (PulseAudio) not found. Please install PulseAudio."
exit 1
fi
print_success "PulseAudio found"
}
# Display usage instructions
show_usage() {
print_header "Soprano TTS to RVC Pipeline"
echo "This script helps you run a text-to-speech pipeline where:"
echo " 1. You type text into the Soprano TTS script"
echo " 2. Soprano generates speech and outputs to a virtual sink"
echo " 3. RVC reads from that virtual sink and applies voice conversion"
echo " 4. RVC outputs the converted voice to your speakers/headphones"
echo ""
echo "Usage:"
echo " $0 [option]"
echo ""
echo "Options:"
echo " soprano - Start only the Soprano TTS virtual sink script"
echo " rvc - Start only the RVC realtime GUI"
echo " both - Start both in separate terminal windows (default)"
echo " help - Show this help message"
echo ""
}
# Start soprano script
start_soprano() {
print_header "Starting Soprano TTS Virtual Sink"
print_info "Activating virtual environment..."
source "$VENV_PATH/bin/activate"
print_info "Starting soprano_to_virtual_sink.py..."
print_info "This will create a virtual sink: soprano_to_rvc"
echo ""
python "$SOPRANO_SCRIPT"
}
# Start RVC GUI
start_rvc() {
print_header "Starting RVC Realtime GUI"
print_info "Activating virtual environment..."
source "$VENV_PATH/bin/activate"
print_info "Changing to RVC directory..."
cd "$RVC_DIR"
print_info "Starting RVC GUI..."
echo ""
print_warning "IMPORTANT: In the RVC GUI, select 'soprano_to_rvc.monitor' as your INPUT device!"
echo ""
sleep 2
python "$RVC_GUI"
}
# Start both in separate terminals
start_both() {
print_header "Starting Both Components"
print_info "This will open two terminal windows:"
print_info " 1. Soprano TTS Virtual Sink (for text input)"
print_info " 2. RVC Realtime GUI (for voice conversion)"
echo ""
# Detect terminal emulator
TERMINAL=""
if command -v gnome-terminal &> /dev/null; then
TERMINAL="gnome-terminal"
elif command -v konsole &> /dev/null; then
TERMINAL="konsole"
elif command -v xfce4-terminal &> /dev/null; then
TERMINAL="xfce4-terminal"
elif command -v alacritty &> /dev/null; then
TERMINAL="alacritty"
elif command -v kitty &> /dev/null; then
TERMINAL="kitty"
elif command -v xterm &> /dev/null; then
TERMINAL="xterm"
else
print_error "No suitable terminal emulator found"
print_info "Please start the components manually:"
print_info " Terminal 1: $0 soprano"
print_info " Terminal 2: $0 rvc"
exit 1
fi
print_success "Using terminal: $TERMINAL"
# Start soprano in new terminal
print_info "Starting Soprano TTS in new terminal..."
case "$TERMINAL" in
gnome-terminal)
gnome-terminal -- bash -c "cd '$SCRIPT_DIR' && bash '$0' soprano; exec bash" &
;;
konsole)
konsole -e bash -c "cd '$SCRIPT_DIR' && bash '$0' soprano; exec bash" &
;;
xfce4-terminal)
xfce4-terminal -e "bash -c \"cd '$SCRIPT_DIR' && bash '$0' soprano; exec bash\"" &
;;
alacritty)
alacritty -e bash -c "cd '$SCRIPT_DIR' && bash '$0' soprano; exec bash" &
;;
kitty)
kitty bash -c "cd '$SCRIPT_DIR' && bash '$0' soprano; exec bash" &
;;
xterm)
xterm -e bash -c "cd '$SCRIPT_DIR' && bash '$0' soprano; exec bash" &
;;
esac
sleep 2
# Start RVC in new terminal
print_info "Starting RVC GUI in new terminal..."
case "$TERMINAL" in
gnome-terminal)
gnome-terminal -- bash -c "cd '$SCRIPT_DIR' && bash '$0' rvc; exec bash" &
;;
konsole)
konsole -e bash -c "cd '$SCRIPT_DIR' && bash '$0' rvc; exec bash" &
;;
xfce4-terminal)
xfce4-terminal -e "bash -c \"cd '$SCRIPT_DIR' && bash '$0' rvc; exec bash\"" &
;;
alacritty)
alacritty -e bash -c "cd '$SCRIPT_DIR' && bash '$0' rvc; exec bash" &
;;
kitty)
kitty bash -c "cd '$SCRIPT_DIR' && bash '$0' rvc; exec bash" &
;;
xterm)
xterm -e bash -c "cd '$SCRIPT_DIR' && bash '$0' rvc; exec bash" &
;;
esac
echo ""
print_success "Both components started in separate terminals"
echo ""
print_header "Quick Setup Guide"
echo "1. In the RVC GUI window:"
echo " - Select your RVC model (.pth file)"
echo " - Select the corresponding index file"
echo " - Choose 'soprano_to_rvc.monitor' as INPUT device"
echo " - Choose your speakers/headphones as OUTPUT device"
echo " - Click 'Start Voice Conversion'"
echo ""
echo "2. In the Soprano TTS window:"
echo " - Type any text you want to convert"
echo " - Press Enter to generate and stream"
echo ""
echo "3. Listen to the RVC-converted output!"
echo ""
print_info "Press Ctrl+C in each terminal to stop"
echo ""
}
# Main script
main() {
case "${1:-both}" in
soprano)
check_prerequisites
start_soprano
;;
rvc)
check_prerequisites
start_rvc
;;
both)
check_prerequisites
start_both
;;
help|--help|-h)
show_usage
;;
*)
print_error "Unknown option: $1"
show_usage
exit 1
;;
esac
}
main "$@"