前提・実現したいこと
write('hogehoge.wav', Fs, np.int16(s.getSound()).reshape((N, 1)))までの部分を実行するとドミソの和音が生成されます。その上で、その音の波形をスペクトログラム表示させたいのですが、以下のようなエラーが出てしまいます。どのようにしたら解決できるか教えてください。よろしくお願いします。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "ans2.py", line 46, in <module> Sxx, f, t, im = plt.specgram(np.int16(s.getSound()).reshape((N, 1)), Fs = int(Fs), cmap='jet') File "/usr/local/anaconda3/lib/python3.6/site-packages/matplotlib/pyplot.py", line 3448, in specgram vmin=vmin, vmax=vmax, data=data, **kwargs) File "/usr/local/anaconda3/lib/python3.6/site-packages/matplotlib/__init__.py", line 1717, in inner return func(ax, *args, **kwargs) File "/usr/local/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_axes.py", line 7170, in specgram mode=mode) File "/usr/local/anaconda3/lib/python3.6/site-packages/matplotlib/mlab.py", line 1288, in specgram mode=mode) File "/usr/local/anaconda3/lib/python3.6/site-packages/matplotlib/mlab.py", line 713, in _spectral_helper result = stride_windows(x, NFFT, noverlap, axis=0) File "/usr/local/anaconda3/lib/python3.6/site-packages/matplotlib/mlab.py", line 545, in stride_windows raise ValueError('only 1-dimensional arrays can be used') ValueError: only 1-dimensional arrays can be used
該当のソースコード
Python
1# -*- coding: utf-8 -*- 2 3import numpy as np 4from scipy.io.wavfile import write 5import matplotlib.pyplot as plt 6 7 8class GenFreq(object): 9 def __init__(self, Fs=44100., dur=1.): 10 self.Fcs = {'C':262., 'D':294., 'E':330., 'F':349., 'G':392., 'A':440., 'B':494.} 11 self.Amp = 1.0 12 self.Fs = Fs 13 self.dur = dur 14 self.Num = int( dur * Fs ) 15 self.x = np.zeros( self.Num ) 16 self.m = np.zeros( self.Num ) 17 delta = 1./Fs 18 self.t = np.arange( self.Num ) * delta 19 20 def getSound(self): 21 return self.x 22 23 def getLen(self): 24 return self.Num 25 26 def addTone(self, code='C'): 27 f = self.Fcs[code] 28 self.m = self.Amp * np.sin( 2. * np.pi * f * self.t ) 29 self.x = self.x + self.m 30 31# 32# (CEG) 33 34Fs = 44100 35s = GenFreq(Fs, dur=1.) 36s.addTone('C') 37s.addTone('E') 38s.addTone('G') 39N = s.getLen() 40 41# 1. scipy.wav.iofile write 42# 2. scipy.signal.spectrogram matplotlib.pylab.specgram 43write('hogehoge.wav', Fs, np.int16(s.getSound()).reshape((N, 1))) 44 45fig = plt.figure(figsize=(8,6)) 46Sxx, f, t, im = plt.specgram(np.int16(s.getSound()).reshape((N, 1)), Fs = int(Fs), cmap='jet') 47plt.pcolormesh(t, f, np.log(Sxx), cmap='jet') 48plt.xlim(0, 2.0e5) 49plt.show()
試したこと
write('hogehoge.wav', Fs, np.int16(s.getSound()).reshape((N, 1)))までを記述するとドミソの和音が正しく生成されます。しかし、fig = plt.figure(figsize=(8,6))以下を書くとエラーが出てしまいました。
補足情報(FW/ツールのバージョンなど)
Linux環境です。Python3を使用しています。
回答1件
あなたの回答
tips
プレビュー