在开发app的过程中有需要播放mp3的功能,一直想实现,但苦于具体的困难一直未能实现,经过一段时间的资料查询和测试,最终摸索出来,现记录如下:

1.最重要的是安装第三方插件ionic-audio,开源地址是 https://github.com/arielfaur/ionic-audio

第一,cd D:\Dev\sourcecode\IonicApp\FlexApp\IonicEnglish 目录下

第二,安装插件到本地: npm install ionic-audio --save, 安装完成后的效果图如下

2.在src/app/app.module.ts文件中加入  IonicAudioModule.forRoot(),如图

3.在我们自己的页面中引入AudioProvider类

 import { Component } from '@angular/core';
import { NavController, NavParams,LoadingController } from 'ionic-angular';
import { URLSearchParams } from '@angular/http';
import { CommonService } from '../../providers/baseService/CommonService';
import { AudioProvider } from 'ionic-audio'; /*
Generated class for the English page. See http://ionicframework.com/docs/v2/components/#navigation for more info on
Ionic pages and navigation.
*/ @Component(
{
selector: 'page-english',
templateUrl: 'english.html'
}) export class EnglishPage
{
private groupEnglish ;
private shownGroup ;
public englishWord:string;
public loading; public startIndex: number; constructor(public navCtrl: NavController, public navParams: NavParams,private loadCtrl:LoadingController,private audioProvider: AudioProvider,private service:CommonService)
{
this.groupEnglish = [];
this.shownGroup = {};
this.startIndex = 0;
} ionViewDidLoad()
{
console.log('ionViewDidLoad EnglishPage');
} search()
{
let url = 'XXXXX';
let val = this.englishWord;
let searchParams = new URLSearchParams()
searchParams.set('key', val); this.loading = this.loadCtrl.create({ content: '加载中...'});
this.loading.present();
this.service.getJsonDataParameter(url,searchParams).then(result =>
{
//this.groupEnglish = result.Data;
this.groupEnglish = [];
for(var i = 0; i< result.Data.length; i++)
{
let ele = {
src: 'url'+result.Data[i].Word+'.mp3',
item : result.Data[i]
};
this.groupEnglish.push(ele);
}
this.loading.dismiss();
},
err =>
{ });
} onTrackFinished(track: any)
{
if(this.audioProvider.tracks.length > this.startIndex )
{
this.startIndex = this.startIndex + 1;
this.autoPlay();
}
else
{
this.startIndex = 0;
this.audioProvider.stop();
}
} autoPlay()
{
this.audioProvider.play(this.startIndex);
} toggleGroup(group,id)
{
if (this.isGroupShown(group))
{
this.shownGroup = null;
}
else
{
this.shownGroup = group;
this.startIndex = id;
this.autoPlay();
}
} isGroupShown(group)
{
return this.shownGroup === group;
}
}

播放mp3的数据格式是A:

{
src: 'mp3数据源,本地的或网络的都可以,必须的字段',
artist: '作者名称',
title: '标题',
art: '图片',
preload: 'metadata' // tell the plugin to preload metadata such as duration for this track, set to 'none' to turn off
},

我这里就根据自己的需要就只用了src数据源字段,同时添加了自己的一个类字段item .

将获得的数据groupEnglish数组绑定到对应的网页上,

 <ion-content>

   <ion-list>
<audio-track #audio *ngFor="let item of groupEnglish" [track]="item" (onFinish)="onTrackFinished($event)">
<ion-item>
<ion-item class="rectangle" (click)="toggleGroup(item.item,audio.id)">
<i class="ion-icon" >
{{item.item.Word}}
</i>
<i style="color:green;font-size:14px"> {{item.item.Accent}}</i>
<i style="font-size:10px">词频</i>
<i style="color:red;font-size:10px"> {{item.item.Index}}</i>
<i style="font-size:10px">{{item.item.Source}}</i>
</ion-item >
<div *ngIf="isGroupShown(item.item)">
<ion-item text-wrap class="rectangle" *ngFor="let it of item.item.Items" >
<div [innerHTML]="it.Sentence">
</div>
</ion-item>
</div>
</ion-item>
</audio-track>
</ion-list>
</ion-content>

其中的audio-track节点是必须的,数据绑定之后的#audio 是一个类,包含了前面的数据源数据A和我们自己的数据item

这里尤其强调的是audio其中的id字段,播放mp3的时候是根据这个id来确定的,这个id基本上是按顺序从0开始的。

基本都这里就实现了mp3的播放。

4.实现自动的播放mp3功能。

基本思路是每一个mp3播放完毕之后都会调用onTrackFinished事件,在这里,调用下一个mp3的开始。

这里一个有意思的事情是,每次查询之后将groupEnglish清零,下标也清零,重新开始从头播放。如果是第一次查询出来的结果,这样一个个的播放是没问题的,但第二次查询出来之后播放的还是第一次的数据,经排查原因是this.audioProvider.tracks还是保留了上一次的数据,所以要么清除上次的数据,要么在原来的基础上id继续增加,我选择的是后者。

Ionic2 播放mp3功能实现的更多相关文章

  1. java实现播放mp3功能

    1.首先引入jlayer.jar <!-- https://mvnrepository.com/artifact/javazoom/jlayer --> <dependency> ...

  2. 在C语言控制台程序中播放MP3音乐

    游戏没有声音多单调. 这里做一个简单的范例,用 mciSendString 函数播放 MP3 格式的音乐,先看看代码吧: // 编译该范例前,请把 background.mp3 放在项目文件夹中 // ...

  3. 微信小程序背景音频播放分享功能

    如果正常背景音频播放的话,只能跳转到自己对应的微信小程序,无法分享朋友圈,我们需要设置分享朋友圈,需要调用一个API 音频背景播放 注意:背景播放在锁屏后播放只支持IOS端,安卓端虽然可以播放,但是锁 ...

  4. Swift实现iOS录音与播放音频功能

    作用AVPLayer:可以用来播放在线及本地音视频AVAudioSession:音频会话,主要用来管理音频设置与硬件交互使用时需要导入 #import <AVFoundation/AVFound ...

  5. 读取SD卡文件夹下的MP3文件和播放MP3文件

    首先获取SD卡path路径下的所有的MP3文件,并将文件名和文件大小存入List数组(此代码定义在FileUtils类中): /** * 读取目录中的Mp3文件的名字和大小 */ public Lis ...

  6. 遭遇flash播放mp3诡异问题

    在部分ie10+flash player 播放mp3,播放第二句话时,中断无法正常播放,(客户的机器上),自己公司的机器测试了几个,都没发现这个问题.其它浏览器(chrome,firefox)也没发现 ...

  7. Android命令行播放MP3音乐

    /*************************************************************************** * Android命令行播放MP3音乐 * 说 ...

  8. ios开发——实用技术篇Swift篇&播放MP3

    播放MP3 // MARK: - 播放MP3 /*----- mp3 ------*/ //定时器- func updateTime() { //获取音频播放器播放的进度,单位秒 var cuTime ...

  9. ubuntu 13.10 Rhythmbox不能播放mp3 和中文乱码的问题

    1.ubuntu 13.10 Rhythmbox不能播放mp3的解决方法 软件中心搜索(ubuntu额外的版权受限软件)不带括号 2.中文乱码问题解决方法: 终端顺序操作 : 1.  sudo ged ...

随机推荐

  1. 在Apex中使用sObject

    sObject对象的定义 Salesforce中的标准对象或自定义对象在Apex中使用时被称作"sObject".sObject对象的一个实例相当于Salesforce中的一条记录 ...

  2. 安卓开发_浅谈Fragment之ListFragment

    ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...

  3. Android WIFI的基本操作

    WIFI管理类 class WifiConnector { private ExecutorService executors; Handler mHandler; WifiManager wifiM ...

  4. HDFS Sink使用技巧

    1.文件滚动策略 在HDFS Sink的文件滚动就是文件生成,即关闭当前文件,创建新文件.它的滚动策略由以下几个属性控制: hdfs.rollInterval 基于时间间隔来进行文件滚动,默认是30, ...

  5. AOP缓存实现

    输入参数索引作为缓存键的实现 using MJD.Framework.CrossCutting; using MJD.Framework.ICache; using System; using Sys ...

  6. 使用Tampermonkey(油猴) 插件,重新实现了,百度搜索热点过滤功能

    昨天晚上,花了点时间学习了Chrome插件的制作方法,并书写了<Chrome 百度搜索热点过滤插件 - 开源软件>这一文章,简单地介绍自己实现的百度搜索热点过滤神器的原理和使用方式,并进行 ...

  7. 【待补充】[HDFS_3] HDFS 工作机制

    0. 说明 HDFS 初始化文件系统分析 && HDFS 文件写入流程 && HDFS 文件读取流程分析 有价值的相关文章: [漫画解读]HDFS存储原理 1. HDF ...

  8. java.sql.SQLSyntaxErrorException: ORA-00904: "column": 标识符无效

    java.sql.SQLSyntaxErrorException: ORA-00904: "column": 标识符无效 首先查看无效的列是不是orcale关键字 , 如果不是 , ...

  9. jQuery 往table添加新内容有以下四个方法:

    Query 添加新内容有以下四个方法: append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() ...

  10. centos7下安装docker(5镜像命名)

    1.前面我制作了很镜像,利用docker images可以看到我自己制作的所有的镜像 第一列  是我利用docker build -t 镜像名   制作镜像指定的镜像名,但是它对应的是REPOSITO ...