def get_user_selected_input_name() -> str: from pupil_audio.utils.pyaudio import DeviceInfo default_device = DeviceInfo.default_input() if default_device is None: print("No default input device availabe!") exit(-1) input_names = sorted(device.name for device in DeviceInfo.inputs_by_name().values()) default_name = DeviceInfo.default_input().name print("-" * 80) print("PLEASE SELECT INPUT DEVICE:") for index, name in enumerate(input_names): default_flag = "D" if name == default_name else " " print(f"\t[{index}] {default_flag}: {name}") try: selected_name = input_names[int(input(">>> "))] except (ValueError, IndexError): print("Invalid input device number. Try again.") exit(-1) print("-" * 80) return selected_name
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 main(): import pprint from pupil_audio.utils.pyaudio import DeviceInfo input_devices, output_devices = DeviceInfo.inputs_by_name( ), DeviceInfo.outputs_by_name() input_default, output_default = DeviceInfo.default_input( ), DeviceInfo.default_output() pp = pprint.PrettyPrinter(indent=4) print("-" * 80) print(f"### INPUT DEVICES (default = \"{input_default.name}\") ###") pp.pprint(input_devices) print("-" * 80) print(f"### OUTPUT DEVICES (default = \"{output_default.name}\") ###") pp.pprint(output_devices) print("-" * 80)
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, )
def available_input_devices(): return sorted(DeviceInfo.inputs_by_name().keys())
def update(self): self.devices_by_name = DeviceInfo.devices_by_name()
def default_device(): return DeviceInfo.default_output()
def enumerate_devices(): return sorted(DeviceInfo.outputs_by_name().values(), key=lambda x: x.index)