Как получить список частот дискретизации звука моего устройства с помощью PyAudio или PortAudio? - PullRequest
6 голосов
/ 07 января 2011

Я бы хотел запросить у моего аудиоустройства и получить все доступные частоты дискретизации.Я использую PyAudio 0.2, который работает поверх PortAudio v19, на машине с Ubuntu с Python 2.6.

Ответы [ 3 ]

5 голосов
/ 07 августа 2012

В распределении pyaudio test/system_info.py показывает, как определить поддерживаемые частоты дискретизации для устройств.См. Раздел , который начинается со строки 49 .

Короче говоря, вы используете метод PyAudio.is_format_supported, например

<code>
devinfo = p.get_device_info_by_index(1)  # Or whatever device you care about.
if p.is_format_supported(44100.0,  # Sample rate
                         input_device=devinfo['index'],
                         input_channels=devinfo['maxInputChannels'],
                         input_format=pyaudio.paInt16):
  print 'Yay!'
3 голосов
/ 04 января 2016

С помощью модуля sounddevice вы можете сделать это следующим образом:

import sounddevice as sd

samplerates = 32000, 44100, 48000, 96000, 128000
device = 0

supported_samplerates = []
for fs in samplerates:
    try:
        sd.check_output_settings(device=device, samplerate=fs)
    except Exception as e:
        print(fs, e)
    else:
        supported_samplerates.append(fs)
print(supported_samplerates)

Когда я попробовал это, я получил:

32000 Invalid sample rate
128000 Invalid sample rate
[44100, 48000, 96000]

Вы также можете проверить, поддерживается ли определенное количество каналов или определенный тип данных. Для получения более подробной информации ознакомьтесь с документацией: check_output_settings () . Конечно, вы также можете проверить, является ли устройство поддерживаемым устройством ввода с помощью check_input_settings () .

Если вы не знаете идентификатор устройства, взгляните на query_devices () .

Я не думаю, что это все еще актуально, но это также работает с Python 2.6, вам просто нужно удалить скобки из операторов print и заменить except Exception as e: на except Exception, e:.

1 голос
/ 12 мая 2011

Непосредственно с помощью Portaudio вы можете запустить следующую команду:

for (int i = 0, end = Pa_GetDeviceCount(); i != end; ++i) {
    PaDeviceInfo const* info = Pa_GetDeviceInfo(i);
    if (!info) continue;
    printf("%d: %s\n", i, info->name);
}

Благодаря другому потоку

...