前提・実現したいこと
Python3でリアルタイムスペクトルアナライザを作ろうと思い、PyAudioを使い、ネットに落ちていた記事を参考にコードを作成しました。
開発環境はRaspberryPi3です。
下記の方法(※1)に従い、PyQt 5.7+dfsg-5、SIP 4.18.1をインストールしています。
※1) https://tomosoft.jp/design/?p=10991
SipModuleAPIのバージョンとは何か、解決方法がわかりません。
調べていても原因がわからず困っています。
どなたかアドバイスを頂けると助かります。
発生している問題・エラーメッセージ
RuntimeError: the sip module implements API v11.0 to v11.3 but the module requires API v12.4
該当のソースコード
Python3
1#プロット関係のライブラリ 2import pyqtgraph as pg 3from pyqtgraph.Qt import QtCore, QtGui 4import numpy as np 5import sys 6from PyQt5.QtWidgets import QApplication 7 8#音声関係のライブラリ 9import pyaudio 10import struct 11 12class PlotWindow: 13 def __init__(self): 14 #マイクインプット設定 15 self.CHUNK =1024*2 # 1度に読み取る音声のデータ幅 16 self.RATE = 48000 # サンプリング周波数 17 self.update_seconds = 50 # 更新時間[ms] 18 self.audio = pyaudio.PyAudio() 19 self.stream = self.audio.open(format=pyaudio.paInt16, 20 channels=1, 21 rate=self.RATE, 22 input=True, 23 frames_per_buffer=self.CHUNK) 24 25 #音声データの格納場所(プロットデータ) 26 self.data = np.zeros(self.CHUNK) 27 self.axis = np.fft.fftfreq(len(self.data), d=1.0/self.RATE) 28 29 #プロット初期設定 30 self.win = pg.GraphicsWindow() 31 self.win.setWindowTitle("SpectrumAnalyzer") 32 self.plt = self.win.addPlot() # プロットのビジュアル関係 33 self.plt.setYRange(0, 30) # y軸の制限 34 35 #アップデート時間設定 36 self.timer = QtCore.QTimer() 37 self.timer.timeout.connect(self.update) 38 self.timer.start(self.update_seconds) # 10msごとにupdateを呼び出し 39 40 def update(self): 41 self.data = np.append(self.data, self.AudioInput()) 42 if len(self.data)/1024 > 10: 43 self.data = self.data[1024:] 44 self.fft_data = self.FFT_AMP(self.data) 45 self.axis = np.fft.fftfreq(len(self.data), d=1.0/self.RATE) 46 # symbol="o", symbolPen="y", symbolBrush="b") 47 self.plt.plot(x=self.axis, y=self.fft_data, clear=True, pen="y") 48 49 def AudioInput(self): 50 ret = self.stream.read(self.CHUNK) # 音声の読み取り(バイナリ) CHUNKが大きいとここで時間かかる 51 #バイナリ → 数値(int16)に変換 52 #32768.0=2^16で割ってるのは正規化(絶対値を1以下にすること) 53 ret = np.frombuffer(ret, dtype="int16")/32768.0 54 return ret 55 56 def FFT_AMP(self, data): 57 data = np.hamming(len(data))*data 58 data = np.fft.fft(data) 59 data = np.abs(data) 60 return data 61 62if __name__ == "__main__": 63 plotwin = PlotWindow() 64 if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 65 QtGui.QApplication.instance().exec_()
試したこと
他の質問でsudo apt-get install python3-pyqt5を行ってみてはとのアドバイスをいただいたので、インストールしました。
”python3-pyqt5 はすでに最新バージョン (5.7+dfsg-5) です。”とのメッセージが出ています。
補足情報(FW/ツールのバージョンなど)
プログラミング初心者で検討違いのことをしているかもしれません。ご指摘をいただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/29 01:28
2020/04/29 13:21