android录制声音写入文件

原创 2015年11月19日 14:35:36

android 通过mic录入声音,获取的是pcm(裸数据)格式的数据,可以使用(Auaacity 工具)打开能看语言的波形图,也能诊断回声消除;

1 使用API AudioRecord.read(short[] audioData, int offsetInShorts, int sizeInShorts),获取语言数据写入文件

现在获取的是short类型数据,需要把一个short 转化为2个字节的byte数组,若直接使用OutputStream.write(short  )会出现问题 

可以直接AudioRecord.read(byte[] audioData,int offsetInShorts, int sizeInShorts), 把byte 直接写入文件);       

        short 转化byte数组方法;

private void WriteShort(DataOutputStream bos, short s) throws IOException {

  byte[] mybyte = new byte[2];

  mybyte[1] =(byte)( (s << 16) >> 24 );

  mybyte[0] =(byte)( (s << 24) >> 24 );

  bos.write(mybyte);

}


然后OutputStream.write(byte[] buffer) 并OutputStream.flush();

2  可以把pcm 格式文件的数据.wav 使用播放器播放的音频格式:原理是在pcm文件head 加入.wav格式head 信息(网上可以搜到)

public void convertAudioFiles(Stringsrc, String target)throws Exception {

  FileInputStream fis = new FileInputStream(src);

  FileOutputStream fos = new FileOutputStream(target);


  //计算长度

  byte[] buf = new byte[1024 * 4];

  int size = fis.read(buf);

  int PCMSize = 0;

  while (size != -1) {

      PCMSize +=size;

      size =fis.read(buf);

    }

  fis.close();



  //填入参数,比特率等等。这里用的是16位单声道 8000hz

  WaveHeader header =new WaveHeader();

  //长度字段 = 内容的大小(PCMSize) + 头部字段的大小(不包括前面4字节的标识符RIFF以及fileLength本身的4字节)

  header.fileLength =PCMSize + (44 - 8);

  header.FmtHdrLeth = 16;

  header.BitsPerSample = 16;

  header.Channels = 1;

  header.FormatTag = 0x0001;

  header.SamplesPerSec = 8000;

  header.BlockAlign = (short)(header.Channels * header.BitsPerSample / 8);

  header.AvgBytesPerSec =header.BlockAlign *header.SamplesPerSec;

  header.DataHdrLeth =PCMSize;


  byte[] h = header.getHeader();


  asserth.length == 44;//WAV标准,头部应该是44字节

  //write header

  fos.write(h, 0,h.length);

  //write data stream

  fis = new FileInputStream(src);

  size = fis.read(buf);

  while (size != -1) {

      fos.write(buf, 0,size);

      size =fis.read(buf);

  }

  fis.close();

  fos.close();

  System.out.println("Convert OK!");

}




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

android mic录入声音写入文件

  • 2015年11月19日 15:17
  • 3KB
  • 下载

Android录制声音文件(音频),并播放

Android录制声音文件(音频),并播放

android 系统声音文件对应目录

首先说明这是转载滴。。。 原文并没有作者,所以。。。。。 淡定的分割线—————————————————————————————————————————————————————————————...
  • aerchi
  • aerchi
  • 2012年03月05日 14:25
  • 2673

Android Notification 关闭 取消 震动 关闭取消声音和 Notification进行下载文件

Android Notification 关闭 取消 震动 关闭取消声音和 Notification进行下载文件

android开发播放声音文件

有两种播放音频形式,第一个:MediaPlayer 类 ;第二个:SoundPool 类 MediaPlayer mediaPlayer01; mediaPlayer01 = MediaPlaye...

声音的录制(VC)(保存为WAV文件) (转)

|举报|字号 订阅 这里只录制了最原始的声音,格式PCM,未作任何处理,未压缩,(要压缩可能需要用到其它库) 本文用的是回调函数方式 waveInOpen...
  • kgzhw
  • kgzhw
  • 2014年09月30日 10:59
  • 652

Android声音录制和播放

手指按下开始录音,松开后停止录音,点击按钮可以进行声音的播放或删除等前段时间需要做到声音的录制和播放,百度出来的例子都是千遍一律的雷同啊,并且各种问题,比如不能重复录制、播放等问题。其实主要问题是Me...

Android 简单异步处理类------实现声音的录制及播放

在本例子中, 我们需要用继承一个类AsyncTask以实现后台运行的效果 。 它可以跟线程一样适用于简单的异步处理,而且不需要借助线程和Handler即可实现。 AsyncTask有以下几个可以实...

Android 4.4中AudioRecord用例 - 录制系统内置声音

通过API 19新加的MediaRecorder.AudioSource.REMOTE_SUBMIX参数可以让系统App录制系统内置的声音,也就是扬声器的声音。下面是一个巨简单的例子来示例如何通过Au...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android录制声音写入文件
举报原因:
原因补充:

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