wave, scipy.io.wavfile, librosaでwaveファイル入力

waveはpylabを介すので分かりにくい。

librosaはサンプリングレートを与えないといけない。

scipy.io.wavfileが一番使い勝手が良さそう。

import numpy as np
import matplotlib.pyplot as plt

# import wave
# from pylab import frombuffer
# wf = wave.open('combined_sine.wav', 'r')
# sample_rate = wf.getframerate() # サンプリングレート[Hz]
# sample_interval = 1.0 / sample_rate # サンプリング間隔[s]
# N = wf.getnframes() # フレーム数
# x = frombuffer(wf.readframes(N), dtype='int16') / 32768.0

# from scipy.io import wavfile
# from copy import deepcopy
# sample_rate, x = wavfile.read('combined_sine.wav')
# sample_interval = 1.0 / sample_rate
# N = x.shape[0]
# x = deepcopy(x)
# x = x / 32768

import librosa
sample_rate = 8000
sample_interval = 1.0 / sample_rate
x = librosa.load('combined_sine.wav', sr=sample_rate)[0]
N = x.shape[0]

F = np.fft.fft(x)
Amp = np.abs(F)

t = np.arange(0, sample_interval * N, sample_interval)
freq = np.linspace(0, sample_rate, N)

#plt.plot(t, x)
plt.plot(freq[:int(N/2)], Amp[:int(N/2)])
plt.show()