音声データをMatplotでグラフ表示する on raspberry pi 2 B
raspberry pi 2 B へのmatplotのインストール
sudo apt-get install python-matplotlib
sudo apt-get install python-pip
sudo pip install drawnow
pythonを使用してプロットテスト↓
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(-3, 3, 0.1)
y=np.sin(x)
plt.plot(x,y)
plt.show()
分割してRAWデータとローパスフィルタをかけたデータをプロット
# This program can plot sound data as graphs on matplot
import pyaudio
import sys
import time
import wave
from numpy import *
import numpy as np
import matplotlib.pyplot as plt
import os
if __name__ == '__main__':
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
#サンプリングレート、マイク性能に依存
RATE = 16000
#録音時間
RECORD_SECONDS = input('Please input recoding time>>>')
#マイク0番を設定
input_device_index = 0
#マイクからデータ取得
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = chunk)
all =
for i in range(0, RATE / chunk * RECORD_SECONDS):
data = stream.read(chunk)
all.append(data)
stream.close()
data = ''.join(all)
data=frombuffer(data, dtype="int16")/32768.0
print data
#Lowpass filter
tap = 100
aftlowpass_data =
i = 0
j = 0
for i in range(0, len(data)-tap):
sum_data = 0
for j in range(0, 99):
sum_data = sum_data + data[i + j]
aftlowpass_data.append(sum_data / tap)
#converting numpy-type-array
np_data=np.array(data, dtype = np.float64)
np_aftlowpass_data=np.array(aftlowpass_data, dtype = np.float64)
#data plot
plt.subplot(2,1,1)
plt.plot(np_data)
plt.subplot(2,1,2)
plt.plot(np_aftlowpass_data)
plt.show()
p.terminate()
参考
・スレッドによるタイマー
一定時間毎の繰り返し
・numpy配列の作成・型変換
標準python、numpy、pandasを行ったり来たりするために① - Qiita
・matlibのインストール
Install numpy, matplotlib and drawnow for Python 2 - YouTube
・matplotの使い方