zoukankan      html  css  js  c++  java
  • android如何播放和录制音频

    视频录制功能正在走来,在Androidsdk中有与之相关的类:android.media.MediaRecorder。当然,因为模拟器上没有提供必要的硬件设施,所以在学习过程中并不能实现。Media能够播放来自任何地方的文件:一个实际的文件资源,系统中的一个文件或者是一个可用的网络链接。

    2.1如何播放media音频

    1、将文件放到你的工程的res/raw文件夹中,在这个文件夹中,Eclipse插件将会找到它,同时,会将这个资源与你的R

    2、创建一个MediaPlayer,并使用MediaPlayer.create与资源相关联起来,之后在实例中使用start()方法。

    例如:

    MediaPlayer mp=MediaPlayer.create(context,R.raw.sound_file_1);

    mp.start();

    如果要想停止播放,使用stop()方法。

    如果你想稍后重新播放这段media,你必须在再次使用start()方法之前使用reset()方法和prepare()方法来操作MediaPlayer对象。

    create()第一次调用prepare()。

    如果想暂停播放,可以使用pause()方法。在你暂停的地方恢复播放功能使用start()方法即可实现。

    下面介绍如何播放一个文件:

    1、用new创建一个MediaPlayer实例;

    2、调用setDataSource()方法,这个方法有一个String类型的参数,这个String类型的参数包含了你所要播放的文件的路径-本地文件系统或者是URL;

    3、之后,先调用prepare()方法,然后才是start()方法。

    Java代码:

    1.MediaPlayer mp=new MediaPlayer();

    2.mp.setDataSource(PATH_TO_FILE);

    3.mp.prepare();

    4.mp.start();

    5.需要注意的一点是:如果你传递的是一个URL方式的文件,那么这个文件必须是可以下载的,并且是不间断的,简单地说就是在播放的同时进行着下载。

    2.2如何录制media音频资源

    1、使用new创建一个实例android.media.MediaRecorder;

    2、创建一个android.content.ContentValues实例并设置一些标准的属性,像TITLE,TIMESTAMP,最重要的是MIME_TYPE;

    3、创建一个要放置的文件的路径,这可以通过android.content.ContentResolver在内容数据库中来创建一个入口,并且自动地标志一个取得这个文件的路径。

    4、使用MediaRecorder.setAudioSource()方法来设置音频资源;这将会很可能使用到MediaRecorder.AudioSource.MIC;

    5、使用MediaRecorder.setOutputFormat()方法设置输出文件格式;

    6、用MediaRecorder.setAudioEncoder()方法来设置音频编码;

    7、最后,prepare()和start()所录制的音频,stop()和release()在要结束的时候调用。

    2.3实例分析

    Java代码:

    1.recorder=new MediaRecorder();

    2.ContentValues values=newContentValues(3);

    3.values.put(MediaStore.MediaColumns.TITLE,SOME_NAME_HERE);

    4.values.put(MediaStore.MediaColumns.TIMESTAMP,System.currentTimeMillis());

    5.values.put(MediaStore.MediaColumns.MIME_TYPE,recorder.getMimeContentType();

    6.ContentResolver contentResolver=newContentResolver();

    7.Uri base=MediaStore.Audio.INTERNAL_CONTENT_URI;

    8.Uri newUri=contentResolver.insert(base,values);

    9.//在所给定的URL中向一个表格插入一列数据

    10.//函数原型:final Uri insert(Url,ContentValues values);

    11.if(newUri==null){

    12.//这里需要异常处理,我们在这里不能创建一个新的内容入口

    13.}

    14.Stringpath=contentResolver.getDataFilePath(newUri);

    15.//可以使用setPreviewDisplay()来陈列一个preview来使View适合

    16.recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

    17.recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

    18.recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

    19.recorder.setOutputFile(path);

    20.recorder.prepare();

    21.recorder.start();

    停止录制:

    Java代码:

    1.recorder.stop();

    2.recorder.release();

    在录制音频资源的过程中,使用到了ContentValues这个类,下面来解说这个类。

    ContentValues这个类是用来存储一系列的值的,这些值要求ContentResolver能够process的。

    ContentValues(int size)构造函数使用所给定的初始值创建一个空系列的值。

    ContentValues(ContentValues from)这个构造函数创建一个从给定的ContentValues中来进行复制所产生的值。

    这个类有如下的常用方法:

    void clear()删除所有的值

    boolean containsKey(String key)如果这个对象有已命名的值就返回真

    int describeContents()描述值类型

    Object get(String key)获得值

    void put(String key,Integer value)增加一个值到对应的set中

    还有一个类就是ContentResolver,这个类想内容模型提供了应用程序数据。

    转自:http://www.linuxidc.com/Linux/2011-09/42420.htm

  • 相关阅读:
    maven 错误:读取 xxx.jar 时出错;invalid LOC header (bad signature) 1 错误
    设计模式总结篇系列:建造者模式(Builder)
    java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to
    Rxlifecycle使用详解,解决RxJava内存泄露问题
    详细解析RxAndroid的使用方式
    Android开源项目:GifView——Android显示GIF动画
    Rxjava2的学习与总结
    Pycharm连接gitlab
    Pycharm+Django+Python+MySQL开发 后台管理数据库
    Django-Model操作数据库(增删改查、连表结构)
  • 原文地址:https://www.cnblogs.com/fengzhblog/p/3231500.html
Copyright © 2011-2022 走看看