2017-12-05 7 views
2

私はちょっとした問題があります。私は現在、Raspberry Pi 3を使用してシステムを作成しています。目標は、同じ条件を何度も繰り返す無期限に実行し続けるプログラムを持つことです。
これを行うには、pyaudioのコードを後でwhileループ内のif文の中で呼び出す関数に入れます。Python(Raspberry Pi 3) - if文の中で関数呼び出しが機能しない

print ("System ON") 


def recordCASCON(): 
    CHUNK = 1024 
    FORMAT = pyaudio.paInt16 
    CHANNELS = 2 
    RATE = 44100 
    RECORD_SECONDS = 60 
    WAVE_OUTPUT_FILENAME = "cascon.wav" 

    p = pyaudio.PyAudio() 

    stream = p.open(format=FORMAT, 
        channels=CHANNELS, 
        rate=RATE, 
        input=True, 
        frames_per_buffer=CHUNK) 

    print("* recording") 

    frames = [] 

    for i in range(0, int(RATE/CHUNK * RECORD_SECONDS)): 
     data = stream.read(CHUNK) 
     frames.append(data) 
     print(i) 

    print("* done recording") 

    stream.stop_stream() 
    stream.close() 
    p.terminate() 

    wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') 
    wf.setnchannels(CHANNELS) 
    wf.setsampwidth(p.get_sample_size(FORMAT)) 
    wf.setframerate(RATE) 
    wf.writeframes(b''.join(frames)) 
    wf.close() 


while True: 

    if GPIO.input(LedPin4) == GPIO.HIGH and GPIO.input(LedPin5) == GPIO.HIGH: 
     print("initiating") 
     recordCASCON() 

私も次のことに注意したい。ここでは

はコードです。この関数は、単独で呼び出されたときに完璧に機能します。 whileループ内で呼び出されたときにもうまく動作します。私はシェルで次の取得ifステートメント内でのみ呼び出されたときに:あなたは私のコードから見ることができるように

System ON 
initiating 
* recording 

、関数が60秒間実行され、ループのために私のインデックスを出力します。関数が動作すると、60秒間一連の数値が実行され、最後に「完了した記録」が得られます。この場合、私は数時間それを残すことができ、まだ立ち往生しています。私は、if文の末尾に「休憩」を追加した場合 それがないすべては、次のとおりです。

System ON 
initiating 
* recording 
0 

それは0の代わりに、記録に株式を取得します。

どのようなご提案ですか? ありがとうございました!

答えて

1

マイクロコントローラなどのハードウェアをコーディングしているようですが、条件文がオーディオデバイスを混乱させないかどうかチェックしましたか?例えば、一度に起こる状態の活性化は、ボイスモジュールがいくつかのピンが乱れていることを意味しますか?

+0

私はすべてのラズベリーpi 3 GPIOを通過するオーディオインジェクタボードを使用しています。オーディオインジェクタボード自体には、システムに接続したGPIOセットがあります。ですから、正しく理解すれば、GPIO電圧の変化がサウンドボードを機能させない原因になると思いますか? – rainwhole

+0

if条件なしで可能なすべてのシナリオを確認したことで、オーディオモジュールや電源の問題を引き起こす可能性がある特定のピン構成など、ハードウェアの問題が原因である可能性が指摘されています。 –

+0

私の推論を超えていたが、私はあなたが絶対に正しいかもしれないと言わなければならない。私はこのプロジェクト中にハードウェアに問題がなかったと言えば、私は嘘をつきます。 – rainwhole

関連する問題