本站改版新增arduino频道
ESP32+MicroPython+MAX98357 播放音乐
from machine import I2S,SPI
from machine import Pin
import os,utime
#esp32s3 12 14 13
#I2S所需管脚
#数据时钟(某宝INMP441模块SCK)
sck_pin = Pin(12)
#帧时钟(某宝INMP441模块模块WS)
ws_pin = Pin(14)
#数据(某宝INMP441模块模块SD)
sd_pin = Pin(13)
#创建用于音频播放的I2S对象
audioOutI2S = I2S(
#I2S编号
1,
#I2S所需管脚
sck=sck_pin, ws=ws_pin, sd=sd_pin,
#设置为发送模式(对应于音频播放)
mode=I2S.TX,
#采样深度(即每个采样的比特数)
bits=16,
#设置为立体声
format=I2S.STEREO,
#采样率
rate=8000,
#内部缓存字节数
ibuf=16384)
#打开音频文件
wavFile = open('test.wav','rb')
#跳转到第一个音频数据字节
pos = wavFile.seek(44)
#音频数据缓冲
wavSamplesBuf = bytearray(16384)
#创建对应的内存查看对象(用于减少主循环中的堆内存分配)
wavSamplesBufMV= memoryview(wavSamplesBuf)
#播放主循环
while True:
try:
#读取一批音频采样数据
readCount=wavFile.readinto(wavSamplesBufMV)
#数据写出字节数量计数器
writtenCount=0
#如果音频文件结束
if readCount==0:
#跳转到第一个音频数据字节
pos = wavFile.seek(44)
#break
else:
#如果当前音频数据缓冲中的数据还没有都输出
while writtenCount < readCount:
writtenCount += audioOutI2S.write(wavSamplesBufMV[writtenCount:readCount])
except (Exception) as e:
print('caught exception {} {}'.format(type(e).__name__, e))
break
#关闭音频文件
wavFile.close()
#释放I2S对象
audioOutI2S.deinit()
Copyright © 2014 ESP56.com All Rights Reserved
晋ICP备14006235号-22 晋公网安备14108102001165号
执行时间: 0.0092959403991699 seconds