【语音处理】wav转pcm mp3转pcm Java示例代码

2024-05-19 02:18

本文主要是介绍【语音处理】wav转pcm mp3转pcm Java示例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【语音处理】wav转pcmJava示例代码

都是作者亲测的代码哦。因各个音频之间存在差异导致转换会存在问题。建议大家自己有习惯看源码去了解音频相关知识的能力。

代码地址:https://gitee.com/xshuai/ai/blob/master/AIDemo/src/main/java/com/xs/audio/tns/WAVConvertPCM.java

  • Wav转PCM

 

package com.xs.audio.tns;import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;import org.apache.commons.io.IOUtils;
/*** WAV转PCM(截掉前44个字节数据)* @author Administrator**/
public class WAVConvertPCM {/*** WAV转PCM文件* @param wavfilepath wav文件路径* @param pcmfilepath pcm要保存的文件路径及文件名* @return*/public static String convertAudioFiles(String wavfilepath,String pcmfilepath){FileInputStream fileInputStream;FileOutputStream fileOutputStream;try {fileInputStream = new FileInputStream(wavfilepath);fileOutputStream = new FileOutputStream(pcmfilepath);byte[] wavbyte = InputStreamToByte(fileInputStream);byte[] pcmbyte = Arrays.copyOfRange(wavbyte, 44, wavbyte.length);fileOutputStream.write(pcmbyte);IOUtils.closeQuietly(fileInputStream);IOUtils.closeQuietly(fileOutputStream);} catch (Exception e) {System.out.println(e.getMessage());}return pcmfilepath;}/*** 输入流转byte二进制数据* @param fis* @return* @throws IOException*/private static byte[] InputStreamToByte(FileInputStream fis) throws IOException {ByteArrayOutputStream byteStream = new ByteArrayOutputStream();long size = fis.getChannel().size();byte[] buffer = null;if (size <= Integer.MAX_VALUE) {buffer = new byte[(int) size];} else {buffer = new byte[8];for (int ix = 0; ix < 8; ++ix) {int offset = 64 - (ix + 1) * 8;buffer[ix] = (byte) ((size >> offset) & 0xff);}}int len;while ((len = fis.read(buffer)) != -1) {byteStream.write(buffer, 0, len);}byte[] data = byteStream.toByteArray();IOUtils.closeQuietly(byteStream);return data;}
}
  • MP3转PCM

代码地址:https://gitee.com/xshuai/ai/blob/master/AIDemo/src/main/java/com/xs/audio/tns/MP3ConvertPCM.java

 

package com.xs.audio.tns;import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
/*** MP3转PCM Java方式实现* @author 小帅丶* @date 2017年12月6日*/
public class MP3ConvertPCM {/*** MP3转换PCM文件方法* @param mp3filepath 原始文件路径* @param pcmfilepath 转换文件的保存路径* @throws Exception */public static void mp3Convertpcm(String mp3filepath,String pcmfilepath) throws Exception{File mp3 = new File(mp3filepath);File pcm = new File(pcmfilepath);//原MP3文件转AudioInputStreamAudioInputStream mp3audioStream = AudioSystem.getAudioInputStream(mp3);//将AudioInputStream MP3文件 转换为PCM AudioInputStreamAudioInputStream pcmaudioStream = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, mp3audioStream);//准备转换的流输出到OutputStreamOutputStream os = new FileOutputStream(pcm);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead=pcmaudioStream.read(buffer, 0, 8192))!=-1) {os.write(buffer, 0, bytesRead);}os.close();pcmaudioStream.close();}
}

需要用到的jar不支持maven引入

 

 

  • 注意:需要下载MP3插件jar。才可以进行MP3CONVERTPCM 
  • 下载地址一链接: https://pan.baidu.com/s/1nwmC4Xz 密码: fzqd
  • 下载地址二链接: https://gitee.com/xshuai/ai/attach_files

 

或者用谷歌的jar支持maven引入

 

	<dependency><groupId>com.googlecode.soundlibs</groupId><artifactId>mp3spi</artifactId><version>1.9.5.4</version></dependency>

 

 

 

 

 

这篇关于【语音处理】wav转pcm mp3转pcm Java示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995761

相关文章

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

SpringBoot整合Dubbo+ZK注册失败的坑及解决

《SpringBoot整合Dubbo+ZK注册失败的坑及解决》使用Dubbo框架时,需在公共pom添加依赖,启动类加@EnableDubbo,实现类用@DubboService替代@Service,配... 目录1.先看下公共的pom(maven创建的pom工程)2.启动类上加@EnableDubbo3.实

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断