2023-06-25 07:51:10來源:博客園
一.打開和關閉輸入文件和輸出文件
想要解決上面提到的問題,我們需要對mp3文件的格式有個大致了解,為了方便講解,我這里畫了個示意圖:
(資料圖)
ID3V2 | 包含了作者,作曲,專輯等信息,長度不固定,擴展了 ID3V1 的信息量。 |
Frame | 一系列的幀,個數(shù)由文件大小和幀長決定 |
ID3V1 | 包含了作者,作曲,專輯等信息,長度為 128BYTE |
由于av_parser_parse2()這個方法的輸入必須是只包含音頻編碼數(shù)據(jù)的“裸流”,所以,我們在讀取mp3文件的時候,必須跳過ID3V2標簽部分,從Frame開始。所以,我們就必須知道ID3V2標簽的總長度。下面,我畫了個ID3V2標簽頭的示意圖,方便講解。
File ID(3) | Version(2) | Flags(1) | Size(4) |
ID3V2標簽頭固定為10byte,其中,Size部分的值是指除ID3V2標簽頭之外數(shù)據(jù)的總長度。需要注意的是,在實際計算長度的時候,這4個字節(jié)的最高位需要舍棄,也就是說,只用到了28bit,即:0xxxxxxx0xxxxxxx0xxxxxxx0xxxxxxx
#define AUDIO_INBUF_SIZE 20480#define AUDIO_REFILL_THRESH 4096static FILE* input_file= nullptr;static FILE* output_file= nullptr;static const AVCodec* codec= nullptr;static AVCodecContext* codec_ctx= nullptr;static AVPacket* pkt= nullptr;static AVFrame* frame= nullptr;static AVCodecParserContext* parser= nullptr;static enum AVCodecID audio_codec_id;void close_input_output_files(){ if(input_file!= nullptr){ fclose(input_file); input_file= nullptr; } if(output_file!= nullptr){ fclose(output_file); output_file= nullptr; }}int32_t open_input_output_files(const char* input_name,const char* output_name){ if(strlen(input_name)==0||strlen(output_name)==0){ cout<<"Error:empty input or output file name."<二.音頻解碼器的初始化以及銷毀
int32_t init_audio_decoder(const char* audio_codec){ if(strcasecmp(audio_codec,"MP3")==0){ audio_codec_id=AV_CODEC_ID_MP3; cout<<"Select codec id:MP3"<id); if(!parser){ cerr<<"Error:could not init parser."< 三.解碼循環(huán)體
解碼循環(huán)體至少需要實現(xiàn)以下三個功能:
1.從輸入源中循環(huán)獲取碼流包
2.將當前幀傳入解碼器,獲取輸出的音頻采樣數(shù)據(jù)
3.輸出解碼獲取的音頻采樣數(shù)據(jù)到輸出文件
從輸入源中讀取音頻數(shù)據(jù)到緩存:
int32_t read_data_to_buf(uint8_t* buf,int32_t size,int32_t& out_size){ int32_t read_size=fread(buf,1,size,input_file); if(read_size==0){ cerr<<"Error:read_data_to_buf failed."<解碼循環(huán)體:
int32_t end_of_input_file(){ return feof(input_file);}static int32_t decode_packet(bool flushing){ int32_t result=0; result= avcodec_send_packet(codec_ctx,flushing? nullptr:pkt); if(result<0){ cerr<<"Error:avcodec_send_packet failed,result:"<=0){ result= avcodec_receive_frame(codec_ctx,frame); if(result==AVERROR(EAGAIN)||result==AVERROR_EOF){ return 1; } else if(result<0){ cerr<<"Error:avcodec_receive_frame failed."< nb_samples:"<<frame->nb_samples<<",frame->channels:"<<frame->channels< 0){ result=av_parser_parse2(parser,codec_ctx,&pkt->data,&pkt->size,data,data_size,AV_NOPTS_VALUE,AV_NOPTS_VALUE,0); if(result<0){ cerr<<"Error:av_parser_parse2 failed."< size){ cout<<"Parsed packet size:"< size< 0) data_size += len; } } } decode_packet(true); return 0;} 輸出解碼的音頻采樣數(shù)據(jù):
int32_t write_samples_to_pcm(AVFrame* frame,AVCodecContext* codec_ctx){ int data_size= av_get_bytes_per_sample(codec_ctx->sample_fmt); if(data_size<0){ cerr<<"Error:failed to calculate data size."<channels;ch++){ fwrite(frame->data[ch]+i*data_size,1,data_size,output_file); } } return 0;} 最終,main函數(shù)的實現(xiàn)如下:
int main(){ const char* input_file_name="../input.mp3"; const char* output_file_name="../output.pcm"; const char* codec_name="MP3"; int32_t result= open_input_output_files(input_file_name,output_file_name); if(result<0){ return result; } result=init_audio_decoder(codec_name); if(result<0){ return result; } result=audio_decoding(); if(result<0){ return result; } destroy_audio_decoder(); close_input_output_files(); return 0;}解碼完成后,可以使用ffplay播放output.pcm文件:
ffplay -ar 44100 -ar 2 -f f32le -i output.pcm
關鍵詞:
責任編輯:
搜狐娛樂訊據(jù)燈塔專業(yè)版實時數(shù)據(jù),截至6月24日13時16分,2023年暑期檔
直播吧6月24日訊在昨日的NBA選秀大會上,維克托-文班亞馬被馬刺用狀元
一 打開和關閉輸入文件和輸出文件想要解決上面提到的問題,我們需要對m
推動品牌建設上臺階
來為大家解答以上的問題。平安孝心卡保單查詢,平安孝心卡這個很多人還
搜狐娛樂訊據(jù)燈塔專業(yè)版實時數(shù)據(jù),截至6月24日13時16分,2023年暑期檔
中新網(wǎng)上海6月24日電(記者許婧)上海交通大學、同濟大學等30余所上海高
微軟近日確認了Windows11系統(tǒng)中所存在的一個錯誤,該問題影響了運行Win
夏天,你是否吃了“危險的瓜”?在炎熱且濕度高的夏季,食物隨時都會成
新華社莫斯科6月24日電(記者黃河華迪)俄羅斯媒體當?shù)貢r間24日晚報道
直播吧6月24日訊在昨日的NBA選秀大會上,維克托-文班亞馬被馬刺用狀元
一 打開和關閉輸入文件和輸出文件想要解決上面提到的問題,我們需要對m
2023年6月24日19:30,“國緣V3杯”尚武英雄中泰拳王爭霸賽·新沂站將在
推動品牌建設上臺階
記者從寧夏銀川市政府獲悉,銀川市興慶區(qū)富洋燒烤店燃氣爆炸事故發(fā)生后
6月23日,市長吉建軍深入周口中心城區(qū)部分餐飲場所、燃氣企業(yè)督導
6月22日晚多名網(wǎng)友發(fā)現(xiàn)成都上空出現(xiàn)不明飛行物,并拍攝照片及視頻隨后
近日手足口病進入高發(fā)期不少孩子突發(fā)高燒、抽搐讓家長頗為揪心據(jù)媒體報
回顧1H23:需求修復、供給分化。用電側高增速雖有低基數(shù)的放大效應,但
擁抱偶像制造轟動,遭拘留并被禁止看球12月,18歲的邸某在不久前經(jīng)歷了
部分養(yǎng)殖戶仍存在抗價情緒,但肉價上漲后終端接受度不高,批發(fā)市場剩貨
當?shù)貢r間24日,根據(jù)塔斯社報道,俄羅斯首都莫斯科已加強安全措施,所有
舜網(wǎng)山東頻道是山東新聞權威發(fā)布平臺,及時發(fā)布山東17地市新聞。
其實一個普通女孩想進娛樂圈,是要付出很多很多的……模特有兩只鞋子,
或許東風日產(chǎn)也意識到了目前存在的問題,并計劃在產(chǎn)品陣容上,將加速導
1、講道理是dopa我是第二反正只有到賽季末看才是真正第一的dopa吧這裁
近日AL戰(zhàn)勝FPX終結連敗,賽后Zdz一路狂奔擁抱FPX輔助球球,在直播平臺O
隨著數(shù)字化轉型的持續(xù)深入,“618”等重要購物節(jié)點不再只是個體消費
因造型邋遢而被網(wǎng)友吐槽像保姆的向佐心態(tài)到底怎么樣呢?6月24日,向佐
據(jù)麥姆斯咨詢報道,以色列相干激光雷達(LiDAR)技術開發(fā)商Lidwave近日
記者從民航局了解到,今年端午假期(22日—24日),民航預計發(fā)送旅客534
國際范兒,龍舟“劃”向世界!端午節(jié)已成全人類共同文化遺產(chǎn)
1、【問題描述】:系統(tǒng)重裝的解決方案【簡易步驟】:安裝最新版本360安
用戶應用程序,關于用戶應用程序介紹這個很多人還不知道,我們一起來看
據(jù)法新社當?shù)貢r間24日報道,“瓦格納”雇傭兵公司負責人普里戈任
名不見經(jīng)傳匹茲堡州立大學的大二學生科德爾火了,在阿肯色大獎賽男子11
這場比賽可以用“一邊倒”來形容,讓人不禁想問:中國乒乓球隊的實力是
王啟蒙:黃金下周行情價格走勢預測及黃金獨家多空最新操作建議王啟這里
用戶定義函數(shù),關于用戶定義函數(shù)介紹這個很多人還不知道,我們一起來看
【媒體:隨著“瓦格納”推進莫斯科公共建筑進行了人員疏散】英國《衛(wèi)報
直播吧6月24日訊昨日進行的2023年NBA選秀大會,馬刺隊用狀元簽選中了來
1、市政道路和公路的規(guī)定標準是不一樣的。2、首先市政道路需要考慮城市
隨著高等教育擴張,應屆生數(shù)量屢創(chuàng)新高。來自農(nóng)村的高校畢業(yè)生大多數(shù)留
新華社北京6月24日電特稿:堅定信心攜手奮進共創(chuàng)全球發(fā)展新時代——寫
據(jù)報道,蘋果即將發(fā)布的iPhone15系列手機將進行重大升級,除了配備全新
記者從海南??跉庀蟛块T了解到,受對流云團影響,??谑惺袇^(qū)汽車南站近
還記得在大概在2000年左右,我家與成千上萬的中國家庭一樣開始萌生買私
1、要看你說的是那個人了。2、如果是你撞到別人的車屁股上了,保護你的
將于6月24日正式開通的蘇州軌道交通11號線,可以實現(xiàn)與上海軌道交通11
央視網(wǎng)消息(新聞聯(lián)播):今天(6月23日)是端午假期的第二天,全國鐵
俄羅斯外交部長拉夫羅夫當?shù)貢r間24日接受白俄羅斯媒體采訪時表示,俄羅
當?shù)貢r間6月20日,中國第十批赴馬里維和部隊在位于馬里加奧超級營地的
1、從360軟件管家中搜索,下載“驅動人生”按照提示點擊“下一步”進行
1955年,豐田汽車打造出了第一代豐田皇冠轎車,那是一款象征著人們逐漸
2023年6月23日,是端午節(jié)假期第二天,廣州市天河區(qū)龍舟文化節(jié)系列活動
這些城市為何厲害了?看看這些亮眼的數(shù)據(jù):,產(chǎn)業(yè)區(qū),城市規(guī)劃,產(chǎn)業(yè)結構
投資要點1-5月餐飲收入持續(xù)修復,5月增速有所收窄。5月社零餐飲收入407
1、這個人我們不認識。2、建議樓主去問可能熟悉他們的人希望我的回答可
1、如果你很有錢,你還會選擇要工作嗎?」這是我平常有機會跟工作伙伴在
記者從北京海關獲悉,今年1—5月,北京海關查獲進境瀕危動植物及其制品共
考生忘記帶“準考證”怎么辦?考試中途想上廁所怎么辦?2023年海南省初
msstdfmt dll是一個Windows系統(tǒng)文件,它提供了一組OLEAutomation格式轉
“我想成為一名優(yōu)秀的小記者,可以采訪更多的人!”6月24日下午2點,揚
近日,日本不顧國內(nèi)外強烈反對,強行開始試運行核污染水排海設備。當?shù)?/p>
據(jù)燈塔專業(yè)版實時數(shù)據(jù),截至6月24日21時33分,2023年端午檔(6月22日-6
據(jù)悉,法系豪華品牌DS旗下緊湊型車——全新DS4將于7月13日上市!近日,
倒的成語接龍,倒的成語這個很多人還不知道,現(xiàn)在讓我們一起來看看吧!1
要剪一個漂亮的紙剪蝴蝶結,我們需要準備一張寬度較寬、長度適中的紙張
王啟蒙:黃金下周最新行情漲跌分析及黃金最新操作策略分析王啟這里沒有
天真爛漫、活潑好動,是孩子的天性。但孩子的大腦、身體發(fā)育遠未成熟,
2023年6月24日上午,黑龍江省招生考試委員會召開全體委員會議,聽取202
用戶帳戶控制設置,關于用戶帳戶控制設置介紹這個很多人還不知道,我們
“龍舟水”發(fā)威!6月22日晚開始,隨著降雨系統(tǒng)南移,主降雨帶進入廣西
隨著高等教育擴張,應屆生數(shù)量屢創(chuàng)新高。來自農(nóng)村的高校畢業(yè)生大多數(shù)留
今年以來,中藥材價格普漲,而且多味中藥材打破價格天花板。不少業(yè)內(nèi)人
1、【問題描述】:怎樣限制軟件上傳下載速度【原因分析】:需要使用360
1、首先,開“金手指列表”中“代碼”的選項。2、其次,輸入萬能劍金手
“五年來最火端午”大數(shù)據(jù):這些城市最熱門,淄博燒烤熱度仍在
realmeGTNeo5Pro預計年內(nèi)發(fā)布,驍龍8Gen2加持盡管按照現(xiàn)有進度來看,各
平野美宇在第一局比賽就沒有把握住關鍵分9:11輸?shù)袅?,第二局比賽高橋?/p>
中央氣象臺6月24日06時繼續(xù)發(fā)布高溫橙色預警。
2020年市場行情的一個顯著特征是“分化”,這種分化既體現(xiàn)在板塊間也體
近日,《最終幻想16》在M站的用戶評分正式解禁,相較于整體積極的媒體
1、通過調(diào)整顯卡設置提高游戲運行性能【原因分析】:由于電腦迅速的更
成品真的很好吃,大雞腿又香又嫩,比買的還要好吃今天的雞腿超大,好過
1、【問題描述】:網(wǎng)頁游戲黑屏,白屏,IE導致的無法調(diào)出flash 【原因
06月21日,光迅科技獲深股通增持527 32萬股,最新持股量為1372 73萬股
1、【問題描述】:網(wǎng)頁游戲黑屏,白屏,IE導致的無法調(diào)出flash 【原因
塞爾達傳說荒野之息試煉的霸者dlc已經(jīng)正式放出,新dlc中有些新的套裝需
據(jù)報道,蘋果即將發(fā)布的iPhone15系列手機將進行重大升級,除了配備全新
近日,2023年4月份乘用車銷量數(shù)據(jù)出爐,眾車網(wǎng)行業(yè)監(jiān)測數(shù)據(jù)表明:柯迪
現(xiàn)在什么牌子的平板電腦好平板電腦性價比好的牌子如下幾個:蘋果它是平
咸魚之王游戲里面包含的任務非常的豐富,不僅需要爬塔闖關,還需要收集
0x01前言主要是對上一篇文章中`php_again`這道題的補充。 0x02下載php
1、頭發(fā)油膩的最好少吃帶油帶辣的。食物,盡量多吃一點水果和蔬菜,而
有關姆巴佩可能在今年夏天離開巴黎的傳言引發(fā)了人們的猜測,即曼聯(lián)和其
商業(yè)物業(yè)行業(yè)市場到底多大?近日,滬深A股上市企業(yè)陸續(xù)公布經(jīng)營情況,截
1、解決方案:左下角開始—運行—cmd—輸入chkdskc: f點擊回車按鍵后,
據(jù)多家旅行平臺數(shù)據(jù)顯示,今年端午假期文旅市場熱度居高不下。放眼身邊
舜網(wǎng)山東頻道是山東新聞權威發(fā)布平臺,及時發(fā)布山東17地市新聞。
6月24日,南京外國語學校以及各區(qū)熱點公辦小學初中、民辦小學初中進行
1 合同關系主體根據(jù)合同相對性原則,通常情況下,合同只能約束簽約雙方
1、在往Excel中錄入數(shù)據(jù)時,有時會遇到大量的重復數(shù)據(jù),比如有這么一個
年內(nèi)漲幅近60%,北交所“白馬股”獲機構組團調(diào)研