文档章节

android开发笔记之多媒体—播放音频(音乐)

Mr_Nice
 Mr_Nice
发布于 2016/05/22 20:01
字数 1183
阅读 24
收藏 0
点赞 2
评论 0
 Android应用增加动画,视频,音乐等多媒体功能,因此为手机提供音频录制,播放,视频录制,播放的功能十分重要。Android提供了常见音频,视频的编码,解码机制,Android支持的音频格式有MP3,WAV和3GP等,支持的视频格式有MP4和3GP等。

Android提供了这些多媒体的支持类,可以非常方便地在手机应用中播放音频,视频等。这些多媒体数据可以来自Android应用的资源文件,也可以来自外部存储器上的文件,也可以来自网络的文件流。

不仅如此,Android也提供了对摄像头,麦克风的支持,因此也可以十分方便地从外部采集照片,视频,音频等多媒体信息。

音频的播放

——MediaPlayer播放音频

1)MediaPalyer进行播放控制的方式:

     start():开始或者恢复播放

     stop():停止播放

     pause():暂停播放

2)MediaPlayer装载指定音频文件的方式:

     static MediaPlayer create(Content,Uri):从指定Uri来装载音频文件,并返回新创建的MediaPlayer对象。

     static MediaPlayer create(Content,int resid):从redid资源ID来装载音频文件,并返回新创建的MediaPlayer对象。

     **注:上面这两个方法使用起来很简单,但这两个方法每次都会返回新的MediaPlayer.如果程序需要播放多个音频文件,使用该方法就不太合适了。此时可通过setDataSource方法装载指定的音频文件。**

     MediaPlayer m = new MediaPlayer():只需要创建一个对象

     setDataSource(String path):指定装载path路径所代表的文件

     setDataSource(FileDescriptor fd,long offset,long length):指定装载fd所代表的文件中从offset开始,长度为length的文件内容。

     setDataSource(FileDescriptor fd):指定装载fd所代表的文件                    

     setDataSource(Context,Uri):指定装载Uri所代表的文件

**注:执行setDataSource方法之后,MediaPlayer并未真正装载那些音频文件,还需要调用prepare()方法准备装载音频。**

3)播放应用raw的资源文件

     MediaPlayer m=MediaPlayer.create(this,R.raw.apple);
     m.start();

4)播放应用raw的资源文件

     MediaPlayer m=new  MediaPlayer();
     m.setDataSource(Context,Uri.parse(      "android.resource://"+getPackageName()+"/"+R.raw.apple"))

5)播放应用的原始资源文件

a)调用Context的getAssets()获取AssetManager;

b)调用AssetManager的openFd(String name)方法打开指定的原生资源.返回AssetFileDescriptor对象


d)创建MediaPlayer对象,调用setDataSource(FileDescriptor)方法。

f)调用MediaPlayer的start(),stop(),pause()方法控制播放即可

6)播放外部存储器上音频文件

a)创建MediaPlayer对象,调用setDataSource("/sdcard/apple.mp3")

b)调用MediaPlayer对象的prepare()方法

c)调用MediaPlayer的start(),stop(),pause()方法控制播放即可

7)播放来自网络的音频文件

a)根据网络上的音频文件所在的位置创建Uri对象。
  Uri  uri = Uri.parse("http://www.baidu.com/song.mp3");

b)创建MediaPlayer对象,调用setDataSource(Context,Uri);

c)调用MediaPlayer对象的prepare()方法

d)调用MediaPlayer的start(),stop(),pause()方法控制播放即可

8)如播放下一首歌曲的代码:

mPlayer.reset();//空闲状态

mPlayer.setDataSource("/sdcard/gequ.mp3");

mPlayer.prepare();

mPlayer.start();

9)MediaPlayer还提供了事件监听器的方法

//注:这个监听器要起作用的话isLooping要为false
setOnCompletionListener():播放完成事件绑定事件监听器

setOnErrorListener():播放错误事件绑定事件监听器

setOnPreparedListener():调用prepare()方法时触发该监听器

setOnSeekCompleteListener():调用seek()方法时触发该监听器

10)Mediaplayer除了调用prepare()方法准备声音之外,
还可以调用

     prepareAsync()来准备声音,他们的区别在于:

     prepareAsync()是异步的,它不会阻塞当前的UI线程。

11)MediaPlayer的状态图

注:MediaPlayer有自己的生命周期,与宿主Activity的生命周期无关

这里写图片描述

 reset():清空MediaPlayer中的数据

 setDataSource():设置音频数据

 prepare():准备装载音频数据

 prepareAsync():准备装载音频数据(异步)

 seekTo():重新定位到音频数据的什么位置,单位毫秒

 seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
 start():
 pause():
 stop():
 release():释放MediaPlayer资源

12)其他的方法

  setLooping(true):是否重复播放

  setAudioStreamType() 设置使用的音频流

MediaPlayer生命周期的调用

A(播放音乐的界面)—>B

A:onPause()—>B:onCreate,onStart/onResume

—>A:onStop

如果是播放SD卡中的音乐的话,需要加上相应权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>

© 著作权归作者所有

共有 人打赏支持
Mr_Nice
粉丝 0
博文 47
码字总数 39947
作品 0
广州
直播,音视频编码器和解码器(EasyDarwin)-Android

使用摄像头采集视频数据,并通过MediaCodec进行H264编码,之后打包成RTSP格式并上传的。 TextuewView也提供了一个setTransform方法,该方法接收一个matrix参数,使用该参数对当前的渲染内容进...

shareus ⋅ 05/18 ⋅ 0

Android 解读开源项目UniversalMusicPlayer(播放控制层)

版权声明:本文为博主原创文章,未经博主允许不得转载 源码:AnliaLee/android-UniversalMusicPlayer 首发地址:Anlia_掘金 大家要是看到有错误的地方或者有啥好的建议,欢迎留言评论 前言 ...

Anlia ⋅ 04/29 ⋅ 0

Android音频焦点与声音重叠

音视频播放在手机日常使用中非常频繁,当我们听着音乐刷着微博时,看到有趣的视频点击开始播放,音乐自动暂停,退出视频时音乐又自动恢复了播放(如果没有自动恢复的话,比如QQ音乐就会提示是...

haoyuan6786 ⋅ 06/07 ⋅ 0

笔记60 | Android控制音量与音频播放的学习

控制音量与音频播放 编写:kesenhoo 良好的用户体验应该是可预期且可控的。如果我们的应用可以播放音频,那么显然我们需要做到能够通过硬件按钮,软件按钮,蓝牙耳麦等来控制音量。 同样地,我...

项勇 ⋅ 2017/12/28 ⋅ 0

【android学习之十四】——多媒体1:音乐播放

声明:学习的书籍《Android应用开发揭秘》,这里记录学习该书籍的日志,引用的相关代码与总结描述,没有商业的用途,完全是自我学习的一个记录,刚刚学习不可避免会出现很多问题,若是有错误...

晨曦之光 ⋅ 2012/03/08 ⋅ 1

android调节音量——AudioManager的应用

下面博客链接为实例代码链接,本章博客就不重复写了。我主要总结了一个方法,方便开发时候使用。 AudioManager提供访问音量和振铃模式控制。 使用Context.getSystemService(Context.AUDIOSER...

mbh12333 ⋅ 2017/05/19 ⋅ 0

android开发中音频的使用

当进行android开发或游戏开发时,常常会涉及背景音乐的播放,以及短音效的使用 1.当涉及到背景音乐等长音乐播放时通常使用MediaPlayer类进行播放操作 MediaPlayer类常用方法: 1.public sta...

qq_38555940 ⋅ 05/28 ⋅ 0

笔记59 | Android管理音频焦点的学习

管理音频焦点 由于可能会有多个应用可以播放音频,所以我们应当考虑一下他们应该如何交互。为了防止多个音乐播放应用同时播放音频,Android使用音频焦点(Audio Focus)来控制音频的播放——...

项勇 ⋅ 2017/12/28 ⋅ 0

关于Activity销毁,而绘制UI的子线程未销毁出现的问题

项目总结 --------------------------------------------------------------------------------------------------------- 有一个功能模块,需要播放音频,画一个简单的界面 一个例子: 我们...

听着music睡 ⋅ 2015/11/12 ⋅ 0

高通:蓝牙5.0将可同时连接两个设备

腾讯数码讯(亦九)高通最新骁龙845芯片做出了许多创举,一些过去做不到或者要借助其它硬件才能做到的事,有了骁龙845都变得轻而易举。比如如果你想让两个扬声器连接到安卓设备,同时播放音乐...

JlongTian ⋅ 01/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

聊聊spring cloud netflix的HystrixCommands

序 本文主要研究一下spring cloud netflix的HystrixCommands。 maven <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-clo......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部