7

オーディオ デバイスにクエリを実行し、利用可能なすべてのサンプル レートを取得したいと考えています。Python 2.6 を搭載した Ubuntu マシンで、PortAudio v19 の上で実行される PyAudio 0.2 を使用しています。

4

3 に答える 3

7

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!'

于 2012-08-06T23:40:03.447 に答える
4

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:です。

于 2016-01-04T16:53:12.387 に答える
0

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);
}

別スレのおかげ

于 2011-05-11T22:33:18.247 に答える