AudioManager
addAudio(audio: Audio)
添加Audio实例对象
const audio = new Audio('audio001');
AudioManager.addAudio(audio);
getAudio(name: string)
获取Audio实例对象
const audio = AudioManager.getAudio('audio001');
removeAudio(name: string)
删除Audio实例对象
AudioManager.removeAudio('audio001');
hasAudio(name: string)
判断存在Audio实例对象
AudioManager.hasAudio('audio001');
Audio
new Audio(name: string)
创建Audio
const audio = new Audio('audio001');
setUrl(url: string)
设置播放url
audio.setUrl('http://tmjl-s128.alicdn.com/197/1964894197/2104649192/1810436513_1551603792740_9475.mp3?auth_key=1607482800-0-0-4ca6b7adbb2c0c5c6dd2841fa17d94c5');
play()
播放音乐
audio.play()
pause()
暂停音乐
audio.pause()
resume()
继续播放音乐
audio.resume()
stop()
停止播放音乐
audio.stop()
getState(): string
获取audio状态
audio状态变化事件监听
static STATUS_ON_IDLE: u32= 0; //默认状态
static STATUS_ON_INITIALIZED: u32 = 1; //音频初始化成功
static STATUS_ON_PREPARED: u32 = 2; //音频准备播放成功
static STATUS_ON_PAUSED: u32 = 3; //音频恢复播放
static STATUS_ON_STARTED: u32 = 4; //音频开始播放
static STATUS_ON_STOPPED: u32 = 5; //音频停止播放
static STATUS_ON_COMPLETED: u32 = 6; //音频播放完毕
static STATUS_ON_ERROR: u32= 7; //音频播放错误
static STATUS_ON_END: u32 = 8; //音频播放到结尾
static STATUS_ON_INFO: u32 = 9; //音频信息回调,暂时无用
static STATUS_ON_BUFFER_UPDATE: u32 = 10; //音频缓存信息回调,暂时无用
static STATUS_ON_RESUME: u32 = 11; //音频恢复播放
static STATUS_ON_SUSPEND: u32 = 12; //音频被打断
static STATUS_ON_SUSPEND_RESUME: u32 = 13; //音频被打断后恢复
const state = audio.getState(); // '{"state": 0}'
onState(callback: (event:string)=>void)
const audio = new Audio('audio001');
audio.setUrl('http://tmjl-s128.alicdn.com/197/1964894197/2104649192/1810436513_1551603792740_9475.mp3?auth_key=1607482800-0-0-4ca6b7adbb2c0c5c6dd2841fa17d94c5');
audio.onState(function(event: string) {
log('--> audio event:' + event);
// '{"state": 0}'
});
onPosition(callback: (event:string)=>void)
audio进度监听,单位毫秒
const audio = new Audio('audio001');
audio.setUrl('http://tmjl-s128.alicdn.com/197/1964894197/2104649192/1810436513_1551603792740_9475.mp3?auth_key=1607482800-0-0-4ca6b7adbb2c0c5c6dd2841fa17d94c5');
audio.onPosition(function(event: string) {
log('--> audio event:' + event);
// '{"position": 1000}'
});
组件演示
axml
<view class="wrapper">
<x-nav-bar showArrow="{{true}}" title="{{title}}"/>
<view class="flex">
<view class="btn"><x-button size="large" click="play" type="primary" text="播放"></x-button></view>
<view class="btn"><x-button size="large" click="pause" class="btn" type="primary" text="暂停"></x-button></view>
<view class="btn"><x-button size="large" click="resume" type="primary" text="继续"></x-button></view>
<view class="btn"><x-button size="large" click="stop" class="btn" type="primary" text="停止"></x-button></view>
</view>
<x-toast></x-toast>
</view>
ts
import { JSON, JSONObject } from "waft-json";
import { console, Page, Props, Event, MessageEvent,AudioManager,Audio } from "waft";
import { Toast, ToastOptions } from "waft-ui";
// 支持class写法
let _this: Index;
let toastOptions = new ToastOptions();
toastOptions.message = "没有audio实例,请重新创建";
toastOptions.type = "warning";
toastOptions.duration = 5000
toastOptions.position = "middle"
const audiom = AudioManager.getAudio('audio001');
audiom.setUrl('https://ai-open-platform.oss-cn-hangzhou.aliyuncs.com/chem.mp3')
export class Index extends Page {
constructor(props: Props){
super(props);
_this = this;
//播放audio
this.addEventListener("play", (event: Event)=>{
if(AudioManager.hasAudio('audio001')){
audiom.play()
}else{
Toast.show(toastOptions);
}
});
//暂停audio播放
this.addEventListener("pause", (event: Event)=>{
if(AudioManager.hasAudio('audio001')){
audiom.pause()
}else{
Toast.show(toastOptions);
}
});
//继续audio播放
this.addEventListener("resume", (event: Event)=>{
if(AudioManager.hasAudio('audio001')){
audiom.resume()
}else{
Toast.show(toastOptions);
}
});
//停止audio播放
this.addEventListener("stop", (event: Event)=>{
if(AudioManager.hasAudio('audio001')){
audiom.stop()
}else{
Toast.show(toastOptions);
}
});
}
onShow(): void{
//创建并添加audio实例
const audio = new Audio('audio001');
AudioManager.addAudio(audio);
}
onLoad(query: JSONObject): void{
// 页面加载后
console.log('page onLoad:' + JSON.stringify(query));
}
onMessage(event: MessageEvent): void{
// 信息推送更新
console.log('page onMessage:' + JSON.stringify(event.data));
// 如果需要进行更新界面
if(event.data.has("dataSource")){
this.setState(event.data.getObject("dataSource"));
}
}
}