Java切割音频文件

掌握it.sauronsoftware.base64库在Java中的应用 是一个Java库,它提供了一种便捷的方式来处理Base64编码和解码。这个库被广泛应用于需要将二进制数据转换为文本格式的场景中。它可以轻松地将字符串、字节数组等数据类型编码为Base64字符串,并且可以将Base64字符串解码回原始数据。它的主要特点包括:易于使用:提供简单直观的API,允许开发者快速集成到自己的项目中。支持多种数据类型:能够处理字符串、字节数组等常见数据类型的编码和解码。高兼容性:支持Java 1.1及以上版本,兼容性好,适用于多种Java环境。 阅读详情
import it.sauronsoftware.jave.Encoder;  
import it.sauronsoftware.jave.MultimediaInfo;  
  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.nio.ByteBuffer;  
  
/** 
 * wav音频文件截取工具 
 * (适用于比特率为128kbps的wav音频文件,此类音频文件的头部信息占用长度44字节) 
 * @author lwj 
 * 
 */  
public class WavCut {  
      
    /** 
     * 截取wav音频文件 
     * @param sourcepath  源文件地址 
     * @param targetpath  目标文件地址 
     * @param start  截取开始时间(秒) 
     * @param end  截取结束时间(秒) 
     *  
     * return  截取成功返回true,否则返回false 
     */  
    public static boolean cut(String sourcefile, String targetfile, int start, int end) {  
        try{  
            if(!sourcefile.toLowerCase().endsWith(".wav") || !targetfile.toLowerCase().endsWith(".wav")){  
                return false;  
            }  
            File wav = new File(sourcefile);  
            if(!wav.exists()){  
                return false;  
            }  
            long t1 = getTimeLen(wav);  //总时长(秒)  
            if(start<0 || end<=0 || start>=t1 || end>t1 || start>=end){  
                return false;  
            }  
            FileInputStream fis = new FileInputStream(wav);  
            long wavSize = wav.length()-44;  //音频数据大小(44为128kbps比特率wav文件头长度)  
            long splitSize = (wavSize/t1)*(end-start);  //截取的音频数据大小  
            long skipSize = (wavSize/t1)*start;  //截取时跳过的音频数据大小  
            int splitSizeInt = Integer.parseInt(String.valueOf(splitSize));  
            int skipSizeInt = Integer.parseInt(String.valueOf(skipSize));  
              
            ByteBuffer buf1 = ByteBuffer.allocate(4);  //存放文件大小,4代表一个int占用字节数  
            buf1.putInt(splitSizeInt+36);  //放入文件长度信息  
            byte[] flen = buf1.array();  //代表文件长度  
            ByteBuffer buf2 = ByteBuffer.allocate(4);  //存放音频数据大小,4代表一个int占用字节数  
            buf2.putInt(splitSizeInt);  //放入数据长度信息  
            byte[] dlen = buf2.array();  //代表数据长度  
            flen = reverse(flen);  //数组反转  
            dlen = reverse(dlen);  
            byte[] head = new byte[44];  //定义wav头部信息数组  
            fis.read(head, 0, head.length);  //读取源wav文件头部信息  
            for(int i=0; i<4; i++){  //4代表一个int占用字节数  
                head[i+4] = flen[i];  //替换原头部信息里的文件长度  
                head[i+40] = dlen[i];  //替换原头部信息里的数据长度  
            }  
            byte[] fbyte = new byte[splitSizeInt+head.length];  //存放截取的音频数据  
            for(int i=0; i<head.length; i++){  //放入修改后的头部信息  
                fbyte[i] = head[i];  
            }  
            byte[] skipBytes = new byte[skipSizeInt];  //存放截取时跳过的音频数据  
            fis.read(skipBytes, 0, skipBytes.length);  //跳过不需要截取的数据  
            fis.read(fbyte, head.length, fbyte.length-head.length);  //读取要截取的数据到目标数组  
            fis.close();  
              
            File target = new File(targetfile);  
            if(target.exists()){  //如果目标文件已存在,则删除目标文件  
                target.delete();  
            }  
            FileOutputStream fos = new FileOutputStream(target);  
            fos.write(fbyte);  
            fos.flush();  
            fos.close();  
        }catch(IOException e){  
            e.printStackTrace();  
            return false;  
        }  
        return true;  
    }  
      
    /** 
     * 获取音频文件总时长 
     * @param filePath  文件路径 
     * @return 
     */  
    public static long getTimeLen(File file){  
        long tlen = 0;  
        if(file!=null && file.exists()){  
            Encoder encoder = new Encoder();  
            try {  
                 MultimediaInfo m = encoder.getInfo(file);  
                 long ls = m.getDuration();  
                 tlen = ls/1000;  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
        return tlen;  
    }  
      
    /** 
    * 数组反转 
    * @param array 
    */  
    public static byte[] reverse(byte[] array){  
        byte temp;  
        int len=array.length;  
        for(int i=0;i<len/2;i++){  
            temp=array[i];  
            array[i]=array[len-1-i];  
            array[len-1-i]=temp;  
        }  
        return array;  
    }  
  
}  

原文地址:
https://blog.youkuaiyun.com/beiguoshaoxia/article/details/78729950

如何实现SOLIDWORKS阵列的“智能变更”? 有时,我们在设计一个零件时,零件上有一排阵列孔,同时零件有不同的长度,我们又希望可以做到零件长度改变时,这排孔可以按长度等距增减孔阵列的个数;或是零件长度加长或缩短时,这排孔保持个数不变,按零件长度增减孔距。 那具体要怎么做呢?接下来,我们一起来看看怎么用SOLIDWORKS中简单的操作来实现这两种智能的变更: 零件长度加长或缩短时,这排孔要按长度等距增减孔阵列的个数。 零件长度加长或缩短时,这排孔保持个数不变,按零件长度增减孔距。 那接下来,我们一起来看看怎么用简单的操作来实现这两种智能的 阅读详情

相关推荐

2025年从零开始:构建你的首个ComfyUI工作流-ComfyUI入门教程

然而,由于它拥有众多的插件节点,以及较为复杂的操作流程,学习起来相对困难。以前面搭建的文生图工作流为例,首先点击功能区的【保存】,然后你的浏览器会出来一个弹窗,你可以进行文件命名,点击确定后浏览器会下载该文件,也就是带“json”后缀的文件,这样我们的工作流就打包成一份文件了。思考一下前面说的,节点是不是需要下载安装才能使用,而我们复用别人的工作流,他用的节点你不一定下载了,因为目前有600多个节点,你不可能全部下载了吧,所以我们日后使用别人的工作流,你会经常出现这样的问题。

weixin_59486588的博客 1454

程序包it.sauronsoftware.jave不存在

idea中,准备在maven中package一下,结果出现这个错误,解决方法如下: 1、首先你需要下载下面这个包,放在自己的本地 2、下载完后,需要把这个包引入到maven的包库中,操作如下: (1)打开本地命令行,切换目录到自己的maven bin目录下: (2)输入以下指令:注意要把java包的路径换成你自己电脑上的路径 mvn install:install-file -Dfile=F:\idea\final\jave-1.0.2.jar -DgroupId=it.sauronsoftware -

Shadownow的博客 9895

大模型学习路线之多模态模型

​ (Frankly speaking,博主太懒了)章节一只对CLIP、BLIP、BLIP2、InstructBLIP进行了整理,章节二以CLIP、VisualGLM作为实践案例。​ 实际上多模态模型除了CLIP、BLIP、BLIP2、InstructBLIP,还有LLaVA、miniGPT4,以及国内清华的VisualGLM、阿里的Qwen-VL等。(更多多模态原理可以看文末的参考说明)一、多模态模型 & 理论。

2401_86435672的博客 2287

Maven导入sauronsoftware包依赖失败

使用下面命令安装jar到自己本地仓库。

2301_81426796的博客 995

Mplus—交叉滞后面板模型(Cross-Lagged Panel Model, CLPM)

本文介绍交叉滞后模型相关知识,以及显变量模型与潜变量模型在Mplus中的语法。

m0_54401011的博客 1万+

stm32入门 点亮TFTLCD(NT35510驱动)

正点原子stm32f407探索者开发板屏幕使用正点原子4.3寸TFTLCDstm32f407开发使用标准库本文参考正点原子例程和NT35510的data sheet,尽量使用最少的代码点亮屏幕。

tangliang_cn的博客 1981

无法解决此问题 it.sauronsoftware:jave-ffmpegjave:1.0.2

描述:当时刷新依赖刷新不进去,清空了maven仓库重新加载,在不修改pom文件的时候尝试了好多方法,最后也没有成功。无法解决此问题 it.sauronsoftware:jave-ffmpegjave:1.0.2。1.先下载jave-.0.2此jar包(可以查看其他博客或者百度下载下来)4.在该文件夹下手动创建一个pom文件将下面的代码放进去。3.重新刷新依赖,没有报错就可以了。2.将pom文件中的依赖换成此依赖。如果报错就执行下面的步骤。5.重新加载依赖就可以了。3.找到此依赖的文件夹。

qq_54116513的博客 2163

51单片机嵌入式开发:14、STC89C52RC 之HX1838红外解码NEC+数码管+串口打印+LED显示

对于C51单片机的设计思路,你可以使用类似的步骤来实现红外解码、数码管显示和LED显示的功能。下面是一个简单的设计思路:(1) 连接HX1838红外解码器、数码管和LED到C51单片机。将HX1838的信号引脚连接到C51单片机的外部中断引脚(例如INT0),数码管的CLK引脚连接到C51单片机的某个IO口引脚,数码管的DIO引脚连接到C51单片机的另一个IO口引脚,LED连接到C51单片机的某个IO口引脚。(2) 在C51的程序中,定义并初始化所需的IO口和外部中断。

sinat_30943509的博客 2977

JAVA TTS生成音频文件

import it.sauronsoftware.jave.AudioAttributes; import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.EncodingAttributes; import java.io.File; import java.text.SimpleDateFormat; import ...

zhanghao8978的博客 1154

基于单光子探测的高重频多通道符合测距

TDC专栏之基于单光子探测的高重频多通道符合测距

sdau2005的博客 1202

基于FPGA的64点fft变换verilog开发

这精度的损失在10bits看来对最后的误差的影响是存在是不可忽略的。此后,在这思想基础上又开发了高基和分裂基等快速算法,随着数字技术的高速发展,1976年出现建立在数论和多项式理论基础上的维诺格勒傅里叶变换算法(WFTA)和素因子傅里叶变换算法。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

FPGA/MATLAB学习教程/源码/项目合作开发 1977

java切割音频文件

工具: 一个jar包即可:jave-1.0.2.jar 可以切割wav格式的音频文件 完整工程目录 就一个jar包,一个main类 代码: package com.zit; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im...

weixin_34023863的博客 3488

YOLOv8改进 | Conv篇 | DWRSeg扩张式残差助力小目标检测 (附修改后的C2f+Bottleneck)

本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv8中的C2f和Bottleneck模块,主要针对的是小目标检测,主要创新点可以总结如下:多尺度特征提取机制的深入研究和创新的DWR模块和SIR模块的提出这种方法使得网络能够更灵活地适应不同尺度的特征,从而更准确地识别和分割图像中的物体。通过本文你能够了解到DWRSeg的基本原理和框架,并且能够在你自己的网络结构中进行添加(DWRSeg需要增加一定的计算量一个DWR模块大概增加0.4GFLOPs)。

Snu77的博客 9570

java wav 切割_java切割音频文件

工具:一个jar包即可:jave-1.0.2.jar可以切割wav格式的音频文件完整工程目录就一个jar包,一个main类代码:package com.zit;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import jav...

weixin_34207880的博客 350

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java wav 切割_java切割wav音频文件

import it.sauronsoftware.jave.Encoder;import it.sauronsoftware.jave.MultimediaInfo;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import ...

weixin_42302638的博客 911

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java mp3数组_java实现切割wav音频文件的方法详解【附外部jar包下载】

本文实例讲述了java实现切割wav音频文件的方法。分享给大家供大家参考,具体如下:import it.sauronsoftware.jave.encoder;import it.sauronsoftware.jave.multimediainfo;import java.io.file;import java.io.fileinputstream;import java.io.fileoutpu...

weixin_27153203的博客 375

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

linux 音频文件切割_java切割音频文件 - osc_5y7u8lno的个人空间 - OSCHINA - 中文开源技术交流社区...

工具:一个jar包即可:jave-1.0.2.jar可以切割wav格式的音频文件完整工程目录 就一个jar包,一个main类代码:package com.zit;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import ja...

weixin_35004618的博客 297

Java切割wav音频文件

import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.MultimediaInfo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.I

beiguoshaoxia的博客 5329

java 双声道音频_java实现切割wav音频文件的方法详解【附外部jar包下载】

本文实例讲述了java实现切割wav音频文件的方法。分享给大家供大家参考,具体如下:import it.sauronsoftware.jave.Encoder;import it.sauronsoftware.jave.MultimediaInfo;import java.io.File;import java.io.FileInputStream;import java.io.FileOutpu...

weixin_39609170的博客 546

java切割wav音频文件

import it.sauronsoftware.jave.Encoder;   import it.sauronsoftware.jave.MultimediaInfo;      import java.io.File;   import java.io.FileInputStream;   import java.io.FileOutputStream;   import jav...

Hello World! 5112

java audioinputstream 读取音频文件,从最初获得高达一些X字节的AudioInputStream(切割音频文件)...

How can i read an AudioInputStream upto a particular number of bytes/microsecond position ?For example :AudioInputStream ais = AudioSystem.getAudioInputStream( new File("file.wav") );// let the file.w...

weixin_34561662的博客 1077

java实现音频切割

项目中需要对大音频文件做切割,特此记录。

xf92870的博客 1007

JAVA之一些好用的jar包

1、JARE:音频文件处理 java切割wav音频文件 http://lwjwd.iteye.com/blog/2025072?utm_source=tuicool&utm_medium=referral 使用 JAVE 对音视频转码 http://my.oschina.net/u/555639/blog/419026?fromerr=IhIRX1eA

以梦为马——书到今生读已迟 791

Java切割录音文件

1.Java切割录音,目前我用到的是java的原生Jar包,并没有用到框架,接下来我就把代码分享一下 首先了解整体过程:如果你的音频文件是wav就直接切割,如果你的音频文件是mp3,先转换成wav格式然后进行切割: 1: Maven 依赖 <dependency> <groupId>it.sauronsoftware</groupId> <artifactId>jave</artifactId> <version>1.

weixin_43309116的博客 3398
上一篇: 【转】SpringBoot事件发布的四种方式
下一篇: Java打出的jar包提示jar中无主清单属性
程序员青戈
程序员青戈 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄10年 3万+粉丝 250原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值