先找一个sd卡,格式化命名直接叫sd,在卡上拷贝一个wav格式的歌曲,命名7.wav 然后通过以下程序去播放。硬件上连上一个声道上即可。
from fpioa_manager import *
from Maix import I2S, GPIO
import audio
########### settings ############
WIFI_EN_PIN = 8
# AUDIO_PA_EN_PIN = None # Bit Dock and old MaixGo
AUDIO_PA_EN_PIN = 32 # Maix Go(version 2.20)
# AUDIO_PA_EN_PIN = 2 # Maixduino
# disable wifi
fm.register(WIFI_EN_PIN, fm.fpioa.GPIO0, force=True)
wifi_en = GPIO(GPIO.GPIO0, GPIO.OUT)
wifi_en.value(0)
# open audio PA
if AUDIO_PA_EN_PIN:
fm.register(AUDIO_PA_EN_PIN, fm.fpioa.GPIO1, force=True)
wifi_en = GPIO(GPIO.GPIO1, GPIO.OUT)
wifi_en.value(1)
# register i2s(i2s0) pin
fm.register(34, fm.fpioa.I2S0_OUT_D1, force=True)
fm.register(35, fm.fpioa.I2S0_SCLK, force=True)
fm.register(33, fm.fpioa.I2S0_WS, force=True)
# init i2s(i2s0)
wav_dev = I2S(I2S.DEVICE_0)
# init audio
player = audio.Audio(path="/sd/7.wav")
player.volume(100)
# read audio info
wav_info = player.play_process(wav_dev)
print("wav file head information: ", wav_info)
# config i2s according to audio info
wav_dev.channel_config(wav_dev.CHANNEL_1, I2S.TRANSMITTER, resolution=I2S.RESOLUTION_16_BIT,
cycles=I2S.SCLK_CYCLES_32, align_mode=I2S.RIGHT_JUSTIFYING_MODE)
wav_dev.set_sample_rate(wav_info[1])
# loop to play audio
while True:
ret = player.play()
if ret == None:
print("format error")
break
elif ret == 0:
print("end")
break
player.finish()
I2S模块主要用于驱动I2S设备,k210一共有3个I2S设备,每个设备一共有4个通道,在使用前需要对引脚进行映射管理
新建一个 I2S 对象
from Maix import I2S
wav_dev = I2S(I2S.DEVICE_0)
device_num UART号,使用指定的 I2S,可以通过 I2S. 按tab键来补全
返回一个I2S 对象
用于配置 I2S 通道,在此之前需要对引脚进行映射
wav_dev.channel_config(wav_dev.CHANNEL_1, I2S.TRANSMITTER, resolution=I2S.RESOLUTION_16_BIT,
cycles=I2S.SCLK_CYCLES_32, align_mode=I2S.RIGHT_JUSTIFYING_MODE)
i2s_dev.channel_config(channel, mode, resolution, cycles, align_mode)
channel: I2S通道编号
mode: 通道传输模式,一共有接收和发送模式,录音为接受,播放为发送
resolution: 通道分辨率,即接收数据位数
cycles: 单个数据时钟数
align_mode: 通道对齐模式
用于配置 I2S 采样率
i2s_dev.set_sample_rate(sample_rate)
参数
sample_rate:
使用I2S接收音频数据
audio = i2s_dev.record(points)
audio: 一个audio音频对象
使用I2S发送音频数据
i2s_dev.play(audio)
audio: 发送的音频对象
抽象的音频对象,该对象可以被当做参数传入也可以直接使用其方法来播放音频
audio.Audio(array=None, path=None, points=1024)
player = audio.Audio(path="/sd/7.wav")
该接口能传入一个参数,每个参数会决定不同的音频类型
array: bytearray类型的数据,可以将该数据转换为音频对象, 默认 None
path: 打开的音频文件路径,目前仅支持 wav 格式, 默认 None, 注意需要标明关键字path,audio.Audio("/sd/1.wav")这样是错的!! audio.Audio(path = "/sd/1.wav") 才是正确的
points: 开辟有 points 个采样点数的音频缓冲,一个采样点大小为 32bit。为0的情况下将不开辟缓冲, 默认 1024
返回一个 Audio 对象