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表示喇叭。具体模块所支持通道详见下表。

模块输出通道对应表:

模块型号 听筒 耳机 喇叭
EC600N系列 支持 不支持 不支持
EC800N系列 支持 不支持 不支持
EC600MCN(LA、LE) 支持 不支持 不支持
EC800MCN(LA、LE、GA) 支持 不支持 不支持
EG810MCN_GA 支持 不支持 不支持
EG915N 支持 不支持 不支持
EG912N 支持 不支持 不支持
EG912U 支持 不支持 不支持
EC200U系列 不支持 不支持 支持
EC600U系列 支持 支持 支持
EG915U 支持 支持 不支持

方法

Audio.set_pa

Audio.set_pa(gpio,num)

该方法用于设置输出pa的gpio。

参数描述:

  • gpio - 输出的gpio,int类型,参照Pin
  • num - 上电脉冲数,int类型。

返回值描述:

1 表示成功,0表示失败。

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:/‘开头,表示用户分区的根目录,如果用户在根目录下新建audio目录,并将音频文件存放在根目录下的audio目录,那么播放接口中,传入的路径参数应该是:'U:/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 开始播放
7 播放完成

Audio.getState

Audio.getState()

该方法用于获取audio初始化状态。

返回值描述:

0 表示audio初始化完成,-1表示audio初始化未完成。

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格式的音频流播放。

参数描述:

  • format - 音频流格式,int类型,2 - WAVPCM3 - MP34 - 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:   
        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()