Files
mixly3/boards/default/micropython_k210_mixgoai/build/lib/player.py

152 lines
3.9 KiB
Python

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()