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

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

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

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python

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

Q&A

2回答

972閲覧

他ファイルの変数値を読み込みたいのですが。。。

lynn-lynn

総合スコア1

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python

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

0グッド

0クリップ

投稿2020/12/27 08:14

編集2020/12/27 08:23

前提・実現したいこと

以下の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して読み込もうとしましたが、できませんでした。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/12/27 08:23 編集

「3つ目のプログラムとして1つ目のプログラムをimportして読み込もうとしましたが、できませんでした」 ・1つ目のプログラムをimportして読み込もうとしたその「3つ目のプログラム」も記載してください ・どう「できなかった」のか(どういうエラーが出たのか、もしくは、エラーは出なかったが期待した動作にならなかったならその内容)も記載してください。
lynn-lynn

2020/12/27 08:23

失礼しました。 質問を編集し直しました。
guest

回答2

0

sound_practice_3.pyを下記のように修正してみてください。

# sound_practice_3.py from sound_OK2 import PlotWindow PLO=PlotWindow() # 修正 PLO.update() # 修正 z=PLO.x print(z)

投稿2020/12/27 08:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

lynn-lynn

2020/12/27 08:52

実行してみましたが、'PlotWindow' object has no attribute 'x' というエラーが出てできません。また、応答しないウィンドウ(おそらくPyqtgraphのものかな?)が出てしまいます。
guest

0

問題は三つあります。

  1. メソッドupdateはリターン文がないので値を返さない。zはメソッドupdateの中の変数なので、updateが終わったあとは残っていない。

  2. if文の後でz=0と代入しているので、もしzを値として返したとしても必ず0である。

  3. クラスを指定してインスタンスメソッドを呼び出すことはできない。インスタンスを作ってそのインスタンスに対してメソッドを呼ばなければならない。

以下は推測ですが、updateの最後の部分を以下に変更し、

python

1 if(x==freqcount): 2 print("find freq") 3 z = 1 4 x = 0 5 else: 6 z = 0 7 return z

sound_practice_3.pyを以下に変更する。

python

1PLO = PlotWindow() #インスタンス作成 2z = PLO.update() #インスタンスメソッド呼び出し 3print(z)

以上の変更が必要です。
それ以外の部分は見ていませんので、これで完全に正常に動くかどうかはわかりません。

投稿2020/12/27 08:49

ppaul

総合スコア24666

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

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

lynn-lynn

2020/12/27 09:05

if(x>freqcount): print("find freq") z = 1 else: z = 0 return z として途中からずっとzが1になるようにしたのですが、結果は0しか返ってきませんでした。
ppaul

2020/12/28 02:25

最初のご質問は他ファイルの変数値を読み込みたいということでしたが、それは解決しましたか? 解決したのなら、一旦この問題は閉じてください。 プログラム全体として期待する出力が出ないというのは全く別の問題です。 それを質問するのであれば、以下のどちらかの方法で再度質問して下さい。 方法1 部分プログラムの動作に関する質問  プログラムや入力データをなるべく減らして問題のある部分を再現するような短いプログラムと少量のデータにした上で、それを実行したときの出力とlynn-lynnさんの求める出力を掲載して、アドバイスを求める。 方法2 プログラム全体の動作に関する質問  プログラム全体と入力する全てのデータとそれを実行したときの出力とlynn-lynnさんの求める出力を掲載して、アドバイスを求める。 回答者は、lynn-lynnさんのPCの中身を推測することも、lynn-lynnさんの頭の中にある期待する出力を推測することは出来ませんので、上記のいずれかで新規の質問をされれば回答が得られるかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問