from UniTAP.dev.modules.capturer.result_object import ResultObject from UniTAP.common.audio_mode import AudioMode, AudioFileFormat from UniTAP.dev.ports.modules.ag.ag_utils import save_to_bin_file, save_to_wave_file import warnings class ResultAudioObject(ResultObject): """ Class `ResultAudioObject` inherited from class `ResultObject`. Class `ResultAudioObject` allows saving captured frames to image `save_image_to_file`. Also has all the `ResultObject` functionality. """ def __init__(self): super().__init__() self.__audio_mode = AudioMode() @property def audio_mode(self) -> AudioMode: """ Returns current audio mode for captured audio frames. Returns: object of `AudioMode` type """ return self.__audio_mode def save_to_file(self, file_format: AudioFileFormat, path: str): """ Saving audio frames to file. Supported file formats describe in `AudioFileFormat`. Args: file_format (`AudioFileFormat`) - file format path (str) - path to save """ if len(self.buffer) > 0: if file_format == AudioFileFormat.BIN: save_to_bin_file(path=path, data=self.__convert_buffer()) elif file_format == AudioFileFormat.WAV: save_to_wave_file(path=path, audio_mode=self.audio_mode, data=self.__convert_buffer()) else: raise ValueError(f"Incorrect audio format. Available formats: " f"{AudioFileFormat.BIN.name}, {AudioFileFormat.WAV.name}.\n" f"Transferred audio format: {file_format.name}") else: warnings.warn("Buffer size is equal 0.") def __convert_buffer(self): data = [] for audio_frame in self.buffer: data.append(audio_frame.data) return bytearray().join(data) def __str__(self): return f"Start capture time: {self.start_capture_time}\n" \ f"End capture time: {self.end_capture_time}\n" \ f"Timestamp: {self.timestamp.__str__()}\n" \ f"Audio mode:\n{self.audio_mode.__str__()}\n"