Update app.py
Browse files
app.py
CHANGED
|
@@ -40,6 +40,15 @@ speakers = extract_unique_speakers("book.csv")
|
|
| 40 |
# Dictionary to store selected voice actors for each speaker
|
| 41 |
selected_voices = {speaker: get_random_voice_for_speaker_fast(speaker) for speaker in speakers}
|
| 42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
# Function to update the dictionary and display the result
|
| 44 |
def update_voice(*args):
|
| 45 |
for speaker, selected_voice in zip(speakers, args):
|
|
@@ -49,18 +58,40 @@ def update_voice(*args):
|
|
| 49 |
result = "\n".join([f"For {speaker}: selected voice actor {voice}" for speaker, voice in selected_voices.items()])
|
| 50 |
return result
|
| 51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
# Creating Gradio interface
|
| 53 |
def create_interface():
|
| 54 |
inputs = []
|
|
|
|
|
|
|
| 55 |
for speaker in speakers:
|
| 56 |
# Create a dropdown for each speaker with the list of all voice actors
|
| 57 |
dropdown = gr.Dropdown(choices=voice_actors, label=f"Select voice actor for {speaker}", value=selected_voices[speaker])
|
| 58 |
inputs.append(dropdown)
|
|
|
|
|
|
|
|
|
|
| 59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
interface = gr.Interface(
|
| 61 |
-
fn=
|
| 62 |
inputs=inputs,
|
| 63 |
-
outputs="text",
|
| 64 |
live=True
|
| 65 |
)
|
| 66 |
return interface
|
|
|
|
| 40 |
# Dictionary to store selected voice actors for each speaker
|
| 41 |
selected_voices = {speaker: get_random_voice_for_speaker_fast(speaker) for speaker in speakers}
|
| 42 |
|
| 43 |
+
# Function to find and return a sample audio file for the selected voice actor
|
| 44 |
+
def get_voice_sample(voice_actor):
|
| 45 |
+
voice_actor_path = os.path.join(voice_actors_folder, voice_actor)
|
| 46 |
+
# Look for any .wav or .mp3 files in the voice actor's folder
|
| 47 |
+
for file in os.listdir(voice_actor_path):
|
| 48 |
+
if file.endswith(".wav") or file.endswith(".mp3"):
|
| 49 |
+
return os.path.join(voice_actor_path, file)
|
| 50 |
+
return None
|
| 51 |
+
|
| 52 |
# Function to update the dictionary and display the result
|
| 53 |
def update_voice(*args):
|
| 54 |
for speaker, selected_voice in zip(speakers, args):
|
|
|
|
| 58 |
result = "\n".join([f"For {speaker}: selected voice actor {voice}" for speaker, voice in selected_voices.items()])
|
| 59 |
return result
|
| 60 |
|
| 61 |
+
# Function to return the voice sample file for a given speaker
|
| 62 |
+
def play_sample(speaker):
|
| 63 |
+
selected_voice = selected_voices[speaker]
|
| 64 |
+
sample_file = get_voice_sample(selected_voice)
|
| 65 |
+
if sample_file:
|
| 66 |
+
return sample_file
|
| 67 |
+
else:
|
| 68 |
+
return "No audio sample available."
|
| 69 |
+
|
| 70 |
# Creating Gradio interface
|
| 71 |
def create_interface():
|
| 72 |
inputs = []
|
| 73 |
+
play_buttons = []
|
| 74 |
+
|
| 75 |
for speaker in speakers:
|
| 76 |
# Create a dropdown for each speaker with the list of all voice actors
|
| 77 |
dropdown = gr.Dropdown(choices=voice_actors, label=f"Select voice actor for {speaker}", value=selected_voices[speaker])
|
| 78 |
inputs.append(dropdown)
|
| 79 |
+
|
| 80 |
+
# Add a button to play the sample for each selected voice actor
|
| 81 |
+
play_buttons.append(gr.Audio(source="filepath", label=f"Play sample for {speaker}", type="filepath", interactive=True, value=None))
|
| 82 |
|
| 83 |
+
def update_interface(*args):
|
| 84 |
+
# Update voice selection
|
| 85 |
+
update_voice(*args)
|
| 86 |
+
|
| 87 |
+
# Update the play button with the audio file
|
| 88 |
+
audio_samples = [play_sample(speaker) for speaker in speakers]
|
| 89 |
+
return update_voice(*args), audio_samples
|
| 90 |
+
|
| 91 |
interface = gr.Interface(
|
| 92 |
+
fn=update_interface,
|
| 93 |
inputs=inputs,
|
| 94 |
+
outputs=["text"] + play_buttons,
|
| 95 |
live=True
|
| 96 |
)
|
| 97 |
return interface
|