亚博K210使用扬声器进行语音播放

电路图

        根据电路图可以知道数据线、位时钟线、声道选择线分别连到了主控芯片的IO31、32、30,后面根据这三个IO通过I2S协议进行音频数据的输出。

代码

from fpioa_manager import *
from maix import I2S, GPIO
import audio

# 注册I2S0使用的引脚
fm.register(31, fm.fpioa.I2S0_OUT_D1, force=True)
fm.register(32, fm.fpioa.I2S0_SCLK, force=True)
fm.register(30, fm.fpioa.I2S0_WS, force=True)

# 初始化I2S设备(使用I2S0)
wav_dev = I2S(I2S.DEVICE_0)

# 创建音频播放器对象,指定要播放的音频文件
player = audio.Audio(path="nomal.wav")
player.volume(80)  # 设置音量为80(范围0~100)

# 播放音频并读取音频文件头信息
wav_info = player.play_process(wav_dev)
print("wav file head information: ", wav_info)

# 根据音频文件的信息配置I2S通道参数
wav_dev.channel_config(
    wav_dev.CHANNEL_1,           # 使用通道1
    I2S.TRANSMITTER,             # 发送模式(作为发送端)
    resolution=I2S.RESOLUTION_16_BIT,  # 分辨率设置为16位
    cycles=I2S.SCLK_CYCLES_32,        # SCLK每帧32个周期
    align_mode=I2S.RIGHT_JUSTIFYING_MODE  # 对齐方式为右对齐
)

# 设置I2S采样率,从音频文件头中获取
wav_dev.set_sample_rate(wav_info[1])

# 循环播放音频数据
while True:
    ret = player.play()  # 开始播放音频块
    if ret == None:
        print("format error")  # 如果返回None表示音频格式错误
        break
    elif ret == 0:
        print("end")     # 返回0表示播放结束
        break

# 关闭音频播放器资源
player.finish()

 I2S(device, mode, ...)

        用于创建一个 I2S 设备对象,通过它可以配置和控制 I2S 接口,通常用于连接音频 DAC、ADC 或音频编解码芯片。

device

int

指定使用的 I2S 设备编号,通常是I2S.DEVICE_0

mode

int

工作模式,默认是I2S.CONTROLLER(主模式),也可以设置为从模式I2S.PERIPHERAL

audio.Audio(path=None, is_file=True)

        用于音频播放的核心类,主要用于加载和播放 .wav 格式的音频文件。它是 MaixPy 提供的高级音频接口,封装了对 I2S 接口的操作,简化了音频播放流程。

path

str

要播放的音频文件路径,如:"/sd/audio.wav""/flash/audio.wav"

is_file

bool

是否是文件,默认为True,如果使用内存缓冲区可设为False

play_process(i2s_dev)

        是 MaixPy 中 audio.Audio() 类的一个重要方法,它用于 初始化音频播放流程 ,并返回音频文件的元信息(如采样率、位深等)。

i2s_dev

I2S对象

已经初始化好的 I2S 设备对象

channel_config(channel, mode, resolution, cycles, align_mode)

        是 MaixPy 中 I2S 类的一个核心方法,用于 配置 I2S 接口的音频通道参数。

channel

int

使用哪个通道:I2S.CHANNEL_0,I2S.CHANNEL_1

mode

int

工作模式:I2S.TRANSMITTER(发送)  I2S.RECEIVER(接收)

resolution

int

分辨率(每个采样点的位数):I2S.RESOLUTION_16_BIT  I2S.RESOLUTION_24_BIT   I2S.RESOLUTION_32_BIT

cycles

int

一帧有多少个 SCLK 周期: I2S.SCLK_CYCLES_32(常用) I2S.SCLK_CYCLES_64

align_mode

int

数据对齐方式:I2S.RIGHT_JUSTIFYING_MODE(右对齐) I2S.LEFT_JUSTIFYING_MODE(左对齐 )     I2S.STANDARD_MODE(标准 I2S 模式)

set_sample_rate(sample_rate)

   I2S 类的一个方法,用于 设置 I2S 接口的音频采样率。

sample_rate

int

音频采样率,单位为 Hz(赫兹),例如:8000, 16000, 44100 等

play()

   audio.Audio() 类的一个方法,用于 播放音频文件中的数据块(chunk) 。它不是一次性播放整个音频文件,而是以流式方式分段读取和播放 .wav 文件的内容。

返回值含义

0

播放完成(已到达文件末尾)

None

出错(如文件格式错误、I2S 初始化失败等)

>0

成功播放一个音频块,继续调用play()直到返回0

finish()

        用于 结束音频播放并释放相关资源 。它通常在音频播放完成后调用,确保音频文件正确关闭、缓冲区释放、I2S 接口停止工作。

使用

        运行前将需要使用的.waw格式传入SD卡,然后使用canMV IDE运行代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值