class Audio - 音频播放
该类提供音频播放功能。
目前支持型号:EC600N系列、EC800N系列、EC600M-CN(LA、LE)、EC800M-CN(LA、LE、GA)、EG810MCN_GA、EC600U系列、EC200U系列、EG912U、EG915U、EG915N-EUAG。
构造函数
audio.Audio
class audio.Audio(device)
创建Audio对象。
参数描述:
-
device- 输出通道,int类型,0表示听筒,1表示耳机,2表示喇叭。具体模块所支持通道详见下表。
模块输出通道对应表:
| 模块型号 | 听筒 | 耳机 | 喇叭 |
|---|---|---|---|
| EC200N/EC600N/EC800N | 支持 | 不支持 | 不支持 |
| EC600M-CN(LA、LE) | 支持 | 不支持 | 不支持 |
| EC800M-CN(LA、LE、GA) | 支持 | 不支持 | 不支持 |
| EG810M | 支持 | 不支持 | 不支持 |
| EG915N/EG912N | 支持 | 不支持 | 不支持 |
| EG912U | 支持 | 不支持 | 不支持 |
| EC200U | 不支持 | 不支持 | 支持 |
| EC600U | 支持 | 支持 | 支持 |
| EG915U | 支持 | 支持 | 不支持 |
| EC600S | 支持 | 不支持 | 不支持 |
| EC600K/EC800K | 支持 | 不支持 | 不支持 |
| EC800G-CN(GA、TT、LA) | 支持 | 支持 | 支持 |
| EC600G-CN(LA) | 支持 | 支持 | 支持 |
方法
Audio.set_pa
Audio.set_pa(gpio,num)
该方法用于设置输出pa的gpio。
参数描述:
-
gpio- 输出的gpio,int类型,参照 Pin 。 -
num- 上电脉冲数,int类型。
返回值描述:
1
表示成功,
0
表示失败。
Audio.setSpeakerpaSwitch
Audio.setSpeakerpaSwitch(on_off)
该方法用于手动开关pa。
说明:
setSpeakerpaSwitch需要在set_pa设置完pa后才能生效。
参数描述:
-
on_off- pa开关状态,int类型,1开启pa,0关闭pa。
返回值描述:
0
表示成功,
-1
表示失败。
示例:
from audio import Audio
aud = Audio(0)
aud.setSpeakerpaSwitch(1) # 打开pa
aud.setSpeakerpaSwitch(0) # 关闭pa
Audio.setSpeakerpaCallback
Audio.setSpeakerpaCallback(cb)
该方法用于设置pa事件通知回调。
参数描述:
cb
- 用户回调函数,function类型,函数原型:
def cb(event):
pass
回调函数参数描述 :
-
event- 事件,int类型,0-pa关闭,1-pa开启。
返回值描述:
0
表示成功,
-1
表示失败。
Audio.set_close_pa_delay
Audio.set_close_pa_delay(time)
该方法用于设置pa延时关闭,以规避音频播放结束时的pop音,不设置时默认为0。
参数描述:
-
time- pa延时关闭的时间,单位ms,int类型。
返回值描述:
1
表示成功,
-1
表示失败。
示例:
from audio import Audio
aud = Audio(0)
aud.set_close_pa_delay(100) # pa延时100ms关闭
Audio.play
Audio.play(priority, breakin, filename)
该方法用于音频文件播放。
播放优先级说明:
支持mp3、amr和wav格式文件播放。支持优先级0 ~ 4,数字越大优先级越高,每个优先级组可同时最多加入10个播放任务,与TTS播放共用同一个播放队列。
说明: 由于TTS和音频文件播放共用同一个播放队列,所以TTS中设置的播放优先级、打断模式不仅仅是和其他TTS播放任务比较,还会和音频文件播放任务的优先级和打断模式比较,反之,音频文件播放中设置的播放优先级与打断模式对TTS任务同样是有效的。
参数描述:
-
priority- 播放优先级,int类型。支持优先级0 ~ 4,数值越大优先级越高。 -
breakin- 打断模式,int类型。0表示不允许被打断,1表示允许被打断。 -
filename- 文件名称,string类型。待播放的文件名称,包含文件存放路径。 点此查看 文件播放路径的说明。
返回值描述:
0
表示播放成功;
-1
表示播放失败;
1
表示无法立即播放,加入播放队列;
-2
表示无法立即播放,且该请求的优先级组队列任务已达上限,无法加入播放队列。
文件播放路径的说明:
用户分区路径固定为'U:/'或'/usr/'开头,表示用户分区的根目录,如果用户在根目录下新建audio目录,并将音频文件存放在根目录下的audio目录,那么播放接口中,传入的路径参数应该是:'U:/audio/music.mp3'或'/usr/audio/music.mp3'。
Audio.stop
Audio.stop()
该方法用于停止当前正在播放的音频。
返回值描述:
0
表示成功,
-1
表示失败。
Audio.stopAll
Audio.stopAll()
该方法用于停止整个队列的播放。即当前如果正在播放Audio或者音频,并且队列中还有其他待播放内容,调用该方法后,不仅会停止当前播放的内容,还会清除这个队列的内容,不再播放任何内容。如果当前正在播放,且播放队列为空,那么调用该方法效果等同与 stop() 接口。
返回值描述:
0
表示成功,
-1
表示失败。
Audio.setCallback
Audio.setCallback(cb)
该方法用于注册用户的回调函数,用于通知用户音频文件播放状态。
该回调函数中不要进行耗时以及阻塞性的操作,建议只进行简单、耗时短的操作。
参数描述:
cb
- 用户回调函数,function类型,函数原型:
def cb(event):
pass
回调函数参数描述 :
-
event- 播放状态,int类型, 点此查看 回调函数参数event说明表。
返回值描述:
0
表示成功,
-1
表示失败。
回调函数参数event说明表
| event | 表示状态 |
|---|---|
| 0 | 开始播放 |
| 5 | 播放暂停(此时播放缓存为空,codec未关闭,及时写入数据可继续播放) |
| 6 | 播放继续 |
| 7 | 播放结束(codec已关闭) |
Audio.getState
Audio.getState()
该方法用于获取audio初始化状态。
返回值描述:
0
表示audio初始化完成,
-1
表示audio初始化未完成。
Audio.getPlayState
Audio.getPlayState()
该方法用于获取audio播放状态。
参数描述:
无
返回值描述:
0
表示audio空闲,当前无播放任务;
1
表示audio播放中,正在播放音频。
Audio.getPlayFile
Audio.getPlayFile()
该方法用于获取audio播放文件路径和播放队列。
参数描述:
无
返回值描述:
audio未播放时返回整型
-1
;
成功返回一个元组,元组包含3个元素:
- 第一个元素为整型,表示待播放文件数量;
- 第二个元素为string类型,表示当前正在播放的文件路径;
- 第三个元素为list类型,包含所有待播放的文件路径(按播放顺序排列)。
示例:
from audio import Audio
aud = Audio(0)
aud.play(1,0,'U:/pwron.mp3')
aud.play(2,0,'U:/pwron.wav')
aud.play(3,0,'U:/test.mp3')
file_tup = aud.getPlayFile()
if(file_tup != -1):
wait_play_num = file_tup[0] # 待播放文件数量
cur_play_file = file_tup[1] # 当前播放文件路径
wait_play_list = file_tup[2] # 所有待播放的文件路径
str = 'Playing:{},waiting for play={},{}'.format(wait_play_num, cur_play_file, wait_play_list)
print(str)
Audio.getVolume
Audio.getVolume()
该方法用于获取当前播放音量大小,音量值在区间[0 ~ 11],0表示静音。
返回值描述:
整型音量大小值。
Audio.setVolume
Audio.setVolume(vol)
该方法用于设置播放音量大小,音量值在区间[0 ~ 11],0表示静音。
参数描述:
-
vol- 音量大小,int类型,区间[0 ~ 11]。
返回值描述:
0
表示成功,
-1
表示失败。
Audio.playStream
Audio.playStream(format, buf)
该方法用于音频流播放,支持mp3、amr和wav格式的音频流播放。
说明:播放 AMR 格式音频流时,若音频来源于文件,建议在开始读取文件后跳过开头 6 个字节(即文件头),否则可能导致播放失败。
参数描述:
-
format- 音频流格式,int类型,2-WAVPCM,3-MP3,4-AMRNB。 -
buf- 音频流内容,音频流二进制文件内容。
返回值描述:
0
表示播放成功,
-1
表示播放失败。
Audio.stopPlayStream
Audio.stopPlayStream()
该方法用于停止音频流播放。
参数描述:
无
返回值描述:
0
表示成功,
-1
表示失败。
Audio.aud_tone_play
Audio.aud_tone_play(tone, time)
该方法用于播放tone音,播放一段时间(time)后自动停止播放。
EC600N/EC800N系列模组调用该接口为立即返回,EC600U/EC200U系列模组调用该接口为阻塞等待。
参数描述:
-
tone- tone类型,int型,0~15:按键音(0~9、A、B、C、D、#、*),16:拨号音。 -
time- 播放时长,单位ms,int型,0: 不停止一直播放。
返回值描述:
0
表示播放成功,
-1
表示播放失败。
Audio.aud_tone_play_stop
Audio.aud_tone_play_stop()
该方法用于主动停止播放tone音。
返回值描述:
0
表示停止播放成功,
-1
表示停止播放失败。
示例:
# -*- coding: UTF-8 -*-
import audio
from machine import Pin
import utime
import uos
def audio_cb(event):
if event == 0:
print('audio-play start.')
elif event == 7:
print('audio-play finish.')
aud = audio.Audio(0)
aud.setCallback(audio_cb)
# 设置pa
aud.set_pa(Pin.GPIO15,2)
# 播放MP3
aud.play(2, 1, 'U:/music.mp3')
utime.sleep(5)
aud.stop()
# 音频流播放
size = 10*1024 # 保证一次填充的音频数据足够大以便底层连续播放
format = 4
def play_from_fs():
file_size = uos.stat("/usr/test.amr")[6] # 获取文件总字节数
print(file_size)
with open("/usr/test.amr", "rb")as f:
if format == 4:
f.read(6) # 跳过6字节的AMR文件头
while 1:
b = f.read(size) # read
if not b:
break
aud.playStream(format, b)
utime.sleep_ms(20)
play_from_fs()
# 等待播放完成
utime.sleep_ms(5000)
# 停止本次播放以便不影响下次播放
aud.stopPlayStream()
montage_play
Audio.montage_play(audio_pack, priority, breakin, play_file_str)
该方法用于播放拼接音频文件。
说明:支持audio的模组均支持该接口,但需要固件支持amr或mp3音频解码,暂不支持wav格式。
参数描述:
-
audio_pack- 音频组合包,str类型,音频组合包文件的路径(地址),点击查看 音频组合包说明 。 -
priority- 播放优先级,int类型。支持优先级0 ~ 4,数值越大优先级越高,点此查看 播放优先级说明 。 -
breakin- 打断模式,int类型。0表示不允许被打断,1表示允许被打断。 -
play_file_str- 拼接音频描述,str类型,按顺序播放组合包里的音频,格式为mp3files=a.mp3+b.mp3,点击查看 拼接音频说明 。
返回值描述:
0
表示播放成功;
-1
表示播放失败;
1
表示无法立即播放,加入播放队列;
-2
表示无法立即播放,且该请求的优先级组队列任务已达上限,无法加入播放队列。
音频组合包说明:
音频组合包制作工具及使用方法请联系 移远技术支持人员 获取。
拼接音频说明:
拼接音频为实际需要播放的音频文件,该文件必须包含在音频组合包内,开头声明播放的音频格式(即
=
前固定写
mp3files
或
amrfiles
),按顺序加入需要播放的音频文件,使用
+
添加文件。
例如:
mp3files=a.mp3+b.mp3+a.mp3
。
a.mp3
和
b.mp3
是包集成到音频组合包里的,
=
后添加的音频格式必须和开头声明格式一致,文件名无需带路径,音频文件必须已经打包在音频组合包内。
示例:
import audio
aud = audio.Audio(0)
#test.bin为音频组合包,里面包含pwron1.amr、pwron2.amr音频数据
aud.montage_play('U:/test.bin',3,0,'amrfiles=pwron1.amr+pwron2.amr')
#para.bin为音频组合包,里面包含收款、数字音频数据
aud.montage_play('U:/para.bin',3,0,'mp3files=shoukuan.mp3+daozhang.mp3+9.mp3+shi.mp3+6.mp3+yuan.mp3') #播放“收款到账九十六元”