def __init__(self, name, channels=None, frame_rate=None, format=None, dtype=None): device_info = DeviceInfo.named_input(name) frame_rate = frame_rate or device_info.default_sample_rate channels = channels or device_info.max_input_channels assert frame_rate assert channels self.name = name self.frame_rate = int(frame_rate) self.session = PyAudioManager.acquire_shared_instance() self._codec = PyAudioCodec( frame_rate=frame_rate, channels=channels, format=format, dtype=dtype, ) self.stream = self.session.open( format=self.format, channels=self.channels, rate=self.frame_rate, input=True, input_device_index=device_info["index"], )
def __init__( self, in_name: str, out_path: str, frame_rate=None, channels=None, dtype=None, source_cls=None, transcoder_cls=None, sink_cls=None, ): device = DeviceInfo.named_input(in_name) frame_rate = int(frame_rate or device.default_sample_rate) channels = int(channels or device.max_input_channels) self.shared_queue = queue.Queue() self.source_cls = source_cls or PyAudioDeviceSource assert issubclass(self.source_cls, PyAudioDeviceSource) self.transcoder_cls = transcoder_cls or PyAudio2PyAVTranscoder assert issubclass(self.transcoder_cls, PyAudio2PyAVTranscoder) self.sink_cls = sink_cls or PyAVFileSink assert issubclass(self.sink_cls, PyAVFileSink) self.transcoder = self.transcoder_cls( frame_rate=frame_rate, channels=channels, dtype=dtype, ) self.source = self.source_cls( device_index=device.index, frame_rate=self.transcoder.frame_rate, channels=self.transcoder.channels, format=self.transcoder.pyaudio_format, out_queue=self.shared_queue, ) self.sink = self.sink_cls( file_path=out_path, transcoder=self.transcoder, in_queue=self.shared_queue, )