转换成指定采样率(含文件头)

    void reSamplingAndSave(byte[] data) throws IOException, UnsupportedAudioFileException {WaveFileReader reader = new WaveFileReader();AudioInputStream audioIn = reader.getAudioInputStream(new ByteArrayInputStream(data));AudioFormat srcFormat = audioIn.getFormat();int targetSampleRate = 16000; //指定采样率AudioFormat dstFormat = new AudioFormat(srcFormat.getEncoding(),targetSampleRate,srcFormat.getSampleSizeInBits(),srcFormat.getChannels(),srcFormat.getFrameSize(),srcFormat.getFrameRate(),srcFormat.isBigEndian());AudioInputStream convertedIn = AudioSystem.getAudioInputStream(dstFormat, audioIn);String fileName = System.getenv("TEMP").concat(File.separator).concat(System.currentTimeMillis()+".wav");File file= new File(fileName);WaveFileWriter writer = new WaveFileWriter();writer.write(convertedIn, AudioFileFormat.Type.WAVE, file);
}

使用方法读取文件流:

 byte[] bytes = Files.readAllBytes(Paths.get("e:\\asset\\nZLWKJjQ.wav"));

重采样,不保留文件头(通常用于语音识别):

    byte[] reSampling(byte[] data) throws IOException, UnsupportedAudioFileException {AudioInputStream audioIn = AudioSystem.getAudioInputStream(new ByteArrayInputStream(data));AudioFormat srcFormat = audioIn.getFormat();int targetSampleRate = 16000;AudioFormat dstFormat = new AudioFormat(srcFormat.getEncoding(),targetSampleRate,srcFormat.getSampleSizeInBits(),srcFormat.getChannels(),srcFormat.getFrameSize(),srcFormat.getFrameRate(),srcFormat.isBigEndian());AudioInputStream convertedIn = AudioSystem.getAudioInputStream(dstFormat, audioIn);int numReads = -1;int BUFF_SIZE = targetSampleRate/2;byte [] buff = new byte[BUFF_SIZE];ByteArrayOutputStream outputStream = new ByteArrayOutputStream();while ((numReads = convertedIn.read(buff)) !=-1){System.out.println("读入字节数:"+ numReads);outputStream.write(buff);}return outputStream.toByteArray();}

重采样2(不含文件头):

public static final int SAMPLE_RATE = 16000;// 16-bit audio
private static final int BYTES_PER_SAMPLE = 2;
// 16-bit audio
private static final int BITS_PER_SAMPLE = 16;
private static final double MAX_16_BIT = 32768;
private static final int SAMPLE_BUFFER_SIZE = 4096;private static final int MONO   = 1;
private static final int STEREO = 2;
private static final boolean LITTLE_ENDIAN = false;
private static final boolean BIG_ENDIAN    = true;
private static final boolean SIGNED        = true;
private static final boolean UNSIGNED      = false;
private static AudioFormat dstFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,SAMPLE_RATE,BITS_PER_SAMPLE,MONO,BYTES_PER_SAMPLE,8000,LITTLE_ENDIAN);
public static byte[] reSamplingPCM(byte[] data) {try(AudioInputStream audioIn = AudioSystem.getAudioInputStream(new ByteArrayInputStream(data));AudioInputStream convertedStream = AudioSystem.getAudioInputStream(dstFormat, audioIn);ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {if (audioIn.getFormat().matches(dstFormat)) {return data;}int numReads = -1;int BUFF_SIZE = SAMPLE_RATE / 2;byte[] buff = new byte[BUFF_SIZE];while ((numReads = convertedStream.read(buff)) != -1) {log.info("read {} byte(s)", numReads);outputStream.write(buff);}return outputStream.toByteArray();} catch (UnsupportedAudioFileException |IOException e) {log.error("occurs errors when re-sampling the audio stream:{}",e);throw new RuntimeException("occurs errors when re-sampling the audio stream:{}",e);}
}

参考来源:

https://stackoverflow.com/questions/15410725/java-resample-wav-soundfile-without-third-party-library

https://www.codota.com/web/assistant/code/rs/5c7689a149efcb00014e68b2#L54

纯java代码对音频采样率进行转换(JDK rt包)相关推荐

  1. 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置

    经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...

  2. Android --- 使用纯java代码实现相对布局(通俗易懂)

    java布局 java代码布局和xml布局的区别 1.Java纯布局更加的灵活,比如自定义控件或一些特殊要求时,使用java代码布局 2.常用的xml布局是所见即所得的编写方式,以及xml本身拥有一些 ...

  3. springMVC纯java代码配置(一)- 数据源与事务管理(转载的哦)

    原文地址:http://my.oschina.net/devleon/blog/530803?fromerr=9Z8ZFdbf 摘要 自Spring3.0开 始,Spring正式将JavaConfig ...

  4. java编写流星_纯Java代码实现流星划过天空

    废话不多说了,直接给大家贴java代码了. import java.awt.Color; import java.awt.Graphics; import java.awt.image.Buffere ...

  5. 【iText5 生成PDF】纯Java代码实现生成PDF(自定义表格、文本水印、单元格样式)

    工作中遇到需要生成PDF.最终选择了iText.其他也有通过html再生成.感觉不太适合就用了代码实现. 使用iText 5.5.13.1版本.纯Java代码实现 1.自定义表格合并指定行列完成数据填 ...

  6. 用纯Java代码根据IP获取windows和linux的MAC物理地址

    一.环境介绍 1.最近在使用struts2和JSP开发web网页时,碰到一个问题,我需要在后台根据ip获取访问服务器的物理地址,然后进行其他业务处理,但是我发现我在后台没有对应的接口或函数能够满足我. ...

  7. 在Android中用纯Java代码布局

    感谢大佬:https://www.jianshu.com/p/7aedea560f16 在Android中用纯Java代码布局 本文的完成了参考了一篇国外的教程,在此表示感谢. Android中的界面 ...

  8. java flv转mp3_如何使用java代码进行视频格式的转换(FLV)

    一,前言 在给网页添加视频播放功能后,发现上传的视频有各种格式,那么就需要将他么转换成FLV,以很好的支持在线视频播放. 二,准备 drv43260.dll,ffmpeg.exe,mencoder.e ...

  9. Android Studio编写运行测试纯java代码可带main()函数

    问题 小伙伴们在做安卓项目的时候,是不是有时候会忘记某些api的使用方法,不太确定他们的结果是怎样的,需要写一些测试代码,验证看看我们的写法是否正确.刚开始的时候我是在页面上写一个Button,添加点 ...

最新文章

  1. android 按住拖动gallery防止马上加载数据导致gallery卡的方法
  2. 【做题】TCSRM601 Div1 500 WinterAndSnowmen——按位考虑dp
  3. SpringBoot开发接口
  4. Windows server 2016 搭建RDS服务
  5. 模板:Link Cut Tree(LCT)
  6. 【GIT 基础篇六】分支管理(创建与合并)
  7. 水滴石穿C语言之声明的语法
  8. LR 报错误: C interpreter run time error: Error -- Unresolved symbol : vuser_end解决方法
  9. svn执行Cleanup总是提示cleanup failed的解决方法
  10. FPI厂商SoleraNetworks被Blue Coat收购
  11. 2021年西式面点师(中级)报名考试及西式面点师(中级)证考试
  12. 怎么用计算机批改试卷,试卷弄横线_在电脑上出试卷时答题的横线怎么打_淘题吧...
  13. java数据结构运动会分数统计,数据结构实验报告(运动会分数统计系)..doc
  14. 宇视阿宇摄像机夜间效果好吗?画面可以看清楚吗?
  15. 不复制项目,idea中同一个项目同时启动多个端口进行访问
  16. 鞋为什么会臭?14个方法巧除鞋臭脚臭
  17. 网络安全工程师的职业前景如何?
  18. GAE 博客——B3log Solo 0.2.1 发布了!
  19. Baidu、Google、Soso等搜索引擎网站登录入口
  20. 如何创作一款商业级的安卓独立应用

热门文章

  1. [机器学习算法]决策树和CART树
  2. 如何在word中批量修改图片大小
  3. 服务器渲染与客户端渲染
  4. 下拉框丿html宙斯,无限级别js联动下拉框类
  5. 第十三届蓝桥杯(web组),第五题【页面布局】制作网站首页
  6. 基于系统日志分析进行异常检测
  7. sleep与select函数
  8. qq for linux安装教程,Ubuntu 12.04安装QQ for Linux
  9. HTML(3)HTML文档头部信息
  10. 如何升级wsl?将已安装的wsl1系统无损升级为wsl2! _φ(❐_❐✧ windows教程