Clearwave-ai / app.py
Clearwave48's picture
Update app.py
9be963d verified
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)}", ""