zoukankan      html  css  js  c++  java
  • Android开发指南(32) —— Multimedia and Camera Audio Capture

    前言

      本章内容为Android开发者指南的 Framework Topics/Multimedia and Camera/Audio Capture章节,版本为Android 4.0 r1,翻译来自:"呆呆大虾",欢迎访问他的微博:"http://weibo.com/popapa",再次感谢"呆呆大虾" !期待你一起参与翻译Android的相关资料,联系我over140@gmail.com。

    声明

      欢迎转载,但请保留文章原始出处:)

        博客园:http://www.cnblogs.com/

        Android中文翻译组:http://androidbox.sinaapp.com/

     

    音频捕获

    译者署名: 呆呆大虾

    译者微博:http://weibo.com/popapa

    版本:Android 4.0 r1

    原文

    http://developer.android.com/guide/topics/media/audio-capture.html

    在本文中

    进行音捕获

    代码示例

     

    关键类

    MediaRecorder

     

    相关例程

    JetBoy

     

    参阅

    Android支持的媒体格式

    数据存储

    MediaPlayer

    Android的多媒体框架包含了对多种通用媒体的捕获和编码支持,因此可以很容易地在程序中加入音频信息。在设备的硬件支持时,可以利用MediaRecorder API录制音频。

    本文展示了如何编写程序捕获来自话筒的音频、保存并回放此音频。

    注意: Android仿真器是不能捕获音频的,但实际的设备是有可能提供这个功能的。

     

     

    进行音频捕获

    相比音视频播放而言,从设备上捕获音频稍微有些复杂,但还是相当简单的:

    * 创建一个新的android.media.MediaRecorder实例。

    * 用设置MediaRecorder.setAudioSource()音频源。还可能需要用到MediaRecorder.AudioSource.MIC

    * MediaRecorder.setOutputFormat()设置输出文件格式。

    * MediaRecorder.setOutputFile()设置输出文件名。

    * MediaRecorder.setAudioEncoder()设置音频编码器。

    * MediaRecorder实例中调用MediaRecorder.prepare()

    * 调用MediaRecorder.start()开始音频捕获。

    * 调用MediaRecorder.stop()停止音频捕获。

    * 一旦使用完毕MediaRecorder实例,强烈建议立即调用MediaRecorder.release() 来释放资源。

     

    示例:录音及其回放

    下例中的类演示了如何设置、开始、停止音频捕获,以及播放录制的音频文件。

    /* 

     * 本程序需要读取外部存储的权限

     * 如果输出文件写入外部存储,那就还需要写入权限来录音。

     * 这些权限必须在AndroidManifest.xml文件中设置,类似如下

     * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

     * <uses-permission android:name="android.permission.RECORD_AUDIO" /> 

     * 

     */ 

    package com.android.audiorecordtest; 

     

    import android.app.Activity; 

    import android.widget.LinearLayout; 

    import android.os.Bundle; 

    import android.os.Environment; 

    import android.view.ViewGroup; 

    import android.widget.Button; 

    import android.view.View; 

    import android.view.View.OnClickListener; 

    import android.content.Context; 

    import android.util.Log; 

    import android.media.MediaRecorder; 

    import android.media.MediaPlayer; 

     

    import java.io.IOException; 

     

     

    public class AudioRecordTest extends Activity 

    { 

        private static final String LOG_TAG = "AudioRecordTest"; 

        private static String mFileName = null; 

     

        private RecordButton mRecordButton = null; 

        private MediaRecorder mRecorder = null; 

     

        private PlayButton   mPlayButton = null; 

        private MediaPlayer   mPlayer = null; 

     

        private void onRecord(boolean start) { 

            if (start) { 

                startRecording(); 

            } else { 

                stopRecording(); 

            } 

        } 

     

        private void onPlay(boolean start) { 

            if (start) { 

                startPlaying(); 

            } else { 

                stopPlaying(); 

            } 

        } 

     

        private void startPlaying() { 

            mPlayer = new MediaPlayer(); 

            try { 

                mPlayer.setDataSource(mFileName); 

                mPlayer.prepare(); 

                mPlayer.start(); 

            } catch (IOException e) { 

                Log.e(LOG_TAG, "prepare() 失败"); 

            } 

        } 

     

        private void stopPlaying() { 

            mPlayer.release(); 

            mPlayer = null; 

        } 

     

        private void startRecording() { 

            mRecorder = new MediaRecorder(); 

            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 

            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 

            mRecorder.setOutputFile(mFileName); 

            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

     

            try { 

                mRecorder.prepare(); 

            } catch (IOException e) { 

                Log.e(LOG_TAG, "prepare()失败"); 

            } 

     

            mRecorder.start(); 

        } 

     

        private void stopRecording() { 

            mRecorder.stop(); 

            mRecorder.release(); 

            mRecorder = null; 

        } 

     

        class RecordButton extends Button { 

            boolean mStartRecording = true; 

     

            OnClickListener clicker = new OnClickListener() { 

                public void onClick(View v) { 

                    onRecord(mStartRecording); 

                    if (mStartRecording) { 

                        setText("Stop recording"); 

                    } else { 

                        setText("Start recording"); 

                    } 

                    mStartRecording = !mStartRecording; 

                } 

            }; 

     

            public RecordButton(Context ctx) { 

                super(ctx); 

                setText("Start recording"); 

                setOnClickListener(clicker); 

            } 

        } 

     

        class PlayButton extends Button { 

            boolean mStartPlaying = true; 

     

            OnClickListener clicker = new OnClickListener() { 

                public void onClick(View v) { 

                    onPlay(mStartPlaying); 

                    if (mStartPlaying) { 

                        setText("Stop playing"); 

                    } else { 

                        setText("Start playing"); 

                    } 

                    mStartPlaying = !mStartPlaying; 

                } 

            }; 

     

            public PlayButton(Context ctx) { 

                super(ctx); 

                setText("Start playing"); 

                setOnClickListener(clicker); 

            } 

        } 

     

        public AudioRecordTest() { 

            mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 

            mFileName += "/audiorecordtest.3gp"; 

        } 

     

        @Override 

        public void onCreate(Bundle icicle) { 

            super.onCreate(icicle); 

     

            LinearLayout ll = new LinearLayout(this); 

            mRecordButton = new RecordButton(this); 

            ll.addView(mRecordButton, 

                new LinearLayout.LayoutParams( 

                    ViewGroup.LayoutParams.WRAP_CONTENT, 

                    ViewGroup.LayoutParams.WRAP_CONTENT, 

                    0)); 

            mPlayButton = new PlayButton(this); 

            ll.addView(mPlayButton, 

                new LinearLayout.LayoutParams( 

                    ViewGroup.LayoutParams.WRAP_CONTENT, 

                    ViewGroup.LayoutParams.WRAP_CONTENT, 

                    0)); 

            setContentView(ll); 

        } 

     

        @Override 

        public void onPause() { 

            super.onPause(); 

            if (mRecorder != null) { 

                mRecorder.release(); 

                mRecorder = null; 

            } 

     

            if (mPlayer != null) { 

                mPlayer.release(); 

                mPlayer = null; 

            } 

        } 

    }

     

     

  • 相关阅读:
    2014阿里巴巴面试题哈尔滨
    Hadoop分布式集群配置
    Ubuntu上搭建Hadoop环境(单机模式+伪分布模式)
    安装VMware Workstation提示the msi failed的解决办法
    Scalaz(35)- Free :运算-Trampoline,say NO to StackOverflowError
    Scalaz(34)- Free :算法-Interpretation
    Scalaz(33)- Free :算式-Monadic Programming
    Scalaz(32)- Free :lift
    Scalaz(31)- Free :自由数据结构-算式和算法的关注分离
    Scalaz(30)- Free :Natural Tranformation ~>
  • 原文地址:https://www.cnblogs.com/over140/p/2248237.html
Copyright © 2011-2022 走看看