音頻解碼及如何在Java實現

本人并不干這個,但是被迫下水了解了一下這個,稍微做了一下整理。再就是感覺現在網上以及ChatGPT在這方面給出的答案太水了,在此開辟一篇。無意放出代碼,這里只介紹一些可能重要的點。

本來以為有了ChatGPT寫這些就沒有必要了,現在看起來還是不太可能。

  • 一是知識稍微舊了一點,新一點的沒有,比如github上近一年更新的優秀項目100%是不會出現在解決方案中的。追求能用是不影響的,但是想找最好的有點難。
  • 二是方案缺少出處,擴展溯源困難。
  • 三是多方案比較困難,不易從中選取出最好的方案。
  • 四是幻覺太多,驗證成本太高。

1. 解碼

這里將解碼定義為將有損/無損的(壓縮)格式,比如 mp3/aac 等等轉換到 pcm/wav 這種原始數據的格式的操作,供下游使用。
原始數據可以理解為 采樣率 × 位深度 × 通道數 × 音頻時長 的數據,不加其它處理。

2. 基本參數

來自 javax.sound.sampled.AudioFormat,先要理解記住這些才能夠有良好掌控
- encoding – the audio encoding technique
- sampleRate – the number of samples per second
- sampleSizeInBits – the number of bits in each sample
- channels – the number of channels (1 for mono, 2 for stereo, and so on)
- frameSize – the number of bytes in each frame
- frameRate – the number of frames per second
- bigEndian – indicates whether the data for a single sample is stored in big-endian byte order

3. FFmpeg

A complete, cross-platform solution to record, convert and stream audio and video.

可能是最強的功能非常齊全,離線格式轉換命令行就用它了,但是要注意ffmpeg在做轉換時有不少參數直接默認了,使用代碼轉換可能有各種對不上(所以需要對參數的理解)。

常見音頻編碼都是確定性編碼,不要自欺欺人覺得大小不一致還是正常的,得每一個byte都一樣才正常。

4. javax.sound.sampled

  • 支持PCM/WAV之類的原始音頻格式
  • service provider: 在實現之后能夠自動發現和支持更多格式

5. hendriks73/ffsampledsp

有了1-4的鋪墊之后就只需要一個優秀項目來完成剩余的工作了,目前看起來FFSampledSP是最佳選擇(之一,服務器的)

FFSampledSP is an implementation of the javax.sound.sampled service provider interfaces based on FFmpeg, a complete, cross-platform solution to record, convert and stream audio and video. FFSampledSP is part of the SampledSP collection of javax.sound.sampled libraries.

  • 相當于引入了ffmepg的能力,在已有的庫中實現得是相當好的了。
  • 解碼流的時候需要調試參數,可以先校驗是否能轉換
    AudioInputStream fileStream = AudioSystem.getAudioInputStream(file);
    AudioFormat sourceFormat = fileStream.getFormat();
    log.info("in audio format: {}", aacFormat);
    AudioFormat targetFormat = new AudioFormat();
    AudioSystem.isConversionSupported(sourceFormat, targetFormat); // 需要為true
    
  • 引入依賴即可,并無太多需要注意的。也就是知識要得挺多,使用起來反而沒什么。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/41742.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41742.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41742.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker部署ES服務,canal全量同步的時候內存爆炸,ES/Canal Adapter自動關閉,CPU100%

文章目錄 問題解決方案1. 對ES的限制2. 對Canal-Adapter的限制 問題 使用canal-adapter全量同步(參考Canal Adapter1.1.5版本API操作服務,手動同步數據(4))的時候 小批量數據可以正常運行(幾千條&#xf…

Llama 2免費托管及API提供

Llama 2 是 Meta 最新的文本生成模型,目前其性能優于所有開源替代方案。 推薦:用 NSDT編輯器 快速搭建可編程3D場景 1、強大的Llama 2 它擊敗了 Falcon-40B(之前最好的開源基礎模型),與 GPT-3.5 相當,僅低…

【uni-app】 .sync修飾符與$emit(update:xxx)實現數據雙向綁定

最近在看uni-app文檔,看到.sync修飾符的時候,覺得很有必要記錄一下 其實uni-app是一個基于Vue.js和微信小程序開發框架的跨平臺開發工具 所以經常會聽到這樣的說法,只要你會vue,uni-app就不難上手 在看文檔的過程中,發…

.netcore grpc客戶端工廠及依賴注入使用

一、客戶端工廠概述 gRPC 與 HttpClientFactory 的集成提供了一種創建 gRPC 客戶端的集中方式。可以通過依賴包Grpc.Net.ClientFactory中的AddGrpcClient進行gRPC客戶端依賴注入AddGrpcClient函數提供了許多配置項用于處理一些其他事項;例如AOP、重試策略等 二、案…

miniExcel 生成excel

一、nuget dotnet add package MiniExcel --version 1.31.2 二、新建表及數據 ExampleProducts 三、這里我用了Dapper.Query方法 讀取excel public virtual async Task<IActionResult> Anonymous(){try{//using (var connection _dbContext.GetDbConnection())//{//…

linux中的ifconfig和ip addr

在linux操作系統中ifconfig和ip addr都是顯示網卡配置信息的命令&#xff0c;好多人有疑惑它們有什么區別呢 區別1&#xff1a;對于linux發行的版本不一樣 ip addr是對新發行版本的linux使用會比較多&#xff1b;而ifconfig是老版本遇到使用的會比較多。 區別2&#xff1a;顯…

神經網絡基礎-神經網絡補充概念-32-神經網絡與大腦

概念 神經網絡&#xff08;Neural Networks&#xff09;是受到生物神經系統啟發而設計的機器學習模型&#xff0c;用于處理和學習復雜的數據模式。盡管神經網絡的設計和工作原理與大腦有一些相似之處&#xff0c;但它們并不完全相同&#xff0c;以下是神經網絡和大腦之間的一些…

基于 KubeSphere 的應用容器化在智能網聯汽車領域的實踐

公司簡介 某國家級智能網聯汽車研究中心成立于 2018 年&#xff0c;是擔當產業發展咨詢與建議、共性技術研發中心、創新成果轉化的國家級創新平臺&#xff0c;旨在提高我國在智能網聯汽車及相關產業在全球價值鏈中的地位。 目前著力建設基于大數據與云計算的智能汽車云端運營…

RestTemplate

RestTemplate介紹 RestTemplate是Spring提供的用于訪問RESTful服務的客戶端&#xff0c;RestTemplate提供了多種便捷訪問遠程Http服務的方法,能夠大大提高客戶端的編寫效率。RestTemplate默認依賴JDK提供http連接的能力&#xff08;HttpURLConnection&#xff09;&#xff0c;…

js拼接字符串

在js中&#xff0c;你可以使用字符串拼接的方式創建新的字符串。 下面是一些常用的方法&#xff1a; 1、使用運算符&#xff1a; var str1 "Hello"; var str2 "World"; var result str1 " " str2; console.log(result); // 輸出&#xf…

【數據結構】鏈表常見題目

文章目錄 鏈表合并兩個有序鏈表反轉鏈表復制帶隨機指針的鏈表環形鏈表環形鏈表II相交鏈表移除鏈表元素鏈表中倒數第k個節點鏈表分割鏈表的回文結構鏈表的中間節點旋轉鏈表鏈表排序鏈表求和 (逆序求)鏈表求和II (正序求)重排鏈表奇偶鏈表反轉鏈表II <==> 鏈表內指定區間反…

(二)掌握最基本的Linux服務器用法——Linux下簡單的C/C++ 程序、項目編譯

1、靜態庫與動態庫 靜態庫(Static Library)&#xff1a;靜態庫是編譯后的庫文件&#xff0c;其中的代碼在編譯時被鏈接到程序中&#xff0c;因此它會與程序一起形成一個獨立的可執行文件。每個使用靜態庫的程序都會有自己的庫的副本&#xff0c;這可能會導致內存浪費。常用后綴…

opencv簡單使用

cv2庫安裝&#xff0c; conda install opencv-python注意cv2使用時&#xff0c;路徑不能有中文。&#xff08;不然會一直’None’ _ update # 處理中文路徑問題 def cv_imread(file_path): #使用之前需要導入numpy、cv2庫&#xff0c;file_path為包含中文的路徑return cv2.imd…

idea入門與maven配置的一些介紹

idea入門與maven配置的一些介紹 1.確保Java和Maven已安裝2.創建一個新的Maven項目3.導航到要創建項目的目錄配置Maven4.配置項目的pom.xml文件5.配置其他Tomcat和設置jdk6.構建和運行項目 關于idea入門基礎配置 步驟1&#xff1a;安裝IntelliJ IDEA 首先&#xff0c;從IntelliJ…

腳本語言與編譯語言的區別

文章目錄 一、語法差異二、執行方式差異三、應用領域差異四、總結 一、語法差異 腳本語言&#xff1a;腳本語言通常使用解釋器逐行執行&#xff0c;不需要事先編譯。它的語法相對簡單&#xff0c;易于學習和使用。常見的腳本語言有Python、JavaScript和Ruby等。 編譯語言&…

上海市青少年算法2023年2月月賽(丙組)

上海市青少年算法2023年2月月賽(丙組)T1 格式改寫 題目描述 給定一個僅由拉丁字符組成字符序列,需要改寫一些字符的大小寫,使得序列全部變成大寫或全部變成小寫,請統計最少修改多少個字符才能完成這項任務。 輸入格式 一個字符序列:保證僅由拉丁字符構成 輸出格式 單個整…

golang環境搭建

1. 下載、安裝 wget -O go.tar.gz https://golang.google.cn/dl/go1.21.0.linux-amd64.tar.gz sudo rm -rf /usr/local/go && sudo tar -zxvf go.tar.gz -C /usr/local2.創建工作目錄 cd mkdir -p go/{bin,pkg,src}3.添加環境變量 sudo vim /etc/profile寫入以下…

計算機競賽 python+大數據校園卡數據分析

0 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度學習車牌識別系統實現 &#x1f947;學長這里給一個題目綜合評分(每項滿分5分) 難度系數&#xff1a;4分工作量&#xff1a;4分創新點&#xff1a;3分 該項目較為新穎&am…

記錄一個編譯TubeTK時的報錯:at_check問題

在使用如下命令安裝TubeTK的cuda_nms時&#xff0c;報了一個錯誤&#xff0c;記錄一下這個錯誤和解決辦法 (base) redmeryredmery:~/Desktop/MOT/TubeTK/post_processing/nms$ python setup.py build_ext --inplace因為這個命令是在/home/redmery/Desktop/MOT/TubeTK/install/…