AudioRecord简介

1.AudioRecord与MediaRecorder一样用来录制音频的
2.AudioRecord可以对录制的数据进行实时的处理,比如降噪,除杂,或者将音频进行实时传输,比如IP电话,对讲功能等操作。
3.AudioRecord比MediaRecorder更接近底层,录制的音频是PCM格式的,只能用AudioTraker进行播放,或者将PCM数据转换成amr,wav等格式播放。

AudioRecord使用

AudioRecord以pulling方式通过read()方法对缓冲区的数据进行轮询,来实时的获取缓冲区的数据。
下面来看如何使用:

// 读取数据流  返回int,读取到的字节数
public int read (byte[] audioData, int offsetInBytes, int sizeInBytes)
public int read (float[] audioData, int offsetInFloats, int sizeInFloats, int readMode)
public int read (ByteBuffer audioBuffer, int sizeInBytes, int readMode)// 构造方法
public AudioRecord (int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)audioSource:VOICE_CALL,VOICE_COMMUNICATION。。。。sampleRateInHz  44100,22050,16000channelConfig   CHANNEL_IN_MONO and CHANNEL_IN_STEREOaudioFormat ENCODING_PCM_8BIT ENCODING_PCM_16BIT ENCODING_PCM_FLOAT.bufferSizeInBytes   由getMinBufferSize(int, int, int)决定// 获取成功创建AudioRecord 的最小缓冲区的大小
public static int getMinBufferSize (int sampleRateInHz, int channelConfig, int audioFormat)

AudioTrack

说了录音,那么播放就得说到AudioTrack,专门用来播放PCM数据.

下面是录制与播放的代码,时间太晚了,还没有测试。

package com.asia.pcm2amr;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;import android.annotation.TargetApi;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public class AudioTest {static String mPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AAA/";private AudioRecord mAudioRecord;private AudioTrack mAudioTrack;private boolean mIsAudioing = false;private boolean mIsPlaying = false;private int mMinBufferSize;private int mRecordTime = 20;private int mFileCount = 10;private static AudioTest mAudioTest;public static AudioTest getInstance() {if (mAudioTest == null) {mAudioTest = new AudioTest();}return mAudioTest;}public void createObject(int sampleRateInHz) {int audioSource = MediaRecorder.AudioSource.VOICE_COMMUNICATION;int channelConfig = AudioFormat.CHANNEL_IN_STEREO;int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;mMinBufferSize = AudioRecord.getMinBufferSize(sampleRateInHz,channelConfig, audioEncoding);int bufferSizeInBytes = mMinBufferSize * 2;mAudioRecord = new AudioRecord(audioSource, sampleRateInHz,channelConfig, audioEncoding, bufferSizeInBytes);int playBufSize = AudioTrack.getMinBufferSize(sampleRateInHz,channelConfig, audioEncoding);mAudioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,sampleRateInHz, channelConfig, audioEncoding, playBufSize,AudioTrack.MODE_STREAM, mAudioRecord.getAudioSessionId());}public boolean isInitSucces() {boolean initRecorder = mAudioRecord != null&& mAudioRecord.getState() == AudioRecord.STATE_INITIALIZED;boolean initPlayer = mAudioTrack != null&& mAudioTrack.getState() == AudioTrack.STATE_INITIALIZED;return initRecorder && initPlayer;}public void startAudio() {mIsAudioing = true;new AudioThread(++mFileCount + ".pcm").start();}public void stopAudio() {mIsAudioing = false;if (mAudioRecord.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING) {mAudioRecord.stop();}}public void startPlayer() {mIsPlaying = true;new PlayThread().start();}public void stopPlayer() {mIsPlaying = false;if (mAudioTrack.getPlayState() == AudioTrack.PLAYSTATE_PLAYING) {mAudioTrack.stop();}}/*** 结束录音与播放*/public void stopVoice() {stopAudio();stopPlayer();mAudioRecord.release();mAudioRecord = null;mAudioTrack.release();mAudioTrack = null;}private class PlayThread extends Thread {public void run() {try {android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);} catch (Exception e) {}try { File file = new File(mPath, 15 + ".pcm");FileInputStream inputStream = new FileInputStream(file);byte[] audioData = new byte[mMinBufferSize];mAudioTrack.play();while (mIsPlaying) {// 数据源int read = inputStream.read(audioData, 0, mMinBufferSize);mAudioTrack.write(audioData, 0, read);}inputStream.close();mAudioTrack.stop();} catch (Exception e) {}}}private class AudioThread extends Thread {String fileName;public AudioThread(String fileName) {this.fileName = fileName;}@Overridepublic void run() {try {android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);} catch (Exception e) {}try {mAudioRecord.startRecording();byte[] buffer = new byte[mMinBufferSize];File file = new File(mPath, "" + fileName);FileOutputStream outputStream = new FileOutputStream(file);while (mIsAudioing) {int read = mAudioRecord.read(buffer, 0, mMinBufferSize);for (int i = 0; i < read; i++) {byte b = buffer[i];// 写到文件outputStream.write(buffer, 0, read);}}mAudioRecord.stop();outputStream.flush();outputStream.close();} catch (Exception e) {e.printStackTrace();}};}
}

AudioRecord相关推荐

  1. (一)Audio子系统之AudioRecord.getMinBufferSize

    在文章<基于Allwinner的Audio子系统分析(Android-5.1)>中已经介绍了Audio的系统架构以及应用层调用的流程,接下来,继续分析AudioRecorder方法中的ge ...

  2. 【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )

    文章目录 安卓直播推流专栏博客总结 一. FAAC 头文件与静态库拷贝到 Android Studio 二. CMakeList.txt 构建脚本配置 三. Java 层 AudioRecord 音频 ...

  3. Android 获取 AudioRecord 麦克风音量大小并做选择性发送

    extends:http://blog.csdn.net/alvinhuai/article/details/8955127,http://mikespook.com/2010/11/android- ...

  4. android下音频采集功能,音频采集:Android基于AudioRecord的实现

    前言 这篇文章简单详情下手机端Android系统下利使用AudioRecord进行音频采集方法. 开始前先提供一份源码 AudioRecordLib . AudioRecord采集的核心实现在于 Au ...

  5. android audiotrack权限,Android中AudioRecord和AudioTrack的使用注意

    AudioRecord需要至少 这项录音权限.有时候在AndroidManifest.xml中加进去后,有些手机系统仍然没有授予该权限.需要到手机的设置中的权限管理,把这项权限打开.没权限就会闪退.如 ...

  6. audiorecord怎么释放_Android 开发 AudioRecord音频录制

    前言 Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord,前者是一个更加上层一点的API,它可以直接把手机麦克风录入的音频数据进行编码压 ...

  7. java audiorecord_Android 录音实现(AudioRecord)

    上一篇文章介绍了使用 MediaRecorder 实现录音功能 Android录音实现(MediaRecorder) ,下面我们继续看看使用 AudioRecord 实现录音功能. AudioReco ...

  8. android 麦克风耳机,Android force AudioRecord使用耳机麦克风

    我使用AudioRecord来录制音乐,但是当我录制它时使用手机麦克风. 我该如何强迫他使用耳机的频道?Android force AudioRecord使用耳机麦克风 我用这个代码: int min ...

  9. Android之录音--AudioRecord、MediaRecorder

    Android提供了两个API用于实现录音功能:android.media.AudioRecord.android.media.MediaRecorder. 网上有很多谈论这两个类的资料.现在大致总结 ...

  10. android 录音原始文件_音频采集:Android基于AudioRecord的实现

    前言 这篇文章简单介绍下移动端Android系统下利用AudioRecord进行音频采集方法. 按照惯例开始前先提供一份源码 AudioRecordLib . AudioRecord采集的核心实现在于 ...

最新文章

  1. php pack、unpack、ord 函数使用方法(二进制流接口应用实例)
  2. labview 软件编程规范
  3. 非常好的dllimport 文章--在 C# 中通过 P/Invoke 调用Win32 DLL
  4. 区块链BaaS云服务(37)荷兰Techruption 区块链
  5. PriorityQueue和queue的区别
  6. 联发科mtk和骁龙730哪个好_天玑720和骁龙730g哪个好?两款处理器应该如何选择?...
  7. 无招胜有招之Java进阶JVM(七)对象模型
  8. 使用函数自调用实现将局部变量转换成全局变量
  9. Java 泛型(generics)
  10. 用python海龟制图画花瓣_Python竟能画这么漂亮的花,帅呆了(代码分享)
  11. myeclipse 10.7 for linux激活
  12. 整理 .NET 平台下一些强大的开源控件和类库
  13. C#.NET软件项目中程序开发外包经验分享【从接包者转变为发包者】
  14. JAVA---数组从小到大排序方法
  15. Linux环境安装ghostscript
  16. android实现登录页面视频播放背景
  17. SQL 2008客户端ODBC配置DSN时使用网络登录ID的windows NT验证登录时 报18452错误
  18. 复化科特斯公式matlab_【原创】牛顿-柯特斯数值积分公式及其MATLAB的实现
  19. 小鹿爬虫系列——静态网站页面爬取
  20. 钉钉H5应用后台回调地址设置(服务端代码逻辑编写).NetCore API

热门文章

  1. 香港的房价真的那么贵吗?用数据挖掘真相!
  2. android 固件管理器,刷机精灵(原Android固件管理器桌面版)
  3. Linux系统p4vasp使用教程,p4vasp-0.3.30 Linux系统下安装P4vasp - 下载 - 搜珍网
  4. citespace教程
  5. Swift对象存储服务
  6. 制造商商参数文件(MPN Profile)T-code:OMPN
  7. 验厂中首当其冲的BSCI是什么
  8. 计算机接口与技术 英语怎么说,微型计算机接口与技术考点(国外英文资料).doc...
  9. 飞桨分布式训练又推新品,4D混合并行可训千亿级AI模型
  10. 开发物联网,ThingsPanel和ThingsBoard哪个更快更好