android 断点续录,android 录音的断点续传

系统没有暂停的功能  只能把每次的录音进行拼接。。。

package com.example.zrecord;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.Locale;

import android.app.Activity;

import android.media.MediaPlayer;

import android.media.MediaRecorder;

import android.os.Bundle;

import android.text.format.DateFormat;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;

public class MainActivity extends Activity {

private MediaRecorder mr;

private String path;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button btn1 = (Button) findViewById(R.id.button1);

Button btn2 = (Button) findViewById(R.id.button2);

Button btn3 = (Button) findViewById(R.id.button3);

Button btn4 = (Button) findViewById(R.id.button4);

// 录音1

btn1.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

try {

setState();

// 准备录制

mr.prepare();

// 开始录制

mr.start();

Toast.makeText(getApplicationContext(), "开始录音...", 0)

.show();

} catch (Exception e) {

e.printStackTrace();

}

}

});

// 录音2

btn2.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

if (mr != null) {

mr.stop();

mr.release();

mr = null;

Toast.makeText(getApplicationContext(), "结束录音...", 0)

.show();

}

}

});

// 录音3

btn3.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

}

});

btn4.setOnClickListener(new OnClickListener() {

private MediaPlayer mPlayer;

@Override

public void onClick(View v) {

mPlayer = new MediaPlayer();

try {

// mPlayer.setDataSource((String) SDCardUtils.getValue(

// getApplicationContext(), "R2", ""));

// mPlayer.prepare();

// mPlayer.start();

// 合并所有的文件并进行播放

File f = SetHeBing();

mPlayer.setDataSource(f.getAbsolutePath());

mPlayer.prepare();

mPlayer.start();

} catch (Exception e) {

}

}

});

}

private void setState() {

// file = new File("/sdcard/"

// + "YY"

// + new DateFormat().format("yyyyMMdd_hhmmss",

// Calendar.getInstance(Locale.CHINA)) + ".amr");

path = SDCardUtils.getSDCardPath()

+ new DateFormat().format("yyyyMMdd_hhmmss",

Calendar.getInstance(Locale.CHINA)) + ".amr";

SDCardUtils.saveValue(this, "R2", path);

// 创建录音对象

mr = new MediaRecorder();

// 从麦克风源进行录音

// mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT);

//

// // 设置输出格式

// mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);

//

// mr

// .setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);

//

// // 设置编码格式

// mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

// 设置录音为麦克风

mr.setAudioSource(MediaRecorder.AudioSource.MIC);

mr.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);

mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

// 设置输出文件

mr.setOutputFile(path);

}

protected File SetHeBing() {

/** 合并所有的音频文件 */

// 创建音频文件,合并的文件放这里

File tempFile = new File(SDCardUtils.getSDCardPath() + "hebing.amr");

FileOutputStream fileOutputStream = null;

// if (!mergeFile.exists()) {

// try {

// mergeFile.createNewFile();

// } catch (IOException e) {

// // TODO Auto-generated catch block

// e.printStackTrace();

// }

// }

try {

fileOutputStream = new FileOutputStream(tempFile);

} catch (Exception e) {

e.printStackTrace();

}

// list里面为暂停录音 所产生的几段录音文件的名字,中间几段文件的减去前面的6个字节头文件

ArrayList recordingFiles = new ArrayList();

String path1 = (String) SDCardUtils.getValue(getApplicationContext(),

"R1", "");

String path2 = (String) SDCardUtils.getValue(getApplicationContext(),

"R2", "");

// File f1 = new File(path1);

// File f2 = new File(path2);

recordingFiles.add(path1);

recordingFiles.add(path2);

for (int index = 0; index < recordingFiles.size(); index++) {

File file = new File(recordingFiles.get(index));

try {

FileInputStream fileInputStream = new FileInputStream(file);

byte[] myByte = new byte[fileInputStream.available()];

// 文件长度

int length = myByte.length;

Log.d("RECORD-LENGTH", length + "");

// 头文件

if (index == 0) {

while (fileInputStream.read(myByte) != -1) {

fileOutputStream.write(myByte);

// fileOutputStream.write(myByte, 0,length);

}

}

// 之后的文件,去掉前面6个字节(头文件)

else {

while (fileInputStream.read(myByte) != -1) {

fileOutputStream.write(myByte, 6, length - 6);

}

}

fileOutputStream.flush();

fileInputStream.close();

// 合并之后删除文件

// file.delete();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

// 结束后关闭流

try {

fileOutputStream.flush();

fileOutputStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return tempFile;// 指向它,以便获取地址

}

}

原文:http://www.cnblogs.com/jeno-song/p/5126608.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值