失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > android aac格式 android aac文件格式音频的录制和播放

android aac格式 android aac文件格式音频的录制和播放

时间:2018-08-09 01:26:05

相关推荐

android aac格式 android aac文件格式音频的录制和播放

封装的工具类:

package com.example.voaactest;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import com.sinaapp.bashell.VoAACEncoder;

import android.R.integer;

import android.media.AudioFormat;

import android.media.AudioRecord;

import android.media.MediaRecorder;

import android.os.Handler;

import android.os.SystemClock;

import android.util.Log;

/**

* aac音频处理

*

* @author liueg

*

*/

public class VoAACRecordManager {

private final String TAG = "VoAAVRecordManager";

private AudioRecord mAudioRecord;

private File file;

private int SAMPLERATE = 8000;// 设置采样率

private int bitRate = 16000;// 设置bit率

private Handler mHandler;

private long startTime;

private long endTime;

private boolean isRecodering;

private int SPACE = 300;// 间隔取样时间

private FileOutputStream fos;

private int r;

private int v;

public VoAACRecordManager() {

}

public VoAACRecordManager(File file) {

File parentFile = file.getParentFile();

if (!parentFile.exists()) {

parentFile.mkdirs();

}

if (!file.exists()) {

try {

file.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

}

this.file = file;

}

/**

* 开始录音,使用aac格式

*/

public void startRecord() {

new Thread(new Runnable() {

@Override

public void run() {

try {

fos = new FileOutputStream(file);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

VoAACEncoder vo = new VoAACEncoder();

int min = AudioRecord.getMinBufferSize(SAMPLERATE,// 得到一个需要的最小录音缓存大小,SAMPLERATE:采样率

AudioFormat.CHANNEL_IN_MONO,// 声道设置,单声道

AudioFormat.ENCODING_PCM_16BIT);// 编码制式

vo.Init(SAMPLERATE, 16000, (short) 1, (short) 1);// 采样率:8000,bitRate:16000,声道数:1,编码:0.raw

// 1.ADTS

if (min < 2048) {

min = 2048;

}

byte[] temp = new byte[2048];

mAudioRecord = new AudioRecord(

MediaRecorder.AudioSource.MIC,// 麦克风音源

SAMPLERATE, AudioFormat.CHANNEL_IN_DEFAULT,

AudioFormat.ENCODING_PCM_16BIT, min);

mAudioRecord.startRecording();

isRecodering = true;

startTime = System.currentTimeMillis();

updateMicStatus();

while (isRecodering) {

r = mAudioRecord.read(temp, 0, min);

if (r > 0) {

v = 0;

for (int i = 0; i < temp.length; i++) {

v += temp[i] * temp[i];

}

byte[] ret = vo.Enc(temp);

try {

fos.write(ret);

} catch (IOException e) {

// TODO Auto-generated catch block

isRecodering = false;

e.printStackTrace();

}

}

}

mAudioRecord.stop();

mAudioRecord.release();

mAudioRecord = null;

vo.Uninit();

try {

fos.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}).start();

}

private void updateMicStatus() {

new Thread(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

if (mHandler != null) {

while (isRecodering) {

int value = (int) (Math

.abs((int) (v / (float) r) / 100) >> 1);// 得到即时声音的振幅(测试的是0-30之间)

mHandler.sendEmptyMessage(value);

SystemClock.sleep(SPACE);

}

}

}

}).start();

}

/**

* 停止录音返回录音时长

*

* @return

*/

public long stopRecord() {

if (mAudioRecord == null)

return 0L;

isRecodering = false;

endTime = System.currentTimeMillis();

return endTime = startTime;

}

public File getFile() {

return file;

}

public void setFile(File file) {

this.file = file;

}

public Handler getmHandler() {

return mHandler;

}

public void setmHandler(Handler mHandler) {

this.mHandler = mHandler;

}

}

在activity中的使用: package com.example.voaactest; import java.io.File; import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private String FileName = null; private Button startRecord; private Button stopRecord; private Button startPlay; private Button stopPlay; private TextView tv_voice; private MediaPlayer mPlayer = null; private MediaRecorder mRecorder = null; private String mRecordFileName; VoAACRecordManager manager; private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { int v =msg.what; tv_voice.setText("voice:"+v); }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); manager = new VoAACRecordManager(); manager.setmHandler(handler); mRecordFileName = Environment.getExternalStorageDirectory() .toString() + "/testAAC.aac"; File file = new File(mRecordFileName); manager.setFile(file); tv_voice = (TextView) findViewById(R.id.tv_voice); startRecord = (Button)findViewById(R.id.startRecord); startRecord.setOnClickListener(new startRecordListener()); stopRecord = (Button)findViewById(R.id.stopRecord); stopRecord.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub manager.stopRecord(); } }); startPlay = (Button)findViewById(R.id.startPlay); startPlay.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mPlayer = new MediaPlayer(); try { mPlayer.setDataSource(mRecordFileName); mPlayer.prepare(); mPlayer.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); stopPlay = (Button)findViewById(R.id.stopPlay); stopPlay.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mPlayer.release(); mPlayer = null; } } ); } class startRecordListener implements OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub manager.startRecord(); //mRecorder = new MediaRecorder(); //mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //mRecorder.setOutputFile(FileName); //mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //try { //mRecorder.prepare(); //} catch (Exception e) { //e.printStackTrace(); //} //mRecorder.start(); } } }

如果觉得《android aac格式 android aac文件格式音频的录制和播放》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。