Как получить список частот дискретизации звука моего устройства с помощью PyAudio или PortAudio?
Я хотел бы запросить мое аудиоустройство и получить все доступные частоты дискретизации. Я использую PyAudio 0.2, который работает поверх PortAudio v19, на машине Ubuntu с Python 2.6.
3 ответов
в распределении pyaudio, test/system_info.py
показывает, как определить поддерживаемые частоты дискретизации для устройств. Вижу раздел, который начинается с строки 49.
короче говоря, вы используете PyAudio.is_format_supported
метод, например
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!'
С 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:
.
непосредственно с помощью 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);
}
благодаря другому потоку