Android-MediaRecord介绍

MediaRecord


用来录制音频和视频,他的录制控制是基于一个简单的状态机器上,如下图




用法参考:

MediaRecorder recorder = new MediaRecorder();
 recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
 recorder.setOutputFile(PATH_NAME);
 recorder.prepare();
 recorder.start();   // Recording is now started
 ...
 recorder.stop();
 recorder.reset();   // You can reuse the object by going back to setAudioSource() step
 recorder.release(); // Now the object cannot be reused
 
应用程序可能需要注册信息和错误事件,以便在录制过程中获知的一些内部信息和可能的运行时错误。可以通过 setOnInfoListener(OnInfoListener) 和  setOnErrorListener(OnErrorListener)


下面说下录制音频的步骤

1、创建一个新的实例android.media.MediaRecorder

2、设置使用音频源 MediaRecorder.setAudioSource()(一般使用 MediaRecorder.AudioSource.MIC)

3、设置输出文件格式 MediaRecorder.setOutputFormat()

4、设置输出文件路径 ​​MediaRecorder.setOutputFile()

5、设置使用音频编码器 MediaRecorder.setAudioEncoder()

6、调用MediaRecorder.prepare() 

7、启动音频录制,调用 MediaRecorder.start()

8、要停止音频采集,调用MediaRecorder.stop()

9、当你与MediaRecorder实例来完成,调用 MediaRecorder.release()就可以了。调用 MediaRecorder.release()始终建议立即释放资源。


示例:录制音频和播放录制的音频

/*
 * The application needs to have the permission to write to external storage
 * if the output file is written to the external storage, and also the
 * permission to record audio. These permissions must be set in the
 * application's AndroidManifest.xml file, with something like:
 *
 * <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() failed");
        }
    }

    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() failed");
        }

        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;
        }
    }
}


参考:

      (1)http://developer.android.com/guide/topics/media/audio-capture.html#audiocapture

      (2)http://developer.android.com/reference/android/media/MediaRecorder.html#setOnErrorListener(android.media.MediaRecorder.OnErrorListener


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AndroidMediaRecord类可以用来录制音频,包括通过蓝牙设备进行录音。 要使用蓝牙设备录音,首先需要确保设备已经正确配对并连接了蓝牙耳机或扬声器。可以使用BluetoothAdapter类来管理蓝牙连接,以及使用BluetoothDevice类来获取已配对的蓝牙设备。 在开始录音之前,需要先创建一个MediaRecord对象,并设置音频的采样率、编码格式、音频源等参数。可以使用setAudioSource()方法来指定音频源为蓝牙耳机,例如MediaRecorder.AudioSource.MIC。 然后,使用setOutputFile()方法指定音频文件的保存路径和格式。可以使用getFileDescriptor()方法将蓝牙耳机连接的文件描述符作为录音文件的输出。 接下来,需要调用prepare()方法进行准备工作,并使用start()方法开始录音。录音过程中,可以使用stop()方法停止录音,并使用release()方法释放MediaRecord对象。 在录音完成后,可以使用MediaPlayer类来播放录音文件,或者使用其他处理方式对录音进行编辑和处理。 需要注意的是,蓝牙耳机的音质和录音效果可能会受到设备和耳机本身的限制,因此可能会在使用过程中遇到问题。在录音过程中,可以使用onErrorListener来处理录音出错的情况,并给出相应的提示。 总体而言,使用AndroidMediaRecord类进行蓝牙录音是很方便的。只需注意正确设置参数和处理录音异常的情况,就可以顺利实现蓝牙录音功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值