技術(shù)領(lǐng)域
本發(fā)明涉及音頻處理技術(shù)領(lǐng)域,特別是涉及一種基于OTT盒子的混音轉(zhuǎn)碼方法和裝置。
背景技術(shù):
用戶通過OTT(Over The Top,通過互聯(lián)網(wǎng)向用戶提供各種應用服務)盒子進行進行語音服務時輸出的多為PCM(Pulse Code Modulation,脈沖編碼調(diào)制)語音數(shù)據(jù),若直接保存成音頻文件,是無法被播放器進行播放的,所以須先實現(xiàn)數(shù)據(jù)編碼及壓縮,將其轉(zhuǎn)換成其它格式。而在進行格式轉(zhuǎn)換時,傳統(tǒng)的方法是建立編碼線程進行數(shù)據(jù)編碼,當編碼線程中有數(shù)據(jù)時則開始進行處理,編碼線程需不斷循環(huán)查看是否有數(shù)據(jù)需要進行處理,造成大量的系統(tǒng)消耗。
技術(shù)實現(xiàn)要素:
基于此,有必要針對音頻數(shù)據(jù)進行格式轉(zhuǎn)換時造成大量系統(tǒng)消耗的問題,提供一種基于OTT盒子的混音轉(zhuǎn)碼方法。
此外,還有必要針對音頻數(shù)據(jù)進行格式轉(zhuǎn)換時造成大量系統(tǒng)消耗的問題,提供一種基于OTT盒子的混音轉(zhuǎn)碼裝置。
一種基于OTT盒子的混音轉(zhuǎn)碼方法,包括以下步驟:
讀取原始音頻數(shù)據(jù)至第一緩沖區(qū);
從第一緩沖區(qū)讀取原始音頻數(shù)據(jù)并將所述原始音頻數(shù)據(jù)添加到第二緩沖區(qū);
判斷所述第一緩沖區(qū)中原始音頻數(shù)據(jù)是否達到預設(shè)幀數(shù);
若所述第一緩沖區(qū)中原始音頻數(shù)據(jù)達到預設(shè)幀數(shù),則從所述第一緩沖區(qū)中取出原始音頻數(shù)據(jù)進行轉(zhuǎn)碼,得到預設(shè)格式的音頻數(shù)據(jù);
將轉(zhuǎn)換成預設(shè)格式的音頻數(shù)據(jù)寫入預設(shè)格式文件中;
其中,所述第一緩沖區(qū)以及第二緩沖區(qū)的大小為所述預設(shè)幀數(shù)的整數(shù)倍。
在其中一個實施例中,在所述從第一緩沖區(qū)讀取原始音頻數(shù)據(jù)并將所述原始音頻數(shù)據(jù)添加到第二緩沖區(qū)的步驟之前,還包括:
通過音頻設(shè)備采集聲音信息;
對所述聲音信息進行處理得到原始音頻數(shù)據(jù);
將所述原始音頻數(shù)據(jù)存入所述第一緩沖區(qū)。
在其中一個實施例中,所述方法還包括以下步驟:
當所述音頻設(shè)備停止采集聲音信息時,將所述原始音頻數(shù)據(jù)的結(jié)尾信息寫入所述第二緩沖區(qū);以便轉(zhuǎn)碼完成時,將所述原始音頻數(shù)據(jù)的結(jié)尾信息編碼成預設(shè)格式;將所述編碼成預設(shè)格式的結(jié)尾信息寫入所述預設(shè)格式文件中。
在其中一個實施例中,所述原始音頻數(shù)據(jù)為原始的卡拉OK音頻數(shù)據(jù),所述預設(shè)格式為MP3格式,所述方法具體包括以下步驟:
調(diào)用讀取線程從第一緩沖區(qū)讀取原始的卡拉OK音頻數(shù)據(jù)并將所述原始的卡拉OK音頻數(shù)據(jù)添加到第二緩沖區(qū);
判斷所述第二緩沖區(qū)中的原始的卡拉OK音頻數(shù)據(jù)是否達到預設(shè)幀數(shù);
若所述第二緩沖區(qū)中原始的卡拉OK音頻數(shù)據(jù)達到預設(shè)幀數(shù),則調(diào)用編碼線程從所述第二緩沖區(qū)中取出預設(shè)幀數(shù)的原始的卡拉OK音頻數(shù)據(jù)編碼成MP3格式;
將轉(zhuǎn)換成MP3格式的錄音數(shù)據(jù)寫入MP3文件中。
一種基于OTT盒子的混音轉(zhuǎn)碼裝置,包括:
第一讀取模塊,用于讀取原始音頻數(shù)據(jù)至第一緩沖區(qū);
第二讀取模塊,用于從第一緩沖區(qū)讀取原始音頻數(shù)據(jù)并將所述原始音頻數(shù)據(jù)添加到第二緩沖區(qū)
判斷模塊,用于判斷所述第二緩沖區(qū)中原始音頻數(shù)據(jù)是否達到預設(shè)幀數(shù);
轉(zhuǎn)碼模塊,用于若所述第二緩沖區(qū)中原始音頻數(shù)據(jù)達到預設(shè)幀數(shù),則從所述第二緩沖區(qū)中取出原始音頻數(shù)據(jù)進行轉(zhuǎn)碼,得到預設(shè)格式的音頻數(shù)據(jù);
寫入模塊,用于將轉(zhuǎn)換成預設(shè)格式的音頻數(shù)據(jù)寫入預設(shè)格式文件中;
其中,所述第一緩沖區(qū)以及第二緩沖區(qū)的大小為所述預設(shè)幀數(shù)的整數(shù)倍。
在其中一個實施例中,所述裝置還包括:
采集模塊,用于通過音頻設(shè)備采集聲音信息;
處理模塊,用于對所述聲音信息進行處理得到原始音頻數(shù)據(jù);
存儲模塊,用于將所述原始音頻數(shù)據(jù)存入所述第一緩沖區(qū)。
在其中一個實施例中,所述讀取模塊還用于當所述音頻設(shè)備停止采集聲音信息時,將所述原始音頻數(shù)據(jù)的結(jié)尾信息寫入所述第二緩沖區(qū);
所述轉(zhuǎn)碼模塊還用于將所述原始音頻數(shù)據(jù)的結(jié)尾信息編碼成預設(shè)格式;
所述寫入模塊還用于將所述編碼成預設(shè)格式的結(jié)尾信息寫入所述預設(shè)格式文件中。
在其中一個實施例中,所述原始音頻數(shù)據(jù)為原始的卡拉OK音頻數(shù)據(jù),所述預設(shè)格式為MP3格式;
所述讀取模塊還用于調(diào)用讀取線程從第一緩沖區(qū)讀取原始的卡拉OK音頻數(shù)據(jù)并將所述原始的卡拉OK音頻數(shù)據(jù)添加到第二緩沖區(qū);
所述判斷模塊還用于判斷所述第二緩沖區(qū)中的原始的卡拉OK音頻數(shù)據(jù)是否達到預設(shè)幀數(shù);
所述轉(zhuǎn)碼模塊還用于若所述第二緩沖區(qū)中原始的卡拉OK音頻數(shù)據(jù)達到預設(shè)幀數(shù),則調(diào)用編碼線程從所述第二緩沖區(qū)中取出預設(shè)幀數(shù)的原始的卡拉OK音頻數(shù)據(jù)編碼成MP3格式;
所述寫入模塊還用于將轉(zhuǎn)換成MP3格式的音頻數(shù)據(jù)寫入MP3文件中。
上述基于OTT盒子的混音轉(zhuǎn)碼方法和裝置,只有當?shù)诙彌_區(qū)的數(shù)據(jù)達到預設(shè)幀數(shù)時才進行音頻數(shù)據(jù)的格式轉(zhuǎn)換,由音頻數(shù)據(jù)來通知進行轉(zhuǎn)碼工作,編碼線程無需不斷循環(huán)查看是否有數(shù)據(jù)需要進行處理,能大大地減少系統(tǒng)消耗。
附圖說明
圖1為一個實施例中基于OTT盒子的混音轉(zhuǎn)碼方法的流程示意圖;
圖2為一個實施例中轉(zhuǎn)換音頻數(shù)據(jù)的結(jié)尾信息的流程示意圖;
圖3為另一個實施例中基于OTT盒子的混音轉(zhuǎn)碼方法的流程示意圖;
圖4為一個實施例中基于OTT盒子的混音轉(zhuǎn)碼裝置的結(jié)構(gòu)示意圖;
圖5為另一個實施例中基于OTT盒子的混音轉(zhuǎn)碼裝置的結(jié)構(gòu)示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,一種基于OTT盒子的混音轉(zhuǎn)碼方法,包括以下步驟:
步驟S110,讀取原始音頻數(shù)據(jù)至第一緩沖區(qū);
具體的,第一緩沖區(qū)為操作系統(tǒng)中專門用于臨時存放原始音頻數(shù)據(jù)的緩沖區(qū)。
步驟S120,從第一緩沖區(qū)讀取原始音頻數(shù)據(jù)并將所述原始音頻數(shù)據(jù)添加到第二緩沖區(qū)。
具體的,原始音頻數(shù)據(jù)的數(shù)據(jù)包在第二緩沖區(qū)中以隊列的形式進行排列,先讀取的排在隊列前面,依次類推添加到第二緩沖區(qū)中。原始音頻數(shù)據(jù)為需要轉(zhuǎn)換成預設(shè)格式的音頻數(shù)據(jù),例如錄音數(shù)據(jù),其原始格式為PCM格式,需要轉(zhuǎn)換成MP3(Moving Picture Experts Group Audio Layer III,動態(tài)影像專家壓縮標準音頻層面3)、WAV(Windows Media Audio,Windows多媒體壓縮)等其它音頻格式,但不限于此。
可以根據(jù)預設(shè)幀數(shù)調(diào)整第一緩沖區(qū)大小,使第一緩沖區(qū)的大小為預設(shè)幀數(shù)的整數(shù)倍。
因當讀取線程從第二緩沖區(qū)讀取的原始音頻數(shù)據(jù)達到預設(shè)幀數(shù)時,即調(diào)用編碼線程從第二緩沖區(qū)中取出原始音頻數(shù)據(jù)進行編碼成預設(shè)格式,將第一緩沖區(qū)的大小調(diào)整為預設(shè)幀數(shù)的整數(shù)倍,可減少原始音頻數(shù)據(jù)的丟失。
步驟S130,判斷第二緩沖區(qū)中原始音頻數(shù)據(jù)是否達到預設(shè)幀數(shù),若是,則執(zhí)行步驟S140,若否,則執(zhí)行步驟S110。
具體的,可預先設(shè)置通知周期,以幀為單位,當讀取的原始音頻數(shù)據(jù)的數(shù)據(jù)包達到預設(shè)幀數(shù),即第二緩沖區(qū)中原始音頻數(shù)據(jù)達到預設(shè)幀數(shù)時,立即調(diào)用編碼線程進行轉(zhuǎn)碼,由讀取線程來通知編碼線程進行工作,該預設(shè)幀數(shù)可根據(jù)實際需求進行設(shè)置,例如100幀、200幀等。此外,通過建立讀取線程與編碼線程,將讀取線程與編碼線程分開,可避免發(fā)生線程阻塞。
步驟S140,從第二緩沖區(qū)中取出原始音頻數(shù)據(jù)進行轉(zhuǎn)碼,得到預設(shè)格式的音頻數(shù)據(jù)。
具體的,當讀取的原始音頻數(shù)據(jù)的數(shù)據(jù)包達到預設(shè)幀數(shù),讀取線程即通知編碼線程開始進行轉(zhuǎn)碼,調(diào)用編碼線程從第二緩沖區(qū)中取出原始音頻數(shù)據(jù),并將該原始音頻數(shù)據(jù)編碼成預設(shè)格式,可從第二緩沖區(qū)中取出預設(shè)幀數(shù)的原始音頻數(shù)據(jù),即取出第二緩沖區(qū)全部的原始音頻數(shù)據(jù),使得讀取的原始音頻數(shù)據(jù)的幀數(shù)等于編碼的原始音頻數(shù)據(jù),可減少原始音頻數(shù)據(jù)的丟失。在其它的實施例中,也可從第二緩沖區(qū)中取出部分的原始音頻數(shù)據(jù)進行編碼成預設(shè)格式,可在該部分的原始音頻數(shù)據(jù)編碼完成后,繼續(xù)取出部分的原始音頻數(shù)據(jù)進行編碼成預設(shè)格式。
步驟S150,將轉(zhuǎn)換成預設(shè)格式的音頻數(shù)據(jù)寫入預設(shè)格式文件中。
具體的,預設(shè)格式可為MP3、WAV、AAC(Advanced Audio Coding,高級音頻編碼)、AMR(Adaptive Multi-Rate,自適應多速率)等音頻格式中的一種,其中,MP3格式是大眾最常用的音頻格式,壓縮率較高且音質(zhì)較好;WAV格式一般用于保存Windows平臺的音頻信息資源,音質(zhì)高,但是壓縮率較小,文件比較大;AAC格式擁有更佳的音質(zhì),采用有損壓縮,且壓縮率高,文件小,但支持該格式的操作系統(tǒng)較少,例如IOS(蘋果公司的移動操作系統(tǒng))、Android(安卓)SDK(Software Development Kit,軟件開發(fā)包)4.1.2以上等支持播放;AMR格式的壓縮率較高,但其相對于其它音頻格式音質(zhì)較差,多用于人聲、通話等錄音數(shù)據(jù)的格式保存。在將原始音頻數(shù)據(jù)編碼成預設(shè)格式的同時,讀取線程一直在從第一緩沖區(qū)中讀取原始音頻數(shù)據(jù)并添加入第二緩沖區(qū),當?shù)诙彌_區(qū)的原始音頻數(shù)據(jù)又達到預設(shè)幀數(shù)時,再一次調(diào)用編碼線程取出第二緩沖區(qū)中全部的原始音頻數(shù)據(jù)進行編碼成預設(shè)格式,并將轉(zhuǎn)換成預設(shè)格式的音頻數(shù)據(jù)寫入預設(shè)格式文件中,直至無原始音頻數(shù)據(jù)可讀取為止。
上述基于OTT盒子的混音轉(zhuǎn)碼方法,只有當?shù)诙彌_區(qū)的數(shù)據(jù)達到預設(shè)幀數(shù)時才進行音頻數(shù)據(jù)的格式轉(zhuǎn)換,由音頻數(shù)據(jù)來通知進行轉(zhuǎn)碼工作,編碼線程無需不斷循環(huán)查看是否有數(shù)據(jù)需要進行處理,能大大地減少系統(tǒng)消耗。
在一個實施例中,所述第一緩沖區(qū)的大小大于或者等于第二緩沖區(qū)的大小。以保證第二緩沖區(qū)可以從第一緩沖區(qū)提取足夠的原始音頻數(shù)據(jù),進一步減少原始音頻數(shù)據(jù)的丟失。
在一個實施例中,在步驟從第一緩沖區(qū)讀取原始音頻數(shù)據(jù)并將原始音頻數(shù)據(jù)添加到第二緩沖區(qū)之前,還包括以下步驟:
(1)通過音頻設(shè)備采集聲音信息。
具體的,音頻設(shè)備可為麥克風、播放器等設(shè)備,聲音信息可包括人聲、背景聲、伴唱等,可通過麥克風采集人聲,播放器采集伴唱等聲音信息。
(2)對該聲音信息進行處理得到原始音頻數(shù)據(jù)。
具體的,將通過不同的音頻設(shè)備采集得到的人聲、伴唱等聲音信息進行融和處理,例如進行去噪、混音等處理,并得到原始音頻數(shù)據(jù)臨時存入第一緩沖區(qū)中。本實例中,可實現(xiàn)邊采集聲音信息邊進行音頻格式轉(zhuǎn)化,即當開始采集聲音信息時,開始調(diào)用讀取線程從第一緩沖區(qū)中讀取原始音頻數(shù)據(jù),當音頻設(shè)備暫停采集聲音信息時,讀取線程才不再繼續(xù)工作。邊采集聲音信息邊進行音頻格式轉(zhuǎn)化,可減少音頻格式轉(zhuǎn)化所需的等待時間。
在一個實施例中,步驟對該聲音信息進行處理得到原始音頻數(shù)據(jù),可包括以下步驟:
(1)將伴唱數(shù)據(jù)轉(zhuǎn)化為與人聲數(shù)據(jù)相同的音頻格式。
具體的,通過麥克風采集到的人聲數(shù)據(jù)一般可輸出為最原始的PCM語音格式,可對伴唱數(shù)據(jù)進行解碼,并把伴唱數(shù)據(jù)也化成與人聲數(shù)據(jù)相同的PCM語音格式,即可進行混音操作。
(2)讀取相同幀數(shù)的人聲數(shù)據(jù)及伴唱數(shù)據(jù)進行混音操作。
具體的,可先設(shè)置人聲緩沖區(qū)及伴唱緩沖區(qū),然后將通過不同的音頻設(shè)備采集到的人聲數(shù)據(jù)及轉(zhuǎn)化格式后的伴唱數(shù)據(jù)分別存儲在人聲緩沖區(qū)中及伴唱緩沖區(qū)中。每次可讀取相同大小的人聲數(shù)據(jù)及伴唱數(shù)據(jù)進行混音操作,可保證獲取的人聲數(shù)據(jù)及伴唱數(shù)據(jù)基本同步。因人聲數(shù)據(jù)與伴唱數(shù)據(jù)的語音格式一致,均為PCM語音格式,故可將讀取的人聲數(shù)據(jù)及伴唱數(shù)據(jù)進行疊加,并對疊加后的數(shù)據(jù)進行修復,保證進行混音操作后得到的原始音頻數(shù)據(jù)的音質(zhì)效果。人聲數(shù)據(jù)與伴唱數(shù)據(jù)的樣本大小是固定的,例如可為short16位字節(jié),在進行疊加后,數(shù)據(jù)容易溢出,故可拓寬樣本大小,例如直接拓寬為int32字節(jié),保證疊加后的數(shù)據(jù)大小不會溢出。還可設(shè)置衰減因子,降低疊加后的數(shù)據(jù)的振幅大小,使疊加后的數(shù)據(jù)能落回16位所能表示的范圍內(nèi)。當人聲數(shù)據(jù)及伴唱數(shù)據(jù)疊加后的數(shù)據(jù)大小溢出時,衰減因子較小,可使得溢出的數(shù)據(jù)在衰減后能夠處于臨界值以內(nèi),而在疊加后的數(shù)據(jù)大小沒有溢出時,可讓衰減因子慢慢增大,使數(shù)據(jù)較為平緩的變化。人聲數(shù)據(jù)及伴唱數(shù)據(jù)進行混音操作完成后即獲得原始音頻數(shù)據(jù),可將原始音頻數(shù)據(jù)存入第一緩沖區(qū)中,以便進行后續(xù)的格式轉(zhuǎn)化操作。
(3)將原始音頻數(shù)據(jù)存入第一緩沖區(qū)。
在進一步的實施例中,在步驟通過音頻設(shè)備采集聲音信息之前,還可包括步驟:初始化音頻信息對象。
具體的,音頻信息對象可包括輸入采樣頻率、輸出采樣頻率、輸入采樣位數(shù)、聲道數(shù)、音頻質(zhì)量等中的一種或多種??筛鶕?jù)實際需求,預先初始化設(shè)置上述音頻信息對象,方便后續(xù)音頻數(shù)據(jù)的格式轉(zhuǎn)化及進行音頻文件保存。
在一個實施例中,上述基于OTT盒子的混音轉(zhuǎn)碼方法還包括步驟:同步計算原始音頻數(shù)據(jù)的音量大小。
具體的,原始音頻數(shù)據(jù)的音量大小可根據(jù)輸入采樣頻率、輸入采樣位數(shù)、聲道數(shù)等音頻信息進行計算,可預先設(shè)置計算公式,例如采用數(shù)據(jù)量(字節(jié)/秒)=(輸入采樣頻率(Hz,赫茲)*輸入采樣位數(shù)(bit,比特)*輸入聲道數(shù))/8的公式進行計算,其中單聲道的聲道數(shù)為1,立體聲的聲道數(shù)為2。在其它的實施例中,也可使用其它的音量計算公式進行計算。
上述基于OTT盒子的混音轉(zhuǎn)碼方法,只有當?shù)诙彌_區(qū)的數(shù)據(jù)達到預設(shè)幀數(shù)時才進行音頻數(shù)據(jù)的格式轉(zhuǎn)換,由音頻數(shù)據(jù)來通知進行轉(zhuǎn)碼工作,編碼線程無需不斷循環(huán)查看是否有數(shù)據(jù)需要進行處理,能大大地減少系統(tǒng)消耗。
如圖2所示,在一個實施例中,上述基于OTT盒子的混音轉(zhuǎn)碼方法還包括以下步驟:
步驟S210,當音頻設(shè)備停止采集聲音信息時,將原始音頻數(shù)據(jù)的結(jié)尾信息寫入第二緩沖區(qū)。
具體的,當音頻設(shè)備停止采集聲音信息時,則讀取線程停止從第一緩沖區(qū)中讀取原始音頻數(shù)據(jù),并將原始音頻數(shù)據(jù)的結(jié)尾信息寫入第二緩沖區(qū)。結(jié)尾信息可包括原始音頻數(shù)據(jù)的總數(shù)據(jù)幀數(shù)、音頻時間、聲道數(shù)、音頻質(zhì)量等信息中的一種或多種。
步驟S220,將原始音頻數(shù)據(jù)的結(jié)尾信息編碼成預設(shè)格式。
具體的,編碼線程將該原始音頻數(shù)據(jù)的結(jié)尾信息編碼成預設(shè)格式,并寫入預設(shè)格式文件中,即表示完成音頻數(shù)據(jù)的格式轉(zhuǎn)換工作。
步驟S230,將編碼成預設(shè)格式的結(jié)尾信息寫入預設(shè)格式文件中。
上述基于OTT盒子的混音轉(zhuǎn)碼方法,只有當?shù)诙彌_區(qū)的數(shù)據(jù)達到預設(shè)幀數(shù)時才進行音頻數(shù)據(jù)的格式轉(zhuǎn)換,由音頻數(shù)據(jù)來通知進行轉(zhuǎn)碼工作,編碼線程無需不斷循環(huán)查看是否有數(shù)據(jù)需要進行處理,能大大地減少系統(tǒng)消耗。
如圖3所示,在一個實施例中,一種基于OTT盒子的混音轉(zhuǎn)碼方法,原始音頻數(shù)據(jù)可為原始的卡拉OK音頻數(shù)據(jù),預設(shè)格式可為MP3,包括以下步驟:
步驟S310,調(diào)用讀取線程從第一緩沖區(qū)讀取原始的卡拉OK音頻數(shù)據(jù)并將原始的卡拉OK音頻數(shù)據(jù)添加到第二緩沖區(qū)。
步驟S320,判斷第二緩沖區(qū)中的原始的卡拉OK音頻數(shù)據(jù)是否達到預設(shè)幀數(shù),若是,則執(zhí)行步驟S330,若否,則執(zhí)行步驟S310。
具體的,當讀取的原始的卡拉OK音頻數(shù)據(jù)的數(shù)據(jù)包達到預設(shè)幀數(shù),即第二緩沖區(qū)中原始的卡拉OK音頻數(shù)據(jù)達到預設(shè)幀數(shù)時,立即調(diào)用編碼線程進行編碼成MP3格式,由讀取線程來通知編碼線程進行工作。
步驟S330,調(diào)用編碼線程從第二緩沖區(qū)中取出預設(shè)幀數(shù)的原始的卡拉OK音頻數(shù)據(jù)編碼成MP3格式。
具體的,可從第二緩沖區(qū)中取出預設(shè)幀數(shù)的原始的卡拉OK音頻數(shù)據(jù),即取出第二緩沖區(qū)全部的原始的卡拉OK音頻數(shù)據(jù)編碼成MP3格式,使得讀取的原始的卡拉OK音頻數(shù)據(jù)的幀數(shù)等于編碼的原始的卡拉OK音頻數(shù)據(jù),可減少原始的卡拉OK音頻數(shù)據(jù)的丟失。編碼成MP3格式后,可將轉(zhuǎn)換成MP3格式的錄音數(shù)據(jù)寫入MP3文件中。
步驟S340,將轉(zhuǎn)換成MP3格式的錄音數(shù)據(jù)寫入MP3文件中。
上述基于OTT盒子的混音轉(zhuǎn)碼方法,只有當?shù)诙彌_區(qū)的數(shù)據(jù)達到預設(shè)幀數(shù)時才將第二緩沖區(qū)中的原始的卡拉OK音頻數(shù)據(jù)編碼成MP3格式,由讀取線程來通知編碼線程進行轉(zhuǎn)碼工作,編碼線程無需不斷循環(huán)查看是否有數(shù)據(jù)需要進行處理,能大大地減少系統(tǒng)消耗。
如圖4所示,一種基于OTT盒子的混音轉(zhuǎn)碼裝置,包括第一讀取模塊410、第二讀取模塊411、判斷模塊420、轉(zhuǎn)碼模塊430和寫入模塊440。
第一讀取模塊410,用于讀取原始音頻數(shù)據(jù)至第一緩沖區(qū);
第二讀取模塊411,用于從第一緩沖區(qū)讀取原始音頻數(shù)據(jù)并將所述原始音頻數(shù)據(jù)添加到第二緩沖區(qū);其中,所述第一緩沖區(qū)以及第二緩沖區(qū)的大小為預設(shè)幀數(shù)的整數(shù)倍。
具體的,可調(diào)用讀取線程從第一緩沖區(qū)讀取原始音頻數(shù)據(jù)并將原始音頻數(shù)據(jù)添加到第二緩沖區(qū)。第一緩沖區(qū)、第二緩沖區(qū)可為用戶自行設(shè)置的緩沖區(qū),大小可根據(jù)實際情況進行設(shè)定,原始音頻數(shù)據(jù)的數(shù)據(jù)包在第二緩沖區(qū)中以隊列的形式進行排列,先讀取的排在隊列前面,依次類推添加到第二緩沖區(qū)中。原始音頻數(shù)據(jù)為需要轉(zhuǎn)換成預設(shè)格式的音頻數(shù)據(jù),例如錄音數(shù)據(jù),其原始格式為PCM格式,需要轉(zhuǎn)換成MP3、WAV等其它音頻格式,但不限于此。
判斷模塊420,用于判斷第二緩沖區(qū)中原始音頻數(shù)據(jù)是否達到預設(shè)幀數(shù)。
具體的,可預先設(shè)置通知周期,以幀為單位,當讀取的原始音頻數(shù)據(jù)的數(shù)據(jù)包達到預設(shè)幀數(shù),即第二緩沖區(qū)中原始音頻數(shù)據(jù)達到預設(shè)幀數(shù)時,立即調(diào)用編碼線程進行轉(zhuǎn)碼,由讀取線程來通知編碼線程進行工作,該預設(shè)幀數(shù)可根據(jù)實際需求進行設(shè)置,例如100幀、200幀等。此外,通過建立讀取線程與編碼線程,將讀取線程與編碼線程分開,可避免發(fā)生線程阻塞。
轉(zhuǎn)碼模塊430,用于若第二緩沖區(qū)中原始音頻數(shù)據(jù)達到預設(shè)幀數(shù),則從所述第二緩沖區(qū)中取出部分原始音頻數(shù)據(jù)進行轉(zhuǎn)碼,得到預設(shè)格式的音頻數(shù)據(jù)。
具體的,當讀取的原始音頻數(shù)據(jù)的數(shù)據(jù)包達到預設(shè)幀數(shù),讀取線程即通知編碼線程開始進行轉(zhuǎn)碼,調(diào)用編碼線程從第二緩沖區(qū)中取出原始音頻數(shù)據(jù),并將該原始音頻數(shù)據(jù)編碼成預設(shè)格式,可從第二緩沖區(qū)中取出預設(shè)幀數(shù)的原始音頻數(shù)據(jù),即取出第二緩沖區(qū)全部的原始音頻數(shù)據(jù),使得讀取的原始音頻數(shù)據(jù)的幀數(shù)等于編碼的原始音頻數(shù)據(jù),可減少原始音頻數(shù)據(jù)的丟失。在其它的實施例中,也可從第二緩沖區(qū)中取出部分的原始音頻數(shù)據(jù)進行編碼成預設(shè)格式,可在該部分的原始音頻數(shù)據(jù)編碼完成后,繼續(xù)取出部分的原始音頻數(shù)據(jù)進行編碼成預設(shè)格式。
寫入模塊440,用于將轉(zhuǎn)換成預設(shè)格式的音頻數(shù)據(jù)寫入預設(shè)格式文件中。
具體的,預設(shè)格式可為MP3、WAV、AAC、AMR等音頻格式中的一種,其中,MP3格式是大眾最常用的音頻格式,壓縮率較高且音質(zhì)較好;WAV格式一般用于保存Windows平臺的音頻信息資源,音質(zhì)高,但是壓縮率較小,文件比較大;AAC格式擁有更佳的音質(zhì),采用有損壓縮,且壓縮率高,文件小,但支持該格式的操作系統(tǒng)較少,例如IOS、Android SDK4.1.2以上等支持播放;AMR格式的壓縮率較高,但其相對于其它音頻格式音質(zhì)較差,多用于人聲、通話等錄音數(shù)據(jù)的格式保存。在將原始音頻數(shù)據(jù)編碼成預設(shè)格式的同時,讀取線程一直在讀取原始音頻數(shù)據(jù)并添加入第二緩沖區(qū),當?shù)诙彌_區(qū)的原始音頻數(shù)據(jù)又達到預設(shè)幀數(shù)時,再一次調(diào)用編碼線程取出第二緩沖區(qū)中全部的原始音頻數(shù)據(jù)進行編碼成預設(shè)格式,并將轉(zhuǎn)換成預設(shè)格式的音頻數(shù)據(jù)寫入預設(shè)格式文件中,直至無原始音頻數(shù)據(jù)可讀取為止。
上述基于OTT盒子的混音轉(zhuǎn)碼裝置,只有當?shù)诙彌_區(qū)的數(shù)據(jù)達到預設(shè)幀數(shù)時才進行音頻數(shù)據(jù)的格式轉(zhuǎn)換,由音頻數(shù)據(jù)來通知進行轉(zhuǎn)碼工作,編碼線程無需不斷循環(huán)查看是否有數(shù)據(jù)需要進行處理,能大大地減少系統(tǒng)消耗。
如圖5所示,在一個實施例中,上述基于OTT盒子的混音轉(zhuǎn)碼裝置,除了包括讀取模塊410、判斷模塊420、轉(zhuǎn)碼模塊430和寫入模塊440,還包括采集模塊460、處理模塊470和存儲模塊480。
因當讀取線程從第二緩沖區(qū)讀取的原始音頻數(shù)據(jù)達到預設(shè)幀數(shù)時,即調(diào)用編碼線程從第二緩沖區(qū)中取出原始音頻數(shù)據(jù)進行編碼成預設(shè)格式,將第一緩沖區(qū)的大小調(diào)整為預設(shè)幀數(shù)的整數(shù)倍,可減少原始音頻數(shù)據(jù)的丟失。
采集模塊460,用于通過音頻設(shè)備采集聲音信息。
具體的,音頻設(shè)備可為麥克風、播放器等設(shè)備,聲音信息可包括人聲、背景聲、伴唱等,可通過麥克風采集人聲,播放器采集伴唱等聲音信息。
處理模塊470,用于對該聲音信息進行處理得到原始音頻數(shù)據(jù)。
具體的,將通過不同的音頻設(shè)備采集得到的人聲、伴唱等聲音信息進行融和處理,例如進行去噪、混音等處理,并得到原始音頻數(shù)據(jù)臨時存入第一緩沖區(qū)中。本實例中,可實現(xiàn)邊采集聲音信息邊進行音頻格式轉(zhuǎn)化,即當開始采集聲音信息時,開始調(diào)用讀取線程從第一緩沖區(qū)中讀取原始音頻數(shù)據(jù),當音頻設(shè)備暫停采集聲音信息時,讀取線程才不再繼續(xù)工作。邊采集聲音信息邊進行音頻格式轉(zhuǎn)化,可減少音頻格式轉(zhuǎn)化所需的等待時間。
存儲模塊480,用于將原始音頻數(shù)據(jù)存入第一緩沖區(qū)。
在一個實施例中,所述第一緩沖區(qū)的大小大于或者等于第二緩沖區(qū)的大小。以保證第二緩沖區(qū)可以從第一緩沖區(qū)提取足夠的原始音頻數(shù)據(jù),進一步減少原始音頻數(shù)據(jù)的丟失。
在一個實施例中,上述基于OTT盒子的混音轉(zhuǎn)碼裝置還包括初始化模塊、計算模塊。
初始化模塊,用于初始化音頻信息對象。
具體的,音頻信息對象可包括輸入采樣頻率、輸出采樣頻率、輸入采樣位數(shù)、聲道數(shù)、音頻質(zhì)量等中的一種或多種。可根據(jù)實際需求,預先初始化設(shè)置上述音頻信息對象,方便后續(xù)音頻數(shù)據(jù)的格式轉(zhuǎn)化及進行音頻文件保存。
計算模塊,用于同步計算原始音頻數(shù)據(jù)的音量大小。
具體的,原始音頻數(shù)據(jù)的音量大小可根據(jù)輸入采樣頻率、輸入采樣位數(shù)、聲道數(shù)等音頻信息進行計算,可預先設(shè)置計算公式,例如采用數(shù)據(jù)量(字節(jié)/秒)=(輸入采樣頻率(Hz)*輸入采樣位數(shù)(bit)*輸入聲道數(shù))/8的公式進行計算,其中單聲道的聲道數(shù)為1,立體聲的聲道數(shù)為2。在其它的實施例中,也可使用其它的音量計算公式進行計算。
上述基于OTT盒子的混音轉(zhuǎn)碼裝置,只有當?shù)诙彌_區(qū)的數(shù)據(jù)達到預設(shè)幀數(shù)時才進行音頻數(shù)據(jù)的格式轉(zhuǎn)換,由音頻數(shù)據(jù)來通知進行轉(zhuǎn)碼工作,編碼線程無需不斷循環(huán)查看是否有數(shù)據(jù)需要進行處理,能大大地減少系統(tǒng)消耗。
在一個實施例中,上述基于OTT盒子的混音轉(zhuǎn)碼裝置,讀取模塊410還用于當音頻設(shè)備停止采集聲音信息時,將所述原始音頻數(shù)據(jù)的結(jié)尾信息寫入第二緩沖區(qū)。
具體的,當音頻設(shè)備停止采集聲音信息時,則讀取線程停止從第一緩沖區(qū)中讀取原始音頻數(shù)據(jù),并將原始音頻數(shù)據(jù)的結(jié)尾信息寫入第二緩沖區(qū)。結(jié)尾信息可包括原始音頻數(shù)據(jù)的總數(shù)據(jù)幀數(shù)、音頻時間、聲道數(shù)、音頻質(zhì)量等信息中的一種或多種。
轉(zhuǎn)碼模塊430還用于將原始音頻數(shù)據(jù)的結(jié)尾信息編碼成預設(shè)格式。
具體的,編碼線程將該原始音頻數(shù)據(jù)的結(jié)尾信息編碼成預設(shè)格式,并寫入預設(shè)格式文件中,即表示完成音頻數(shù)據(jù)的格式轉(zhuǎn)換工作。
寫入模塊440還用于將編碼成預設(shè)格式的結(jié)尾信息寫入預設(shè)格式文件中。
上述基于OTT盒子的混音轉(zhuǎn)碼裝置,只有當?shù)诙彌_區(qū)的數(shù)據(jù)達到預設(shè)幀數(shù)時才進行音頻數(shù)據(jù)的格式轉(zhuǎn)換,由音頻數(shù)據(jù)來通知進行轉(zhuǎn)碼工作,編碼線程無需不斷循環(huán)查看是否有數(shù)據(jù)需要進行處理,能大大地減少系統(tǒng)消耗。
在另一個實施例中,在上述基于OTT盒子的混音轉(zhuǎn)碼裝置中,原始音頻數(shù)據(jù)可為原始的卡拉OK音頻數(shù)據(jù),預設(shè)格式可為MP3格式。
讀取模塊410還用于調(diào)用讀取線程讀取原始的卡拉OK音頻數(shù)據(jù)并將原始的卡拉OK音頻數(shù)據(jù)添加到第二緩沖區(qū)。
具體的,可調(diào)用讀取線程從第一緩沖區(qū)中讀取原始的卡拉OK音頻數(shù)據(jù),其中,可通過音頻設(shè)備采集聲音信息并進行處理獲得原始的卡拉OK音頻數(shù)據(jù),并臨時存儲在第一緩沖區(qū)中。
判斷模塊420還用于判斷第二緩沖區(qū)中的原始的卡拉OK音頻數(shù)據(jù)是否達到預設(shè)幀數(shù)。
具體的,當讀取的原始的卡拉OK音頻數(shù)據(jù)的數(shù)據(jù)包達到預設(shè)幀數(shù),即第二緩沖區(qū)中原始的卡拉OK音頻數(shù)據(jù)達到預設(shè)幀數(shù)時,立即調(diào)用編碼線程進行編碼成MP3格式,由讀取線程來通知編碼線程進行工作。
轉(zhuǎn)碼模塊430還用于若第二緩沖區(qū)中原始的卡拉OK音頻數(shù)據(jù)達到預設(shè)幀數(shù),則調(diào)用編碼線程從第二緩沖區(qū)中取出預設(shè)幀數(shù)的原始的卡拉OK音頻數(shù)據(jù)進行MP3編碼。
具體的,可從第二緩沖區(qū)中取出預設(shè)幀數(shù)的原始的卡拉OK音頻數(shù)據(jù),即取出第二緩沖區(qū)全部的原始的卡拉OK音頻數(shù)據(jù)編碼成MP3格式,使得讀取的原始的卡拉OK音頻數(shù)據(jù)的幀數(shù)等于編碼的原始的卡拉OK音頻數(shù)據(jù),可減少原始的卡拉OK音頻數(shù)據(jù)的丟失。編碼成MP3格式后,可將轉(zhuǎn)換成MP3格式的錄音數(shù)據(jù)寫入MP3文件中。
寫入模塊440還用于將轉(zhuǎn)換成MP3格式的音頻數(shù)據(jù)寫入MP3文件中。
上述基于OTT盒子的混音轉(zhuǎn)碼裝置,只有當?shù)诙彌_區(qū)的數(shù)據(jù)達到預設(shè)幀數(shù)時才將第二緩沖區(qū)中的原始的卡拉OK音頻數(shù)據(jù)編碼成MP3格式,由讀取線程來通知編碼線程進行轉(zhuǎn)碼工作,編碼線程無需不斷循環(huán)查看是否有數(shù)據(jù)需要進行處理,能大大地減少系統(tǒng)消耗。
以上所述實施例的各技術(shù)特征可以進行任意的組合,為使描述簡潔,未對上述實施例中的各個技術(shù)特征所有可能的組合都進行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應當認為是本說明書記載的范圍。
以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對發(fā)明專利范圍的限制。應當指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應以所附權(quán)利要求為準。