質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1909閲覧

Python 和音 生成した音のスペクトログラム表示をさせたいです。

Teru_miyanaga

総合スコア3

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/22 04:52

前提・実現したいこと

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を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2020/08/22 05:04

参考にしたURLがあれば記載ください。
guest

回答1

0

ベストアンサー

単に表示させたいだけなら以下でよいのではないでしょうか。

Python

1fig = plt.figure(figsize=(8,6)) 2#Sxx, f, t, im = plt.specgram(np.int16(s.getSound()).reshape((N, 1)), Fs = int(Fs), cmap='jet') 3Sxx, f, t, im = plt.specgram(np.int16(s.getSound()), Fs = int(Fs), cmap='jet') 4#plt.pcolormesh(t, f, np.log(Sxx), cmap='jet') 5#plt.xlim(0, 2.0e5) 6plt.show()

イメージ説明

投稿2020/08/22 05:10

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Teru_miyanaga

2020/08/22 05:15

解決できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問