java 音频转换wav格式标准音频的操作

 更新时间:2021年10月25日 11:53:40   作者:剑客阿良_ALiang  
这篇文章主要介绍了java 音频转换wav格式标准音频的操作,主要是使用ffmpeg命令进行转换,该工具类主要是为了将各类音频转为wav标准格式,其中可以调节采样率、声道数等指标,依赖maven环境,需要的朋友可以参考下

简述

该工具类主要是为了将各类音频转为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音频

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

执行结果。

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

总结

没什么好总结的,整就完了。

到此这篇关于java 音频转为wav格式标准音频的文章就介绍到这了,更多相关java 音频转为wav格式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java方法的参数传递机制详解

    Java方法的参数传递机制详解

    这篇文章主要介绍了Java方法的参数传递机制详解,对于Java初学者来说,刚学习Java的时候可能经常会听到调用方法时参数的值传递与引用传递,但是,实际上Java中方法的参数传递机制只有值传递,需要的朋友可以参考下
    2024-01-01
  • MyBatis-Plus通过version机制实现乐观锁的思路

    MyBatis-Plus通过version机制实现乐观锁的思路

    version机制的核心思想就是,假设发生并发冲突的几率很低,只有当更新数据的时候采取检查是否有冲突,而判断是否有冲突的依据就是version的值是否被改变了,这篇文章主要介绍了MyBatis-Plus通过version机制实现乐观锁的思路,需要的朋友可以参考下
    2021-09-09
  • 浅析git server“丢失”commit问题

    浅析git server“丢失”commit问题

    这篇文章主要介绍了git server“丢失”commit问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 详解Java编程中throw和throws子句的使用方法

    详解Java编程中throw和throws子句的使用方法

    这篇文章主要介绍了详解Java编程中throw和throws子句的使用方法,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • 详解Spring Security 捕获 filter 层面异常返回我们自定义的内容

    详解Spring Security 捕获 filter 层面异常返回我们自定义的内容

    Spring 的异常会转发到 BasicErrorController 中进行异常写入,然后才会返回客户端。所以,我们可以在 BasicErrorController 对 filter异常进行捕获并处理,下面通过本文给大家介绍Spring Security 捕获 filter 层面异常,返回我们自定义的内容,感兴趣的朋友一起看看吧
    2022-05-05
  • SpringCloud之Feign代理,声明式服务调用方式

    SpringCloud之Feign代理,声明式服务调用方式

    这篇文章主要介绍了SpringCloud之Feign代理,声明式服务调用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • springboot启动时没有日志的原因分析

    springboot启动时没有日志的原因分析

    这篇文章主要介绍了springboot启动时没有日志的原因分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • mybatis-plus enum实现枚举类型自动转换

    mybatis-plus enum实现枚举类型自动转换

    本文主要介绍了mybatis-plus enum实现枚举类型自动转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Java使用新浪微博API开发微博应用的基本方法

    Java使用新浪微博API开发微博应用的基本方法

    这篇文章主要介绍了Java使用新浪微博API开发微博应用的基本方法,文中还给出了一个不使用任何SDK实现Oauth授权并实现简单的发布微博功能的实现方法,需要的朋友可以参考下
    2015-11-11
  • Spring Boot 2.0.0 终于正式发布-重大修订版本

    Spring Boot 2.0.0 终于正式发布-重大修订版本

    北京时间 2018 年 3 月 1 日早上,如约发布的 Spring Boot 2.0 在同步至 Maven 仓库时出现问题,导致在 GitHub 上发布的 v2.0.0.RELEASE 被撤回
    2018-03-03

最新评论