Python(Raspberry Pi 3)-函数调用赢得';不能在if语句中工作
我有点奇怪的问题。我目前正在使用树莓皮3创建一个系统。我们的目标是让一个程序能够无限期地继续运行,在同一组条件中反复循环。Python(Raspberry Pi 3)-函数调用赢得';不能在if语句中工作,python,if-statement,while-loop,raspberry-pi,pyaudio,Python,If Statement,While Loop,Raspberry Pi,Pyaudio,我有点奇怪的问题。我目前正在使用树莓皮3创建一个系统。我们的目标是让一个程序能够无限期地继续运行,在同一组条件中反复循环。 为此,我将pyaudio中的代码放入一个函数中,稍后在while循环中的if语句中调用该函数 代码如下: print ("System ON") def recordCASCON(): CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 2 RATE = 44100 RECOR
为此,我将pyaudio中的代码放入一个函数中,稍后在while循环中的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语句中调用时,我才能在shell中获得以下内容:
System ON
initiating
* recording
从我的代码中可以看到,该函数运行60秒,并在for循环中打印i索引。当函数工作时,它运行一系列数字60秒,然后我最终得到“完成录制”。在这种情况下,我可以离开它几个小时,仍然被卡住。
如果我在If语句的末尾添加一个“break”,它所做的全部工作如下:
System ON
initiating
* recording
0
它在0上获取库存,而不是录制
有什么建议或帮助吗?
谢谢大家! 看起来您是在为微控制器之类的硬件编码,您是否检查过您的条件语句是否不会弄乱您的音频设备?例如,一次激活条件意味着语音模块的某些引脚出错了?我使用的音频注入板覆盖了所有raspberry pi 3 GPIO。音频注入器板本身有自己的GPIO设置,我已将其连接到系统。因此,如果我理解正确,您认为GPIO电压的变化可能导致音板无法正常工作?您已经检查了没有if条件的所有可能情况,指出问题可能是硬件问题造成的,例如,特定的引脚配置,因为它们可能会干扰您的音频模块或电源问题。这超出了我的推理范围,但我必须说,您可能是绝对正确的。在这个项目中,如果我告诉你我以前在硬件方面没有任何问题,那我就是在撒谎。像你这样需要共同设计硬件和软件的编程项目可能很棘手,但也很有趣,也很有价值