Python中调用函数时while循环无法持续运行的问题
问题描述
当Python代码的while循环内包含strong_beat.play()语句时,循环会停止运行;移除该语句后,循环可正常执行完20次循环。代码如下:
import simpleaudio, time, math temp = 0 strong_beat = simpleaudio.WaveObject.from_wave_file('metronome2.wav') while temp<20: strong_beat.play() time.sleep(0.5) temp = temp + 1 print (temp)
解决办法
方案1:捕获播放异常
simpleaudio的play()方法在无法正常播放音频时(比如设备资源被占用、短时间内多次调用导致播放队列溢出),可能会抛出未被捕获的异常,直接终止循环。给播放逻辑加上异常捕获,就能让循环继续执行:
import simpleaudio, time, math temp = 0 strong_beat = simpleaudio.WaveObject.from_wave_file('metronome2.wav') while temp < 20: try: strong_beat.play() except Exception as e: print(f"播放错误: {e}") time.sleep(0.5) temp += 1 print(temp)
方案2:等待播放完成后再继续循环
如果不需要同时叠加播放音频,可等待当前音频播放完成后再执行循环的下一步,避免播放冲突:
import simpleaudio, time, math temp = 0 strong_beat = simpleaudio.WaveObject.from_wave_file('metronome2.wav') while temp < 20: play_obj = strong_beat.play() play_obj.wait_done() # 阻塞直到当前音频播放完毕 time.sleep(0.5) temp += 1 print(temp)
补充说明
如果你的音频文件播放时长超过0.5秒,time.sleep(0.5)会导致下一次播放提前触发,容易引发播放队列的冲突问题,这时候方案2的等待播放完成逻辑会更稳定。
内容的提问来源于stack exchange,提问作者DarkMud OfHorror
相关产品推荐
相关产品推荐

