前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 音频转为wav格式标准音频 | Java工具类

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

作者头像
全栈程序员站长
发布2022-08-31 16:04:11
1.2K0
发布2022-08-31 16:04:11
举报

大家好,又见面了,我是你们的朋友全栈君。

目录

简述

环境依赖

maven依赖

ffmpeg依赖

工具类代码

总结


简述

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

环境依赖

maven依赖

代码语言:javascript
复制
        <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运行镜像。以便以后还有使用的场景。

工具类代码

代码语言:javascript
复制
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音频

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

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

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

执行结果。

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

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

总结

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151233.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简述
  • 环境依赖
    • maven依赖
      • ffmpeg依赖
      • 工具类代码
      • 总结
      相关产品与服务
      容器镜像服务
      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档