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开发之使用MediaRecorder录制声音

为了在 Android 应用中录制声音,Android提供了 MediaRecorder 类,关于MediaRecorder的详解大家可以参考《Android开发之MediaRecorder类详解》。...
  • fengyuzhengfan
  • fengyuzhengfan
  • 2014年08月14日 20:20
  • 5668

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

通过API 19新加的MediaRecorder.AudioSource.REMOTE_SUBMIX参数可以让系统App录制系统内置的声音,也就是扬声器的声音。下面是一个巨简单的例子来示例如何通过Au...
  • ariesjzj
  • ariesjzj
  • 2014年06月23日 20:08
  • 9973

Android通过AudioRecord录制系统内置声音

转自:http://blog.csdn.net/jinzhuojun/article/details/33748031 通过API 19新加的MediaRecorder.AudioSource....
  • xiao5678yun
  • xiao5678yun
  • 2017年09月01日 17:03
  • 1262

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

Android录制声音文件(音频),并播放
  • u014620028
  • u014620028
  • 2016年04月29日 20:15
  • 8312

关闭MediaRecorder录制状态改变时的声音

开始录制和停止录制的时候会发出“嘀”声音,在google里找了一会,找到了解决办法:原文:http://stackoverflow.com/questions/14369445/need-to-shu...
  • w958796636
  • w958796636
  • 2016年03月24日 12:32
  • 2397

Android仿微信录音功能,自定义控件的设计技巧

最近由于需要做一个录音功能(/嘘 悄悄透露一下,千万别告诉红薯,就是新版本的OSC客户端噢),起初打算采用仿微信的录音方式,最后又改成了QQ的录音方式,之前的微信录音控件也就白写了[大哭]。之前有很多...
  • kymjs
  • kymjs
  • 2014年12月13日 00:28
  • 2010

Android MediaRecorder 实现录制无声视频 禁止录入声音

最近遇到使用MediaRecorder录制视频的时候,需要默认录制无声视频,几经研究,也没找到资料解决,后来,发现,只需要同时取消设置AudioSource和AudioEncoder就可以实现录制无声...
  • u010998327
  • u010998327
  • 2017年05月09日 13:05
  • 2076

Android录制屏幕的实现方法

原文:Paul Kinlan  翻译:Agora.io   长久以来,我一直希望能够直接从Android屏幕上进行录制并将其编码为多种格式,以便将录制内容嵌入在任意位置,而不需要...
  • agora_cloud
  • agora_cloud
  • 2017年02月17日 12:14
  • 533

如何去除 录像开始和结束时 的噔噔噔噔声音

转自: http://blog.csdn.net/dxpqxb/article/details/8510096
  • jimbo_lee
  • jimbo_lee
  • 2014年05月08日 19:07
  • 2656

Android MediaRecorder录制视频音量小问题解决 (音视频转码合成)

之前写得太乱,回头看看感觉自己都有点看不懂,重新写下。 在android上需要做一个录像留言功能,需要生成MP4或者waw格式视频。但是使用MediaRecorder录制出的MP4视频格式音量太小,...
  • smile3670
  • smile3670
  • 2015年03月10日 14:05
  • 6710
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android录制声音写入文件
举报原因:
原因补充:

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