Android实现音频录制的两种方式

本文详细介绍了在Android应用开发中如何使用AudioRecord和MediaRecorder实现音频录制。通过AudioRecord进行底层音频数据录制,以及使用MediaRecorder进行更简便的音频录制操作。并提供了完整的代码示例。
摘要由CSDN通过智能技术生成

     在移动APP开发中,每逢APP应用设计到多媒体开发的时候,都会让很多的程序员头疼不已,而且项目的开发进度会放慢、项目

的难度也会加大蛮多,同时APP的测试也会增加。Android中的多媒体开发,有音频的播放、音频的录制、视频的播放、视频的录制

等,虽然Android的SDK中提供了一些基础的开发API类,如音频的录制就提供了两种方式:AudioRecord录制音频和MediaRecorder录

制音频。AudioRecord类相对于MediaRecorder来说,更加接近底层,为我们封装的方法也更少。然而实现一个AudioRecord的音频录

制程序也很简单。

一、AudioRecord实现录制音频:

package com.hb56.MyAndroidUtil;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.hardware.Camera.AutoFocusCallback;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


/** 
 * 该实例中,我们使用AudioRecord类来完成我们的音频录制程序 
 * AudioRecord类,我们可以使用三种不同的read方法来完成录制工作, 
 * 每种方法都有其实用的场合 
 * 一、实例化一个AudioRecord类我们需要传入几种参数 
 * 1、AudioSource:这里可以是MediaRecorder.AudioSource.MIC 
 * 2、SampleRateInHz:录制频率,可以为8000hz或者11025hz等,不同的硬件设备这个值不同 
 * 3、ChannelConfig:录制通道,可以为AudioFormat.CHANNEL_CONFIGURATION_MONO和AudioFormat.CHANNEL_CONFIGURATION_STEREO 
 * 4、AudioFormat:录制编码格式,可以为AudioFormat.ENCODING_16BIT和8BIT,其中16BIT的仿真性比8BIT好,但是需要消耗更多的电量和存储空间 
 * 5、BufferSize:录制缓冲大小:可以通过getMinBufferSize来获取 
 * 这样我们就可以实例化一个AudioRecord对象了 
 * 二、创建一个文件,用于保存录制的内容 
 * 同上篇 
 * 三、打开一个输出流,指向创建的文件 
 * DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file))) 
 * 四、现在就可以开始录制了,我们需要创建一个字节数组来存储从AudioRecorder中返回的音频数据,但是 
 * 注意,我们定义的数组要小于定义AudioRecord时指定的那个BufferSize 
 * short[]buffer = new short[BufferSize/4]; 
 * startRecording(); 
 * 然后一个循环,调用AudioRecord的read方法实现读取 
 * 另外使用MediaPlayer是无法播放使用AudioRecord录制的音频的,为了实现播放,我们需要 
 * 使用AudioTrack类来实现 
 * AudioTrack类允许我们播放原始的音频数据 
 *  
 *  
 * 一、实例化一个AudioTrack同样要传入几个参数 
 * 1、StreamType:在AudioManager中有几个常量,其中一个是STREAM_MUSIC; 
 * 2、SampleRateInHz:最好和AudioRecord使用的是同一个值 
 * 3、ChannelConfig:同上 
 * 4、AudioFormat:同上 
 * 5、BufferSize:通过AudioTrack的静态方法getMinBufferSize来获取 
 * 6、Mode:可以是AudioTrack.MODE_STREAM和MODE_STATIC,关于这两种不同之处,可以查阅文档 
 * 二、打开一个输入流,指向刚刚录制内容保存的文件,然后开始播放,边读取边播放 
 *  
 * 实现时,音频的录制和播放分别使用两个AsyncTask来完成  
 */
/**
 * 利用AudioRecord类实现自己的音频录制程序
 * com.hb56.MyAndroidUtil.AudioRecord
 * 
 * @author Admin-zhangyx
 * 
 *         create at 2014-10-16 下午2:03:13
 */
public class AudioRecordActivity extends Activity{
private TextView stateView;
private Button btnStart, btnStop, btnPlay, btnFinish;
private RecordTask recorder;
private PlayTask player;
private File audioFile;
private boolean isRecording = true, isPlaying = false; // 标记
private int frequence = 8000; // 录制频率,单位hz.这里的值注意了,写的不好,可能实例化AudioRec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值