前提・実現したいこと
以下の1つめのプログラムを2つめで動かしているのですが、ある3つめのプログラムを作り、1つめのプログラム内のdef update(self):内の変数zの値を取得したいと思っているのですが、うまくできません。プログラミングを始めたばかりでどうすれば良いかわからず質問させていただきました。可能なら具体的なプログラムを教えていただきたいです。よろしくお願いします。
該当のソースコード
python
1#sound_OK2.py# 2#プロット関係のライブラリ 3import pyqtgraph as pg 4from pyqtgraph.Qt import QtCore, QtGui 5import numpy as np 6 7#音声関係のライブラリ 8import pyaudio 9 10#カット周波数と音量 11cutnoise = 5 12cutfreq = 0 13findfreqsound = 10 14freqcount = 50 15x=0 16 17 18class PlotWindow: 19 def __init__(self): 20 #マイクインプット設定 21 self.CHUNK=1024 #1度に読み取る音声のデータ幅 22 self.RATE=50000 #サンプリング周波数 23 self.update_seconds=10 #更新時間[ms] 24 self.audio=pyaudio.PyAudio() 25 self.stream=self.audio.open(format=pyaudio.paInt16, 26 channels=1, 27 rate=self.RATE, 28 input=True, 29 frames_per_buffer=self.CHUNK) 30 31 #音声データの格納場所(プロットデータ) 32 self.data=np.zeros(self.CHUNK) 33 self.axis=np.fft.fftfreq(len(self.data), d=1.0/self.RATE) 34 35 #プロット初期設定 36 self.win=pg.GraphicsWindow() 37 self.win.setWindowTitle("SpectrumAnalyzer") 38 39 self.plt=self.win.addPlot() #プロットのビジュアル関係 40 self.plt.setYRange(0,1) #y軸の制限 41 self.plt.setXRange(0,25000) 42 43 #アップデート時間設定 44 self.timer=QtCore.QTimer() 45 self.timer.timeout.connect(self.update) 46 self.timer.start(self.update_seconds) 47 #10msごとにupdateを呼び出し 48 49 50 def update(self): 51 self.data=np.append(self.data,self.AudioInput()) 52 if len(self.data)/1024 > 10: 53 self.data=self.data[1024:] 54 self.fft_data=self.CUTYMINFREQ(self) 55 self.axis=self.XFILTER(self) 56 global x 57 if(self.fft_data.max()>findfreqsound): 58 x=x+1 59 self.plt.plot(x=self.axis, y=self.fft_data, clear=True, pen="y") 60 #print(x) 61 62 if(x==freqcount): 63 print("find freq") 64 z = 1 65 x = 0 66 z = 0 67 68 69 def AudioInput(self): 70 ret=self.stream.read(self.CHUNK) #音声の読み取り(バイナリ) CHUNKが大きいとここで時間かかる 71 #バイナリ → 数値(int16)に変換 72 #32768.0=2^16で割ってるのは正規化(絶対値を1以下にすること) 73 ret=np.frombuffer(ret, dtype="int16")/32768.0 74 return ret 75 76 def FFT_AMP(self, data): 77 data=np.hamming(len(data))*data 78 data=np.fft.fft(data) 79 data=np.abs(data) 80 return data 81 82 def XFILTER(self, data): 83 xfil=np.fft.fftfreq(len(self.data), d=1.0/self.RATE) 84 #xfil=[0 if i<cutfreq else i for i in xfil]#以下の周波数を0に統合 85 return xfil 86 87 def YFILTER(self, data): 88 yfil=self.FFT_AMP(self.data) 89 #yfil=[0 if i<cutnoise else i for i in yfil] #以下の大きさの音を0に統合 90 return yfil 91 92 def XMINFINDER(self, data): 93 x=[i for i,val in enumerate(self.XFILTER(self)) if val<=cutfreq] 94 return x 95 96 def CUTYMINFREQ(self, data): 97 y=self.YFILTER(self) 98 y[self.XMINFINDER(self)]="0" 99 return y 100 101#all_combine_practice.py# 102 103from sound_OK2 import PlotWindow 104from pyqtgraph.Qt import QtCore, QtGui 105import sys 106 107 108#音声認識プログラムSound_OK2 109#cutfreq以上の周波数の音量がfindfreqsoundをfreqcount回数超えたら次に進むよ 110 111 112if __name__=="__main__": 113 plotwin=PlotWindow() 114 if (sys.flags.interactive!=1) or not hasattr(QtCore, 'PYQT_VERSION'): 115 st=QtGui.QApplication.instance().exec_() 116 117#sound_practice_3.py# 118 119from sound_OK2 import PlotWindow 120 121 122PLO=PlotWindow.update() 123z=PLO.x 124print(z) 125
試したこと
3つ目のプログラムとして1つ目のプログラムをimportして読み込もうとしましたが、できませんでした。