オーディオ デバイスにクエリを実行し、利用可能なすべてのサンプル レートを取得したいと考えています。Python 2.6 を搭載した Ubuntu マシンで、PortAudio v19 の上で実行される PyAudio 0.2 を使用しています。
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()を使用して、デバイスがサポートされている入力デバイスであるかどうかを確認することもできます。
デバイス ID がわからない場合は、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);
}
別スレのおかげ