2017-12-05 4 views
2

Ich habe ein bisschen ein seltsames Problem. Ich bin gerade dabei, ein System mit einem Raspberry Pi 3 zu erstellen. Das Ziel ist es, ein Programm zu haben, das unbegrenzt weiterläuft und immer wieder dieselben Bedingungen durchläuft.
Um dies zu tun, setze ich Code von Pyaudio in eine Funktion, die ich später innerhalb einer if-Anweisung innerhalb einer while-Schleife aufrufen. HierPython (Raspberry Pi 3) - Funktionsaufruf funktioniert nicht in If-Anweisung

ist der Code:

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() 

Ich möchte auch die folgenden beachten. Die Funktion funktioniert einwandfrei, wenn sie selbst aufgerufen wird. Es funktioniert auch gut, wenn es innerhalb der while-Schleife aufgerufen wird. Nur wenn in der if-Anweisung aufgerufen, die ich folgend in der Schale erhalten:

System ON 
initiating 
* recording 

Wie Sie aus meinem Code sehen können, läuft die Funktion für 60 Sekunden und druckt den i-Index in dem for-Schleife. Wenn die Funktion funktioniert, läuft eine Reihe von Nummern für 60 Sekunden, dann bekomme ich endlich die "done recording". In diesem Fall könnte ich es stundenlang verlassen und stecke immer noch fest. Wenn ich eine „Pause“ am Ende des if-Anweisung hinzufügen alle es tut, ist die folgende:

System ON 
initiating 
* recording 
0 

Es Lager auf 0 statt Aufnahme bekommt.

Irgendwelche Vorschläge oder Hilfe? Vielen Dank!

Antwort

1

Es scheint, als ob Sie für eine Hardware wie Mikrocontroller oder so codieren, haben Sie überprüft, ob Ihre bedingte Anweisung wird nicht Audiogerät durcheinander bringen? Zum Beispiel bedeutet die Aktivierung der Bedingung, dass zu einem Zeitpunkt passiert, dass das Sprachmodul einige Stifte durcheinander gebracht hat?

+0

Ich benutze eine Audio-Injektor-Platine, die über alle Raspberry Pi 3 GPIOs geht. Die Audio-Injektor-Platine selbst hat eigene GPIO-Sets, die ich an das System angeschlossen habe. Wenn ich also richtig verstehe, denken Sie, dass die Änderung der GPIO-Spannung dazu führen könnte, dass die Soundkarte nicht funktioniert? – rainwhole

+0

Die Tatsache, dass Sie alle möglichen Szenarien ohne die if-Bedingung überprüft haben, weist darauf hin, dass das Problem auf Hardwareproblemen zurückzuführen sein könnte, z. B. eine spezielle Pin-Konfiguration, da sie das Audiomodul beeinträchtigen oder Probleme mit der Stromversorgung verursachen kann. –

+0

das war jenseits meiner Argumentation, aber ich muss sagen, Sie könnten absolut richtig sein. Ich würde lügen, wenn ich dir sagte, dass ich während dieses Projekts keine Probleme mit der Hardware hatte. – rainwhole