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

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

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

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

Q&A

0回答

1274閲覧

(python)pyqt上でlibrosaのスペクトログラムを表示・保存したい

sayaka1202

総合スコア18

Python

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

1グッド

1クリップ

投稿2017/08/29 23:19

編集2017/08/29 23:21

###前提・実現したいこと

pyaudioでリアルタイムでマイク入力を読み込み,pyqt5上でウィンドウを作ってそこに何秒か毎にlibrosa.display.specshow()(https://librosa.github.io/librosa/display.html)でスペクトログラムを表示・保存したいと考えています.
そこでpyqt5のウィンドウ上でlibrosa.display.specshow()を出すにはどうすればよいでしょうか.
scipyでスペクトログラムを表示させることは(多分)できました.

###該当のソースコード

Python

1import sys 2import numpy as np 3import pyaudio 4from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas 5from matplotlib.figure import Figure 6import librosa 7import librosa.display 8from scipy import signal 9 10from PyQt5.QtCore import (QLineF, QPointF, QRectF, Qt, QTimer) 11from PyQt5.QtGui import (QBrush, QColor, QPainter) 12from PyQt5.QtWidgets import (QApplication, QGraphicsView, QGraphicsScene, QGraphicsItem, 13 QGridLayout, QVBoxLayout, QHBoxLayout, QSizePolicy, 14 QLabel, QLineEdit, QPushButton) 15 16 17class MainWindow(FigureCanvas): 18 def __init__(self, parent=None, width=4, height=3, dpi=200): 19 # マイクインプット設定 20 self.FORMAT = pyaudio.paFloat32 21 self.CHANNELS = 1 # モノラル 22 self.RATE = 44100 # サンプリング周波数 23 self.CHUNK = 1024 # 1度に読み取る音声のデータ幅 24 self.UPDATE_SECOND = 100 # 更新時間[ms] 25 26 self.audio = pyaudio.PyAudio() 27 self.stream = self.audio.open(format=self.FORMAT, 28 channels=self.CHANNELS, 29 rate=self.RATE, 30 input=True, 31 output=False, 32 frames_per_buffer=self.CHUNK) 33 34 fig = Figure(figsize=(width, height), dpi=dpi) 35 self.axes = fig.add_subplot(111) 36 self.axes.hold(False) 37 super(MainWindow, self).__init__(fig) 38 self.setParent(parent) 39 40 FigureCanvas.setSizePolicy(self, 41 QSizePolicy.Expanding, 42 QSizePolicy.Expanding) 43 FigureCanvas.updateGeometry(self) 44 45 # アップデート時間設定 46 timer = QTimer(self) 47 timer.timeout.connect(self.update_figure) 48 timer.start(self.UPDATE_SECOND) 49 50 def update_figure(self): 51 # マイク入力読み込み 52 data = self.audioinput() 53 54 # fft_data = librosa.stft(data) 55 # librosa.display.specshow(librosa.logamplitude(np.abs(fft_data) ** 2, ref_power=np.max), y_axis='log', 56 # x_axis='time') 57 58 # scipyで無理やり 59 f, t, Sxx = signal.spectrogram(data, fs=self.RATE, nperseg=512) 60 self.axes.pcolormesh(t, f, Sxx, vmax=1e-9, cmap='jet') 61 62 self.draw() 63 64 def audioinput(self): 65 ret = self.stream.read(self.CHUNK) 66 ret = np.fromstring(ret, np.float32) 67 68 return ret 69 70 71if __name__ == '__main__': 72 app = QApplication(sys.argv) 73 mainWindow = MainWindow() 74 mainWindow.show() 75 sys.exit(app.exec_())

###試したこと
http://takeshid.hatenadiary.jp/entry/2015/11/27/045123
http://d.hatena.ne.jp/mFumi/20141112/1415806010
こちらのサイトのプログラムでpyaudioでリアルタイムでマイク入力の読み込みや,pyqt5上でのmatplotlibの連携をすることができました.
librosa.displayだと単体で表示できてしまうため,埋め込むことは難しいのでしょうか

kasu813👍を押しています

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問