Spaces:
Runtime error
Runtime error
| import os | |
| import subprocess | |
| import logging | |
| from datetime import datetime | |
| from denoiser import Denoiser | |
| from transcriber import Transcriber | |
| from translator import Translator | |
| logger = logging.getLogger(__name__) | |
| denoiser = Denoiser() | |
| transcriber = Transcriber() | |
| translator = Translator() | |
| def run_pipeline(audio_input, remove_fillers, remove_stutters, remove_silences, remove_breaths, remove_mouth, target_lang): | |
| if not audio_input: | |
| return None, "No audio detected. Please upload a file.", "" | |
| # Create job directory | |
| job_id = datetime.now().strftime("%Y%m%d_%H%M%S") | |
| output_dir = f"outputs/{job_id}" | |
| os.makedirs(output_dir, exist_ok=True) | |
| try: | |
| # 1. DENOISE & CLEAN | |
| # The new 'process' method handles everything via the Cleanvoice API | |
| logger.info("[Pipeline] Step 1: Denoising & Studio Processing...") | |
| res = denoiser.process( | |
| audio_input, output_dir, | |
| fillers=remove_fillers, | |
| stutters=remove_stutters, | |
| long_silences=remove_silences, | |
| breath=remove_breaths, | |
| mouth_sounds=remove_mouth | |
| ) | |
| # 2. TRANSCRIBE | |
| logger.info("[Pipeline] Step 2: Transcribing...") | |
| # FIX: transcribe() returns a tuple (text, lang, method), not a dict | |
| text, _lang, _method = transcriber.transcribe(res['audio_path']) | |
| # 3. TRANSLATE | |
| logger.info(f"[Pipeline] Step 3: Translating to {target_lang}...") | |
| translated = translator.translate(text, target_lang) | |
| # 4. FINAL EXPORT: Conversion to MP3 | |
| final_mp3 = os.path.join(output_dir, "ClearWave_Studio_Final.mp3") | |
| subprocess.run([ | |
| "ffmpeg", "-y", "-i", res['audio_path'], | |
| "-codec:a", "libmp3lame", "-qscale:a", "2", final_mp3 | |
| ], check=True) | |
| return final_mp3, text, translated | |
| except Exception as e: | |
| logger.error(f"Pipeline Error: {e}") | |
| return None, f"Error: {str(e)}", "" |