【语音处理】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

接口与实现 接口 使用关键字interface来定义一个接口,接口的定义分为接口声明和接口体,例如: interface Com{ ....... } 接口声明 interface 接口的名字 接口体 接口体中的抽象方法和常量 接口体中所有抽象方法的访问权限一定都是public,而且允许省略抽象方法的public和abstract修饰符,接口体中所有static常量的访问权限一定

【Java】ArrayListString转化为String数组问题

Java的容器类Collections中toArray()方法,可以把诸如ArrayList<String>的动态数组、不定长转化静态数组、定长数组String[] 但是,如下的转化方式是错误的。 [java]  view plain copy String[] strArray = (String[]) arrayList.toArray();   如果这样执行会导致

scrapy 出现404处理

第一种解决策略: from scrapy.http import Requestfrom scrapy.spider import BaseSpiderclass MySpider(BaseSpider):handle_httpstatus_list = [404, 500]name = "my_crawler"start_urls = ["http://github.com/illeg

数组 (java)

文章目录 一维数组静态初始化动态初始化 二维数组静态初始化动态初始化 数组参数传递可变参数关于 main 方法的形参 argsArray 工具类sort 中的 comparable 和 comparatorcomparator 比较器排序comparable 自然排序 一维数组 线性结构 静态初始化 第一种:int[] arr = {1,2,3,4},第二种:int[]

BigDecimal 小数位的处理(RoundingMode)

前言: 在日常项目开发中,接触小数是常有的事情,而产品对于小数的处理,在不同的业务中有不同的定义,比如四舍五入、截取、向上舍位、向下舍位等等场景,面对如此多的场景,你是否会束手无策?或者说自己去研究怎么实现?其实 Java 已经给我们提供了一个枚举类 RoundingMode,RoundingMode 共有 8 种舍位方式,本篇我们来逐个分析。 RoundingMode 枚举类源码如下: p

Spring响应式编程之Reactor核心组件

Reactor核心组件 Flux和Mono组件(1)Flux组件(2)Mono组件 Flux和Mono组件 Reactor 框架提供了两个核心组件来发布数据,分别是 Flux 和 Mono 组件。两者都是实现Publisher接口的高级抽象,可以说是应用程序开发过程中最基本的编程对象。二者都可以被onComplete信号或者onError信号所终止。 (1)Flux组件 表

代码随想录训练营Day31

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、分发饼干二、摆动序列三、最大子树组合 前言 今天是跟着代码随想录刷题的第31天,主要学习了分发饼干,摆动序列和最大子树组合这三个题目。 一、分发饼干 思路:就是大的东西给大孩子,小东西给小孩子 代码: class Solution {public:int findConte

SLAM Paper Reading和代码解析

最近对VINS、LIO-SAM等重新进行了Paper Reading和代码解析。这两篇paper和代码大约在三年前就读过,如今重新读起来,仍觉得十分经典,对SLAM算法研发具有十分重要的借鉴和指导意义。重新来读,对其中的一些关键计算过程也获得了更新清晰的了解,现整理分享出来,供有需要的同学参考。 VINS-MONO算法总结-徐胜攀.pdf资源-CSDN文库 对VINS-MONO的算法框架进

Android编程入门笔记,代码可以直接复制

1.按钮 public class Sample1_1_Activity extends Activity {     /** Called when the activity is first created. */     @Override     public void onCreate(Bundle savedInstanceState) {         super.o

Day59 代码随想录打卡|二叉树篇---把二叉搜索树转换为累加树

题目(leecode T538): 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。 方法:本题