Table of Content
つくりかけ。 Work in progress.
# coding: utf-8 import wave import matplotlib.pyplot as plt import numpy as np import scipy.interpolate from numpy file_name = "E://TESTDATA.wav" if __name__ == "__main__": """読み込み作業""" wave_file = wave.open(file_name, "r") # Open CH = wave_file.getnchannels() # モノラルorステレオ f1 = wave_file.getframerate() # サンプリング周波数 N = wave_file.getnframes() # フレームの総数 dt = 1 / f1 # サンプリング周期 [s] print("モノラルorステレオ") print(CH) print("サンプリング周波数") print(f1) print("フレームの総数") print(N) print(wave_file.getparams()) original = wave_file.readframes(N) # フレームの読み込み original = np.frombuffer(original, dtype="int16") # numpy.arrayに変換 targetLen = wave_file.getnframes() # original = np.sin(np.arange(256) / 10.0) # targetLen = 100 # 方法1: scipy interp1d(線形補間)を使用します # これは、線形補間を使用するだけなので、概念的には最も簡単です # 他のさまざまな補間方法も提供します # f = interp1d(np.arange(256), original, 'linear') # plt.plot(np.apply_along_axis(f, 0, np.linspace(0, 255, num=targetLen))) # 方法3: scipyのリサンプルを使用します # 信号を周波数空間に変換し(フーリエ法)、その後戻します # これは周期関数では効率的に機能しますが、非周期関数では不十分です plt.plot(resample(original, targetLen)) plt.show()
コメント