import io import librosa import numpy as np from typing import Optional from .config import pipe TASK = "transcribe" BATCH_SIZE = 8 class A2T: def __init__(self, mic): self.mic = mic def __generate_text(self, inputs, task: Optional[str] = None) -> str: if inputs is None: raise ValueError(f"Input audio is None {inputs}, please provide audio") transcribed_text = pipe(inputs, batch_size=BATCH_SIZE, generate_kwargs={"task": task}, return_timestamps=True)["text"] return transcribed_text @staticmethod def __preprocess(raw: bytes) -> np.ndarray: print(f"Raw type: {type(raw)}") if not isinstance(raw, bytes): raise ValueError("Expected raw audio data as bytes") try: chunk = io.BytesIO(raw) print(f"Chunk type: {type(chunk)}") audio, sample_rate = librosa.load(chunk, sr=16000) print(f"Sample rate : {sample_rate}") return audio except Exception as e: print(f"Error loading audio in the preprocess function in the A2T class: {e}") def predict(self) -> str: try: if self.mic is not None: raw = self.mic audio = self.__preprocess(raw=raw) print(f"audio type : {type(audio)} \n shape : {audio.shape} \n audio max value : {np.max(audio)}") else: raise ValueError(f"Please provide audio your audio {self.mic}") if isinstance(audio, np.ndarray): return self.__generate_text(inputs=audio, task=TASK) else: raise ValueError("Audio is not np array") except Exception as e: print(f"An error occurred in the predict function in the A2T class: {e}")