package com.example.tyxiong.myapplication;
import android.app.Activity;
import android.content.res.AssetManager;
import android.media.AudioAttributes;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.os.Bundle;
import android.os.Environment;
import android.widget.MediaController;
import android.widget.VideoView;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/*多媒体应用开发...
1 概述:Android提供了常见的音频和视频编码解码机制...
2 MediaPlayer用来播放音频.
2缺点:
1 资源占用量较高,延迟.
2 无法同时多个音频同时播放
2静态方法:create()从指定Uri/resid来装载音频文件,并返回MediaPlayer对象.-->start()/stop()/pause()可以进行控制了.
8实例方法(new对象):4个setDataSource()方法加载音频文件+3个控制方法+ prepare()/真正加载音频文件
prepareAsync()/异步的不阻塞线程-->start()...可循环加载音频.
4个注册监听.MediaPlayer还有监听方法...播放完成监听器/播放错误监听器/当调用prepare()监听器/当调用seek()方法监听器.
常见播放4种资源来源音频文件步骤:
一 播放应用的资源文件:2步.
1 create()静态方法,加载资源文件,生成MediaPlayer对象.
2 start()...
二 应用原始资源assets目录文件6步:
1 获取AssetsManager对象, context getAssets()
2 AssetFileDescriptor对象 实例方法openFd()
3 FileDescriptor 实例方法getFileDescriptor()
4 setSourceData()加载音频文件(未真正加载)
5 prepare()/prepareAsync()加载音频
6 start()...
三 SD卡上的资源文件(SD卡上文件访问步骤不包括):3步
1 new MediaPlayer对象,setSourceData()加载资源
2 prepare()
3 stat()
四 网络上的音频文件:3步
1 创建Uri对象; 加载网络资源create()静态方法/setDataSource()实例方法(以下为该方式)
2 prepare()
3 start()
//除了原始资源,,,全部为3步..(用create()就无须prepare()2步; 用setSourceData()就要prepare()3步)
音乐特效控制--均衡器 重低音 音场 音乐波形 都依赖于AudioEffect及其子类...
SoundPool 使用场景为密集,播放短促的音效..
4个特点:
1 利用音乐池来管理多个音效.一开始可加载多个音效
2 资源占用小
3 根据音效的Id来播放
4 可自行设置声音品质,音量,播放比率.
4个实例方法load()加载资源,--返回值为该音效的ID +1个play(soundId,leftVolume,rightVolume,priority,loop,rate)播放.
---通过其内部类Builder来构造实例, 通常用HashMap<int int>来管理声音.
使用步骤4步:
1 AudioAttributes对象(利用Builder,设置对象属性(指定用处/指定音效类型),build()对象)
2 SoundPool.Builder对象, 为SoundPool设置属性(如最大音频数,音效池属性(需要AudioAttributes参数))..),build() SoundPool对象.
3 对象方法load()返回值为该音效的ID加载资源--HashMap<int,int>来管理
4 play()插入指定ID音效.
VideoView:与ImageView相似,同为widget包下的组件.. 继承了SurfaceView---View
5个实例方法: setVideoPath()/setVideoURI()加载指定视频+ 3个控制方法
使用步骤3步:
1 VideoView实例化,(布局文件中/new)
2 setVideoXxx()加载视频资源
3 start()方法...
以上第3步可,结合MediaController类(提供了友好的图形控制界面,控制视频播放)
videoView.setMediaController(mController);
mController.setMediaPlayer(videoView);//播放对象与控制对象相互绑定...
-推荐--也可以通过MediaPlayer和SurfaceView结合来播放视频,,MediaPlayer可播放音频和视频--没有提供图像输出界面(借助SurfaceView)
MediaRecorder录制音频: 通过麦克风来录制音频...
使用步骤8步(3-4顺序)
1 创建MediaRecorder对象.
2 对象的setAudioSource()设置声音来源--MediaRecorder.AudioSource.MIC
3 setOutputFormat()设置音频输出格式
4 setAudioEncoder()/setAudioEncodingBitRate() 编码格式/编码位率/采样率
5 setOutputFile() 设置输出路径
6 prepare()准备
7 start()开始
8 stop()停止--release()释放资源.
---RECORD_AUDIO录制声音权限
VideoView播放SD卡上指定视频文件......若无法播放此视频,可能是路径不对..
读SD卡权限 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<VideoView android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/videoView"
/>
* */
public class MainActivity extends Activity {
VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
videoView = (VideoView) findViewById(R.id.videoView);
MediaController mController = new MediaController(this);
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
try {
String path = Environment.getExternalStorageDirectory().getCanonicalPath()+"/myVideo.mp4";
videoView.setVideoPath(path);
} catch (IOException e) {
e.printStackTrace();
}
}
videoView.setMediaController(mController);
mController.setMediaPlayer(videoView);
videoView.requestFocus();
}
}