"""Lazy per-item audio loading and clean audio copy.""" import shutil import logging from pathlib import Path logger = logging.getLogger(__name__) def load_audio_bytes(folder_path: str, filename: str) -> bytes: """Load audio bytes for a single file on demand. Args: folder_path: Path to the audio folder. filename: Name of the WAV file. Returns: Raw bytes of the audio file. Raises: FileNotFoundError: If the audio file does not exist. """ audio_path = Path(folder_path) / filename if not audio_path.exists(): raise FileNotFoundError(f"Audio file not found: {filename}") return audio_path.read_bytes() def copy_to_clean(source_folder: str, filename: str, clean_audios_dir: str) -> None: """Copy accepted audio to the clean audios folder. Creates the clean audios directory if it doesn't exist. Args: source_folder: Path to the source audio folder. filename: Name of the WAV file to copy. clean_audios_dir: Path to the destination clean audios folder. Raises: IOError: If the copy fails. """ src = Path(source_folder) / filename dst_dir = Path(clean_audios_dir) dst_dir.mkdir(parents=True, exist_ok=True) dst = dst_dir / filename try: shutil.copy2(str(src), str(dst)) logger.info(f"Copied '{filename}' to clean audios: {clean_audios_dir}") except Exception as e: logger.error(f"Failed to copy '{filename}' to clean audios: {e}") raise IOError(f"Failed to copy audio file '{filename}'.") from e