g SeeCHANNEL_IN_MONO and CHANNEL_IN_STEREO
声道设置:android支持双声道立体声和单声道。MONO单声道,STEREO立体声 the format
in which the audio data is
represented.
SeeENCODING_PCM_16BIT and ENCODING_PCM_8BIT
编码制式和采样大小:采集来的数据当然使用PCM编码(脉冲代码调制编
audioFormat
码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。) android支持的采样大小16bit 或者8bit。当然采样大小越大,那么信息量越多,音质也越高,现在主流的采样大小都是16bit,在低质量的语音传输的时候8bit 足够了。
the total size (in bytes) of the buffer where audio data is written to during the recording. New audio data can be read from this buffer in smaller chunks than this size. See getMinBufferSize(int, int, int) to
bufferSizeInB
ytes
determine the minimum required buffer size for the successful creation of an AudioRecord instance. Using values smaller than getMinBufferSize() will result in an initialization failure.
采集数据需要的缓冲区的大小,如果不知道最小需要的大小可以在getMinBufferSize()查看。
采集到的数据保存在一个byteBuffer中,可以使用流将其读出。亦可保存成为文件的形式
Android 使用AudioRecord录音相关和音频文件的封装
分类: Android流媒体学习
在Android中录音可以用MediaRecord录音,操作比较简单。但是不够专业,就是不能对音频进行处理。如果要进行音频的实时的处理或者音频的一些封装 就可以用AudioRecord来进行录音了。
这里给出一段代码。实现了AudioRecord的录音和WAV格式音频的封装。 用
AudioTrack
和
AudioTrack
类可以进行边录边播,可以参考:
http://blog.sina.com.cn/s/blog_6309e1ed0100j1rw.html 我们这里的代码没有播放。但是有封装和详解,如下:
? ? ? ? ? ? ? ? ?
package com.ppmeet;
import java.io.File;
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity;
import android.graphics.PixelFormat;
?? import android.media.AudioFormat; ?? import android.media.AudioRecord;
?? import android.media.MediaRecorder; ?? import android.os.Bundle; ?? import android.view.View;
?? import android.view.View.OnClickListener; ?? import android.view.Window;
?? import android.view.WindowManager; ?? import android.widget.Button; ?? ?? /**
?? * class name:TestAudioRecord
?? * class description:用AudioRecord来进行录音
?? * PS:
?? *
?? * @version 1.00 2011/09/21 ?? * @author CODYY)peijiangping ?? */
?? public class TestAudioRecord extends Activity { ?? // 音频获取源
?? private int audioSource = MediaRecorder.AudioSource.MIC;
?? // 设置音频采样率,44100是目前的标准,但是某些设备仍然支持22050,
16000,11025
?? private static int sampleRateInHz = 44100;
?? // 设置音频的录制的声道CHANNEL_IN_STEREO为双声道,
CHANNEL_CONFIGURATION_MONO为单声道
?? private static int channelConfig = AudioFormat.CHANNEL_IN_STEREO;
?? // 音频数据格式:PCM 16位每个样本。保证设备支持。PCM 8位每个样本。不
一定能得到设备支持。
?? private static int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
?? // 缓冲区字节大小
?? private int bufferSizeInBytes = 0; ?? private Button Start; ?? private Button Stop;
?? private AudioRecord audioRecord;
?? private boolean isRecord = false;// 设置正在录制的状态 ?? //AudioName裸音频数据文件
?? private static final String AudioName = \; ?? //NewAudioName可播放的音频文件
?? private static final String NewAudioName = \; ??
?? public void onCreate(Bundle savedInstanceState) { ?? super.onCreate(savedInstanceState);
?? getWindow().setFormat(PixelFormat.TRANSLUCENT);// 让界面横屏
?? requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉界面标
题
??
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
?? WindowManager.LayoutParams.FLAG_FULLSCREEN); ?? // 重新设置界面大小
?? setContentView(R.layout.main); ?? init(); ?? } ??
?? private void init() {
?? Start = (Button) this.findViewById(R.id.start); ?? Stop = (Button) this.findViewById(R.id.stop); ?? Start.setOnClickListener(new TestAudioListener()); ?? Stop.setOnClickListener(new TestAudioListener()); ?? creatAudioRecord(); ?? } ??
?? private void creatAudioRecord() { ?? // 获得缓冲区字节大小 ?? bufferSizeInBytes
=
AudioRecord.getMinBufferSize(sampleRateInHz,