Exemple #1
0
def find_a_device_index(filt='microphone', dflt=None):
    if isinstance(filt, str):
        match_str = filt

        def filt(x):
            return match_str in x.get('name', match_str).lower()

    match = next(filter(filt, PyAudioSourceReader.list_device_info()), None)
    return (match is not None and match['index']) or dflt
Exemple #2
0
def ensure_source_input_device_index(input_device_index=None):
    if input_device_index is None:
        input_device_index = find_a_default_input_device_index()
    if input_device_index is not None:
        if isinstance(input_device_index, int):
            return input_device_index
        elif isinstance(input_device_index, str):
            input_name = input_device_index
            for index, name in list_recording_device_index_names():
                if name == input_name:
                    return index
            raise ValueError(
                f"name not found in list of recording devices: {input_name}")
        elif isinstance(input_device_index,
                        tuple) and len(input_device_index) == 2:
            index, name = input_device_index
            assert isinstance(
                index, int
            ), f"expecting first element of tuple to be an int: {input_device_index}"
            assert isinstance(
                name, str
            ), f"expecting second element of tuple to be a string: {input_device_index}"
            return index
        else:
            raise ValueError(
                f"couldn't resolve input_device_index: {input_device_index}")
    else:
        # TODO: Nicer way to print info (perhaps only relevant info, formated as table)
        print(
            "Need a valid input_device_index. Calling live_audio_chks.list_device_info() to information about the "
            "devices I can detect:\n")
        for item in PyAudioSourceReader.list_device_info():
            print(item)
            print("")
        print(
            "---> Look in the list above and choose an input_device_index (it's called index in the printout above) "
            "that seems to be right for you!")
        raise ValueError("Need a valid input_device_index")
Exemple #3
0
                                        unsigned=True,
                                        input_device_index=input_device_index,
                                        frames_per_buffer=frames_per_buffer)

    with StreamBuffer(source_reader=source_reader,
                      maxlen=maxlen) as stream_buffer:
        """keep open and save to file until stop event"""
        buffer_reader = stream_buffer.mk_reader()
        with PyAudioSaver(buffer_reader,
                          interval=interval,
                          rootdir=rootdir,
                          logging_enabled=logging_enabled) as pasave:
            try:
                pasave.join()
            except KeyboardInterrupt:
                pass


audio_to_files.list_device_info = lambda: PyAudioSourceReader.list_device_info(
)

if __name__ == "__main__":
    audio_to_files(rate=44100,
                   width=2,
                   channels=1,
                   input_device_index=6,
                   frames_per_buffer=1024 * 4,
                   interval=1,
                   rootdir="~/odir/stream2py",
                   logging_enabled=True)
Exemple #4
0
def list_recording_device_index_names():
    """List (index, name) of available recording devices"""
    return sorted((d['index'], d['name'])
                  for d in PyAudioSourceReader.list_device_info()
                  if d['maxInputChannels'] > 0)
Exemple #5
0
def device_info_by_index(index):
    try:
        return next(d for d in PyAudioSourceReader.list_device_info()
                    if d['index'] == index)
    except StopIteration:
        raise ValueError(f"Not found for input device index: {index}")