前提・実現したいこと
特定の周波数のパワーが他と比べて大きくなった瞬間の時間を取得したいです.
録音したファイルをスペクトログラムにし表示させたいのですが,サンプリングレート96000で録音したファイルだと,最大1/96000秒間隔で表示できると考えています.
いかし現状,時間間隔が 0.001333程度であり,この時間間隔をより細かくできる方法があればご教示しただけると幸いです.
発生している問題・エラーメッセージ
Pxx, freqs, bins, im = plt.specgram(left, Fs=fs, cmap = 'jet', mode='magnitude') の部分で変換しているようで,このうちのbinsに時間が格納されており,現状 0.0013333333333333333,0.0026666666666666666... のようになっています.この間隔を狭くしたいのです.
該当のソースコード
python
1#スペクトログラム 2import matplotlib.pyplot as plt 3import soundfile as sf 4from scipy.io.wavfile import read 5 6 7if __name__ == "__main__": 8 wavfile = "sample.wav" 9 10 fs, data = read(wavfile) 11 12 print ("Sampling rate :", fs) 13 14 if (data.shape[1] == 2):#配列が2つある間だけ 15 left = data[:, 0] 16 right = data[:, 1 ] 17 18 19 20 plt.figure("FFT解析",figsize=(12,7)) 21 plt.subplots_adjust(wspace=0.4, hspace=0.6)#空白作成 22 23 plt.subplot(211) 24 plt.title('1-mic(based surface)', size=20) 25 Pxx, freqs, bins, im = plt.specgram(left, Fs=fs, cmap = 'jet', mode='magnitude') 26 x1, x2, y1, y2 = plt.axis() 27 plt.axis((x1, x2, y1, y2)) 28 plt.xlabel("time[s]") 29 plt.ylabel("Frequency [Hz]") 30 31 plt.subplot(212) 32 plt.title('2-mic', size=20) 33 Pxx, freqs, bins, im = plt.specgram(right, Fs=fs, cmap = 'jet', mode='magnitude') 34 x1, x2, y1, y2 = plt.axis() 35 plt.axis((x1, x2, y1, y2)) 36 plt.xlabel("time[s]") 37 plt.ylabel("Frequency [Hz]") 38 39 plt.show() 40 plt.close()
補足
厚かましくて申し訳ありませんがリアルタイムで録音しながら上記のことが可能な方法をご存じの方おられましたらそちらも教えていただけると幸いです.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/29 04:40