def write(self, buff, frames_per_buffer): if frames_per_buffer is None: frames_per_buffer = len(frames_per_buffer) value = _portaudio.Pa_GetStreamWriteAvailable(self.stream) if value < 0: # if value is negative, its a PaError code try: raise get_exception(value) except NoError: pass err = _portaudio.Pa_WriteStream(self.stream, byref(buff), c_ulong(frames_per_buffer)) try: raise get_exception(err) except NoError: pass
def open(self, mode='rw', input_parameters=None, output_parameters=None, callback=None, user_data=None): if 'w' in mode: output_parameters = output_parameters or self.build_output_parameters() if 'r' in mode: input_parameters = input_parameters or self.build_input_parameters() if callback: # we need to save a reference to the callback so it is not garbage collected pa_stream_callback = PaStreamCallback(callback) self._callbacks.append(pa_stream_callback) if user_data is not None: py_object_user_data = py_object(user_data) self._user_datum.append(py_object_user_data) err = _portaudio.Pa_OpenStream(byref(self.stream), byref(input_parameters) if input_parameters else None, byref(output_parameters) if output_parameters else None, self.sample_rate, self.frames_per_buffer, self.flags, pa_stream_callback if callback else None, py_object_user_data if user_data else None) try: raise get_exception(err) except NoError: pass
def __enter__(self): try: err = _portaudio.Pa_Initialize() raise get_exception(err) except NoError: pass return self
def read(self, size=None): if size is None: size = self.frames_per_buffer value = _portaudio.Pa_GetStreamReadAvailable(self.stream) if value < 0: # if value is negative, its a PaError code try: raise get_exception(value) except NoError: pass buff = c_void_p() err = _portaudio.Pa_ReadStream(self.stream, byref(buff), c_ulong(size)) try: raise get_exception(err) except NoError: pass return buff
def stop(self): err = _portaudio.Pa_StopStream(self.stream) try: raise get_exception(err) except NoError: pass
def close(self): err = _portaudio.Pa_CloseStream(self.stream) try: raise get_exception(err) except NoError: pass
def __exit__(self, type, value, traceback): err = _portaudio.Pa_Terminate() try: raise get_exception(err) except NoError: pass