AudioManager

addAudio(audio: Audio)

添加Audio实例对象

  1. const audio = new Audio('audio001');
  2. AudioManager.addAudio(audio);

getAudio(name: string)

获取Audio实例对象

  1. const audio = AudioManager.getAudio('audio001');

removeAudio(name: string)

删除Audio实例对象

  1. AudioManager.removeAudio('audio001');

hasAudio(name: string)

判断存在Audio实例对象

  1. AudioManager.hasAudio('audio001');

Audio

new Audio(name: string)

创建Audio

  1. const audio = new Audio('audio001');

setUrl(url: string)

设置播放url

  1. audio.setUrl('http://tmjl-s128.alicdn.com/197/1964894197/2104649192/1810436513_1551603792740_9475.mp3?auth_key=1607482800-0-0-4ca6b7adbb2c0c5c6dd2841fa17d94c5');

play()

播放音乐

  1. audio.play()

pause()

暂停音乐

  1. audio.pause()

resume()

继续播放音乐

  1. audio.resume()

stop()

停止播放音乐

  1. audio.stop()

getState(): string

获取audio状态
audio状态变化事件监听

  1. static STATUS_ON_IDLE: u32= 0; //默认状态
  2. static STATUS_ON_INITIALIZED: u32 = 1; //音频初始化成功
  3. static STATUS_ON_PREPARED: u32 = 2; //音频准备播放成功
  4. static STATUS_ON_PAUSED: u32 = 3; //音频恢复播放
  5. static STATUS_ON_STARTED: u32 = 4; //音频开始播放
  6. static STATUS_ON_STOPPED: u32 = 5; //音频停止播放
  7. static STATUS_ON_COMPLETED: u32 = 6; //音频播放完毕
  8. static STATUS_ON_ERROR: u32= 7; //音频播放错误
  9. static STATUS_ON_END: u32 = 8; //音频播放到结尾
  10. static STATUS_ON_INFO: u32 = 9; //音频信息回调,暂时无用
  11. static STATUS_ON_BUFFER_UPDATE: u32 = 10; //音频缓存信息回调,暂时无用
  12. static STATUS_ON_RESUME: u32 = 11; //音频恢复播放
  13. static STATUS_ON_SUSPEND: u32 = 12; //音频被打断
  14. static STATUS_ON_SUSPEND_RESUME: u32 = 13; //音频被打断后恢复
  1. const state = audio.getState(); // '{"state": 0}'

onState(callback: (event:string)=>void)

  1. const audio = new Audio('audio001');
  2. audio.setUrl('http://tmjl-s128.alicdn.com/197/1964894197/2104649192/1810436513_1551603792740_9475.mp3?auth_key=1607482800-0-0-4ca6b7adbb2c0c5c6dd2841fa17d94c5');
  3. audio.onState(function(event: string) {
  4. log('--> audio event:' + event);
  5. // '{"state": 0}'
  6. });

onPosition(callback: (event:string)=>void)

audio进度监听,单位毫秒

  1. const audio = new Audio('audio001');
  2. audio.setUrl('http://tmjl-s128.alicdn.com/197/1964894197/2104649192/1810436513_1551603792740_9475.mp3?auth_key=1607482800-0-0-4ca6b7adbb2c0c5c6dd2841fa17d94c5');
  3. audio.onPosition(function(event: string) {
  4. log('--> audio event:' + event);
  5. // '{"position": 1000}'
  6. });

组件演示

axml

  1. <view class="wrapper">
  2. <x-nav-bar showArrow="{{true}}" title="{{title}}"/>
  3. <view class="flex">
  4. <view class="btn"><x-button size="large" click="play" type="primary" text="播放"></x-button></view>
  5. <view class="btn"><x-button size="large" click="pause" class="btn" type="primary" text="暂停"></x-button></view>
  6. <view class="btn"><x-button size="large" click="resume" type="primary" text="继续"></x-button></view>
  7. <view class="btn"><x-button size="large" click="stop" class="btn" type="primary" text="停止"></x-button></view>
  8. </view>
  9. <x-toast></x-toast>
  10. </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"));
    }
  }
}