zoukankan      html  css  js  c++  java
  • 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<String> recordingFiles = new ArrayList<String>();
    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;// 指向它,以便获取地址
    }
    }

  • 相关阅读:
    代理工具介绍
    Cookie 相关
    在JavaScript 使用命名空间
    oracle rank()用法
    sql update 特殊用法
    Repeat 嵌套绑定
    .net 中隐式事务和显示事务的用法
    为站点添加迅雷下载和快车下载
    缺少MSVCR71.DLL解决方式
    关于AppFabric Caching的学习摘录
  • 原文地址:https://www.cnblogs.com/jeno-song/p/5126608.html
Copyright © 2011-2022 走看看