【基于人脸识别的自动打卡健走计时系统】Maixbit/MaixPy 坑!音频播放函数阻塞调用
[复制链接]
问题:阻塞循环播放音频文件,屏幕无法实时刷新摄像头采集的图像(有一段“卡顿的画面”)~~~尝试采用状态机 一边播放,边刷新LCD,结果~~~播放的语音就不完整了(采集+LCD的时间大于44.1K播放调用的最小周期~~~)
槽点:400MHz的CPU,400MHz的KPU~~~这样的效果,的确有点“意外”~~~究其原因,还是Sipeed/MaixPy~在 micropython实现底层时,应该没有用DMA或者考虑多线程方式运行~~~,
平台:Maixbit/MaixPy
任务:摄像头采集+LCD刷屏+音频播放
描述:官方文档:audio(音频) 的使用 - Sipeed Wiki play()函数必须要在while(1) Loop中调用
# loop to play audio
while True:
ret = player.play()
if ret == None:
print("format error")
break
elif ret==0:
print("end")
break
~~曾经希望用状态机~~通过边播放,一边刷新LCD来缓解~~~~下一步只能尝试把wav文件降低到8K的samplerate~~~试试效果~~~
#播放状态机
if (_thread_state == 0):
music_player = auido_thread_pre(dev, "/sd/4.wav", 50)
_thread_state = 1
elif (_thread_state == 1):
while(True):
if(True == audio_thread_loop(music_player)):
_thread_state = 2
break
img = sensor.snapshot()
lcd.display(img)
elif (_thread_state == 2):
audio_thread_exit(music_player)
_thread_state = 3
~~ 暂时没时间深入K210底层~~~~得捷比赛之后,再尝试自行编译固件再试试~~~再或者调用底层C的方式,重新客制化一下底层~~~
|