java实现wav的重采样

本文介绍了在处理用户上传音频时,如何使用Java的javax.sound.sampled库进行格式转换,以及利用ffmpeg命令行工具实现更灵活但依赖性更强的音频转换过程,讨论了两者的优势和局限性。

在处理一些用户上传的音频的时候,往往根据用户的设备不通,文件格式难以统一,尤其是涉及到算法模型相关的,更是令人头疼,这里提供两种思路解决这个问题。

不借助三方库

这种采用的是javax.sound.sampled下的包来实现,缺点是需要预先知道目标的采样率等信息。

工具类

import com.example.phoneme.constant.WavConstant;
import lombok.extern.slf4j.Slf4j;

import javax.sound.sampled.*;
import java.io.*;
import java.util.Arrays;

@Slf4j
public class WavUtils {
   
   

    public static byte[] toPCM(byte[] src) {
   
   
        if (src.length > 44) {
   
   
            return Arrays.copyOfRange(src, 44, src.length);
        }
        return new byte[0];
    }

    public static byte[] convertTo16kHzMono16bitPCM(byte[] audioData,int sampleRate,int sampleSizeBits,int channels,boolean signed,boolean bigEndian) {
   
   
        try{
   
   
            // 创建输入字节数组流
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(audioData);

            // 创建目标音频格式
            AudioFormat targetFormat = new AudioFormat(WavConstant.SAMPLE_RATE, WavConstant.BIT_DEPTH, WavConstant.CHANNELS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值