java 音频转为wav格式标准音频 | Java工具类

简介: java 音频转为wav格式标准音频 | Java工具类

简述

该工具类主要是为了将各类音频转为wav标准格式,其中可以调节采样率、声道数等指标。主要是使用ffmpeg命令进行转换。

环境依赖

maven依赖

        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv-platform</artifactId>
            <version>1.5.5</version>
        </dependency>

这个包是个全能包,很大,具体可以自己查查它的作用。


ffmpeg依赖

这里要做两点说明:


1、如果你是本机运行,需要在你运行的机器上安装ffmpeg,并且将命令配置到环境变量中。


2、如果你是在docker运行,那么在容器内也需要安装ffmpeg,所以给一个建议,可以将带有ffmpeg命令和jdk8环境的docker打包为一个专门的ffmpeg运行镜像。以便以后还有使用的场景。


工具类代码

import lombok.extern.slf4j.Slf4j;
import org.bytedeco.javacpp.Loader;
import java.io.IOException;
import java.util.Optional;
/** @Author huyi @Date 2021/10/15 10:20 @Description: 音频转换为wav格式工具类 */
@Slf4j
public class AudioTransforWavUtils {
  /**
   * 音频转换
   *
   * @param localPath 本地音频
   * @param fileName 文件名
   * @return 转换后的地址
   * @throws Exception 异常
   */
  public static String transforAudio(String localPath, String fileName) throws Exception {
    // 这个本地转换路径可以自己调整
    String transforPath = "D:" + "/" + fileName + ".wav";
    Optional<String> transPath = Optional.empty();
    try {
      transPath = transforWavStandard(localPath, transforPath);
    } catch (Exception exception) {
      exception.printStackTrace();
    }
    if (transPath.isPresent()) {
      return transPath.get();
    } else {
      throw new Exception("音频转换失败失败");
    }
  }
  /**
   * wav音频转换为标准音频
   *
   * @param oldFilePath 老地址
   * @param newFilePath 新地址
   * @return 转换完成后的地址
   */
  public static Optional<String> transforWavStandard(String oldFilePath, String newFilePath) {
    // 获取本地ffmpeg执行器
    String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
    // 生成转换命令管道
    ProcessBuilder transforBuilder =
        new ProcessBuilder(
            ffmpeg, "-i", oldFilePath, "-f", "wav", "-ar", "16000", "-ac", "1", "-y", newFilePath);
    try {
      // inheritIO是指将 子流程的IO与当前java流程的IO设置为相同
      transforBuilder.inheritIO().start().waitFor();
    } catch (InterruptedException | IOException e) {
      log.error("ffmpeg转换wav为标准格式异常", e);
      return Optional.empty();
    }
    // 返回pcm文件路径
    return Optional.of(newFilePath);
  }
  public static void main(String[] args) throws Exception {
    transforAudio("C:\\Users\\huyi\\Desktop\\测试.mp3", "new");
  }
}

测试数据为MP3音频


image.png


执行打印,会出现ffmpeg的执行打印。


image.png


执行结果。

image.png


说明:我们看到已经转换为wav格式。 具体的采样率、声道等,可以按照自己的需求配置或者变量化。


总结

没什么好总结的,整就完了。今天南京小雨~~~LGD2:0VP。


如果本文对你有帮助,请点个赞支持一下吧。


相关文章
|
18天前
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
62 1
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
10天前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
30 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
15天前
|
Java
Java 些许公共工具类
Java 些许公共工具类
12 1
|
2月前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
24 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
2月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
2月前
|
缓存 Java 数据处理
|
3月前
|
Java 编译器 开发者
Java演进问题之Truffle处理不同编程语言的源代码或中间格式如何解决
Java演进问题之Truffle处理不同编程语言的源代码或中间格式如何解决
|
2月前
|
Java
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
|
2月前
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
38 0
|
3月前
|
Java 程序员 语音技术
怎么用Java 把多个音频拼接成一个?
**Java音频拼接指南** 在Java中,利用音频处理库`cn.juwatech.*`可合并音频文件。步骤包括导入库,创建`AudioFile`对象,将它们添加到列表,然后用`AudioConcatenator.concat()`拼接成一个文件。注意确保音频格式一致,处理异常,并考虑性能优化。此技术提升用户体验,适用于音频编辑和合成场景。[来源:稀土掘金](https://juejin.cn/post/7387701265797840932)