MediaPlayer播放音频

来源:互联网 发布:高收益网络理财平台 编辑:程序博客网 时间:2024/05/20 07:57
package com.example.tyxiong.myapplication;import android.app.Activity;import android.content.res.AssetFileDescriptor;import android.content.res.AssetManager;import android.media.MediaPlayer;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.view.View;import java.io.File;import java.io.FileDescriptor;import java.io.FilenameFilter;import java.io.IOException;import java.util.Random;/*多媒体应用开发...    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卡上文件访问步骤不包括):31 new MediaPlayer对象,setSourceData()加载资源        2 prepare()        3 stat()    四 网络上的音频文件:31  创建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 Builder对象, 为SoundPool设置属性(如最大音频数,音效池属性..)    2 SoundPool对象, 利用Builder对象的实例方法build()    3 对象方法load()加载资源--HashMap<int,int>来管理    4 play()插入指定ID音效.VideoView:与ImageView相似,同为widget包下的组件.. 继承了SurfaceView---View5个实例方法: 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录制声音权限以下演示MediaPlayer播放音频...    raw/assets/SD卡/uri()* */public class MainActivity extends Activity {    MediaPlayer mediaPlayer;    private int i = 0;    private int j = 0;    private int z = 0;    private int y = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void play0(View view) {        switch (i++ % 3) {            case 0: {                mediaPlayer = MediaPlayer.create(this, R.raw.shot);                mediaPlayer.start();                break;            }            case 1: {                mediaPlayer.pause();                break;            }            case 2: {                mediaPlayer.stop();                break;            }            default:                break;        }    }    public void play1(View view) {        switch (j++ % 3) {            case 0: {                AssetManager assetManager = getAssets();                try {                    AssetFileDescriptor assetFileDescriptor = assetManager.openFd("bomb.mp3");                    FileDescriptor fileDescriptor = assetFileDescriptor.getFileDescriptor();                    mediaPlayer = new MediaPlayer();                    mediaPlayer.setDataSource(fileDescriptor);                    mediaPlayer.prepare();                    mediaPlayer.start();                } catch (IOException e) {                    e.printStackTrace();                }                break;            }            case 1: {                mediaPlayer.pause();                break;            }            case 2: {                mediaPlayer.stop();                break;            }            default:                break;        }    }    public void play2(View view) {        switch (z++ % 3) {            case 0: {                if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {                    File file = Environment.getExternalStorageDirectory();                    String[] list = file.list(new FilenameFilter() {                        @Override                        public boolean accept(File dir, String filename) {                            if (filename.endsWith(".mp3")) {                                return true;                            } else {                                return false;                            }                        }                    });                    //int random = new Random().nextInt(list.length - 1);                    String path = list[0];                    mediaPlayer = new MediaPlayer();                            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {                                @Override                                public void onCompletion(MediaPlayer mp) {                                    mp.release();                                }                            });                    try {                        mediaPlayer.setDataSource(file.getCanonicalPath() + "/" + path);                        mediaPlayer.prepare();                        mediaPlayer.start();                    } catch (IOException e) {                        e.printStackTrace();                    }                }                break;            }            case 1: {                mediaPlayer.pause();                break;            }            case 2: {                mediaPlayer.stop();                break;            }            default:                break;        }    }    public void play3(View view) {        switch (y++ % 3) {            case 0: {                Uri uri = Uri.parse("http://www.crazyit.org/abc.mp3");//这有毛用,上哪去找能用的链接..                mediaPlayer = MediaPlayer.create(this, uri);                mediaPlayer.start();                break;            }            case 1: {                mediaPlayer.pause();                break;            }            case 2: {                mediaPlayer.stop();                break;            }            default:                break;        }    }}<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:gravity="center_horizontal"    android:layout_width="match_parent"    android:layout_height="match_parent"    >    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="应用raw"        android:onClick="play0"        />    <Button        android:id="@+id/button2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="原始assets"        android:onClick="play1"        />    <Button        android:id="@+id/button3"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="SD卡根"        android:onClick="play2"        />    <Button        android:id="@+id/button4"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="网络Uri"        android:onClick="play3"        /></LinearLayout><?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    package="com.example.tyxiong.myapplication">    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.RECEIVE_SMS" />    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@android:style/Theme.Holo.Light"        tools:ignore="AllowBackup,GoogleAppIndexingWarning">        <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>
0 0
原创粉丝点击