2010年9月12日日曜日

PyAudio使ってみた

PyAudioを使ってオーディオ入力を取り込むプログラムをゴリゴリいじっている。取り敢えず
マイクから入力→数値データに変換→matplotlibでグラフ化してみました
というお話。

PyAudioのサイトにサンプルとして載っている、マイク入力をスピーカーからそのまま出力するプログラムを改造した。


from pylab import *
import pyaudio
import sys

chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5

p = pyaudio.PyAudio()

stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
output = True,
frames_per_buffer = chunk)

inp = []

print "* recording"
for i in range(0, 44100 / chunk * RECORD_SECONDS):
data = stream.read(chunk)
for j in range(len(data)):
for k in range(len(data[j])):
inp.append(ord(data[j][k]))
print "* done"

plot(inp)
show()



マイクから取り込んだ入力はそのまま出力すると下のようにバイトコードで出力されてしまうので、ord関数を使って数値データに変換している。

>>> data[0]
'\x00'


このプログラムを実行した結果、以下のような感じに。



…何が何だか分からない。

録音したのは無音環境だったので、ゼロ付近に張り付くグラフを予想していたんだけれど…。
単純に音の強弱が数値に変換されている訳じゃないのかな?

次はマイクから入力されたデータがシステム内部でどう取り扱われているかについて調べてみよう。

0 件のコメント:

コメントを投稿