文档章节

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

Mr_Nice
 Mr_Nice
发布于 2016/05/22 20:01
字数 1183
阅读 24
收藏 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
0
Android MediaPlayer

MediaPlayer 这个类主要是播放视频类. AudioManager 这个类管理在一个设备上的音频资源和音频输出流. Manifest声明 1.网络声明 <uses-permission android:name="android.permission.INTERNET...

程序袁_绪龙
2015/01/29
0
4
Android 解读开源项目UniversalMusicPlayer(播放控制层)

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

Anlia
04/29
0
0
Android音频焦点与声音重叠

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

haoyuan6786
06/07
0
0
android开发笔记之2012版辅助开发工具包(ADT)新功能特性介绍及安装使用

原文链接:http://android.eoe.cn/topic/androidsdk 2012年的Android辅助设备开发工具包(ADK)是Android开放设备协议(AOA)设备的最新参考实现,它被用于帮助Android硬件辅助设备开发者 和...

sisuad
2013/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

创建第一个react项目

sudo npm i -g create-react-app@1.5.2 create-react-app react-app cd react-apprm -rf package-lock.jsonrm -rf node_modules #主要是为了避免报错npm installnpm start......

lilugirl
今天
1
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
今天
0
0
搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
6
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
5
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部