Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -102,32 +102,52 @@ def generate_audio(text, speaker_name):
|
|
| 102 |
return temp_filename
|
| 103 |
|
| 104 |
def process_line(args):
|
| 105 |
-
"""Process single dialogue line with
|
| 106 |
idx, speaker, text = args
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
try:
|
| 108 |
logger.info(f"Processing line {idx+1} for {speaker}")
|
| 109 |
|
| 110 |
# Generate base audio
|
| 111 |
base_audio = generate_audio(text, speaker)
|
| 112 |
-
|
|
|
|
|
|
|
|
|
|
| 113 |
# Generate voice cover
|
| 114 |
ref_audio = "kisel.mp3" if speaker == "Киселёв" else "putin.mp3"
|
| 115 |
-
|
|
|
|
|
|
|
|
|
|
| 116 |
input_file=base_audio,
|
| 117 |
ref_file=ref_audio,
|
| 118 |
-
output_file=
|
| 119 |
device='cpu'
|
| 120 |
)
|
| 121 |
|
| 122 |
-
#
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
|
| 127 |
return final_filename
|
|
|
|
| 128 |
except Exception as e:
|
| 129 |
-
logger.error(f"Error processing line {idx+1}: {str(e)}")
|
| 130 |
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 131 |
|
| 132 |
def process_prompt(prompt):
|
| 133 |
"""Main processing pipeline with parallel execution"""
|
|
|
|
| 102 |
return temp_filename
|
| 103 |
|
| 104 |
def process_line(args):
|
| 105 |
+
"""Process single dialogue line with enhanced error handling"""
|
| 106 |
idx, speaker, text = args
|
| 107 |
+
final_filename = f"t{idx+1}-{speaker}.wav"
|
| 108 |
+
base_audio = None
|
| 109 |
+
output_filename = None
|
| 110 |
+
|
| 111 |
try:
|
| 112 |
logger.info(f"Processing line {idx+1} for {speaker}")
|
| 113 |
|
| 114 |
# Generate base audio
|
| 115 |
base_audio = generate_audio(text, speaker)
|
| 116 |
+
if not os.path.exists(base_audio):
|
| 117 |
+
logger.error(f"Base audio not generated for line {idx+1}")
|
| 118 |
+
return None
|
| 119 |
+
|
| 120 |
# Generate voice cover
|
| 121 |
ref_audio = "kisel.mp3" if speaker == "Киселёв" else "putin.mp3"
|
| 122 |
+
output_filename = f"output_{uuid.uuid4().hex[:6]}.wav"
|
| 123 |
+
|
| 124 |
+
logger.debug(f"Tuning audio with reference: {ref_audio}")
|
| 125 |
+
tune_one(
|
| 126 |
input_file=base_audio,
|
| 127 |
ref_file=ref_audio,
|
| 128 |
+
output_file=output_filename,
|
| 129 |
device='cpu'
|
| 130 |
)
|
| 131 |
|
| 132 |
+
# Verify output file creation
|
| 133 |
+
if not os.path.exists(output_filename):
|
| 134 |
+
logger.error(f"Voice tuning failed for line {idx+1}")
|
| 135 |
+
return None
|
| 136 |
+
|
| 137 |
+
# Rename final file
|
| 138 |
+
os.rename(output_filename, final_filename)
|
| 139 |
+
logger.info(f"Created final file: {final_filename}")
|
| 140 |
|
| 141 |
return final_filename
|
| 142 |
+
|
| 143 |
except Exception as e:
|
| 144 |
+
logger.error(f"Error processing line {idx+1}: {str(e)}", exc_info=True)
|
| 145 |
return None
|
| 146 |
+
finally:
|
| 147 |
+
# Cleanup temporary files
|
| 148 |
+
for f in [base_audio, output_filename]:
|
| 149 |
+
if f and os.path.exists(f):
|
| 150 |
+
os.remove(f)
|
| 151 |
|
| 152 |
def process_prompt(prompt):
|
| 153 |
"""Main processing pipeline with parallel execution"""
|