用AudioTrack进行音频录制传输

原创 2015年07月07日 11:35:21
AudioTrack用的也是socket进程间传输机制,用read方法获得底层音频数据。本程序中封装代码:

public class CustomAudioRecorder {
private AudioRecordResult audioResult = null;
private boolean bRecordThreadRuning = false;
private int m_in_buf_size = 0;
private byte[] m_in_bytes = null;
private AudioRecord m_in_rec = null;
private Thread recordThread = null;

public CustomAudioRecorder(AudioRecordResult paramAudioRecordResult) {
this.audioResult = paramAudioRecordResult;
initRecorder();
}
public void StartRecord()
 {
try {
if (this.bRecordThreadRuning)
       return;
     this.bRecordThreadRuning = true;
     this.recordThread = new Thread(new RecordThread());
     this.recordThread.start();
catch (Exception e) {
// TODO: handle exception
releaseRecord();
}
finally{
}
 }

public void StopRecord() {
synchronized (this) {
if (m_in_rec == null) {
return;
}

bRecordThreadRuning = false;
try {
recordThread.join();
} catch (Exception e) {
// TODO: handle exception
}
recordThread = null;
}
}

public boolean initRecorder() {
Log.i("info", "initRecorder()");
this.m_in_buf_size = AudioRecord.getMinBufferSize(8000, 2, 2);
this.m_in_rec = new AudioRecord(1, 8000, 2, 2, this.m_in_buf_size);
if (this.m_in_rec == null) {
return false;
}
this.m_in_bytes = new byte[this.m_in_buf_size];
return true;
}

public void releaseRecord() {
Log.d("tag", "releaseRecord");
this.m_in_rec.release();
this.m_in_rec = null;
}

public static abstract interface AudioRecordResult {
public abstract void AudioRecordData(byte[] paramArrayOfByte,
int paramInt);
}

class RecordThread implements Runnable {
RecordThread() {
}

public void run() {
m_in_rec.startRecording();
while (bRecordThreadRuning) {
int i = m_in_rec.read(m_in_bytes, 0, m_in_buf_size);
if (i == 0) {
return;
}
if (audioResult == null)
continue;
                              / /回调函数,返回数据
audioResult.AudioRecordData(m_in_bytes, i);
}
if (!bRecordThreadRuning) {
m_in_rec.stop();
return;
}
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

使用AudioTrack和AudioRecord录制和播放PCM wave文件

Android.media package里包含声音录放的两个类AudioRecord和AudioTrack。前者用来录制,后者用来播放。录制的流程基本上如第一个图,播放基本上如第二个图。     ...
  • brooknew
  • brooknew
  • 2012年12月09日 14:48
  • 14105

使用JNI调用FFmpeg解码音频并输出到AudioTrack求助

http://bbs.csdn.net/topics/390899416 #include  #include  #include  #in...
  • mengzhengjie
  • mengzhengjie
  • 2017年03月27日 14:06
  • 548

AudioTrack

1.1.1 AudioTrack应用实例 对于Android应用开发人员来讲,音频回放最熟悉的莫过于MediaPlayer,而AudioTrack相信用的人相对会少很多。这是因为MediaPlaye...
  • qianxiangsen
  • qianxiangsen
  • 2016年07月28日 09:32
  • 491

使用AudioRecord和AudioTrack来录制和播放音频

1.使用AudioRecord录制原始音频 除了通过意图启动录音机和使用MediaRecorder之外,Android还提供了第三种方法来捕获音频:使用成为AudioRecord的类。AudioRe...
  • panda1234lee
  • panda1234lee
  • 2013年04月08日 21:21
  • 2573

初识AudioTrack

AudioTrack是管理和播放单一音频资源的类。
  • liumeng123321
  • liumeng123321
  • 2016年09月12日 15:20
  • 1201

android audiotrack插上耳机声音播放正常,用扬声器播放不正常(嗞嗞声)

做法:android audiotrack用来播放音频时,设置了双声道播放。 现象:插上耳机音频正常,用扬声器播放不正常(有嗞嗞声) 排查:通过分析解码后的音频数据,正常可播的音频的左右声道采...
  • chenwanli19880115
  • chenwanli19880115
  • 2016年12月08日 11:20
  • 558

AudioTrack 分析

AudioTrack主要是用来播放声音的,AudioTrack贯穿了JAVA层,JNI层和Native层。 AudioTrack JAVA层: framework\base\media\java\...
  • langwang2
  • langwang2
  • 2015年12月05日 15:17
  • 1045

调试|Android平台的声音播放|AudioTrack|JNI|悲催的侧边键

1.AudioTrack的用法查看SDK文档,查看源码2.JNI传递中获得AudioTrack实例3.音频文件的信息        int iMinBufSize = AudioTrack.getMi...
  • stefzeus
  • stefzeus
  • 2011年07月21日 20:06
  • 4783

AudioTrack学习

每一个音频流对应着一个AudioTrack类的一个实例,每个AudioTrack会在创建时注册到AudioFlinger中,由AudioFlinger把所有的AudioTrack进行混合(Mixer)...
  • stefzeus
  • stefzeus
  • 2011年07月26日 10:28
  • 9490

Android 音频系统:从 AudioTrack 到 AudioFlinger

1. Android 音频框架概述Audio 是整个 Android 平台非常重要的一个组成部分,负责音频数据的采集和输出、音频流的控制、音频设备的管理、音量调节等,主要包括如下部分: Audio A...
  • zyuanyun
  • zyuanyun
  • 2017年03月09日 00:01
  • 31042
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用AudioTrack进行音频录制传输
举报原因:
原因补充:

(最多只允许输入30个字)