質問編集履歴

1

2重になっていた

2017/08/29 23:21

投稿

sayaka1202
sayaka1202

スコア18

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だと単体で表示できてしまうため,埋め込むことは難しいのでしょうか