質問編集履歴
1
2重になっていた
test
CHANGED
File without changes
|
test
CHANGED
@@ -177,189 +177,3 @@
|
|
177
177
|
こちらのサイトのプログラムでpyaudioでリアルタイムでマイク入力の読み込みや,pyqt5上でのmatplotlibの連携をすることができました.
|
178
178
|
|
179
179
|
librosa.displayだと単体で表示できてしまうため,埋め込むことは難しいのでしょうか
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
###前提・実現したいこと
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
pyaudioでリアルタイムでマイク入力を読み込み,pyqt5上でウィンドウを作ってそこに何秒か毎にlibrosa.display.specshow()(https://librosa.github.io/librosa/display.html)でスペクトログラムを表示・保存したいと考えています.
|
192
|
-
|
193
|
-
そこでpyqt5のウィンドウ上でlibrosa.display.specshow()を出すにはどうすればよいでしょうか.
|
194
|
-
|
195
|
-
scipyでスペクトログラムを表示させることは(多分)できました.
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
###該当のソースコード
|
200
|
-
|
201
|
-
```Python
|
202
|
-
|
203
|
-
import sys
|
204
|
-
|
205
|
-
import numpy as np
|
206
|
-
|
207
|
-
import pyaudio
|
208
|
-
|
209
|
-
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
210
|
-
|
211
|
-
from matplotlib.figure import Figure
|
212
|
-
|
213
|
-
import librosa
|
214
|
-
|
215
|
-
import librosa.display
|
216
|
-
|
217
|
-
from scipy import signal
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
from PyQt5.QtCore import (QLineF, QPointF, QRectF, Qt, QTimer)
|
222
|
-
|
223
|
-
from PyQt5.QtGui import (QBrush, QColor, QPainter)
|
224
|
-
|
225
|
-
from PyQt5.QtWidgets import (QApplication, QGraphicsView, QGraphicsScene, QGraphicsItem,
|
226
|
-
|
227
|
-
QGridLayout, QVBoxLayout, QHBoxLayout, QSizePolicy,
|
228
|
-
|
229
|
-
QLabel, QLineEdit, QPushButton)
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
class MainWindow(FigureCanvas):
|
236
|
-
|
237
|
-
def __init__(self, parent=None, width=4, height=3, dpi=200):
|
238
|
-
|
239
|
-
# マイクインプット設定
|
240
|
-
|
241
|
-
self.FORMAT = pyaudio.paFloat32
|
242
|
-
|
243
|
-
self.CHANNELS = 1 # モノラル
|
244
|
-
|
245
|
-
self.RATE = 44100 # サンプリング周波数
|
246
|
-
|
247
|
-
self.CHUNK = 1024 # 1度に読み取る音声のデータ幅
|
248
|
-
|
249
|
-
self.UPDATE_SECOND = 100 # 更新時間[ms]
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
self.audio = pyaudio.PyAudio()
|
254
|
-
|
255
|
-
self.stream = self.audio.open(format=self.FORMAT,
|
256
|
-
|
257
|
-
channels=self.CHANNELS,
|
258
|
-
|
259
|
-
rate=self.RATE,
|
260
|
-
|
261
|
-
input=True,
|
262
|
-
|
263
|
-
output=False,
|
264
|
-
|
265
|
-
frames_per_buffer=self.CHUNK)
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
fig = Figure(figsize=(width, height), dpi=dpi)
|
270
|
-
|
271
|
-
self.axes = fig.add_subplot(111)
|
272
|
-
|
273
|
-
self.axes.hold(False)
|
274
|
-
|
275
|
-
super(MainWindow, self).__init__(fig)
|
276
|
-
|
277
|
-
self.setParent(parent)
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
FigureCanvas.setSizePolicy(self,
|
282
|
-
|
283
|
-
QSizePolicy.Expanding,
|
284
|
-
|
285
|
-
QSizePolicy.Expanding)
|
286
|
-
|
287
|
-
FigureCanvas.updateGeometry(self)
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
# アップデート時間設定
|
292
|
-
|
293
|
-
timer = QTimer(self)
|
294
|
-
|
295
|
-
timer.timeout.connect(self.update_figure)
|
296
|
-
|
297
|
-
timer.start(self.UPDATE_SECOND)
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
def update_figure(self):
|
302
|
-
|
303
|
-
# マイク入力読み込み
|
304
|
-
|
305
|
-
data = self.audioinput()
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
# fft_data = librosa.stft(data)
|
310
|
-
|
311
|
-
# librosa.display.specshow(librosa.logamplitude(np.abs(fft_data) ** 2, ref_power=np.max), y_axis='log',
|
312
|
-
|
313
|
-
# x_axis='time')
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
# scipyで無理やり
|
318
|
-
|
319
|
-
f, t, Sxx = signal.spectrogram(data, fs=self.RATE, nperseg=512)
|
320
|
-
|
321
|
-
self.axes.pcolormesh(t, f, Sxx, vmax=1e-9, cmap='jet')
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
self.draw()
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
def audioinput(self):
|
330
|
-
|
331
|
-
ret = self.stream.read(self.CHUNK)
|
332
|
-
|
333
|
-
ret = np.fromstring(ret, np.float32)
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
return ret
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
if __name__ == '__main__':
|
344
|
-
|
345
|
-
app = QApplication(sys.argv)
|
346
|
-
|
347
|
-
mainWindow = MainWindow()
|
348
|
-
|
349
|
-
mainWindow.show()
|
350
|
-
|
351
|
-
sys.exit(app.exec_())
|
352
|
-
|
353
|
-
```
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
###試したこと
|
358
|
-
|
359
|
-
http://takeshid.hatenadiary.jp/entry/2015/11/27/045123
|
360
|
-
|
361
|
-
http://d.hatena.ne.jp/mFumi/20141112/1415806010
|
362
|
-
|
363
|
-
こちらのサイトのプログラムでpyaudioでリアルタイムでマイク入力の読み込みや,pyqt5上でのmatplotlibの連携をすることができました.
|
364
|
-
|
365
|
-
librosa.displayだと単体で表示できてしまうため,埋め込むことは難しいのでしょうか
|