import board import audio,video from Maix import I2S import gc spk_b=None spk_d=None spk_w=None def spk_init(BLK=8,WS=9,DAT=10,sample_rate=16000): global spk_b global spk_d global spk_w spk_b=BLK spk_d=DAT spk_w=WS board.register(DAT,board.FPIOA.I2S0_OUT_D1) board.register(BLK,board.FPIOA.I2S0_SCLK) board.register(WS,board.FPIOA.I2S0_WS) wav_dev = I2S(I2S.DEVICE_0) wav_dev.channel_config(I2S.CHANNEL_1, I2S.TRANSMITTER,resolution = I2S.RESOLUTION_16_BIT, cycles = I2S.SCLK_CYCLES_32, align_mode = I2S.STANDARD_MODE) wav_dev.set_sample_rate(sample_rate) spk_rep=wav_dev return wav_dev def mic_init(BLK=35,WS=33,DAT=34,sample_rate=16000): board.register(DAT,board.FPIOA.I2S2_IN_D0) board.register(BLK,board.FPIOA.I2S2_SCLK) board.register(WS,board.FPIOA.I2S2_WS) wav_dev = I2S(I2S.DEVICE_2) wav_dev.channel_config(I2S.CHANNEL_0, I2S.RECEIVER, resolution = I2S.RESOLUTION_16_BIT, cycles = I2S.SCLK_CYCLES_32, align_mode=I2S.STANDARD_MODE) wav_dev.set_sample_rate(sample_rate) return wav_dev def audio_play(I2S,path,num=80): try: player = audio.Audio(path=path) except Exception as e: raise NameError("No audio file loaded or {}".format(e)) player.volume(num) wav_info=player.play_process(I2S) I2S.set_sample_rate(wav_info[1]) while True: ret = player.play() if ret == None: print("Format Error") break elif ret == 0: print("Play end \n") player.finish() break player.__deinit__() gc.collect() def audio_record(I2S,path,record_time,sample_rate=16000): try: recorder = audio.Audio(path=path, is_create=True, samplerate=sample_rate) except Exception as e: raise NameError("Need audio storage location or {}".format(e)) queue = [] frame_cnt = record_time*sample_rate//2048 for i in range(frame_cnt): tmp = I2S.record(2048*2) if len(queue) > 0: ret = recorder.record(queue[0]) queue.pop(0) I2S.wait_record() queue.append(tmp) print("record:{}s".format(round(((frame_cnt-i-1)/7.7) ,1))) recorder.finish() recorder.__deinit__() del recorder print("Audio record finish \n") gc.collect() def video_play(I2S1,path,num=80): try: global spk_b global spk_d global spk_w import lcd lcd.init() I2S=spk_init(spk_b,spk_w,spk_d) vide = video.open(path) except Exception as e: raise NameError("No video file loaded or {}".format(e)) vide.volume(num) while True: try: ret = vide.play() except Exception as e: raise NameError("Video format error or {}".format(e)) if ret == None: print("Format Error") break elif ret == 0: print("Play end \n") break vide.__del__() del vide del I2S gc.collect() def video_record(I2S,path,record_time): import sensor,lcd lcd.init() try: v = video.open(path, audio=False, record=True, interval=200000, quality=80,width=240, height=240) except Exception as e: raise NameError("Need video storage location or {}".format(e)) record_time=record_time*5 for i in range(record_time): try: img = sensor.snapshot() except : raise NameError("Need to initialize camera") lcd.display(img) v.record(img) print("record {}s".format(round((record_time-i-1)*0.2,1))) v.record_finish() print("Video record finish \n") v.__del__() gc.collect()