|
|
| """ |
| Audio processing utilities for TTS service. |
| """ |
|
|
| import io |
| import tempfile |
| import os |
| from .config import image |
|
|
| with image.imports(): |
| import torchaudio as ta |
|
|
|
|
| class AudioUtils: |
| """Helper class for audio processing operations.""" |
| |
| @staticmethod |
| def save_audio_to_buffer(wav_tensor, sample_rate: int) -> io.BytesIO: |
| """ |
| Save audio tensor to BytesIO buffer. |
| |
| Args: |
| wav_tensor: Audio tensor to save |
| sample_rate: Sample rate of the audio |
| |
| Returns: |
| BytesIO buffer containing WAV audio data |
| """ |
| buffer = io.BytesIO() |
| ta.save(buffer, wav_tensor, sample_rate, format="wav") |
| buffer.seek(0) |
| return buffer |
|
|
| @staticmethod |
| def save_temp_audio_file(audio_data: bytes) -> str: |
| """ |
| Save uploaded audio data to a temporary file. |
| |
| Args: |
| audio_data: Raw audio data bytes |
| |
| Returns: |
| Path to the temporary audio file |
| """ |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_file: |
| temp_file.write(audio_data) |
| return temp_file.name |
|
|
| @staticmethod |
| def cleanup_temp_file(file_path: str) -> None: |
| """ |
| Clean up temporary audio file. |
| |
| Args: |
| file_path: Path to the temporary file to delete |
| """ |
| try: |
| if file_path and os.path.exists(file_path): |
| os.unlink(file_path) |
| except Exception as e: |
| print(f"Warning: Failed to cleanup temp file {file_path}: {e}") |
|
|