播放音頻文件的電子設(shè)備與方法
【專利摘要】本發(fā)明提供一種播放音頻文件的電子設(shè)備,該電子設(shè)備安裝有Android系統(tǒng),包括接收單元、檢測單元、判斷單元、音頻解碼單元以及播放控制單元。檢測單元獲取接收單元接收的請求播放的音頻流的采樣率和采樣精度,當(dāng)判斷單元確定該采樣率和采樣精度不是預(yù)設(shè)的采樣率和采樣精度時(shí)音頻解碼單元對該音頻流進(jìn)行解碼并將該解碼信息調(diào)整為符合預(yù)設(shè)傳輸格式的解碼信息。播放控制單元根據(jù)經(jīng)過調(diào)整的解碼信息按照第一播放方式播放該音頻流。本發(fā)明還提供一種播放音頻文件的方法,利用本發(fā)明,使得該電子設(shè)備在播放不同于預(yù)設(shè)采樣率的音頻文件時(shí)能夠還原出真實(shí)效果,從而提高Android設(shè)備音頻文件播放質(zhì)量。
【專利說明】播放音頻文件的電子設(shè)備與方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及智能電子設(shè)備操作系統(tǒng)中音頻文件的播放,尤其涉及一種播放音頻文件的電子設(shè)備與方法。
【背景技術(shù)】
[0002]現(xiàn)有的Android系統(tǒng)支持所有的采樣率和采樣位數(shù)的音頻文件的播放,播放聲音使用的是44.1KHz作為默認(rèn)的采樣率。但是,對于非44.lKHz/16bit的其它采樣率的音頻文件需要進(jìn)行重采樣算法以達(dá)到44.lKHz/16bit。通常利用重采樣算法進(jìn)行采樣頻率轉(zhuǎn)換會有較大的噪聲和諧波失真出現(xiàn),因而在Android系統(tǒng)中就會導(dǎo)致高品質(zhì)音頻文件的播放無法達(dá)到應(yīng)有效果。
【發(fā)明內(nèi)容】
[0003]本發(fā)明實(shí)施例所要解決的技術(shù)問題在于,提供一種播放音頻文件的電子設(shè)備和方法,能夠提高Android設(shè)備音頻文件播放質(zhì)量。
[0004]為解決上述技術(shù)問題,本發(fā)明提供一種播放音頻文件的電子設(shè)備,該電子設(shè)備安裝有Android系統(tǒng),包括:
[0005]接收單元,用于接收播放一類型音頻流的請求。
[0006]檢測單元,用于獲取該播放一類型音頻流請求中該音頻流的采樣率和采樣精度。
[0007]判斷單元,用于判斷該檢測單元獲取的采樣率和采樣精度是否為預(yù)設(shè)的采樣率和采樣精度。
[0008]音頻解碼單元,用于當(dāng)該判斷單元確定該采樣精度不是該預(yù)設(shè)采樣精度時(shí)根據(jù)該獲取的采樣精度對該音頻流進(jìn)行解碼并將該解碼信息調(diào)整為符合預(yù)設(shè)傳輸格式的解碼信息。以及
[0009]播放控制單元,用于根據(jù)經(jīng)過該音頻解碼單元調(diào)整的解碼信息按照第一播放方式播放該經(jīng)過解碼的音頻流。
[0010]進(jìn)一步地,本發(fā)明還提供一種播放音頻文件的方法,該方法應(yīng)用于Android系統(tǒng),該方法包括:
[0011]接收到播放某一類型音頻流的請求。
[0012]獲取該播放某一類型音頻流請求中該音頻流的采樣率和采樣精度,并判斷該采樣率和采樣精度是否為預(yù)設(shè)的采樣率和采樣精度。
[0013]當(dāng)確定該采樣率和采樣精度不是該預(yù)設(shè)的采樣率和采樣精度時(shí)根據(jù)該獲取的采樣精度對該音頻流進(jìn)行解碼并將該解碼信息調(diào)整為符合預(yù)設(shè)傳輸格式的解碼信息。以及
[0014]根據(jù)該經(jīng)過調(diào)整的解碼信息按照第一播放方式播放該經(jīng)過解碼的音頻流。
[0015]本發(fā)明提供的一種播放音頻文件的電子設(shè)備和方法,當(dāng)請求播放的音頻文件的采樣率和采樣精度為非預(yù)設(shè)采樣率和采樣精度時(shí)將該音頻文件進(jìn)行解碼以調(diào)整為符合預(yù)設(shè)傳輸格式的解碼信息,并將經(jīng)過解碼的音頻文件按照第一播放方式進(jìn)行播放,使得該電子設(shè)備在播放不同于預(yù)設(shè)采樣率的音頻文件時(shí)能夠還原出真實(shí)效果,從而提高Android設(shè)備音頻文件播放質(zhì)量。
【專利附圖】
【附圖說明】
[0016]圖1為本發(fā)明實(shí)施方式中的播放音頻文件的電子設(shè)備的功能模塊示意圖;
[0017]圖2為本發(fā)明實(shí)施方式中的播放音頻文件的方法流程圖。
[0018]標(biāo)號說明:
[0019]電子設(shè)備10
[0020]接收單元11
[0021]檢測單元12
[0022]判斷單元13
[0023]音頻解碼單元14
[0024]播放控制單元15
【具體實(shí)施方式】
[0025]為詳細(xì)說明本發(fā)明的技術(shù)內(nèi)容、構(gòu)造特征、所實(shí)現(xiàn)目的及效果,以下結(jié)合實(shí)施方式并配合附圖詳予說明。
[0026]請參考圖1,為本發(fā)明實(shí)施方式中的播放音頻文件的電子設(shè)備的功能模塊示意圖,該電子設(shè)備10裝載有Android操作系統(tǒng)并用于實(shí)現(xiàn)用戶的基本操作以及音頻文件的播放,,該電子設(shè)備10可以是手機(jī)、平板電腦、個(gè)人數(shù)字助理等智能移動設(shè)備。該電子設(shè)備10包括接收單元U、檢測單元12、判斷單元13、音頻解碼單元14以及播放控制單元15。
[0027]該接收單元11用于接收播放某一類型音頻流的請求,Android系統(tǒng)中將音頻數(shù)據(jù)流分為以下 10 種類型:V0ICE_CALL、SYSTEM、RING、MUSIC、ALARM、NOTIFICATION、BLUST00TH_SC0、ENF0RCED_AUDIBLE、DTMF, TTS0每個(gè)音頻流的創(chuàng)建都被設(shè)置了音頻流類型屬性,而高品質(zhì)音頻的播放,如音樂、電影等都是以Music類型進(jìn)行播放的。本發(fā)明實(shí)施方式中提及的持續(xù)音頻流的類型包括但不限于V0ICE_CALL、SYSTEM、RING、MUSIC、ALARM、NOTIFICATION、BLUST00TH_SC0、ENF0RCED_AUDIBLE、DTMF, TTS。該音頻流可以是 Android設(shè)備中供播放的音頻文件,例如wav、mp3、ape、f Iac等音頻流,也可以是視頻文件中帶有的音頻流。
[0028]該檢測單元12用于獲取該播放某一類型音頻流請求中該類型音頻流的采樣率和采樣精度,該判斷單元13用于判斷本次播放請求的該類型音頻流文件采樣率和采樣精度是否為預(yù)設(shè)的采樣率和采樣精度,在本實(shí)施方式中,該預(yù)設(shè)的采樣率為48KHz或44.1KHz,該預(yù)設(shè)的采樣精度為16bit。若是,則沿用上一次采樣率和采樣精度進(jìn)行音頻流的播放。若否,則該音頻解碼單元14根據(jù)該檢測單元12獲取的采樣精度對該音頻流進(jìn)行解碼并將該解碼信息調(diào)整為符合預(yù)設(shè)傳輸格式的解碼信息。具體地,該音頻解碼單元14相應(yīng)地修改AudioSource類中的read函數(shù)以將read函數(shù)讀取該音頻流而產(chǎn)生的buffer (緩存)格式的信息調(diào)整為符合Android系統(tǒng)I2S傳輸格式。Android系統(tǒng)中音頻的播放過程一般通過I2S和A2DP兩種傳輸方式完成。其中,I2S是用于AP(應(yīng)用處理器,即移動終端的處理器芯片)與codec (Coder-Decoder,編碼-解碼器)之間音頻傳輸?shù)囊环N協(xié)議,A2DP為藍(lán)牙傳輸音頻數(shù)據(jù)的一種協(xié)議。在本實(shí)施方式中,該I2S支持S24_LE協(xié)議,該音頻解碼單元14保持該檢測單元12獲取的采樣精度,即用四字節(jié)表示該采樣率,最高字節(jié)為O。
[0029]當(dāng)該音頻解碼單元13完成該音頻流的解碼后,該播放控制單元14用于按照第一播放方式播放該經(jīng)過解碼的音頻流。具體地,該第一播放方式為direct(直接播放)方式,該播放控制單元14在AudioPlayer類中對該音頻流的參數(shù)進(jìn)行讀取以及判斷,并當(dāng)判斷該音頻流的參數(shù)為非44.1KHz或48KHz/16bit時(shí)調(diào)用start函數(shù)添加標(biāo)志參數(shù)Audio_0utput_Flag_Direct以確定采用direct (直接播放)方式播放該音頻流。
[0030]當(dāng)播放控制單元14按照direct方式播放該音頻流時(shí)還用于屏蔽其他的聲音輸出以保證該音頻流的播放品質(zhì)。具體地,在AudioHardwareAlsa類中OpenOutputStream函數(shù)里設(shè)置屬性值為true,在AudioTrack類中每次進(jìn)行AudioTrack構(gòu)造時(shí)對該屬性值進(jìn)行判斷。若該屬性值為true則確定AudioTrack構(gòu)造失敗,在接收到后面的音頻流時(shí)無法生成AudioTrack,從而達(dá)到屏蔽其它聲音的目的。
[0031]進(jìn)一步地,該播放控制單元14在AudioTrack傳遞該音頻流的采樣率和采樣精度等參數(shù)信息至Audio Hal (硬件抽象層),并通過AudioPolicyService最終確定AudioStreamOutAlsa, AudioHardwareALSA 類新建 AudioStreamOutALSA 類對象,并通過ALSAStreamops類的set函數(shù)配置采樣率、采樣精度和聲道數(shù)信息,從而完成硬件配置,使得Audio Hal對于各種采樣率和采樣精度的音頻流的適配。Audio Hal分為fullalsa和tinyalsa,在本實(shí)施方式中,Audio Hal以fullalsa進(jìn)行修改,并且在AlsaStreamops類的set函數(shù)中增加24bit采樣精度和對不同采樣率的支持。
[0032]請參閱圖2,為本發(fā)明播放音頻文件的方法流程圖,該方法可以在裝載有Android操作系統(tǒng)的智能手機(jī)、平板電腦、智能電視、數(shù)碼相機(jī)等電子設(shè)備上使用,該方法包括:
[0033]步驟S20,該接收單元11接收到播放某一類型音頻流的請求,該音頻流可以是Android設(shè)備中供播放的音頻文件,例wav、mp3、ape、flac等音頻流,也可以是視頻文件中帶有的音頻流。
[0034]步驟S21,該檢測單元12獲取該播放某一類型音頻流請求中該音頻流的采樣率和采樣精度,并由判斷單元13判斷本次播放請求的該類型音頻流文件采樣率和采樣精度是否為預(yù)設(shè)的采樣率和采樣精度,在本實(shí)施方式中,該預(yù)設(shè)的采樣率為48KHz或44.ΙΚΗζ,該預(yù)設(shè)的采樣精度為16bit,若是,則返回步驟S20,否則,進(jìn)入步驟S22。
[0035]步驟S22,該音頻解碼單元14根據(jù)該檢測單元12獲取的采樣精度對該音頻流進(jìn)行解碼并將該解碼信息調(diào)整為符合預(yù)設(shè)傳輸格式的解碼信息。
[0036]具體地,該音頻解碼單元14相應(yīng)地修改AudioSource類中的read函數(shù)以將read函數(shù)讀取該音頻流而產(chǎn)生的buffer (緩存)格式的信息調(diào)整為符合Android系統(tǒng)I2S傳輸格式。在本實(shí)施方式中,該I2S支持S24_LE協(xié)議,該音頻解碼單元14保持該檢測單元12獲取的采樣率的精度,即用四字節(jié)表示該采樣率,最高字節(jié)為O。
[0037]步驟S23,該播放控制單元14按照第一播放方式播放該經(jīng)過解碼的音頻流。具體地,該第一播放方式為direct方式,該播放控制單元14啟動AudioPlayer類中對該音頻流的參數(shù)進(jìn)行讀取以及判斷,并當(dāng)判斷該音頻流的參數(shù)為非44.1KHz或48KHz/16bit時(shí)調(diào)用start函數(shù)添加標(biāo)志參數(shù)Audio_Output_Flag_Direct以確定采用direct (直接播放)方式播放該音頻流。[0038]當(dāng)播放控制單元14按照direct方式播放該音頻流時(shí)還屏蔽其他的聲音輸出以保證該音頻流的播放品質(zhì)。具體地,在AudioHardwareAlsa類中OpenOutputStream函數(shù)里設(shè)置屬性值為true,在AudioTrack類中每次進(jìn)行AudioTrack構(gòu)造時(shí)對該屬性值進(jìn)行判斷。若該屬性值為true則確定AudioTrack構(gòu)造失敗,在接收到后面的音頻流時(shí)無法生成AudioTrack,從而達(dá)到屏蔽其它聲音的目的。
[0039]進(jìn)一步地,AudioTrack傳遞該音頻流的采樣率和采樣精度等參數(shù)信息至Audio Hal (硬件抽象層),并通過 AudioPolicyService 最終確定 AudioStreamOutAlsa,AudioHardwareALSA 類新建 AudioStreamOutALSA 類對象,并通過 ALSAStreamops 類的 set函數(shù)配置采樣率、采樣精度和聲道數(shù)信息,從而完成硬件配置,使得Audio Hal對于各種采樣率和采樣精度的音頻流的適配。Audio Hal分為fullalsa和tinyalsa,在本實(shí)施方式中,Audio Hal以fullalsa進(jìn)行修改,并且在AlsaStreamops類的set函數(shù)中增加24bit米樣精度和對不同采樣率的支持。
[0040]本發(fā)明提供的一種播放音頻文件的電子設(shè)備和方法,當(dāng)請求播放的音頻文件的采樣率和采樣精度為非預(yù)設(shè)采樣率和采樣精度時(shí)將該音頻文件進(jìn)行解碼以調(diào)整為符合預(yù)設(shè)傳輸格式的解碼信息,并將經(jīng)過解碼的音頻文件按照第一播放方式進(jìn)行播放,使得該電子設(shè)備在播放不同于預(yù)設(shè)采樣率的音頻文件時(shí)能夠還原出真實(shí)效果,從而提高Android設(shè)備音頻文件播放質(zhì)量。
[0041]以上所述僅為本發(fā)明的實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的【技術(shù)領(lǐng)域】,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.一種播放音頻文件的電子設(shè)備,所述電子設(shè)備安裝有Android系統(tǒng),其特征在于,包括: 接收單元,用于接收播放一類型音頻流的請求; 檢測單元,用于獲取所述播放一類型音頻流請求中所述音頻流的采樣率和采樣精度; 判斷單元,用于判斷所述檢測單元獲取的采樣率和采樣精度是否為預(yù)設(shè)的采樣率和采樣精度; 音頻解碼單元,用于當(dāng)所述判斷單元確定所述采樣精度不是所述預(yù)設(shè)采樣精度時(shí)根據(jù)所述獲取的采樣精度對所述音頻流進(jìn)行解碼并將所述解碼信息調(diào)整為符合預(yù)設(shè)傳輸格式的解碼信息;以及 播放控制單元,用于根據(jù)經(jīng)過所述音頻解碼單元調(diào)整的解碼信息按照第一播放方式播放所述經(jīng)過解碼的音頻流。
2.如權(quán)利要求1所述的播放音頻文件的電子設(shè)備,其特征在于,所述播放控制單兀還用于在AudioHardwareAlsa類中OpenOutputStream函數(shù)里設(shè)置屬性值為true,在AudioTrack類中每次進(jìn)行AudioTrack構(gòu)造時(shí)對所述屬性值進(jìn)行判斷,并當(dāng)判斷所述屬性值為true時(shí)確定AudioTrack構(gòu)造失敗,再次接收到音頻流時(shí)無法生成AudioTrack以屏蔽除所述音頻流以外的其他 音頻流。
3.如權(quán)利要求1所述的播放音頻文件的電子設(shè)備,其特征在于,所述播放控制單元還用于在AudioTrack傳遞所述音頻流的采樣率和采樣精度至Audio Hal,并通過 AudioPolicyService 確定 AudioStreamOutAlsa, AudioHardwareALSA 類新建AudioStreamOutALSA類對象,并通過ALSAStreamops類的set函數(shù)配置采樣率、采樣精度和聲道數(shù)信息以完成硬件配置。
4.如權(quán)利要求1所述的播放音頻文件的電子設(shè)備,其特征在于,所述音頻解碼單元根據(jù)所述檢測單元獲取的采樣精度相應(yīng)地修改AudioSource類中的read函數(shù)以將read函數(shù)讀取所述音頻流而產(chǎn)生的buffer格式的信息調(diào)整為符合I2S傳輸格式的解碼信息。
5.如權(quán)利要求4所述的播放音頻文件的電子設(shè)備,其特征在于,所述播放控制單元還用于在AudioPlayer類中對所述音頻流的參數(shù)進(jìn)行讀取以及判斷,并當(dāng)判斷所述音頻流的參數(shù)為非44.1KHz或48KHz/16bit時(shí)調(diào)用start函數(shù)添加標(biāo)志參數(shù)Audio_Output_Flag_Direct以確定采用direct方式播放所述音頻流。
6.一種播放音頻文件的方法,所述方法應(yīng)用于Android系統(tǒng),其特征在于,所述方法包括: 接收到播放某一類型音頻流的請求; 獲取所述播放某一類型音頻流請求中所述音頻流的采樣率和采樣精度,并判斷所述采樣率和采樣精度是否為預(yù)設(shè)的采樣率和采樣精度; 當(dāng)確定所述采樣率和采樣精度不是所述預(yù)設(shè)的采樣率和采樣精度時(shí)根據(jù)所述獲取的采樣精度對所述音頻流進(jìn)行解碼并將所述解碼信息調(diào)整為符合預(yù)設(shè)傳輸格式的解碼信息;以及 根據(jù)所述經(jīng)過調(diào)整的解碼信息按照第一播放方式播放所述經(jīng)過解碼的音頻流。
7.如權(quán)利要求6所述的播放音頻文件的方法,其特征在于,還包括:在AudioHardwareAlsa 類中 OpenOutputStream 函數(shù)里設(shè)置屬性值為 true,在 AudioTrack 類中每次進(jìn)行AudioTrack構(gòu)造時(shí)對所述屬性值進(jìn)行判斷,并當(dāng)判斷所述屬性值為true時(shí)確定AudioTrack構(gòu)造失敗,再次接收到音頻流時(shí)無法生成AudioTrack以屏蔽除所述音頻流以外的其他音頻流。
8.如權(quán)利要求6所述的播放音頻文件的方法,其特征在于,還包括:在AudioTrack傳遞所述音頻流的采樣率和采樣精度至Audio Hal,并通過AudioPolicyService確定AudioStreamOutAlsa, AudioHardwareALSA 類新建 AudioStreamOutALSA 類對象,并通過ALSAStreamops類的set函數(shù)配置采樣率、采樣精度和聲道數(shù)信息以完成硬件配置。
9.如權(quán)利要求6所述的播放音頻文件的方法,其特征在于,“當(dāng)確定所述采樣率不是所述預(yù)設(shè)采樣率時(shí)根據(jù)所述獲取的采樣精度對所述音頻流進(jìn)行解碼并將所述解碼信息調(diào)整為符合預(yù)設(shè)傳輸格式的解碼信息”包括:根據(jù)所述獲取的采樣率相應(yīng)地修改AudioSource類中的read函數(shù)以將read函數(shù)讀取所述音頻流而產(chǎn)生的buffer格式的信息調(diào)整為符合I2S傳輸格式的解碼信息。
10.如權(quán)利要求9所述的播放音頻文件的方法,其特征在于,“根據(jù)所述經(jīng)過調(diào)整的解碼信息按照第一播放方式播放所述經(jīng)過解碼的音頻流”包括在AudioPlayer類中對所述音頻流的參數(shù)進(jìn)行讀取以及判斷,并當(dāng)判斷所述音頻流的參數(shù)為非44.1KHz或48KHz/16bit時(shí)調(diào)用start函數(shù)添加標(biāo)志參數(shù)Audio_Output_Flag_Direct以確定采用direct方式播放所述音頻流。`
【文檔編號】G11B20/00GK103714837SQ201310700337
【公開日】2014年4月9日 申請日期:2013年12月18日 優(yōu)先權(quán)日:2013年12月18日
【發(fā)明者】邱建斌, 張駿, 朱延 申請人:福州瑞芯微電子有限公司