国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種音頻數(shù)據(jù)處理方法及裝置與流程

      文檔序號:12036205閱讀:319來源:國知局
      一種音頻數(shù)據(jù)處理方法及裝置與流程

      本發(fā)明涉及信息處理技術(shù)領(lǐng)域,尤其涉及一種音頻數(shù)據(jù)處理方法及裝置。



      背景技術(shù):

      隨著電子技術(shù)的不斷發(fā)展,現(xiàn)有的電視、電腦、移動(dòng)終端(如手機(jī)、pad等)都具有播放音頻數(shù)據(jù)的功能,而為了實(shí)現(xiàn)對音頻數(shù)據(jù)的實(shí)時(shí)播放,需要不斷地捕獲音頻數(shù)據(jù),并同時(shí)進(jìn)行讀取和播放。

      在現(xiàn)有技術(shù)中,終端通過wdma捕獲音頻數(shù)據(jù),采用第一緩沖區(qū)對捕獲的音頻數(shù)據(jù)進(jìn)行存儲(chǔ),該環(huán)形緩沖區(qū)包括寫指針和讀指針;終端采用第二緩沖區(qū)對捕獲的音頻數(shù)據(jù)進(jìn)行管理,該第二緩沖區(qū)也包括寫指針和讀指針。終端通過rdma讀取第二緩沖區(qū)中的音頻數(shù)據(jù)進(jìn)而實(shí)現(xiàn)音頻數(shù)據(jù)的播放。具體的過程參照圖1所示,終端通過wdma中的寫指針將捕獲的音頻數(shù)據(jù)寫入到第一緩沖區(qū),然后讀指針從起始位置開始讀取數(shù)據(jù)(圖中wdma對應(yīng)的數(shù)據(jù)1),當(dāng)wdma中的寫指針和讀指針之間有閾值時(shí),則觸發(fā)閾值中斷,rdma的寫指針將wdma的第一緩存區(qū)中的數(shù)據(jù)1對應(yīng)的起始地址和數(shù)據(jù)長度寫入到第二緩存區(qū)的item0(圖中虛線箭頭所指區(qū)域),rdma的讀指針讀取item0進(jìn)而實(shí)現(xiàn)音頻數(shù)據(jù)的播放。

      但是,當(dāng)wdma中的寫指針和讀指針都移動(dòng)到圖中位置(虛線箭頭),這時(shí),寫指針與讀指針之間有閾值但還未產(chǎn)生中斷,如果此時(shí)有外界中斷產(chǎn)生,雖然終端已通過wdma獲取數(shù)據(jù)2,但由于上述的閾值中斷未產(chǎn)生,rdma的寫指針未將該數(shù)據(jù)對應(yīng)的地址和數(shù)據(jù)長度寫入到第二緩存區(qū)的item1(item1中無數(shù)據(jù)),因此rdma的讀指針無數(shù)據(jù)可讀,從而造成音頻數(shù)據(jù)播放出現(xiàn)卡頓的現(xiàn)象(例如在播放音樂時(shí),出現(xiàn)的播放滯幀,也就是通常人們所說的“卡”)。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明的實(shí)施例提供一種音頻數(shù)據(jù)處理方法及裝置,解決了終端在 播放音頻數(shù)據(jù)時(shí)出現(xiàn)卡頓現(xiàn)象的問題。

      為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:

      第一方面,提供一種音頻數(shù)據(jù)處理方法,包括:

      將音頻數(shù)據(jù)存儲(chǔ)至直接內(nèi)存寫入wdma的第一緩沖區(qū)中;

      檢測所述第一緩沖區(qū)中的寫指針與讀指針的差值是否滿足預(yù)定條件;

      若所述第一緩沖區(qū)中的寫指針與讀指針的差值滿足所述預(yù)定條件,則觸發(fā)閾值中斷,根據(jù)所述閾值中斷讀取所述讀指針和所述寫指針之間的音頻數(shù)據(jù),將所述音頻數(shù)據(jù)寫入直接內(nèi)存讀取rdma的第二緩沖區(qū);

      當(dāng)確定所述閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值時(shí),啟動(dòng)rdma,讀取所述rdma的第二緩沖區(qū)中的音頻數(shù)據(jù),所述第一預(yù)定閾值大于等于2。

      第二方面,提供一種音頻數(shù)據(jù)處理裝置,所述裝置包括:

      存儲(chǔ)模塊,用于將音頻數(shù)據(jù)存儲(chǔ)至直接內(nèi)存寫入wdma的第一緩沖區(qū)中;

      檢測模塊,用于檢測所述第一緩沖區(qū)中的寫指針與讀指針的差值是否滿足預(yù)定條件;

      處理模塊,用于若所述檢測模塊檢測到所述第一緩沖區(qū)中的寫指針與讀指針的差值滿足所述預(yù)定條件,觸發(fā)閾值中斷,根據(jù)所述閾值中斷讀取所述讀指針和所述寫指針之間的音頻數(shù)據(jù),將所述音頻數(shù)據(jù)寫入直接內(nèi)存讀取rdma的第二緩沖區(qū);

      啟動(dòng)模塊,用于當(dāng)確定所述閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值時(shí),啟動(dòng)rdma,讀取所述rdma的第二緩沖區(qū)中的音頻數(shù)據(jù),所述第一預(yù)定閾值大于等于2。

      本發(fā)明實(shí)施例提供了一種音頻數(shù)據(jù)處理方法及裝置,通過檢測第一緩沖區(qū)中的寫指針與讀指針的差值是否滿足預(yù)定條件;若第一緩沖區(qū)中的寫指針與讀指針的差值滿足所述預(yù)定條件,則觸發(fā)閾值中斷,根據(jù)閾值中斷讀取讀指針和寫指針之間的音頻數(shù)據(jù),將音頻數(shù)據(jù)寫入rdma的第二緩沖區(qū);當(dāng)確定閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值時(shí),啟動(dòng) rdma,讀取rdma的第二緩沖區(qū)中的音頻數(shù)據(jù),第一預(yù)定閾值大于等于2。

      相比于現(xiàn)有技術(shù),本發(fā)明實(shí)施例中當(dāng)確定閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值的情況下,啟動(dòng)rdma,即rdma中的讀指針開始讀取音頻數(shù)據(jù)。由于在啟動(dòng)rdma之前,寫指針已將音頻數(shù)據(jù)至少一次寫入第二緩沖區(qū),因此rdma中的寫指針與讀指針之間有一定的音頻數(shù)據(jù)間隔,可以保證讀指針一直有音頻數(shù)據(jù)可讀,從而避免了現(xiàn)有技術(shù)中出現(xiàn)音頻數(shù)據(jù)卡頓的現(xiàn)象。

      附圖說明

      為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

      圖1為本發(fā)明實(shí)施例提供的現(xiàn)有技術(shù)中存在音頻數(shù)據(jù)播放卡頓的示意圖;

      圖2為本發(fā)明實(shí)施例提供的一種音頻數(shù)據(jù)處理方法的方法流程示意圖;

      圖3為本發(fā)明實(shí)施例提供的wdma的wpt、rpt及其維護(hù)的ringbuffer的邏輯關(guān)系示意圖;

      圖4為本發(fā)明實(shí)施例提供的rdma的wpt、rpt及其維護(hù)的ringbuffer的邏輯關(guān)系示意圖;

      圖5為本發(fā)明實(shí)施例提供的初始化wdma的示意圖;

      圖6為本發(fā)明實(shí)施例提供的初始化rdma的示意圖;

      圖7為本發(fā)明實(shí)施例提供的一種音頻數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。

      具體實(shí)施方式

      下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā) 明保護(hù)的范圍。

      本發(fā)明實(shí)施例提供的音頻數(shù)據(jù)處理方法的執(zhí)行主體可以為音頻數(shù)據(jù)處理裝置,或者用于執(zhí)行上述音頻數(shù)據(jù)處理方法的終端。具體的,該終端可以為智能電視、智能電視終端、高清機(jī)頂盒、平板電腦、筆記本電腦、超級移動(dòng)個(gè)人計(jì)算機(jī)(英文:ultra-mobilepersonalcomputer,簡稱:umpc)、上網(wǎng)本、個(gè)人數(shù)字助理(英文:personaldigitalassistant,簡稱:pda)等終端。其中,音頻數(shù)據(jù)處理裝置可以為上述終端中的中央處理器(英文:centralprocessingunit,簡稱:cpu)或者可以為上述終端的中的控制單元或者功能模塊。示例性的,該音頻數(shù)據(jù)處理裝置可以是高清終端中用于處理畫質(zhì)的后端畫質(zhì)處理芯片(例如,frc(英文:framerateconversion,幀頻轉(zhuǎn)換)芯片),且相對于該高清終端中的主soc(英文:systemonchip,片上系統(tǒng))芯片,該音頻數(shù)據(jù)處理裝置可以稱為該高清終端的從芯片。

      本文中術(shù)語“和/或”,僅僅是一種描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,a和/或b,可以表示:單獨(dú)存在a,同時(shí)存在a和b,單獨(dú)存在b這三種情況。另外,本文中字符“/”,一般表示前后關(guān)聯(lián)對象是一種“或”的關(guān)系。

      為了便于清楚描述本發(fā)明實(shí)施例的技術(shù)方案,在本發(fā)明的實(shí)施例中,采用了“第一”、“第二”等字樣對功能或作用基本相同的相同項(xiàng)或相似項(xiàng)進(jìn)行區(qū)分,本領(lǐng)域技術(shù)人員可以理解“第一”、“第二”等字樣并不對數(shù)量和執(zhí)行次序進(jìn)行限定。

      本發(fā)明的實(shí)施例提供一種音頻數(shù)據(jù)處理方法,如圖2所示,該方法包括如下步驟:

      101、音頻數(shù)據(jù)處理裝置將音頻數(shù)據(jù)存儲(chǔ)至直接內(nèi)存寫入wdma的第一緩沖區(qū)中。

      示例性的,在步驟101之前,還包括:音頻數(shù)據(jù)處理裝置獲取音頻數(shù)據(jù)。

      本發(fā)明實(shí)施例以應(yīng)用于電視系統(tǒng)領(lǐng)域?yàn)槔?,由于現(xiàn)有的電視通路包括模擬通路、數(shù)字通路和多媒體通路,模擬通路包括atvdemod通路、av通路、分量通路、vga(英文全稱:videographicsarray,中文: 視頻圖形陣列)通路,數(shù)字通路包括hdmi(英文全稱:highdefinitionmultimediainterface,中文:高清晰度多媒體接口)通路等;多媒體通路包括dmp(英文全稱:digitalmediaplayer,中文:數(shù)字媒體播放器)等,因此,該音頻數(shù)據(jù)可以為來源于多個(gè)電視通路的脈沖編碼調(diào)制(英文全稱:pulsecodemodulation,簡稱:pcm)的音頻數(shù)據(jù)。

      具體的,本發(fā)明實(shí)施例采用直接內(nèi)存寫入(英文全稱:writedirectmemoryaccess,簡稱:wdma)來捕獲音頻數(shù)據(jù),其中,wdma會(huì)管理一段物理上連續(xù)的內(nèi)存區(qū)域,該內(nèi)存區(qū)域用于暫存wdma實(shí)時(shí)捕獲到的所在電視通路的音頻數(shù)據(jù)。在電視系統(tǒng)領(lǐng)域中,音頻數(shù)據(jù)會(huì)通過axi(advancedextensibleinterface)總線存儲(chǔ)在與wdma對應(yīng)的第一緩沖區(qū)中。其中,axi是一種總線協(xié)議,是一種面向高性能、高寬帶、低延遲的片內(nèi)總線。

      示例性的上述的第一緩沖區(qū)中包括寫指針(英文:writepointer,簡稱:wpt)和讀指針(英文:readpointer,簡稱:rpt),該第一緩沖區(qū)可以為第一環(huán)形緩沖區(qū)(簡稱:ringbuffer)。其中,wpt表示捕獲到的音頻數(shù)據(jù)在ringbuffer的存儲(chǔ)位置,rpt表示讀取的音頻數(shù)據(jù)在ringbuffer的存儲(chǔ)位置。因此,wdma的音頻捕獲及處理工作主要是依靠其寫指針和讀指針來完成的。其中,wpt主要由wdma自己維護(hù),rpt主要由cpu控制。

      具體的,參照圖3所示,為wdma的wpt、rpt及其維護(hù)的ringbuffer的邏輯關(guān)系示意圖。其中,st_addr(startaddress)表示ringbuffer的起始地址(或首地址),end表示ringbuffer的尾地址。初始化時(shí),wpt和rpt均為0,即相當(dāng)于對應(yīng)ringbuffer的起始地址。當(dāng)wdma捕獲到音頻數(shù)據(jù)時(shí),捕獲到的音頻數(shù)據(jù)會(huì)從wpt的起始地址進(jìn)行存儲(chǔ),另外,由于第一緩沖區(qū)為ringbuffer,因此,當(dāng)wpt到達(dá)該ringbuffer的尾地址時(shí),會(huì)自動(dòng)跳轉(zhuǎn)到ringbuffer的首地址,繼續(xù)從ringbuffer的起始位置開始存儲(chǔ)音頻數(shù)據(jù),如此以ringbuffer式管理捕獲到的音頻數(shù)據(jù)的存儲(chǔ)空間,可以有效解決用于捕獲的內(nèi)存空間浪費(fèi)的問題,同時(shí),也取消了音頻捕獲的時(shí)間限制,支持無限時(shí)間長度的音頻捕獲。

      102、音頻數(shù)據(jù)處理裝置檢測第一緩沖區(qū)中的寫指針與讀指針的差 值是否滿足預(yù)定條件。

      示例性的,上述的預(yù)定條件為第一緩沖區(qū)中的寫指針與讀指針的差值大于等于第二預(yù)設(shè)閾值。其中,該第二預(yù)設(shè)閾值小于第一緩沖區(qū)的長度。可選的,第二預(yù)設(shè)閾值的大小可以根據(jù)第一緩沖區(qū)的長度進(jìn)行設(shè)定。示例的,若第一緩沖區(qū)的長度為m,則可以將第二預(yù)設(shè)閾值設(shè)置為第一緩沖區(qū)的長度的1/m。

      103、若第一緩沖區(qū)中的寫指針與讀指針的差值滿足預(yù)定條件,則觸發(fā)閾值中斷;根據(jù)閾值中斷讀取讀指針和所述寫指針之間的音頻數(shù)據(jù),將音頻數(shù)據(jù)寫入rdma的第二緩沖區(qū)。

      示例性的,本發(fā)明實(shí)施例通過直接內(nèi)存讀取(英文:readdirectmemoryaccess,簡稱:rdma)來進(jìn)行音頻數(shù)據(jù)的播放,上述的rdma的第二緩沖區(qū)中包括wpt和rpt,該第二緩沖區(qū)可以為ringbuffer。其中,wpt表示將讀取音頻數(shù)據(jù)寫入ringbuffer的位置,rpt表示讀取音頻數(shù)據(jù)在ringbuffer的存儲(chǔ)位置。因此,rdma的音頻數(shù)據(jù)讀取工作主要是依靠其wpt和rpt來完成的。其中,wpt主要由cpu(或軟件)控制,rpt由rdma自己維護(hù)。另外,ringbuffer是一段可以存儲(chǔ)音頻數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)是由item控制節(jié)點(diǎn)組成的。

      具體的,rdma的item、wpt、rpt及其ringbuffer的關(guān)系如圖4所示。該item主要是用來控制rdma讀取音頻數(shù)據(jù)的,其中,每個(gè)item由64bit組成,第一個(gè)32bit,即第一個(gè)字,為st_addr(startaddress),指向rdma要讀取的音頻數(shù)據(jù)存儲(chǔ)于內(nèi)存的物理地址(上述wdma的wpt所指向的第一緩沖區(qū)的存儲(chǔ)音頻數(shù)據(jù)位置的地址)。第二個(gè)32bit,即第二個(gè)字,主要包括length成員,該length表示該要讀取的音頻數(shù)據(jù)的長度(上述wdma的wpt與rpt之間的音頻數(shù)據(jù))。另外,item的個(gè)數(shù)由cpu決定,每個(gè)item的startaddress以及l(fā)engh等信息,也由cpu實(shí)時(shí)更新。另外,由于第二緩沖區(qū)為ringbuffer,因此,需要cpu進(jìn)行一下判斷:假設(shè)ringbuffer中共20個(gè)item,則位置1對應(yīng)第一個(gè)item(記為item0),位置2對應(yīng)第二個(gè)item(記為item1),位置20對應(yīng)第二十個(gè)item(記為item19)。若wpt之前所處的位置為item19所在的位置,那么,此時(shí)需要cpu配置rdma的wpt為ringbuffer的第一個(gè) item(item0)所在位置。如果wpt之前所處的位置并非item19所在的位置,則cpu只需簡單的配置rdma的wpt為其更新之前緊接著的下一個(gè)item所處的位置。

      示例性的,當(dāng)?shù)谝痪彌_區(qū)中的寫指針與讀指針的差值大于等于第二預(yù)設(shè)閾值,則觸發(fā)閾值中斷,第一緩沖區(qū)的讀指針讀取第一緩沖區(qū)中的寫指針寫入的音頻數(shù)據(jù),同時(shí)rdma中的寫指針將該音頻數(shù)據(jù)寫入rdma的第二緩沖區(qū)內(nèi),以使的當(dāng)啟動(dòng)rdma時(shí),rdma中的讀指針可以讀取該音頻數(shù)據(jù)進(jìn)而可以實(shí)現(xiàn)音頻數(shù)據(jù)的播放。

      104、當(dāng)確定閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值時(shí),啟動(dòng)rdma,讀取rdma的第二緩沖區(qū)中的音頻數(shù)據(jù)。

      本實(shí)施例中的第一預(yù)定閾值大于等于2,當(dāng)?shù)谝活A(yù)定閾值大于2時(shí),使得rdma的寫指針已經(jīng)將音頻數(shù)據(jù)寫入一次到rdma的第二緩沖區(qū)中,從而保證rdma的讀指針與寫指針之間有一定的音頻數(shù)據(jù)間隔。示例性的,上述閾值中斷的觸發(fā)次數(shù)的初始值設(shè)為0,每執(zhí)行一次中斷該閾值中斷的觸發(fā)次數(shù)加1。

      示例性的,本實(shí)施例中的rdma中包括啟動(dòng)標(biāo)志位,該啟動(dòng)標(biāo)志位為0,表示未啟動(dòng)rdma;該啟動(dòng)標(biāo)志位為1,表示啟動(dòng)rdma。在初始化的過程中將該啟動(dòng)標(biāo)志位設(shè)為0,當(dāng)上述確定閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值,將rdma中的啟動(dòng)標(biāo)志位設(shè)為1。

      示例性的,上述步驟103之后,還包括如下具體步驟:

      103a、當(dāng)確定閾值中斷的觸發(fā)次數(shù)不等于第一預(yù)定閾值時(shí),重新檢測第一緩沖區(qū)中的寫指針與讀指針的差值是否滿足預(yù)定條件。

      示例性的,當(dāng)上述確定的閾值中斷的觸發(fā)次數(shù)不等于第一預(yù)定閾值時(shí),可以根據(jù)閾值中斷讀取讀指針和寫指針之間的音頻數(shù)據(jù),通過rdma的寫指針將音頻數(shù)據(jù)寫入rdma的第二緩沖區(qū),重新檢測第一緩沖區(qū)中的寫指針與讀指針的差值是否大于等于預(yù)設(shè)閾值,直到上述的閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值時(shí),才可停止檢測第一緩沖區(qū)中的寫指針與讀指針的差值是否大于等于第一預(yù)設(shè)閾值。

      本發(fā)明實(shí)施例提供了一種音頻數(shù)據(jù)處理方法,通過檢測第一緩沖區(qū) 中的寫指針與讀指針的差值是否滿足預(yù)定條件;若第一緩沖區(qū)中的寫指針與讀指針的差值滿足所述預(yù)定條件,則觸發(fā)閾值中斷,根據(jù)閾值中斷讀取讀指針和寫指針之間的音頻數(shù)據(jù),將音頻數(shù)據(jù)寫入rdma的第二緩沖區(qū);當(dāng)確定閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值時(shí),啟動(dòng)rdma,讀取rdma的第二緩沖區(qū)中的音頻數(shù)據(jù),第一預(yù)定閾值大于等于2。

      相比于現(xiàn)有技術(shù),本發(fā)明實(shí)施例中當(dāng)確定閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值的情況下,啟動(dòng)rdma,即rdma中的讀指針開始讀取音頻數(shù)據(jù)。由于在啟動(dòng)rdma之前,寫指針已將音頻數(shù)據(jù)至少一次寫入第二緩沖區(qū),因此rdma中的寫指針與讀指針之間有一定的音頻數(shù)據(jù)間隔,可以保證讀指針一直有音頻數(shù)據(jù)可讀,從而避免了現(xiàn)有技術(shù)中出現(xiàn)音頻數(shù)據(jù)卡頓的現(xiàn)象。

      本實(shí)施例中音頻數(shù)據(jù)處理裝置依據(jù)wdma實(shí)現(xiàn)對音頻數(shù)據(jù)捕獲,依據(jù)rdma實(shí)現(xiàn)對捕獲的音頻數(shù)據(jù)進(jìn)行讀取,進(jìn)而實(shí)現(xiàn)音頻播放。因此,在使用wdma和rdma時(shí),需要對二者進(jìn)行初始化。具體的,在上述步驟101之前,還包括初始化wdma和rdma,其初始化的具體步驟如下:

      如圖5所示,初始化wdma具體包括:

      101a1、設(shè)定wdma對應(yīng)的第一緩沖區(qū)的起始地址。

      其中,wdma捕獲到的音頻數(shù)據(jù)將暫存于該第一緩沖區(qū)的起始地址的內(nèi)存空間中。

      101a2、設(shè)定第一緩沖區(qū)的長度。

      通常,將第一緩沖區(qū)的長度配置為1152的倍數(shù),待捕獲的音頻數(shù)據(jù)的單位大小設(shè)置為1152*2*2(即一幀mpeg2音頻數(shù)據(jù)的大小)個(gè)字節(jié)。其中,1152為采樣的點(diǎn)數(shù),第一個(gè)2表示每個(gè)采樣點(diǎn)2字節(jié)大小,第二個(gè)2表示每個(gè)音頻采樣點(diǎn)包括2個(gè)聲道(左聲道和右聲道)。示例的,可以將第一緩沖區(qū)的長度設(shè)置為80*(1152*2*2)個(gè)字節(jié)。

      101a3、設(shè)定wdma的第二預(yù)設(shè)閾值。

      當(dāng)wdma的wpt與rpt的差值為該第二預(yù)設(shè)閾值時(shí),即觸發(fā)閾值中斷。cpu響應(yīng)該中斷后,可以實(shí)時(shí)地將該筆音頻數(shù)據(jù)拷貝到文件中存儲(chǔ), 也可以調(diào)用音頻讀取模塊將該筆音頻數(shù)據(jù)讀取,進(jìn)行一系列音頻后處理動(dòng)作后再調(diào)用音頻播放模塊,實(shí)現(xiàn)播放。通常,將第二預(yù)設(shè)閾值的大小設(shè)置為wdma對應(yīng)的第一緩沖區(qū)的n等分。根據(jù)步驟102中所示例的,可以將第二預(yù)設(shè)閾值設(shè)置為10*(1152*2*2)個(gè)字節(jié),即第一緩沖區(qū)長度的八分之一。

      101a4、設(shè)定第一緩沖區(qū)的讀指針。

      具體的,設(shè)置wdma對應(yīng)的第一緩沖區(qū)的rpt,初始化時(shí),該rpt會(huì)自動(dòng)關(guān)聯(lián)到設(shè)定的第一緩沖區(qū)的起始地址。其中,wpt由wdma自己維護(hù),無需cpu配置,初始化從其起始地址開始捕獲音頻數(shù)據(jù)。

      101a5、將wdma的閾值中斷次數(shù)重置為0。

      101a6、啟動(dòng)wdma。

      最后,重置wdma,啟動(dòng)wdma,使wdma開始工作

      如圖6所示,初始化rdma具體包括:

      101b1、關(guān)閉rdma的閾值中斷。

      其中,上述閾值中斷表示rdma的讀、寫指針的差值為幾個(gè)item時(shí)觸發(fā)的中斷,以提醒軟件音頻數(shù)據(jù)不夠播了,需要軟件及時(shí)的配置新的item以指向新的待播音頻數(shù)據(jù),以免出現(xiàn)由于暫時(shí)無數(shù)據(jù)可讀而出現(xiàn)的聲音卡頓,甚至無聲等問題。

      101b2、設(shè)定rdma對應(yīng)的第二緩沖區(qū)的起始地址。

      其中,第二緩沖區(qū)的起始地址為將音頻數(shù)據(jù)存儲(chǔ)于內(nèi)存中的位置。

      101b3、設(shè)定rdma的預(yù)設(shè)閾值。

      具體的,若預(yù)設(shè)閾值為1,則表示開啟中斷;若預(yù)設(shè)閾值為0,則表示關(guān)閉中斷。當(dāng)將預(yù)設(shè)閾值設(shè)為1且rdma的wpt與其rpt的差值大于等于1時(shí),則會(huì)觸發(fā)該閾值中斷,執(zhí)行該閾值中斷的處理程序,比如及時(shí)配置新的item給rdma。

      101b4、設(shè)定第二緩沖區(qū)的寫指針。

      其中,該第二緩沖區(qū)的寫指針為rdma本身所在內(nèi)存位置,同時(shí),該位置也是item0的位置。

      101b5、設(shè)定第二緩沖區(qū)的長度。

      其中,該第二緩沖區(qū)的長度為item的個(gè)數(shù),例如,可以將tem的個(gè)數(shù)設(shè)為20。

      101b6、設(shè)置rdma的啟動(dòng)標(biāo)識為0。

      將rdma的啟動(dòng)標(biāo)識設(shè)為0,表示在初始化的過程中不啟動(dòng)rdma。

      下面將基于上述的一種音頻數(shù)據(jù)處理方法的相關(guān)描述對本發(fā)明實(shí)施例提供的一種音頻數(shù)據(jù)處理裝置進(jìn)行介紹。以下實(shí)施例中與上述實(shí)施例相關(guān)的技術(shù)術(shù)語、概念等的說明可以參照上述的實(shí)施例,這里不再贅述。

      本發(fā)明實(shí)施例提供一種音頻數(shù)據(jù)處理裝置,如圖7所示,該音頻數(shù)據(jù)處理裝置2包括存儲(chǔ)模塊21、檢測模塊22、處理模塊23以及啟動(dòng)模塊24,其中:

      存儲(chǔ)模塊21用于將音頻數(shù)據(jù)存儲(chǔ)至直接內(nèi)存寫入wdma的第一緩沖區(qū)中;

      檢測模塊22用于檢測第一緩沖區(qū)中的寫指針與讀指針的差值是否滿足預(yù)定條件;

      處理模塊23用于若檢測模塊22檢測到第一緩沖區(qū)中的寫指針與讀指針的差值滿足所述預(yù)定條件,則觸發(fā)閾值中斷,根據(jù)閾值中斷讀取讀指針和寫指針之間的音頻數(shù)據(jù),將音頻數(shù)據(jù)寫入rdma的第二緩沖區(qū);

      啟動(dòng)模塊24用于當(dāng)確定閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值時(shí),啟動(dòng)rdma,讀取rdma的第二緩沖區(qū)中的音頻數(shù)據(jù),第一預(yù)定閾值大于等于2。

      可選的,上述檢測模塊22還用于當(dāng)確定閾值中斷的觸發(fā)次數(shù)不等于第一預(yù)定閾值時(shí),重新檢測第一緩沖區(qū)中的寫指針與讀指針的差值是否滿足預(yù)定條件。

      示例性的,上述檢測模塊22具體用于:

      檢測第一緩沖區(qū)中的寫指針與讀指針的差值大于等于第二預(yù)定閾值,第二預(yù)設(shè)閾值小于第一緩沖區(qū)的長度。

      如圖7所示,該音頻數(shù)據(jù)處理裝置2還包括:初始化模塊25

      初始化模塊25用于初始化wdma,初始化wdma過程至少包括如下步驟:

      設(shè)定wdma對應(yīng)的第一緩沖區(qū)的起始地址;

      設(shè)定第一緩沖區(qū)的長度;

      設(shè)定wdma的第二預(yù)定閾值;

      設(shè)定第一緩沖區(qū)的讀指針;

      將wdma的閾值中斷次數(shù)重置為0;

      啟動(dòng)wdma。

      初始化模塊25還用于初始化rdma,初始化rdma至少包括如下步驟:

      關(guān)閉rdma的閾值中斷;

      設(shè)定rdma對應(yīng)的第二緩沖區(qū)的起始地址;

      設(shè)定rdma的第二預(yù)定閾值;

      設(shè)定第二緩沖區(qū)的寫指針;

      設(shè)定第二緩沖區(qū)的長度;

      設(shè)置rdma的啟動(dòng)標(biāo)識為0。

      本發(fā)明實(shí)施例提供了一種音頻數(shù)據(jù)處理裝置,通過檢測第一緩沖區(qū)中的寫指針與讀指針的差值是否滿足預(yù)定條件;若第一緩沖區(qū)中的寫指針與讀指針的差值滿足所述預(yù)定條件,則觸發(fā)閾值中斷,根據(jù)閾值中斷讀取讀指針和寫指針之間的音頻數(shù)據(jù),將音頻數(shù)據(jù)寫入rdma的第二緩沖區(qū);當(dāng)確定閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值時(shí),啟動(dòng)rdma,讀取rdma的第二緩沖區(qū)中的音頻數(shù)據(jù),第一預(yù)定閾值大于等于2。

      相比于現(xiàn)有技術(shù),本發(fā)明實(shí)施例中當(dāng)確定閾值中斷的觸發(fā)次數(shù)等于第一預(yù)定閾值的情況下,啟動(dòng)rdma,即rdma中的讀指針開始讀取音頻數(shù)據(jù)。由于在啟動(dòng)rdma之前,寫指針已將音頻數(shù)據(jù)至少一次寫入第二緩沖區(qū),因此rdma中的寫指針與讀指針之間有一定的音頻數(shù)據(jù)間隔,可以保證讀指針一直有音頻數(shù)據(jù)可讀,從而避免了現(xiàn)有技術(shù)中出現(xiàn)音頻數(shù)據(jù)卡頓的現(xiàn)象。

      在本申請所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的終端和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)模塊或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或模塊的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。

      所述作為分離部件說明的模塊可以是或者也可以不是物理上分開的,作為模塊顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。

      另外,在本發(fā)明各個(gè)實(shí)施例中的各功能模塊可以集成在一個(gè)處理單元中,也可以是各個(gè)模塊單獨(dú)物理包括,也可以兩個(gè)或兩個(gè)以上模塊集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用硬件加軟件功能模塊的形式實(shí)現(xiàn)。

      上述以軟件功能模塊的形式實(shí)現(xiàn)的集成的單元,可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。上述軟件功能模塊存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的部分步驟。而前述的存儲(chǔ)介質(zhì)包括:u盤、移動(dòng)硬盤、只讀存儲(chǔ)器(read-onlymemory,簡稱rom)、隨機(jī)存取存儲(chǔ)器(randomaccessmemory,簡稱ram)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。

      最后應(yīng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。

      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
      1