Ejemplo n.º 1
0
    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"],
        )
Ejemplo n.º 2
0
    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,
        )