本發(fā)明涉及數(shù)字音頻編解碼算法領(lǐng)域,具體說是一種編碼生成AAC文件的方法。尤指自動組幀編碼生成AAC文件的方法。
背景技術(shù):
在音頻處理過程中,很多種情況下需要把原始的PCM格式音頻文件(PCM就是WAV,一般情況下,一幀PCM是由2048次采樣組成的)編碼成AAC格式音頻文件(簡稱AAC文件),而在AAC編碼格式中要求一幀音頻數(shù)據(jù)必須有1024個sample(采樣點),如果是雙聲道的音頻數(shù)據(jù),那么一幀音頻數(shù)據(jù)必須有1024*2*2(4096)個字節(jié),如果編碼成AAC格式音頻文件過程中產(chǎn)生了小于一幀音頻數(shù)據(jù)的情況,例如一幀雙聲道的音頻數(shù)據(jù)小于4096個字節(jié),則編碼算法將丟棄該幀音頻數(shù)據(jù),這樣一來,在實際應(yīng)用中,每次傳給編碼算法的數(shù)據(jù)塊如果不能被4096整除,則將導(dǎo)致每編碼一個大小不能被4096整除的PCM數(shù)據(jù)塊,都將有小于一幀的PCM數(shù)據(jù)被丟棄,最終導(dǎo)致生成的AAC文件不完整,聽起來有雜音。具體情況有以下幾種:
情況1,大于4096字節(jié)的數(shù)據(jù)塊:編碼算法會將其分成若干個等于4096字節(jié)的數(shù)據(jù)塊進行編碼,將剩余的小于4096字節(jié)的數(shù)據(jù)塊丟棄掉;
情況2,小于4096字節(jié)的數(shù)據(jù)塊,編碼算法直接丟棄掉;
情況3,等于4096字節(jié)的數(shù)據(jù)塊,編碼算法直接編碼。
由于現(xiàn)有技術(shù)中編碼成AAC格式音頻文件時,通常只能預(yù)先定義4096個字節(jié)的空間,每次給編碼算法傳遞固定大小的一幀數(shù)據(jù),而實際應(yīng)用當(dāng)中很多情景下要處理的數(shù)據(jù)塊并非都是4096的整數(shù)倍,因此使用起來局限性非常大。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種編碼生成AAC文件的方法,在編碼生成AAC格式的音頻文件時,將每次送來的任意大小數(shù)據(jù)自動組成一幀,以防止數(shù)據(jù)丟失導(dǎo)致編碼后AAC文件有雜音。
為達到以上目的,本發(fā)明采取的技術(shù)方案是:
一種編碼生成AAC文件的方法,其特征在于,包括如下步驟:
步驟1,幀數(shù)據(jù)處理:按4096個字節(jié)的大小將待處理的原始數(shù)據(jù)分割成若干個4096個字節(jié)大小的標(biāo)準(zhǔn)數(shù)據(jù)塊,
將最后不足4096個字節(jié)大小的非標(biāo)數(shù)據(jù)塊保存起來;
步驟2,編碼處理:將標(biāo)準(zhǔn)數(shù)據(jù)塊發(fā)送給AAC編碼算法處理;
步驟3,當(dāng)新的待處理的原始數(shù)據(jù)到來時,將步驟1保存的非標(biāo)數(shù)據(jù)塊,拼接在新的待處理的原始數(shù)據(jù)的起始部分,并再次執(zhí)行步驟1、2;
以此類推,實現(xiàn)將整個任意大小的數(shù)據(jù)塊按一幀大小分批編碼成完整的AAC格式文件。
在上述技術(shù)方案的基礎(chǔ)上,步驟1中,將非標(biāo)數(shù)據(jù)塊保存在內(nèi)存中。
在上述技術(shù)方案的基礎(chǔ)上,步驟3中,當(dāng)沒有新的待處理的原始數(shù)據(jù)到來,則丟棄保存起來的非標(biāo)數(shù)據(jù)塊。
在上述技術(shù)方案的基礎(chǔ)上,待處理的原始數(shù)據(jù)為PCM數(shù)據(jù)時,PCM數(shù)據(jù)以任意大于4096字節(jié)的數(shù)據(jù)塊分批處理。
在上述技術(shù)方案的基礎(chǔ)上,任意大于4096字節(jié)的數(shù)據(jù)塊通過隨機算法生成。
本發(fā)明所述的編碼生成AAC文件的方法,在編碼生成AAC格式的音頻文件時,將每次送來的任意大小數(shù)據(jù)自動組成一幀,以防止數(shù)據(jù)丟失導(dǎo)致編碼后AAC文件有雜音。
附圖說明
本發(fā)明有如下附圖:
圖1本發(fā)明流程圖。
具體實施方式
以下結(jié)合附圖對本發(fā)明作進一步詳細說明。
本發(fā)明所述的編碼生成AAC文件的方法,不需要預(yù)先準(zhǔn)備固定大小的4096字節(jié)數(shù)據(jù),可以給AAC編碼算法(簡稱編碼算法)傳遞任意大小的數(shù)據(jù)塊,本發(fā)明通過自動將小于4096的數(shù)據(jù)塊(指小于4096字節(jié))和下一筆數(shù)據(jù)塊的開頭拼接為一幀數(shù)據(jù)傳給AAC編碼算法,從而解決了每筆都有小于一幀的數(shù)據(jù)丟失導(dǎo)致的最終編碼的AAC格式文件有雜音的問題。具體分為以下幾種情況:
1.數(shù)據(jù)塊大于4096且不能被4096整除:
將數(shù)據(jù)塊分割成若干個等于4096的數(shù)據(jù)塊進行編碼,剩余的小于4096的數(shù)據(jù)塊保存下來和下一次數(shù)據(jù)塊做拼接;如果沒有下一次數(shù)據(jù)塊則丟棄;
2.數(shù)據(jù)塊大于4096且能被4096整除:
將數(shù)據(jù)塊分割成若干個等于4096的數(shù)據(jù)塊進行編碼;
3.數(shù)據(jù)塊等于4096:
直接送給編碼算法進行編碼;
4.數(shù)據(jù)塊小于4096:
如果是最后一個數(shù)據(jù)塊,因為不夠一幀,編碼算法無法編碼返回數(shù)據(jù)太小的錯誤直接丟棄,否則和下一次數(shù)據(jù)塊做拼接。
本發(fā)明所述的編碼生成AAC文件的方法,如圖1所示,包括如下步驟:
步驟1,幀數(shù)據(jù)處理:按4096個字節(jié)的大小將待處理的原始數(shù)據(jù)分割成若干個4096個字節(jié)大小的標(biāo)準(zhǔn)數(shù)據(jù)塊,
將最后不足4096個字節(jié)大小的非標(biāo)數(shù)據(jù)塊保存起來;
步驟2,編碼處理:將標(biāo)準(zhǔn)數(shù)據(jù)塊發(fā)送給AAC編碼算法處理;
步驟3,當(dāng)新的待處理的原始數(shù)據(jù)到來時,將步驟1保存的非標(biāo)數(shù)據(jù)塊,拼接在新的待處理的原始數(shù)據(jù)的起始部分,并再次執(zhí)行步驟1、2;
以此類推,實現(xiàn)將整個任意大小的數(shù)據(jù)塊(PCM格式音頻文件)按一幀大小(4096個字節(jié)大小)分批編碼成完整的AAC格式文件。
在上述技術(shù)方案的基礎(chǔ)上,步驟1中,將非標(biāo)數(shù)據(jù)塊保存在內(nèi)存中。
在上述技術(shù)方案的基礎(chǔ)上,步驟3中,當(dāng)沒有新的待處理的原始數(shù)據(jù)到來,則丟棄保存起來的非標(biāo)數(shù)據(jù)塊。
本發(fā)明所述方法,可將需要編碼成AAC格式文件的PCM數(shù)據(jù)以任意大于4096字節(jié)的數(shù)據(jù)塊分批處理,自動組幀成若干個4096個字節(jié)大小的標(biāo)準(zhǔn)數(shù)據(jù)塊進行編碼AAC的工作,然后將完整的幀數(shù)據(jù)編碼成AAC文件。
以下為具體實施例。
在實現(xiàn)唱歌升降調(diào)功能中,將從服務(wù)器下載的AAC伴奏文件解碼成PCM數(shù)據(jù)后經(jīng)過升降調(diào)算法處理再與人聲進行混合最后編碼成AAC文件。該實例處理過程中總數(shù)據(jù)大小是任意的,每筆數(shù)據(jù)的大小也是任意的,當(dāng)整個解碼后的AAC文件全部處理完后算法就結(jié)束了。這個過程中每一筆數(shù)據(jù)絕大部分不是4096的倍數(shù),也就是說,每一筆數(shù)據(jù)經(jīng)過分割后總有小于一幀的數(shù)據(jù),但將這些數(shù)據(jù)傳給本發(fā)明所述算法處理,就會自動組幀避免數(shù)據(jù)被丟棄直至編碼成完整的AAC作品文件。
例如:總數(shù)據(jù)為11,010,048字節(jié),分為35筆數(shù)據(jù),每筆數(shù)據(jù)大小任意但是都大于4096字節(jié),任意大于4096字節(jié)的數(shù)據(jù)塊通過隨機算法生成。
以頭三筆數(shù)據(jù)為例:
第一筆數(shù)據(jù):9876個字節(jié),算法將數(shù)據(jù)分為三塊4096、4096和1684,將前兩塊數(shù)據(jù)直接編碼,將余下的1684字節(jié)保存在內(nèi)存中;
第二筆數(shù)據(jù):10000個字節(jié),將它分為2412、4096和3492,三塊數(shù)據(jù),2412和第一筆數(shù)據(jù)剩余的1684字節(jié)拼接成一幀,然后將它和后面的第二塊4096字節(jié)數(shù)據(jù)編碼,再將3492第三塊數(shù)據(jù)保存起來;
第三筆數(shù)據(jù):8192個字節(jié),將它分成604、4096和3492三塊數(shù)據(jù),604和上一筆剩余的3492拼成一幀和第二塊依次編碼,再將3492保存起來,
依此類推,逐步處理每一筆數(shù)據(jù),下面是最后兩筆的數(shù)據(jù)處理:
倒數(shù)第二筆數(shù)據(jù):23456字節(jié),分成若干塊,第一塊有可能和上一筆剩余數(shù)據(jù)拼接成一幀或者自成一幀,即這筆數(shù)據(jù)分成4096,4096,4096,4096,4096和2976字節(jié)六塊數(shù)據(jù),前五塊數(shù)據(jù)順序依次編碼,把2976保存起來;
最后一筆數(shù)據(jù):10066字節(jié),分成1120、4096、4096和754字節(jié),將1120和倒數(shù)第二筆剩余的2976拼成一幀,和后面的兩塊數(shù)據(jù)順序編碼,最后一塊數(shù)據(jù)754字節(jié)因為不足一幀,編碼算法將它丟棄掉。顯然本發(fā)明所述算法僅僅丟棄754字節(jié)的數(shù)據(jù),生成的AAC文件完整性好,損失數(shù)據(jù)小,沒有明顯雜音。
本說明書中未作詳細描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。