2023-06-25 13:10:25來源:博客園
一.打開和關(guān)閉輸入文件和輸出文件
想要解決上面提到的問題,我們需要對mp3文件的格式有個(gè)大致了解,為了方便講解,我這里畫了個(gè)示意圖:
ID3V2 | 包含了作者,作曲,專輯等信息,長度不固定,擴(kuò)展了 ID3V1 的信息量。 |
Frame | 一系列的幀,個(gè)數(shù)由文件大小和幀長決定 |
ID3V1 | 包含了作者,作曲,專輯等信息,長度為 128BYTE |
由于av_parser_parse2()這個(gè)方法的輸入必須是只包含音頻編碼數(shù)據(jù)的“裸流”,所以,我們在讀取mp3文件的時(shí)候,必須跳過ID3V2標(biāo)簽部分,從Frame開始。所以,我們就必須知道ID3V2標(biāo)簽的總長度。下面,我畫了個(gè)ID3V2標(biāo)簽頭的示意圖,方便講解。
(資料圖片)
File ID(3) | Version(2) | Flags(1) | Size(4) |
ID3V2標(biāo)簽頭固定為10byte,其中,Size部分的值是指除ID3V2標(biāo)簽頭之外數(shù)據(jù)的總長度。需要注意的是,在實(shí)際計(jì)算長度的時(shí)候,這4個(gè)字節(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)體至少需要實(shí)現(xiàn)以下三個(gè)功能:
1.從輸入源中循環(huán)獲取碼流包
2.將當(dāng)前幀傳入解碼器,獲取輸出的音頻采樣數(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ù)的實(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
關(guān)鍵詞:
責(zé)任編輯:
1、公歷閏年判定遵循的規(guī)律為:四年一閏,百年不閏,四百年再閏 公歷閏年
6月24日上午2023年廣西中考開考今年,廣西實(shí)行初中學(xué)業(yè)水平考試統(tǒng)一命
一 打開和關(guān)閉輸入文件和輸出文件想要解決上面提到的問題,我們需要對m
圣誕節(jié)將在今年早些時(shí)候迎來,一些少數(shù)人訂購了布加迪Divo,因?yàn)閯P龍(C
食物藏毒、人體藏毒車體藏毒、工藝品藏毒……毒販為了牟取暴利鋌而走險(xiǎn)
南充新聞網(wǎng)訊(南充日報(bào)社全媒體記者伍羅文博)6月15日,市招委、南充
【來源:長江網(wǎng)】長江網(wǎng)訊(記者王允祺通訊員張大偉)6月24日,攜程發(fā)
碳中和“風(fēng)口”下微電網(wǎng)能否迎來嶄新機(jī)遇?中國電力企業(yè)聯(lián)合會發(fā)布的報(bào)
1、計(jì)算機(jī)信息網(wǎng)絡(luò)分為局域網(wǎng)、廣域網(wǎng)和城域網(wǎng)三類。2、局域網(wǎng)(LocalAr
山西太谷縣沼氣綜合利用項(xiàng)目并網(wǎng)發(fā)電!北極星電力網(wǎng)獲悉,近日,山西省
潮新聞客戶端記者胡靜漪通訊員張正華黃琳趙智敏通訊員方崢攝“錢塘江換
斯凱奇FOAMIES洞洞鞋近日,美國運(yùn)動品牌斯凱奇(Skechers)推出斯凱奇F
愛自己是終身浪漫的開始。
1、公歷閏年判定遵循的規(guī)律為:四年一閏,百年不閏,四百年再閏 公歷閏年
北京菜百黃金價(jià)格今天多少一克,菜百今日金價(jià)查詢(2023年06月25日)
總臺記者探訪丨巴西圣保羅咖啡節(jié)開幕感受巴西咖啡文化---咖啡是巴西人
中新網(wǎng)6月25日電綜合俄媒24日報(bào)道,被問及有關(guān)俄總統(tǒng)普京是否仍信任俄
聯(lián)發(fā)科在有組織的活動中宣布了全新智能電視處理器S900。這款處理器是全
預(yù)計(jì)iPhone15Pro Max將是一款旗艦設(shè)備,配備大型潛望式變焦相機(jī)、3納米
1、上海迪士尼樂園,位于上海市浦東新區(qū)川沙鎮(zhèn)黃照路310號,于2016年6
導(dǎo)讀:六角龍魚的壽命?以下由小編為大家?guī)斫榻B。六角龍魚的壽命一般
在我們還在為夏天穿什么發(fā)愁的時(shí)候,時(shí)尚圈的潮人們已經(jīng)優(yōu)先換上春季新
五個(gè)報(bào)備是指,因公務(wù)出差、個(gè)人出差或旅游、因探親訪友走動、團(tuán)隊(duì)式旅
6月25日是全國土地日。近年來,全國公安機(jī)關(guān)加強(qiáng)部門協(xié)作,深入開展“
【專題】聚焦2023年甘肅中高考如何填報(bào)?流程看這里!中國甘肅網(wǎng)6月25日
【財(cái)華社訊】國富創(chuàng)新(00290 HK)公布,集團(tuán)預(yù)期截至2023年3月31日止年
□本報(bào)記者周曉荷6月23日,夜幕降臨,鄭州市二砂文創(chuàng)園里,五彩燈光照
大家好,你是否在微信和朋友聊天時(shí)也注意到了一件有趣的事情——你
根據(jù)協(xié)議,針對深業(yè)泰富集團(tuán)全國范圍內(nèi)持有的存量資產(chǎn)項(xiàng)目,包括但不限
1、2020年中國移動的新套餐有新飛享38套餐、新飛享58套餐等。2、新飛享
對于重婚需要什么證據(jù),具體得分兩種情況:1、領(lǐng)取結(jié)婚證的法律婚姻:
6月24日上午2023年廣西中考開考今年,廣西實(shí)行初中學(xué)業(yè)水平考試統(tǒng)一命
中新網(wǎng)沈陽6月25日電 (記者 韓宏)記者25日從遼寧省文化和旅游廳獲
參考消息網(wǎng)6月25日報(bào)道據(jù)俄羅斯衛(wèi)星社6月24日報(bào)道,俄羅斯總統(tǒng)普京簽署
1955年,豐田汽車打造出了第一代豐田皇冠轎車,那是一款象征著人們逐漸
一 打開和關(guān)閉輸入文件和輸出文件想要解決上面提到的問題,我們需要對m
中國白酒公認(rèn)的香型一共有十二種,其中以醬香型白酒熱度最高,相比于其
敬老院社會實(shí)踐心得體會五篇精選 只要人人都獻(xiàn)出一點(diǎn)愛,世界就會變
近日,康寶萊海鹽榛酪布朗尼口味蛋白營養(yǎng)粉,在知名健康機(jī)構(gòu)新營養(yǎng)主辦
本報(bào)北京6月24日電(記者靳昊)最高人民法院21日首次發(fā)布涉體育糾紛民事
1、號半還好幾百呢,應(yīng)該是銀龍最次。2、但是銀龍長起來也還行觀賞性也
新華社貴陽6月24日電(記者駱飛)24日,2023年第七屆“多彩貴州”自行
黃河新聞網(wǎng)晉城訊近日,晉城市城區(qū)南村鎮(zhèn)完成收割小麥2萬畝,目前,三
1、最終戰(zhàn)Boss為人王蓋提亞,實(shí)際職階克制關(guān)系相當(dāng)于盾階,無任何克制
天眼查App顯示,近日,呷哺呷哺旗下湊湊餐飲管理有限公司上海徐家匯路
眾所周知,昭和時(shí)期的MAT隊(duì)號稱“陸戰(zhàn)猛虎”,在戰(zhàn)斗中多次出手幫助陷
翠竹拔節(jié)向上向善
圖為江西南昌站,旅客準(zhǔn)備上車?!⒘巍z圖為江西南昌站,旅客從站
在日常生活中,當(dāng)我們使用數(shù)字設(shè)備時(shí),我們會遇到各種不同的問題,其中
1、回答::148×210mm開本按照尺寸的大小,通常分三種類型:大型開本、
2016年11月10日,特朗普與奧巴馬在白宮會面,商討政權(quán)交接事宜。(資料
手上已經(jīng)有的東西,先不要放棄。一手拿住現(xiàn)有,另一手開始找更好的
6月23日,據(jù)港交所披露,永興東潤國際控股有限公司(以下簡稱:永興東
孟姑集鎮(zhèn)普法志愿者圍繞合同訂立與解除等相關(guān)法律法規(guī)進(jìn)行講解大眾網(wǎng)見
如今使用IT數(shù)碼設(shè)備的是越來越多了,那么IT數(shù)碼設(shè)備當(dāng)中是有很多小技巧
金投網(wǎng)提供建設(shè)銀行兔年金條價(jià)格今天多少一克(2023年06月25日),建設(shè)
文、圖 羊城晚報(bào)全媒體記者王俊偉通訊員長安宣在家門口品荔枝、逛公園
來源:新浪基金嘉實(shí)基金方晗管理的嘉實(shí)策略視野三年持有將于2024-12-28
一部中國汽車工業(yè)發(fā)展史,同時(shí)也是一部上汽大眾奮斗史。作為中國最早的
1、李白的生地今一般認(rèn)為是唐劍南道綿州(巴西郡)昌?。ê蟊苄谥M改
事業(yè)單位10年過渡期內(nèi)的退休中人養(yǎng)老金計(jì)算方式是什么?老方法5000元,
1、傳奇颶風(fēng)破的作用如下:颶風(fēng)破施放后能造成范圍內(nèi)的所有敵人受到致
大發(fā)地產(chǎn)公告稱,于2023年6月19日,本公司已接獲聯(lián)交所之函件,當(dāng)中載
6月25日是第33個(gè)全國土地日,今年的主題是“節(jié)約集約用地嚴(yán)守耕地紅線
想必現(xiàn)在有很多小伙伴對于仙俠世界升級攻略:[2]新手必備方面的知識都
1、最高攻速上限是2 5。2、攻擊速度就是指每秒能進(jìn)行幾次普通攻擊的快
為了進(jìn)一步搞好我隊(duì)信訪工作,強(qiáng)化信訪工作職責(zé),提高隊(duì)伍素質(zhì),不
以廣東為例,除了傳統(tǒng)電商大促外,粵港澳大灣區(qū)消費(fèi)季、國際消費(fèi)品博覽
全國人大法工委:無障礙環(huán)境建設(shè)法草案擬增加關(guān)于鼓勵編寫和出版盲文版
河南分?jǐn)?shù)線2023:點(diǎn)擊查看河南分?jǐn)?shù)線2022:點(diǎn)擊查看河南分?jǐn)?shù)線2021:點(diǎn)
加不了吧,正常的對戰(zhàn)圖有一整套的ai,自定義地圖不適用那個(gè)AI,就算能加
摘要:“我們的任務(wù)是調(diào)查死亡事件,并確定是否有什么導(dǎo)致他們死亡的因
“夏季炎熱,做好防暑降溫工作,預(yù)防熱射病發(fā)生”“左膝髕下脂肪墊損傷
據(jù)揚(yáng)州市住建局消息,自7月1日起,《關(guān)于促進(jìn)市區(qū)房地產(chǎn)市場平穩(wěn)健康發(fā)
1、綁定銀行卡就可以了。2、解除微信紅包異常方法:1 打開微信找到“我
磁閥出故障,會導(dǎo)致很多問題,比如變速箱換擋頓挫,打滑,入檔沖擊,無
1、libraryIEEE;useIEEE STD_LOGIC_1164 ALL;entity
金投網(wǎng)提供工商銀行好運(yùn)錦鯉金條50克價(jià)格今天多少一克(2023年06月25日
冷軋廠HRAPL機(jī)組電耗占工序變動成本的20%,降低電耗也就成了降低產(chǎn)線工
圣誕節(jié)將在今年早些時(shí)候迎來,一些少數(shù)人訂購了布加迪Divo,因?yàn)閯P龍(C
1、如果打算考城市規(guī)劃研究生的話,那么建議選擇像北京大學(xué)中的北京大
金投網(wǎng)提供工商銀行筑夢中華金條100克價(jià)格今天多少一克(2023年06月25
新京報(bào)貝殼財(cái)經(jīng)訊工信部近日印發(fā)《工業(yè)互聯(lián)網(wǎng)專項(xiàng)工作組2023年工作計(jì)劃
1、中國南玻集團(tuán)股份有限公司成立于一九八四年,為中外合資企業(yè)。2、一
1、《新聞傳播法教程(第三版)》是2010年7月1日中國人民大學(xué)出版社出
日前,游戲公司SE宣布將為HD-2D角色扮演游戲《歧路旅人》舉辦五周年紀(jì)
大發(fā)地產(chǎn):已接獲港交所復(fù)牌指引-大發(fā)地產(chǎn)公告稱,于2023年6月19日,本
6月21日,上汽榮威正式發(fā)布了全新榮威i5官圖。據(jù)了解,新車采用全新設(shè)
人民網(wǎng)曼谷6月24日電(記者趙益普)金邊消息:中國農(nóng)歷端午節(jié)期間,中
潮新聞客戶端記者朱冬艷6月24日,由杭州市文化廣電旅游局、杭州市上城
1、準(zhǔn)備工作:碳粉一瓶(20元左右)、斜口鉗、十字螺絲刀、一字螺絲刀
“這身新工作服真不錯,吸汗,穿上它下井干活方便還涼快!” “太
上交所中報(bào)預(yù)約時(shí)間出爐,康緣藥業(yè)拔得頭籌,將于7月13日率先披露,博
五險(xiǎn)一金 社保對于我們來說是很重要的,它能夠給我們的生活提供保險(xiǎn),
【突然猛漲!有人開車10多個(gè)小時(shí)連夜搶貨!網(wǎng)友懵了:比黃金還貴?】今
1、第一步,打開游戲,點(diǎn)擊右下角的背包。如下圖所示2、然后點(diǎn)擊道具位
大象新聞記者米方杰通訊員劉昂剛剛結(jié)束的端午假期,上街區(qū)航空科普研學(xué)
多家房企定增獲批,“第三支箭”釋放積極信號-5月29日,招商蛇口的定增
國家郵政局監(jiān)測數(shù)據(jù)顯示,截至6月24日,今年我國快遞業(yè)務(wù)量已達(dá)600億件
日前智電出行從外部獲悉,特斯拉旗下員工透露品牌旗下代號為“ProjectH
【來源:武漢發(fā)布】6月22日晚10時(shí)30分武漢五環(huán)體育中心演唱會結(jié)束歌迷
按照人社部工作部署和本市根治欠薪工作安排,6月25日至8月25日,北京市
1、川滇景天為景天屬山景天組長珠柄景天系的一種二年生草本植物。2、葉
紅網(wǎng)時(shí)刻張家界站6月23日訊(記者廖秋萍通訊員吳勇兵熊恩琴)2023年6月