java 音頻轉換wav格式標準音頻的操作
簡述
該工具類主要是為了將各類音頻轉為wav標準格式,其中可以調節(jié)采樣率、聲道數(shù)等指標。主要是使用ffmpeg命令進行轉換。
環(huán)境依賴
maven依賴
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.5</version>
</dependency>
這個包是個全能包,很大,具體可以自己查查它的作用。
ffmpeg依賴
這里要做兩點說明:
1、如果你是本機運行,需要在你運行的機器上安裝ffmpeg,并且將命令配置到環(huán)境變量中。
2、如果你是在docker運行,那么在容器內也需要安裝ffmpeg,所以給一個建議,可以將帶有ffmpeg命令和jdk8環(huán)境的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執(zhí)行器
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");
}
}
測試數(shù)據(jù)為MP3音頻

執(zhí)行打印,會出現(xiàn)ffmpeg的執(zhí)行打印。

執(zhí)行結果。

說明:我們看到已經(jīng)轉換為wav格式。 具體的采樣率、聲道等,可以按照自己的需求配置或者變量化。
總結
沒什么好總結的,整就完了。
到此這篇關于java 音頻轉為wav格式標準音頻的文章就介紹到這了,更多相關java 音頻轉為wav格式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MyBatis-Plus通過version機制實現(xiàn)樂觀鎖的思路
version機制的核心思想就是,假設發(fā)生并發(fā)沖突的幾率很低,只有當更新數(shù)據(jù)的時候采取檢查是否有沖突,而判斷是否有沖突的依據(jù)就是version的值是否被改變了,這篇文章主要介紹了MyBatis-Plus通過version機制實現(xiàn)樂觀鎖的思路,需要的朋友可以參考下2021-09-09
詳解Spring?Security?捕獲?filter?層面異常返回我們自定義的內容
Spring?的異常會轉發(fā)到?BasicErrorController?中進行異常寫入,然后才會返回客戶端。所以,我們可以在?BasicErrorController?對?filter異常進行捕獲并處理,下面通過本文給大家介紹Spring?Security?捕獲?filter?層面異常,返回我們自定義的內容,感興趣的朋友一起看看吧2022-05-05
mybatis-plus enum實現(xiàn)枚舉類型自動轉換
本文主要介紹了mybatis-plus enum實現(xiàn)枚舉類型自動轉換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-07-07
Spring Boot 2.0.0 終于正式發(fā)布-重大修訂版本
北京時間 2018 年 3 月 1 日早上,如約發(fā)布的 Spring Boot 2.0 在同步至 Maven 倉庫時出現(xiàn)問題,導致在 GitHub 上發(fā)布的 v2.0.0.RELEASE 被撤回2018-03-03

