JavaCI1303jave2·

基于 Jave2 实现转换, 修改音频文件采样率, 比特率, 声道等

ronger

ronger

158 4

Why?

启英泰伦语音芯片 CI1303 播放外部音频 仅支持 16kHz 采集率, 单声道音频 通过此程序可将 TTS 服务生成的音频转换为可用音频

背景知识

比特率 (bitrate) = 采样率 (sample rate) × 采样大小 (sample size in bits) × 声道数 (number of channels)

引入依赖

<!-- Jave2 依赖 -->
        <dependency>
            <groupId>ws.schild</groupId>
            <artifactId>jave-all-deps</artifactId>
            <version>3.5.0</version>
        </dependency>

代码实现

package com.rymcu.util;

import org.springframework.core.io.ClassPathResource;
import ws.schild.jave.Encoder;
import ws.schild.jave.EncoderException;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;
import ws.schild.jave.info.MultimediaInfo;

import java.io.File;

/**
 * Created on 2025/1/13 13:44.
 *
 * @author ronger
 * @email ronger-x@outlook.com
 * @desc : com.rymcu.util
 */
public class AudioConverter {

    public static void main(String[] args) {
        int targetSampleRate = 16000; // 目标采样率
        int targetSampleSizeInBits = 1; // 采样位数
        int targetChannels = 1; // 目标声道
        try {
            String testNum = "4";
            String outName = "output_" + testNum + "_" + targetSampleRate + "_" + targetChannels;

            ClassPathResource resource = new ClassPathResource("");
            String resourcesPath = resource.getFile().getAbsolutePath() + "\\audio\\";
            String outPath = System.getProperty("user.dir") + "\\audio\\";
            System.out.println(outPath);
            File inputMP3 = new File(resourcesPath + testNum + ".mp3"); // 输入文件
            File outputMP3 = new File(outPath + outName + ".mp3");
            changeSampleRateAndChannels(inputMP3, outputMP3, targetSampleRate, targetSampleSizeInBits, targetChannels);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void changeSampleRateAndChannels(File inputFile, File outputFile, int sampleRate, int sampleSize, int channels) throws EncoderException {
        MultimediaObject srcMultiObj = new MultimediaObject(inputFile);
        MultimediaInfo inputMediaInfo = srcMultiObj.getInfo();
        System.out.println(inputMediaInfo);
        //Audio Attributes
        AudioAttributes audio = new AudioAttributes();
        audio.setCodec("mp3");
        audio.setBitRate(sampleRate * sampleSize * channels);
        audio.setChannels(channels);
        audio.setSamplingRate(sampleRate);

        //Encoding attributes
        EncodingAttributes attrs = new EncodingAttributes();
        attrs.setInputFormat(inputMediaInfo.getFormat());
        attrs.setOutputFormat("mp3");
        attrs.setAudioAttributes(audio);

        //Encode
        Encoder encoder = new Encoder();
        encoder.encode(new MultimediaObject(inputFile), outputFile, attrs);

        //辅助输出,观察编码格式的变化
        MultimediaObject srcObj = new MultimediaObject(inputFile);
        MultimediaObject targetObj = new MultimediaObject(outputFile);
        System.out.println(srcObj.getInfo());
        System.out.println(targetObj.getInfo());
    }

}

相关文章

优先推荐同专题、同标签和同作者内容,补足热门文章。

评论 4

登录 后参与评论

评论 4

美式A菌
美式A菌1月14日 09:08

可以勞煩多寫一些編碼的解釋説明嗎?

海洋2月6日 20:40

并不建议使用java来转

ronger
ronger 回复 @海洋2月7日 07:35

👎 只发表意见, 不发表建议

海洋 回复 @ronger2月7日 21:11

👎