Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。

Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台

Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。

Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。

Micropython ESP频道

MicroPython+ESP32S3+MAX98357 播放音乐


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

执行时间: 0.011651039123535 seconds