2017-12-05 19 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 초 동안 실행하고 for 루프에서 내가 인덱스를 인쇄합니다. 함수가 작동하면 60 초 동안 일련의 숫자가 실행되고 마침내 "녹음 완료"상태가됩니다. 이 경우 나는 그것을 몇 시간 동안 그대로두고 아직도 붙어있다. 나는 경우 문장의 끝에 "휴식"을 추가 경우가하는 모든는 다음과 같습니다

System ON 
initiating 
* recording 
0 

대신 녹화 0에 재고를 가져옵니다.

어떤 제안이나 도움이 필요합니까? 감사합니다.

답변

1

마이크로 컨트롤러와 같은 하드웨어를 코딩하는 것처럼 보입니다. 조건문이 오디오 장치를 엉망으로 만들지 여부를 확인 했습니까? 예를 들어 한 번에 발생하는 상태의 활성화는 음성 모듈이 일부 핀이 엉망이되는 것을 의미합니까?

+0

모든 라즈베리 파이 3 GPIO를 처리하는 오디오 인젝터 보드를 사용하고 있습니다. 오디오 인젝터 보드 자체에는 시스템에 연결된 GPIO 세트가 있습니다. 따라서 올바르게 이해하면 GPIO 전압의 변화로 인해 사운드 보드가 작동하지 않을 수 있다고 생각하십니까? – rainwhole

+0

if 조건없이 가능한 모든 시나리오를 점검 한 사실은 오디오 모듈을 방해하거나 전원 문제가 발생할 수 있으므로 특정 핀 구성과 같은 하드웨어 문제로 인해 문제가 발생할 수 있음을 지적합니다. –

+0

는 내 추론을 넘어서는 것이었지만 나는 당신이 절대적으로 옳을 수도 있다고 말하고 싶습니다. 이 프로젝트를 진행하는 동안 전에 하드웨어에 문제가 없다고 말하면 나는 거짓말을합니다. – rainwhole