import numpy as np import soundfile as sf import sounddevice as sd from datetime import datetime from pathlib import Path from typing import Tuple, Optional def save_audio_file( audio_data: np.ndarray, output_dir: Path, sample_rate: int = 24000 ) -> Path: """ Save audio data to a WAV file with a timestamp in the filename. Args: audio_data (np.ndarray): The audio data to save. Can be a single array or a list of arrays. output_dir (Path): The directory to save the audio file in. sample_rate (int, optional): The sample rate of the audio data. Defaults to 24000. Returns: Path: The path to the saved audio file. """ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") output_path = output_dir / f"output_{timestamp}.wav" if isinstance(audio_data, list): audio_data = np.concatenate(audio_data) sf.write(str(output_path), audio_data, sample_rate) return output_path def play_audio( audio_data: np.ndarray, sample_rate: int = 24000 ) -> Tuple[bool, Optional[np.ndarray]]: """ Play audio data using sounddevice. Args: audio_data (np.ndarray): The audio data to play. sample_rate (int, optional): The sample rate of the audio data. Defaults to 24000. Returns: Tuple[bool, Optional[np.ndarray]]: A tuple containing a boolean indicating if the playback was interrupted (always False here) and an optional numpy array representing the interrupted audio (always None here). """ sd.play(audio_data, sample_rate) sd.wait() return False, None