import platform import os import ffmpeg import numpy as np import av import traceback from io import BytesIO def wav2(i, o, format): inp = av.open(i, "rb") if format == "m4a": format = "mp4" out = av.open(o, "wb", format=format) if format == "ogg": format = "libvorbis" elif format == "mp4": format = "aac" ostream = out.add_stream(format) for frame in inp.decode(audio=0): for p in ostream.encode(frame): out.mux(p) for p in ostream.encode(None): out.mux(p) out.close() inp.close() def load_audio(file, sr): try: # Clean the file path file = clean_path(file) if not os.path.exists(file): raise RuntimeError( "You input a wrong audio path that does not exist, please fix it!" ) out, _ = ( ffmpeg.input(file, threads=0) .output("-", format="f32le", acodec="pcm_f32le", ac=1, ar=sr) .run(cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True) ) except Exception as e: traceback.print_exc() raise RuntimeError(f"Failed to load audio: {e}") audio_data = np.frombuffer(out, np.float32).flatten() # Ensure the function always returns a numpy array, even if it's empty if audio_data is None or len(audio_data) == 0: raise RuntimeError("Failed to load audio: no data returned.") return audio_data def clean_path(path_str): if platform.system() == "Windows": path_str = path_str.replace("/", "\\") return path_str.strip().strip('"').strip("\n").strip('"').strip() # Example usage if __name__ == "__main__": try: audio_data = load_audio("example.wav", 16000) print("Audio data loaded successfully") except RuntimeError as e: print(e)