見出し画像

ゆるプロ!番外編「PyAudioで設定したいデバイス情報のINDEXを知る」

ゆるいプログラミング講座、略して「ゆるプロ!」
これは気軽に気楽に試せるゆるーいプログラミング学習コンテンツである。今回のお題は「PyAudioで取得したデバイス情報の文字化けを修正する」


一言)

「PyAudioのデフォルトのデバイス番号を知る」記事において、デフォルトで使用されているデバイスは分かったが、使用したいデバイスのインデックスを知りたいので調べた。

例)PyAudioで設定したいデバイス情報のINDEXを知る

import pyaudio
audio = pyaudio.PyAudio()
for i in range(audio.get_device_count()):
    print(audio.get_device_info_by_index(i))

get_device_count ( )
PortAudio ホスト API の数を返します。

get_device_info_by_index
( device_index )
device_indexで指定されたデバイスのデバイス パラメータを 辞書として返します。ディクショナリのキーは、PortAudio のPaDeviceInfo構造のデータ フィールドを反映しています。

https://people.csail.mit.edu/hubert/pyaudio/docs/#pyaudio.PyAudio.get_default_input_device_info

結果)

結果は中略しているが、自分が使用したいデバイスのインデックスは2番であることが分かった。実際に問題は解消できた。

{'index': 1, 'structVersion': 2, 'name': '繝槭う繧ッ (Webcam internal mic)', 'hostApi': 0, 'maxInputChannels': 1, 'maxOutputChannels': 0, 'defaultLowInputLatency': 0.09, 'defaultLowOutputLatency': 0.09, 'defaultHighInputLatency': 0.18, 'defaultHighOutputLatency': 0.18, 'defaultSampleRate': 44100.0}
{'index': 2, 'structVersion': 2, 'name': 'Microphone (High Definition Aud', 'hostApi': 0, 'maxInputChannels': 2, 'maxOutputChannels': 0, 'defaultLowInputLatency': 0.09, 'defaultLowOutputLatency': 0.09, 'defaultHighInputLatency': 0.18, 'defaultHighOutputLatency': 0.18, 'defaultSampleRate': 44100.0}

なお、文字化けの解消であるが、データの行毎に文字コードの異なるUnicodeとShift_JISが混在している可能性があるので、ひとつのコードでは同じように処理できないのではないかと考えたため、結果をそのまま表示している。恐らく明治的にエンコードを知っている前提なのだろう。

print(str(audio.get_device_info_by_index(3)).encode("shift_jis").decode("utf-8"))
#UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 52: invalid start byte

参考)

PyAudio公式ホームページ

PyAudio Documentation

PIP - PyAudio 0.2.13

参考にしたブログ

おわり!