專利名稱:記錄設備和記錄方法
技術領域:
本發(fā)明涉及記錄設備和記錄方法,特別涉及一種用于記錄內(nèi)容的記錄設備和記錄方法。
背景技術:
傳統(tǒng)音頻設備通常包括所謂的內(nèi)嵌式微型計算機。用于允許內(nèi)嵌式微型計算機工作的軟件針對內(nèi)嵌式微型計算機來優(yōu)化,并且較小規(guī)模是主流。
采用傳統(tǒng)設計方法來開發(fā)連網(wǎng)功能和GUI(graphical userinterface,圖形用戶界面)以便實現(xiàn)具有連網(wǎng)能力和允許較容易視覺識別的GUI的音頻設備將花費太多工時,并且是不適當?shù)摹?br>
從而,經(jīng)常采用其中已經(jīng)實現(xiàn)連網(wǎng)功能和GUI的內(nèi)嵌式計算機的操作系統(tǒng)。在這樣的情況下,將原先開發(fā)以與個人計算機一起使用的操作系統(tǒng)移植到內(nèi)嵌式微型計算機。
然而,在開發(fā)以與個人計算機一起使用的操作系統(tǒng)中,未實現(xiàn)在消費數(shù)字音頻設備中常見的遵循IEC(國際電工委員會)60958的數(shù)字音頻數(shù)據(jù)的處理,其中,IEC 60958用于保護與音頻數(shù)據(jù)相關聯(lián)的版權等。
而且,在傳統(tǒng)的數(shù)字音頻設備開發(fā)中,相對于微型計算機的能力帶來較大負載的處理經(jīng)常分配到專用DSP(數(shù)字信號處理器)。
另一方面,當使用普通個人計算機的功能時,專用于處理數(shù)字音頻數(shù)據(jù)的聲音芯片(用于音頻處理的IC(集成電路))幾乎不可用,從而音頻數(shù)據(jù)的處理必須分配到個人計算機的CPU(中央處理單元)。因此,用于實現(xiàn)諸如回放或記錄音頻數(shù)據(jù)的音頻功能的進程(應用程序)必須單獨分析和計算音頻數(shù)據(jù)。因此,當開發(fā)CD播放器功能和硬盤記錄器功能時,必須為CD播放器功能和硬盤記錄器功能中的每一個開發(fā)音頻數(shù)據(jù)處理功能例如用于處理遵循IEC 60958的音頻數(shù)據(jù)的功能。
在用于個人計算機的操作系統(tǒng)中,采用所謂的事件驅動模式(paradigm),其中,處理是響應事件而激活的。當由這種事件驅動操作系統(tǒng)控制的設備處理不斷發(fā)送、接收或傳輸?shù)臄?shù)據(jù)如音頻數(shù)據(jù)時,可能發(fā)生不能實時處理數(shù)據(jù)。
由于沒有實時處理音頻數(shù)據(jù)而導致的數(shù)據(jù)損失(loss)是音頻產(chǎn)品中的嚴重缺陷。具體而言,雖然當負載低時例如當系統(tǒng)穩(wěn)定工作時不那么頻繁地發(fā)生聲音漏失(dropout),但是當負載大時例如當激活或終止另一個進程(另一個應用程序)時或者當硬盤被另一個活動應用程序訪問時,在系統(tǒng)的負載變大的情況下相當多地發(fā)生聲音漏失。
如上所述,在由包括連網(wǎng)功能和GUI功能并且以分時方式執(zhí)行多個進程的多任務操作系統(tǒng)控制的設備中,當作為時間連續(xù)數(shù)據(jù)即所謂的流處理包括音頻數(shù)據(jù)的內(nèi)容并且記錄輸入流時,不可能保證在沒有聲音漏失(音頻數(shù)據(jù)損失)的情況下進行記錄,或者保證在沒有聲音跳躍(skipping)的情況下輸出流。
而且,在設計用于內(nèi)嵌式微型計算機的操作系統(tǒng)如VX-WorksTM或μ-i-TRONTM中,設計者必須掌握任務所需的輪轉時間(turnaround time)。這提高了設計難度。
發(fā)明內(nèi)容
本發(fā)明是鑒于上述情形而提出的,并且其目的是允許通過由不保證輪轉時間的多任務操作系統(tǒng)控制的設備來更容易地且不產(chǎn)生損失地記錄作為流提供的內(nèi)容。
本發(fā)明的一種記錄設備,包括數(shù)據(jù)接收控制裝置,用于在由操作系統(tǒng)控制的第一程序的控制下,控制接收輸入第一內(nèi)容數(shù)據(jù);數(shù)據(jù)記錄控制裝置,用于在由操作系統(tǒng)控制的第二程序的控制下,控制將輸入第一內(nèi)容數(shù)據(jù)記錄在記錄介質上;以及傳輸裝置,用于在由操作系統(tǒng)控制的第一進程的控制下,接收被指定要從數(shù)據(jù)接收控制裝置傳輸?shù)綌?shù)據(jù)記錄控制裝置的第一內(nèi)容數(shù)據(jù),并且用于在由操作系統(tǒng)控制的第二進程的控制下控制傳輸?shù)谝粌?nèi)容數(shù)據(jù),僅當正在接收要傳輸?shù)綌?shù)據(jù)記錄控制裝置的數(shù)據(jù)的時候,第二進程才控制傳輸,并且一完成傳輸,就立即終止第二進程。
傳輸裝置可以是用于控制將數(shù)據(jù)從由操作系統(tǒng)控制的一個程序傳輸?shù)接刹僮飨到y(tǒng)控制的另一個程序的套接字(socket)。
數(shù)據(jù)接收控制裝置可以包括第一存儲裝置,用于以第一數(shù)據(jù)長度為單位存儲輸入第一內(nèi)容;第二存儲裝置,用于以與第一數(shù)據(jù)長度不同的第二數(shù)據(jù)長度為單位存儲第一內(nèi)容數(shù)據(jù);以及數(shù)據(jù)傳輸裝置,用于將以第一數(shù)據(jù)長度為單位存儲在第一存儲裝置中的第一內(nèi)容數(shù)據(jù)轉換成第二數(shù)據(jù)長度的單位,并且將經(jīng)過轉換的內(nèi)容數(shù)據(jù)傳輸?shù)降诙鎯ρb置;數(shù)據(jù)接收控制裝置以第二數(shù)據(jù)長度為單位將存儲在第二存儲裝置中的第一內(nèi)容數(shù)據(jù)輸出到傳輸裝置。
記錄設備還可以包括提取裝置,用于提取包括在輸入第一內(nèi)容數(shù)據(jù)中的控制信息以便根據(jù)由提取裝置提取的控制信息禁止將輸入第一內(nèi)容數(shù)據(jù)記錄在記錄介質上。
記錄設備還可以包括處理裝置,用于根據(jù)由提取裝置提取的控制信息,對輸入第一內(nèi)容數(shù)據(jù)執(zhí)行預定處理。
數(shù)據(jù)接收控制裝置還可以控制以第二內(nèi)容數(shù)據(jù)的形式發(fā)送輸入第一內(nèi)容數(shù)據(jù),其中,第二內(nèi)容數(shù)據(jù)是其數(shù)據(jù)格式與第一內(nèi)容數(shù)據(jù)的數(shù)據(jù)格式不同的流數(shù)據(jù)。
傳輸裝置還可以包括登記裝置,用于登記請求了發(fā)送數(shù)據(jù)到傳輸裝置的用于控制數(shù)據(jù)接收控制裝置的第一程序,傳輸裝置拒絕用于從由與第一程序不同的程序控制的其他接收控制裝置發(fā)送內(nèi)容數(shù)據(jù)的請求。
傳輸裝置的登記裝置還可以登記請求了從傳輸裝置接收數(shù)據(jù)的用于控制數(shù)據(jù)記錄控制裝置的第二程序,以便只有當?shù)怯浟说诙绦驎r才準許從數(shù)據(jù)接收控制裝置發(fā)送數(shù)據(jù)。
本發(fā)明的一種記錄方法,包括數(shù)據(jù)接收控制步驟,在由操作系統(tǒng)控制的第一程序的控制下,控制接收輸入第一內(nèi)容數(shù)據(jù);數(shù)據(jù)記錄控制步驟,在由操作系統(tǒng)控制的第二程序的控制下,控制將輸入第一內(nèi)容數(shù)據(jù)記錄在記錄介質上;以及傳輸步驟,在由操作系統(tǒng)控制的第一進程的控制下,接收被指定要從第一程序傳輸?shù)降诙绦虻牡谝粌?nèi)容數(shù)據(jù),并且在由操作系統(tǒng)控制的第二進程的控制下控制傳輸?shù)谝粌?nèi)容數(shù)據(jù),僅當正在接收要傳輸?shù)降诙绦虻臄?shù)據(jù)的時候,第二進程才控制傳輸,并且一完成傳輸,就立即終止第二進程。
第二進程可以是控制將數(shù)據(jù)從由操作系統(tǒng)控制的一個程序傳輸?shù)接刹僮飨到y(tǒng)控制的另一個程序的套接字。
第一程序可以以第一數(shù)據(jù)長度為單位將輸入第一內(nèi)容存儲在第一存儲裝置中,以與第一數(shù)據(jù)長度不同的第二數(shù)據(jù)長度為單位將第一內(nèi)容數(shù)據(jù)存儲在第二存儲裝置中,將以第一數(shù)據(jù)長度為單位存儲在第一存儲裝置中的第一內(nèi)容數(shù)據(jù)轉換成第二數(shù)據(jù)長度的單位,并且將經(jīng)過轉換的第一內(nèi)容數(shù)據(jù)傳輸?shù)降诙鎯ρb置,并且以第二數(shù)據(jù)長度為單位將存儲在第二存儲裝置中的第一內(nèi)容數(shù)據(jù)輸出到第一進程。
該記錄方法還可以包括提取步驟,提取包括在輸入第一內(nèi)容數(shù)據(jù)中的控制信息根據(jù)在提取步驟提取的控制信息,可以禁止將輸入第一內(nèi)容數(shù)據(jù)記錄在記錄介質上。
該記錄方法還可以包括處理步驟,根據(jù)在提取步驟提取的控制信息,對輸入第一內(nèi)容數(shù)據(jù)執(zhí)行預定處理。
第二程序還可以控制以第二內(nèi)容數(shù)據(jù)的形式發(fā)送輸入第一內(nèi)容數(shù)據(jù),其中,第二內(nèi)容數(shù)據(jù)是其數(shù)據(jù)格式與第一內(nèi)容數(shù)據(jù)的數(shù)據(jù)格式不同的流數(shù)據(jù)。
第二進程還可以包括登記步驟,登記請求了發(fā)送數(shù)據(jù)到第二進程的第一程序,以便第二進程拒絕用于從與第一程序不同的程序發(fā)送內(nèi)容數(shù)據(jù)的請求。
第二進程還可以登記請求了從傳輸步驟接收數(shù)據(jù)的第二程序,以便只有當?shù)怯浟说诙绦驎r第二進程才準許從第一程序發(fā)送數(shù)據(jù)。
在本發(fā)明的記錄設備或記錄方法中,在由操作系統(tǒng)控制的第一程序的控制下,接收輸入第一內(nèi)容數(shù)據(jù),在由操作系統(tǒng)控制的第二程序的控制下,將輸入第一內(nèi)容數(shù)據(jù)記錄在記錄介質上,在由操作系統(tǒng)控制的第一進程的控制下,接收被指定所要傳輸?shù)牡谝粌?nèi)容數(shù)據(jù),并且在第二進程的控制下傳輸?shù)谝粌?nèi)容數(shù)據(jù),其中,僅當正在接收所要傳輸?shù)臄?shù)據(jù)的時候第二進程才控制傳輸,并且一完成傳輸就立即終止第二進程。
從而,例如,可以通過由不保證輪轉時間的多任務操作系統(tǒng)控制的記錄/回放設備來更容易地且不產(chǎn)生損失地記錄作為流提供的內(nèi)容。
圖1是示出根據(jù)本發(fā)明一個實施例的記錄/回放設備的結構的方框圖。
圖2是示出記錄/回放設備中的音頻數(shù)據(jù)的示意流的圖。
圖3是示出由CPU執(zhí)行的各程序的功能的方案(scheme)的方框圖。
圖4是示出音頻數(shù)據(jù)處理程序、應用程序和套接字之間的關系的圖。
圖5是示出包括在音頻數(shù)據(jù)處理程序中的程序和功能的方框圖。
圖6是示出回放應用程序的登記處理的流程圖。
圖7是示出用于確認包括在消息中的登記ID的處理的流程圖。
圖8是示出用于執(zhí)行與包括在消息中的命令相對應的處理的處理的流程圖。
圖9是示出消息結構的圖。
圖10是示出用于將音頻數(shù)據(jù)從回放應用程序發(fā)送到音頻數(shù)據(jù)處理程序的處理的方案的流程圖。
圖11是示出用于將音頻數(shù)據(jù)從音頻數(shù)據(jù)處理程序發(fā)送到記錄應用程序的處理的方案的流程圖。
圖12是示出用于激活音頻數(shù)據(jù)處理程序的處理的流程圖。
圖13是示出消息處理的流程圖。
圖14是示出用于從聲卡讀取音頻數(shù)據(jù)的處理的流程圖。
圖15是示出從聲卡讀取的音頻數(shù)據(jù)的格式的圖。
圖16是示出如何將音頻數(shù)據(jù)存儲在讀取數(shù)據(jù)緩沖區(qū)(buffer)中的圖。
圖17是示出如何將音頻數(shù)據(jù)存儲在讀取數(shù)據(jù)緩沖區(qū)中的圖。
圖18是示出用于分析和處理音頻數(shù)據(jù)的處理的流程圖。
圖19是示出用于分析和處理音頻數(shù)據(jù)的處理的流程圖。
圖20是示出用于分析和處理音頻數(shù)據(jù)的處理的流程圖。
圖21是示出存儲在記錄數(shù)據(jù)緩沖區(qū)或回放數(shù)據(jù)緩沖區(qū)中的音頻數(shù)據(jù)的結構的圖。
圖22是示出存儲在記錄數(shù)據(jù)緩沖區(qū)或回放數(shù)據(jù)緩沖區(qū)中的音頻數(shù)據(jù)的首標部分的結構的圖。
圖23是示出類別是CD的情況下子碼Q的結構的圖。
圖24是示出類別是MD的情況下子碼Q的結構的圖。
圖25是示出用于發(fā)送存儲在記錄數(shù)據(jù)緩沖區(qū)中的音頻數(shù)據(jù)的處理的流程圖。
圖26是不使用套接字的情況下的處理的示例圖。
圖27是示出套接字的操作的圖。
圖28是示出套接字的操作的圖。
圖29是示出套接字的操作的圖。
圖30是表示回放完成的模式的示例圖。
圖31是示出傳統(tǒng)記錄處理的流程圖。
圖32是示出記錄應用程序的記錄處理的流程圖。
圖33是示出用于由套接字服務程序接收音頻數(shù)據(jù)的處理的流程圖。
圖34是示出用于由套接字服務程序傳輸音頻數(shù)據(jù)的處理的流程圖。
圖35是示出用于獲得消逝(elapsed)記錄時間的處理的圖。
圖36是示出用于從回放應用程序接收音頻數(shù)據(jù)的處理的流程圖。
圖37是示出套接字的操作的圖。
圖38是示出套接字的操作的圖。
圖39是示出用于由回放應用程序讀取音頻數(shù)據(jù)的處理的流程圖。
圖40是示出用于獲得消逝回放時間的處理的圖。
具體實施例方式
圖1是示出根據(jù)本發(fā)明一個實施例的記錄/回放設備的結構的圖。
CPU(中央處理單元)11通過執(zhí)行存儲在SDRAM(同步動態(tài)隨機存取存儲器)12中的各種程序例如作為用于允許記錄/回放設備工作的基本程序的操作系統(tǒng)以及后面將要描述的各種應用程序,實際上執(zhí)行指定處理。
而且,CPU 11控制整個記錄/回放設備。可以使用例如LINUXOS作為操作系統(tǒng),其中,LINUX OS是原先開發(fā)以與個人計算機一起使用的所謂多任務操作系統(tǒng)。
SDRAM 12存儲由CPU 11執(zhí)行的程序和執(zhí)行程序所需的參數(shù)和數(shù)據(jù)。
SDRAM 12可以是其他類型的DRAM或者SRAM(靜態(tài)RAM)如RD-RAM(RambusTMDRAM)。
IDE(集成設備電子)接口13是用于連接與ATA(AT聯(lián)接)兼容的記錄介質的接口。IDE接口13連接到CPU 11、HDD(硬盤驅動器)14和CD-ROM(致密盤-只讀存儲器)驅動器15。
HDD 14在其上記錄操作系統(tǒng)和由CPU 11執(zhí)行的各種應用程序。HDD 14讀取記錄在其上的程序,并且將這些程序提供給CPU11。
HDD 14驅動包括在其中的硬盤,從而通過IDE接口13,將從CPU 11提供的數(shù)據(jù)記錄在硬盤上,或者讀取記錄在硬盤上的數(shù)據(jù)并且將數(shù)據(jù)提供給CPU 11。例如,HDD 14將從CPU 11提供的內(nèi)容(musical piece,曲目)如音頻數(shù)據(jù)記錄在硬盤上,或者讀取記錄在硬盤上的音頻數(shù)據(jù)并且將音頻數(shù)據(jù)提供給CPU 11。
CD-ROM驅動器15讀取記錄于安裝在其上的CD-ROM或CD(致密盤)上的數(shù)據(jù),并且通過IDE接口13將數(shù)據(jù)提供給CPU11。例如,CD-ROM驅動器15讀取記錄于安裝在其上的CD上的內(nèi)容(曲目)如音頻數(shù)據(jù),并且通過IDE接口13將音頻數(shù)據(jù)提供給CPU11。
PCI(外設部件互連)總線16是用于連接擴展設備等如內(nèi)插卡到記錄/回放設備的總線。PCI總線16連接到圖形卡17、聲卡18和驅動器19。
圖形卡17根據(jù)通過PCI總線16從CPU 11提供的數(shù)據(jù),生成用于在未示出的顯示器上顯示圖像或文本的信號,并且控制顯示器以便顯示圖像或文本。
聲卡18將通過PCI總線16從CPU 11提供的數(shù)據(jù)提供給后面將要描述的DAC(數(shù)模轉換器)52。而且,聲卡18獲得從后面將要描述的外部回放設備51提供的數(shù)據(jù),并且通過PCI總線16將數(shù)據(jù)提供給CPU 11。
聲卡18輸出遵循IEC(國際電工委員會)60958標準的時間連續(xù)數(shù)據(jù)即所謂的流音頻數(shù)據(jù)。聲卡18接收遵循IEC 60958標準的時間連續(xù)流音頻數(shù)據(jù)的輸入。
驅動器19讀取記錄于安裝在其上的磁盤31、光盤32、磁光盤33或半導體存儲器34上的程序,并且通過PCI總線16將所獲得的數(shù)據(jù)提供給CPU 11或SDRAM 12。
下面將描述由用于記錄或回放作為內(nèi)容例子的音頻數(shù)據(jù)的記錄/回放設備執(zhí)行的處理。然而,內(nèi)容不限于音頻數(shù)據(jù),而可以是例如活動圖像數(shù)據(jù)或者數(shù)值數(shù)據(jù)。
圖2是示出記錄/回放設備中的音頻數(shù)據(jù)的示意流的圖。
例如,當從外部回放設備51如CD播放器或MD(微型盤)播放器獲得內(nèi)容(曲目)的流音頻數(shù)據(jù)并且將音頻數(shù)據(jù)記錄在HDD 14上時,從聲卡18輸入音頻數(shù)據(jù),并且通過DMA(直接存儲器存取)將其從聲卡18提供給SDRAM 12。臨時存儲在聲卡18中的音頻數(shù)據(jù)提供給HDD 14,并且記錄在HDD 14上。
當將記錄在HDD 14上的音頻數(shù)據(jù)輸出到外部設備例如DAC(數(shù)模轉換器)52時,也就是,當回放內(nèi)容(曲目)的音頻數(shù)據(jù)時,在CPU11的控制下,HDD 14讀取記錄在其上的音頻數(shù)據(jù),并且將音頻數(shù)據(jù)提供給SDRAM 12。
類似地,當回放記錄于安裝在CD-ROM驅動器15上的CD上的音頻數(shù)據(jù)時,在CPU 11的控制下,CD-ROM驅動器15讀取記錄在CD上的音頻數(shù)據(jù),并且將音頻數(shù)據(jù)提供給SDRAM 12。
SDRAM 12存儲從HDD 14或CD-ROM驅動器15提供的音頻數(shù)據(jù)。
存儲在SDRAM 12中的音頻數(shù)據(jù)通過DMA提供給聲卡18。聲卡18將從SDRAM 12提供的音頻數(shù)據(jù)作為流輸出到DAC 52。DAC52對音頻數(shù)據(jù)執(zhí)行數(shù)模轉換,從而生成音頻信號。例如,DAC 52將音頻信號提供給未示出的揚聲器,從而揚聲器將輸出聲音。
圖3是示出由CPU 11執(zhí)行的各程序的功能的結構的方框圖。
設備驅動程序81是用于根據(jù)來自內(nèi)核82的請求控制IDE接口13、HDD 14、CD-ROM驅動器15、圖形卡17和聲卡18的程序。實際上,IDE接口13、HDD 14、CD-ROM驅動器15、圖形卡17和聲卡18由它們各自的設備驅動程序單獨控制。在本說明書中,單獨設備驅動程序將統(tǒng)稱作設備驅動程序81。
內(nèi)核82是操作系統(tǒng)的主程序(基本程序)。內(nèi)核82提供記錄/回放設備的工作所需的功能,如各種設備的控制、文件系統(tǒng)、用戶進程的執(zhí)行和監(jiān)控以及存儲器管理。
進程在此是指在多任務操作系統(tǒng)中獨立占據(jù)存儲器資源、盤資源、I/O資源和其他資源的程序執(zhí)行單元。在多任務操作系統(tǒng)中,將表面上獨立的存儲器空間和I/O空間分配給與正在執(zhí)行的各個程序相關聯(lián)的進程,從而使各個程序顯得單獨運行。因此,這些程序無需考慮與同時執(zhí)行的其他程序的關系。
進程包括由用戶激活的用戶進程以及用于作為獨立進程執(zhí)行操作系統(tǒng)的部分功能的系統(tǒng)進程。
例如,內(nèi)核82執(zhí)行處理的發(fā)起和終止管理、設備管理、系統(tǒng)控制如問題管理、異常處理、進程管理以及進程間通信的執(zhí)行管理。內(nèi)核82以進程為單位采用分時方式執(zhí)行作為用戶進程的音頻數(shù)據(jù)處理程序83、記錄應用程序85和回放應用程序86。
當要記錄從外界提供的音頻數(shù)據(jù)時,音頻數(shù)據(jù)處理程序83獲得通過設備驅動程序81和內(nèi)核82作為流從外界提供的音頻數(shù)據(jù),并且通過套接字服務程序84-1將音頻數(shù)據(jù)提供給記錄應用程序85。而且,當音頻數(shù)據(jù)要輸出到外界從而音頻數(shù)據(jù)將由外部設備回放時,音頻數(shù)據(jù)處理程序83通過套接字服務程序84-2從回放應用程序86獲得音頻數(shù)據(jù),并且通過內(nèi)核82和設備驅動程序81使聲卡18將音頻數(shù)據(jù)作為流輸出到外界。
音頻數(shù)據(jù)處理程序83是由多個程序(進程)例如CD播放器應用如回放應用程序86和HD記錄器應用如記錄應用程序85公共使用的軟件。為了允許進程公共使用音頻數(shù)據(jù)處理程序83,音頻數(shù)據(jù)處理程序83使用后面將要描述的稱作套接字的進程間通信方案。
因此,通常必須由各個應用程序單獨執(zhí)行的公共處理如音頻數(shù)據(jù)的分析、計算和其他處理可以全然地分配給音頻數(shù)據(jù)處理程序83。
這用于避免在記錄應用程序85和回放應用程序86的每一個中各自實現(xiàn)公共處理。也就是,允許資源的公共使用。
套接字服務程序84-1是用于以音頻數(shù)據(jù)處理程序83為輸入并且以記錄應用程序85為輸出建立套接字的程序。由套接字服務程序84-1建立的套接字將音頻數(shù)據(jù)從音頻數(shù)據(jù)處理程序83傳輸?shù)接涗洃贸绦?5。
而且,該套接字用于在音頻數(shù)據(jù)處理程序83與記錄應用程序85之間交換消息。
套接字服務程序84-2是以回放應用程序86為輸入并且以音頻數(shù)據(jù)處理程序83為輸出建立套接字的程序。由套接字服務程序84-2建立的套接字將音頻數(shù)據(jù)從回放應用程序86傳輸?shù)揭纛l數(shù)據(jù)處理程序83。
而且,該套接字用于在音頻數(shù)據(jù)處理程序83與回放應用程序86之間交換消息。
例如,套接字服務程序84-1和84-2與操作系統(tǒng)一起作為共享庫的API(應用編程接口)來提供。
在本發(fā)明的記錄/回放設備中,當從回放應用程序86來看時,由音頻數(shù)據(jù)處理程序83執(zhí)行的處理顯得無延遲地立即執(zhí)行。類似地,當從記錄應用程序85來看時,由音頻數(shù)據(jù)處理程序83執(zhí)行的處理顯得無延遲地立即執(zhí)行。
圖4是音頻數(shù)據(jù)處理程序83、應用程序和套接字之間的關系的示例圖。在圖4中,每條實線表示用于在音頻數(shù)據(jù)處理程序83與應用程序1至4之一交換消息的套接字。
在圖4中,單點虛線表示用于將音頻數(shù)據(jù)從應用程序1提供給音頻數(shù)據(jù)處理程序83的套接字。在圖4中,雙點虛線表示用于將音頻數(shù)據(jù)從音頻數(shù)據(jù)處理程序83提供給應用程序3的套接字。
用于與音頻數(shù)據(jù)處理程序83交換消息的套接字分別為應用程序1至4提供。然而,僅提供一個用于允許音頻數(shù)據(jù)處理程序83發(fā)送音頻數(shù)據(jù)的套接字,該套接字與多個應用程序中的一個用于執(zhí)行記錄處理的應用程序相關聯(lián)。而且,僅提供一個用于允許音頻數(shù)據(jù)處理程序83接收音頻數(shù)據(jù)的套接字,該套接字與多個應用程序中的一個用于執(zhí)行回放處理的應用程序相關聯(lián)。
這防止由于另一個應用程序的攔截而導致的音頻數(shù)據(jù)損失,并且還防止由于音頻數(shù)據(jù)與從另一個應用程序提供的其他音頻數(shù)據(jù)混合而導致的聲音跳躍。
用于獨占性地建立用于發(fā)送音頻數(shù)據(jù)的套接字的處理將在后面進行描述。
套接字可以通過例如在BSD UNIX上開發(fā)的Socket、由美國微軟TM公司開發(fā)的WinSock,或者在UNIX系統(tǒng)V上開發(fā)的采用流架構的OpenTransport實現(xiàn)。
套接字一般用于多個進程之間的通信,并且經(jīng)常實現(xiàn)為網(wǎng)際協(xié)議的一部分。使用套接字的優(yōu)點之一是套接字容易地允許傳輸大數(shù)據(jù)量。套接字將在后面進行更詳細的描述。
記錄應用程序85是用于通過由套接字服務程序84-1提供的套接字將從音頻數(shù)據(jù)處理程序83提供的音頻數(shù)據(jù)記錄在HDD 14上的程序。記錄應用程序85通過內(nèi)核82和設備驅動程序81將所獲得的音頻數(shù)據(jù)提供給HDD 14。HDD 14記錄通過內(nèi)核82和設備驅動程序81從記錄應用程序85提供的音頻數(shù)據(jù)。
更具體地說,當記錄應用程序85通過系統(tǒng)調(diào)用向內(nèi)核82請求了記錄音頻數(shù)據(jù)時,內(nèi)核82使設備驅動程序81控制將音頻數(shù)據(jù)記錄在HDD 14上。
回放應用程序86通過內(nèi)核82和設備驅動程序81使CD-ROM驅動器15從安裝在其上的CD 91讀取音頻數(shù)據(jù),從而獲得音頻數(shù)據(jù)?;蛘撸胤艖贸绦?6通過內(nèi)核82和設備驅動程序81使HDD 14讀取記錄在其上的音頻數(shù)據(jù),從而獲得音頻數(shù)據(jù)。
更具體地說,當回放應用程序86通過系統(tǒng)調(diào)用向內(nèi)核82請求了從CD-ROM驅動器15讀取音頻數(shù)據(jù)時,內(nèi)核82使設備驅動程序81控制讀取記錄于安裝在CD-ROM驅動器15上的CD上的音頻數(shù)據(jù)?;蛘?,當回放應用程序86通過系統(tǒng)調(diào)用向內(nèi)核82請求了從HDD 14讀取音頻數(shù)據(jù)時,內(nèi)核82使設備驅動程序81控制從HDD14讀取音頻數(shù)據(jù)。
回放應用程序86通過由套接字服務程序84-2提供的套接字將所獲得的音頻數(shù)據(jù)提供給音頻數(shù)據(jù)處理程序83。
音頻數(shù)據(jù)處理程序83向內(nèi)核82請求輸出從回放應用程序86提供的音頻數(shù)據(jù)。內(nèi)核82使設備驅動程序81控制聲卡18,從而將作為流來輸出音頻數(shù)據(jù)。
由CPU 11執(zhí)行的程序所控制的虛擬空間可以分類成內(nèi)核空間和用戶進程空間。內(nèi)核空間由操作系統(tǒng),主要地由內(nèi)核82控制。另一方面,在用戶進程空間中,執(zhí)行不同于操作系統(tǒng)的普通應用程序。
例如,在內(nèi)核空間中,執(zhí)行組成操作系統(tǒng)的設備驅動程序81和內(nèi)核82以及套接字服務程序84-1和套接字服務程序84-2。在用戶進程空間中,執(zhí)行作為普通應用程序的音頻數(shù)據(jù)處理程序83、記錄應用程序85和回放應用程序86。
系統(tǒng)調(diào)用是指在用戶進程空間中執(zhí)行的普通應用程序向在內(nèi)核空間中執(zhí)行的操作系統(tǒng)發(fā)出服務請求的過程。例如,在用戶進程空間與內(nèi)核空間之間傳輸音頻數(shù)據(jù)或者控制諸如HDD 14、CD-ROM驅動器15和聲卡18的設備通過系統(tǒng)調(diào)用來執(zhí)行。例如,在音頻數(shù)據(jù)處理程序83與內(nèi)核82之間傳輸音頻數(shù)據(jù)通過從音頻數(shù)據(jù)處理程序83到內(nèi)核82的系統(tǒng)調(diào)用來執(zhí)行。另外,聲卡18的控制也通過系統(tǒng)調(diào)用來執(zhí)行。
在本說明書中,系統(tǒng)調(diào)用包括所謂的庫調(diào)用和內(nèi)核調(diào)用。
下一步,將描述音頻數(shù)據(jù)處理程序83的方案。
圖5是示出包括在音頻數(shù)據(jù)處理程序83中的程序和功能的方框圖。
讀取控制程序101控制從聲卡18讀取音頻數(shù)據(jù),從而讀取從獲得了遵循IEC 60958的流的聲卡18讀取的音頻數(shù)據(jù),并且將音頻數(shù)據(jù)存儲在讀取數(shù)據(jù)緩沖區(qū)102中。
讀取數(shù)據(jù)緩沖區(qū)102以子幀為單位臨時存儲從聲卡18讀取的音頻數(shù)據(jù)。讀取數(shù)據(jù)緩沖區(qū)102可以例如以所謂的環(huán)形緩沖區(qū)的形式來實現(xiàn)。
例如,讀取數(shù)據(jù)緩沖區(qū)102是由N個緩沖區(qū)(作為數(shù)據(jù)存儲單元的緩沖區(qū))組成的環(huán)形緩沖區(qū)。最近的音頻數(shù)據(jù)依次順序存儲在第一緩沖區(qū)、第二緩沖區(qū)、第三緩沖區(qū)、第四緩沖區(qū)等等。當音頻數(shù)據(jù)填完第N個緩沖區(qū)時,接下來重新在第一緩沖區(qū)中存儲音頻數(shù)據(jù)。因此,在環(huán)形緩沖區(qū)中,N個緩沖區(qū)形成邏輯環(huán),并且用于存儲音頻數(shù)據(jù)的處理和用于讀取音頻數(shù)據(jù)的處理沿著邏輯環(huán)執(zhí)行。
為此,對于每一個環(huán)形緩沖區(qū)都提供一個寫入指針和一個讀取指針,其中,寫入指針表示音頻數(shù)據(jù)下一步要存儲在環(huán)形緩沖區(qū)中的位置,并且讀取指針表示下一步要從環(huán)形緩沖區(qū)上讀取音頻數(shù)據(jù)的位置。
根據(jù)由寫入指針表示的位置和由讀取指針表示的位置,也就是,根據(jù)寫入指針的值和讀取指針的值,可以判定環(huán)形緩沖區(qū)是空還是滿。
音頻數(shù)據(jù)分析和濾波程序103分析表示存儲在讀取數(shù)據(jù)緩沖區(qū)102中的音頻數(shù)據(jù)中所包括的音頻數(shù)據(jù)特征的數(shù)據(jù),并且將對應于分析結果的數(shù)據(jù)加到音頻數(shù)據(jù)。音頻數(shù)據(jù)分析和濾波程序103通過記錄數(shù)據(jù)緩沖區(qū)104或者開關105將帶有對應于分析結果的數(shù)據(jù)的音頻數(shù)據(jù)提供給IEC-60958編碼程序106。
記錄數(shù)據(jù)緩沖區(qū)104臨時存儲要提供給記錄應用程序85的音頻數(shù)據(jù)。記錄數(shù)據(jù)緩沖區(qū)104可以例如以所謂的環(huán)形緩沖區(qū)的形式來實現(xiàn)。
當要發(fā)送到記錄應用程序85的新音頻數(shù)據(jù)不存在于記錄數(shù)據(jù)緩沖區(qū)104中時,音頻數(shù)據(jù)處理程序83使得在記錄應用程序85的讀取處理中產(chǎn)生延遲。
當即使新音頻數(shù)據(jù)順序存儲在記錄數(shù)據(jù)緩沖區(qū)104中記錄應用程序85也沒有或者不能讀取音頻數(shù)據(jù)時,保存音頻數(shù)據(jù)直到記錄數(shù)據(jù)緩沖區(qū)104變滿。
因此,防止由記錄應用程序85記錄的音頻數(shù)據(jù)(內(nèi)容(曲目))的聲音漏失。
音頻數(shù)據(jù)處理程序83無需不斷地與記錄應用程序85同步,并且當記錄應用程序85由于某些原因而不能保證實時音頻流時,它防止聲音漏失。
發(fā)送控制程序107是用于控制將存儲在記錄數(shù)據(jù)緩沖區(qū)104中的音頻數(shù)據(jù)提供給記錄應用程序85的程序。更具體地說,從當記錄應用程序85指定記錄開始位置時到當記錄應用程序85指定記錄結束位置時,也就是,在記錄應用程序85正在執(zhí)行記錄處理的時候,每次新音頻數(shù)據(jù)存儲在記錄數(shù)據(jù)緩沖區(qū)104中時,發(fā)送控制程序107將新存儲的音頻數(shù)據(jù)提供給記錄應用程序85。
當發(fā)送控制程序107控制將音頻數(shù)據(jù)提供給記錄應用程序85時,它與記錄應用程序85交換消息。
接收控制程序108是用于從回放應用程序86獲得音頻數(shù)據(jù)并且將音頻數(shù)據(jù)存儲在回放數(shù)據(jù)緩沖區(qū)109中的程序。接收控制程序108在用于從回放應用程序86獲得音頻數(shù)據(jù)的處理的期間與回放應用程序86交換消息。
回放數(shù)據(jù)緩沖區(qū)109臨時存儲從回放應用程序86提供的音頻數(shù)據(jù)。回放數(shù)據(jù)緩沖區(qū)109可以例如以所謂的環(huán)形緩沖區(qū)的形式來實現(xiàn)。
記錄數(shù)據(jù)緩沖區(qū)104和回放數(shù)據(jù)緩沖區(qū)109存儲具有后面將參照圖21和22所述的結構的音頻數(shù)據(jù)。
存儲在回放數(shù)據(jù)緩沖區(qū)109中的音頻數(shù)據(jù)通過后面將要參照圖18到20所述的處理發(fā)送到聲卡18。當音頻數(shù)據(jù)發(fā)送到聲卡18時,在回放數(shù)據(jù)緩沖區(qū)109中出現(xiàn)空處,從而可以從回放應用程序86向其傳輸音頻數(shù)據(jù)。
當回放數(shù)據(jù)緩沖區(qū)109中存在空處時,回放應用程序86立刻將預定大小的音頻數(shù)據(jù)傳輸?shù)交胤艛?shù)據(jù)緩沖區(qū)109。然后,每次回放數(shù)據(jù)緩沖區(qū)109中出現(xiàn)空處時,回放應用程序86立刻將預定大小的音頻數(shù)據(jù)傳輸?shù)交胤艛?shù)據(jù)緩沖區(qū)109。
因此,類似于記錄的情況,即使在回放應用程序86由于某些原因而不能有規(guī)律地傳輸音頻數(shù)據(jù)的情況下,當在回放數(shù)據(jù)緩沖區(qū)109中存儲音頻數(shù)據(jù)時,也防止所回放聲音的漏失。
而且,當回放應用程序86停止回放或者改變被回放的曲目時,通過清除存儲在回放數(shù)據(jù)緩沖區(qū)109中的音頻數(shù)據(jù),防止從聲卡18連續(xù)輸出存儲在回放數(shù)據(jù)緩沖區(qū)109中的音頻數(shù)據(jù)。
開關105選擇從音頻數(shù)據(jù)分析和濾波程序103提供的音頻數(shù)據(jù)、從回放數(shù)據(jù)緩沖區(qū)109提供的音頻數(shù)據(jù)和從用于生成對應于無聲的零數(shù)據(jù)的零數(shù)據(jù)生成程序110提供的零數(shù)據(jù)的音頻數(shù)據(jù)之一,并且將所選音頻數(shù)據(jù)提供給IEC-60958編碼程序106。
例如,當執(zhí)行記錄同時檢查由記錄應用程序85記錄的聲音(也就是,同時從聲卡18輸出音頻數(shù)據(jù))時,選擇記錄數(shù)據(jù)緩沖區(qū)104作為所要輸出的音頻數(shù)據(jù)的源。也就是,開關105選擇從音頻數(shù)據(jù)分析和濾波程序103提供的音頻數(shù)據(jù),并且將音頻數(shù)據(jù)提供給IEC-60958編碼程序106。
從而,允許用戶執(zhí)行記錄同時檢查通過后面參照圖18到20所示的流程圖所述的處理經(jīng)過處理的音頻數(shù)據(jù)。
例如,當回放應用程序86執(zhí)行回放處理時,選擇回放數(shù)據(jù)緩沖區(qū)109作為所要輸出的音頻數(shù)據(jù)的源。也就是,開關105選擇從回放數(shù)據(jù)緩沖區(qū)109提供的音頻數(shù)據(jù),并且將音頻數(shù)據(jù)提供給IEC-60958編碼程序106。
而且,例如,當不存在回放進程或者記錄進程時,也就是,當回放應用程序86或記錄應用程序85未被激活時,既不選擇記錄數(shù)據(jù)緩沖區(qū)104,也不選擇回放數(shù)據(jù)緩沖區(qū)109,并且輸出對應于無聲的音頻數(shù)據(jù)。也就是,開關105選擇從用于生成對應于無聲的零數(shù)據(jù)的零數(shù)據(jù)生成程序110提供的零數(shù)據(jù)的音頻數(shù)據(jù),并且將音頻數(shù)據(jù)提供給IEC-60958編碼程序106。
當回放應用程序86暫停了曲目回放時,必須停止回放數(shù)據(jù)緩沖區(qū)109的操作。另外,在這種情況下,既不選擇記錄數(shù)據(jù)緩沖區(qū)104,也不選擇回放數(shù)據(jù)緩沖區(qū)109,從而輸出對應于無聲的音頻數(shù)據(jù)。
IEC-60958編碼程序106根據(jù)IEC 60958標準對通過開關105提供的音頻數(shù)據(jù)進行編碼。也就是,IEC-60958編碼程序106根據(jù)IEC60958標準改變音頻數(shù)據(jù)的格式。IEC-60958編碼程序106將根據(jù)IEC 60958標準經(jīng)過編碼的音頻數(shù)據(jù)提供給寫入數(shù)據(jù)緩沖區(qū)111。
寫入數(shù)據(jù)緩沖區(qū)111以子幀為單位臨時存儲從記錄數(shù)據(jù)緩沖區(qū)104提供的音頻數(shù)據(jù)。寫入數(shù)據(jù)緩沖區(qū)111可以例如以所謂的環(huán)形緩沖區(qū)的形式來實現(xiàn)。
當音頻數(shù)據(jù)處理程序83工作的時候,存儲在寫入數(shù)據(jù)緩沖區(qū)111中的音頻數(shù)據(jù)以恒定定時有規(guī)律地輸出到聲卡18。因此,可以認為寫入數(shù)據(jù)緩沖區(qū)111恒定工作。
讀取數(shù)據(jù)緩沖區(qū)102和寫入數(shù)據(jù)緩沖區(qū)111根據(jù)IEC 60958以子幀為單位存儲音頻數(shù)據(jù)。另一方面,記錄數(shù)據(jù)緩沖區(qū)104和回放數(shù)據(jù)緩沖區(qū)109以由數(shù)目大于子幀的樣本數(shù)據(jù)組成的數(shù)據(jù)為單位存儲音頻數(shù)據(jù)(后面將參照圖30對此進行描述)。
雖然本描述是在遵循IEC 60958的音頻數(shù)據(jù)流的上下文中給出的,但是也可以使用其他類型的流,例如,MPEG(活動圖像專家組)傳輸流或者分組化基本流,并且本發(fā)明不受限于流的類型。
下一步,將參照圖6到11描述由音頻數(shù)據(jù)處理程序83到回放應用程序86執(zhí)行的處理的概述。
圖6是示出由回放應用程序86執(zhí)行的登記處理的流程圖。
在步驟S1001,回放應用程序86生成登記名稱。在步驟S1002,回放應用程序86通過進程間通信將用于建立套接字的請求與登記名稱一起發(fā)送到音頻數(shù)據(jù)處理程序83。
在步驟S2001,音頻數(shù)據(jù)處理程序83接收由回放應用程序86發(fā)送的登記名稱和用于建立套接字的請求。在步驟S2002,音頻數(shù)據(jù)處理程序83檢查回放應用程序的重復登記,也就是,是否沒有另一個應用程序已被登記為要執(zhí)行回放處理的一方。如果有另一個應用程序已被登記為回放應用程序,則不執(zhí)行隨后處理。
因此,防止多個回放應用程序的多重登記。從而,防止建立兩個或更多個用于從應用程序接收音頻數(shù)據(jù)的套接字,從而防止聲音跳躍。
如果判定通過步驟S2001中的處理接收的登記名稱未與另一個應用程序相關聯(lián)而被登記,則處理進入步驟S2003。在步驟S2003,音頻數(shù)據(jù)處理程序83登記通過步驟S21001中的處理接收的登記名稱,并且生成與登記名稱相關聯(lián)的登記ID。音頻數(shù)據(jù)處理程序83將登記ID與登記名稱相關聯(lián)進行登記。也就是,音頻數(shù)據(jù)處理程序83相互關聯(lián)地存儲登記ID和登記名稱。
音頻數(shù)據(jù)處理程序83向內(nèi)核82請求與回放應用程序86建立套接字。
在步驟S2004,音頻數(shù)據(jù)處理程序83將登記ID發(fā)送到回放應用程序86。
在步驟S1003,回放應用程序86接收由音頻數(shù)據(jù)處理程序83發(fā)送的登記ID。
在步驟S1004,回放應用程序86存儲所接收的登記ID,然后處理結束。
由記錄應用程序85執(zhí)行的登記處理與參照圖6所示的流程圖所述的處理相同,從而將省略其描述。
防止多個記錄應用程序的多重登記。因此,防止建立兩個或更多個用于將音頻數(shù)據(jù)發(fā)送到應用程序的套接字,從而防止聲音漏失。
圖7是用于確認包括在用于向音頻數(shù)據(jù)處理程序83請求處理的消息中的登記ID的處理的流程圖。
在步驟S1101,回放應用程序86發(fā)送其中登記ID包含在進程信息中的消息。消息的結構將在后面進行描述。
在步驟S2101,音頻數(shù)據(jù)處理程序83接收由回放應用程序86發(fā)送的其中登記ID包括在進程信息中的消息。音頻數(shù)據(jù)處理程序83從消息的進程消息中提取登記ID。
在步驟S2102,音頻數(shù)據(jù)處理程序83根據(jù)所存儲的登記ID判定所提取的登記ID是否仍未被登記。如果判定所提取的登記ID已被登記,則處理進入步驟S2103,其中,音頻數(shù)據(jù)處理程序83執(zhí)行與包括在消息中的命令相對應的處理。
另一方面,如果在步驟S2102判定所提取的登記ID未被登記,則處理進入步驟S2104,其中,音頻數(shù)據(jù)處理程序83將錯誤消息發(fā)送到回放應用程序86。如果判定所提取的登記ID未被登記,則音頻數(shù)據(jù)處理程序83不執(zhí)行與包括在消息中的命令相對應的處理。
在步驟S1102,回放應用程序86接收由音頻數(shù)據(jù)處理程序83發(fā)送的錯誤消息,然后處理結束。
類似地,對于由記錄應用程序85發(fā)送的消息,執(zhí)行參照圖7所述的用于確認包括在消息中的登記ID的處理,從而將省略其描述。
從而,當多個應用程序在回放處理或記錄處理中使用音頻數(shù)據(jù)處理程序83時,防止多個應用程序同時向音頻數(shù)據(jù)處理程序83請求回放處理或者記錄處理。
例如,當用于執(zhí)行回放的第一進程正在執(zhí)行回放處理時,如果允許用于執(zhí)行回放的第二進程將回放音頻數(shù)據(jù)發(fā)送到音頻數(shù)據(jù)處理程序83,則從第二進程提供的音頻數(shù)據(jù)混合到從第一程序提供的音頻數(shù)據(jù)中。因此,不能正確回放從第一進程提供的音頻數(shù)據(jù)。
類似地,當用于執(zhí)行記錄的第一進程正在執(zhí)行記錄處理時,如果允許音頻數(shù)據(jù)處理程序83發(fā)送音頻數(shù)據(jù)到用于執(zhí)行記錄的第二進程,則音頻數(shù)據(jù)被攔截,從而第一進程導致記錄具有部分損失的音頻數(shù)據(jù)。
為了防止常用的音頻數(shù)據(jù)處理程序83的這種競爭,音頻數(shù)據(jù)處理程序83首先向使用音頻數(shù)據(jù)處理程序83的每個應用程序請求發(fā)送標識其自身的信息。
當實際上執(zhí)行回放處理或者記錄處理時,音頻數(shù)據(jù)處理程序83執(zhí)行獨占性控制。也就是,音頻數(shù)據(jù)處理程序83記住記錄數(shù)據(jù)緩沖區(qū)104的用戶和回放數(shù)據(jù)緩沖區(qū)109的用戶,并且當記錄數(shù)據(jù)緩沖區(qū)104或回放數(shù)據(jù)緩沖區(qū)109正被使用時拒絕其他用戶的使用。
圖8是用于執(zhí)行與包括在由回放應用程序86發(fā)送的消息中的命令相對應的處理的由音頻數(shù)據(jù)處理程序83執(zhí)行的處理的流程圖。
在步驟S1201,回放應用程序86通過用于發(fā)送消息的套接字將包括執(zhí)行請求命令的消息發(fā)送到音頻數(shù)據(jù)處理程序83。
圖9是示出消息結構的圖。消息包括命令、錯誤、進程信息和參數(shù)(argument)。
包括在消息中的命令表示由發(fā)送消息的應用程序向音頻數(shù)據(jù)處理程序83請求的處理。錯誤表示由命令請求的處理的結果。錯誤不一定表示異常完成,并且當處理正常完成時,設置表示處理正常完成的數(shù)據(jù)。
進程信息包括應用程序即進程的名稱、登記ID等。參數(shù)包括與命令相關聯(lián)的參數(shù),即對應于命令的處理所需的參數(shù)。當音頻數(shù)據(jù)處理程序83向應用程序通知由命令請求的處理的結果時,根據(jù)需要作為參數(shù)設置命令執(zhí)行結果。
在步驟S2201,音頻數(shù)據(jù)處理程序83通過套接字接收從回放應用程序86發(fā)送的消息。在步驟S2202,音頻數(shù)據(jù)處理程序83從所接收的消息中提取命令,并且解釋命令。例如,音頻數(shù)據(jù)處理程序83預先存儲將命令的位序列與服務名稱相關聯(lián)的表,并且根據(jù)該表獲得對應于命令的服務名稱。
在步驟S2203,音頻數(shù)據(jù)處理程序83執(zhí)行對應于命令的處理。例如,根據(jù)對應于命令的服務名稱,音頻數(shù)據(jù)處理程序83激活對應于服務名稱的處理。
在步驟S2204,音頻數(shù)據(jù)處理程序83通過用于發(fā)送消息的套接字將包括步驟2203中的處理的執(zhí)行結果的消息發(fā)送到回放應用程序86。執(zhí)行結果存儲在消息的錯誤中。
在步驟S1202,回放應用程序86接收由音頻數(shù)據(jù)處理程序83發(fā)送的包括執(zhí)行結果的消息,然后處理結束。
用于執(zhí)行與包括在由記錄應用程序85發(fā)送的消息中的命令相對應的處理的由音頻數(shù)據(jù)處理程序83執(zhí)行的處理與參照圖8所示的流程圖所述的處理相同,從而將省略其描述。
如上所述,音頻數(shù)據(jù)處理程序83根據(jù)包括在由另一個應用程序發(fā)送的消息中的命令來執(zhí)行特定處理。根據(jù)包括執(zhí)行結果的消息,允許向音頻數(shù)據(jù)處理程序83發(fā)送了包括命令的消息以請求特定處理的應用程序知道音頻數(shù)據(jù)處理程序83的處理結果。
用于將音頻數(shù)據(jù)從回放應用程序86發(fā)送到音頻數(shù)據(jù)處理程序83的處理的概述將參照圖10所示的流程圖進行描述。
在步驟S1301,回放應用程序86通過用于發(fā)送消息的套接字將包括回放命令的消息發(fā)送到音頻數(shù)據(jù)處理程序83。該消息包括回放命令,并且還作為進程信息包括回放應用程序86的登記ID。
在步驟S2301,音頻數(shù)據(jù)處理程序83接收包括回放命令的消息。在步驟S2302,音頻數(shù)據(jù)處理程序83根據(jù)作為進程信息包括在消息中的登記ID,判定發(fā)送了消息的程序即回放應用程序86是否是能夠執(zhí)行回放處理的程序。在步驟S2303,如果判定回放應用程序86是能夠執(zhí)行回放處理的程序,則音頻數(shù)據(jù)處理程序83通過用于發(fā)送消息的套接字,將其中ACK存儲在錯誤中的消息發(fā)送到回放應用程序86。另一方面,如果判定回放應用程序86不是能夠執(zhí)行回放處理的程序,則音頻數(shù)據(jù)處理程序83通過用于發(fā)送消息的套接字將其中NACK存儲在錯誤中的消息發(fā)送到回放應用程序86。
在步驟S1302,回放應用程序86接收由音頻數(shù)據(jù)處理程序83發(fā)送的包括ACK或NACK的消息?;胤艖贸绦?6提取存儲在消息的錯誤中的ACK或NACK。
在步驟S1303,回放應用程序86判定是否接收到ACK。如果判定接收到ACK,則處理進入步驟S1304,其中,回放應用程序86通過用于發(fā)送音頻數(shù)據(jù)的套接字,將所要回放的音頻數(shù)據(jù)發(fā)送到音頻數(shù)據(jù)處理程序83。
在步驟S2304,音頻數(shù)據(jù)處理程序83接收通過用于發(fā)送音頻數(shù)據(jù)的套接字發(fā)送的音頻數(shù)據(jù)。
在步驟S2305,音頻數(shù)據(jù)處理程序83根據(jù)所接收音頻數(shù)據(jù)的大小(字節(jié)數(shù))檢查所接收的音頻數(shù)據(jù),例如,是否在音頻數(shù)據(jù)中發(fā)生了損失。
在步驟S2306,如果在音頻數(shù)據(jù)中檢測到損失,則音頻數(shù)據(jù)處理程序83通過套接字將其中NACK存儲在錯誤中的消息發(fā)送到回放應用程序86。另一方面,如果在音頻數(shù)據(jù)中沒有檢測到損失,則音頻數(shù)據(jù)處理程序83通過套接字將其中ACK存儲在錯誤中的消息發(fā)送到回放應用程序86。
在步驟S1305,回放應用程序86接收由音頻數(shù)據(jù)處理程序83發(fā)送的其中ACK或NACK存儲在錯誤中的消息?;胤艖贸绦?6從消息的錯誤中提取ACK或NACK。
在步驟S1306,回放應用程序86判定是否接收到包括NACK的消息。如果判定接收到包括NACK的消息,則處理進入步驟S1307,其中,回放應用程序86通過用于發(fā)送音頻數(shù)據(jù)的套接字將音頻數(shù)據(jù)重新發(fā)送到音頻數(shù)據(jù)處理程序83。通過步驟S1307中的處理重新發(fā)送的音頻數(shù)據(jù)與通過步驟S1304中的處理發(fā)送的音頻數(shù)據(jù)相同。
在步驟S2307,音頻數(shù)據(jù)處理程序83接收由回放應用程序86重新發(fā)送的音頻數(shù)據(jù)。如果通過步驟S2304中的處理接收到不帶任何損失的音頻數(shù)據(jù),則不執(zhí)行步驟S2307中的處理。
用于重新發(fā)送音頻數(shù)據(jù)的處理對于每條音頻數(shù)據(jù)僅限于一次。這是因為如果一條音頻數(shù)據(jù)被重新發(fā)送若干次,則音頻數(shù)據(jù)將不能得到及時回放。
如果在步驟S1306判定接收到包括ACK的消息,則認為音頻數(shù)據(jù)處理程序83通過步驟S2304中的處理接收到不帶任何損失的音頻數(shù)據(jù),從而無需重新發(fā)送音頻數(shù)據(jù)。因此,跳過步驟S1307中的處理,并且處理進入步驟S1308。
在步驟S1308,回放應用程序86判定是否退出發(fā)送音頻數(shù)據(jù)。如果判定要繼續(xù)發(fā)送音頻數(shù)據(jù),則處理返回到步驟S1304,并且重復用于發(fā)送音頻數(shù)據(jù)的處理。
如果在步驟S1308判定要停止發(fā)送音頻數(shù)據(jù),則處理結束。
如果在步驟S1303判定接收到NACK,則認為回放應用程序86不是能夠執(zhí)行回放處理的程序,也就是,回放應用程序86不能夠發(fā)送音頻數(shù)據(jù)到音頻數(shù)據(jù)處理程序83,從而處理結束。
用于將音頻數(shù)據(jù)從音頻數(shù)據(jù)處理程序83發(fā)送到記錄應用程序85的處理的概述將參照圖11所示的流程圖進行描述。
在步驟S3401,記錄應用程序85通過用于發(fā)送消息的套接字將包括記錄命令的消息發(fā)送到音頻數(shù)據(jù)處理程序83。該消息包括記錄命令,并且還作為進程信息包括記錄應用程序85的登記ID。
在步驟S2401,音頻數(shù)據(jù)處理程序83接收包括記錄命令的消息。在步驟S2402,音頻數(shù)據(jù)處理程序83根據(jù)作為進程信息包括在消息中的登記ID,判定記錄應用程序85是否是能夠執(zhí)行記錄處理的程序。在步驟S2403,如果判定記錄應用程序85是能夠執(zhí)行記錄處理的程序,則音頻數(shù)據(jù)處理程序83通過用于發(fā)送消息的套接字,將其中ACK存儲在錯誤中的消息發(fā)送到記錄應用程序85。另一方面,如果判定記錄應用程序85不是能夠執(zhí)行記錄處理的程序,則音頻數(shù)據(jù)處理程序83通過用于發(fā)送消息的套接字將其中NACK存儲在錯誤中的消息發(fā)送到記錄應用程序85。如果判定記錄應用程序85不是能夠執(zhí)行記錄處理的程序,則不執(zhí)行隨后處理,并且不發(fā)送音頻數(shù)據(jù)。
在步驟S3402,記錄應用程序85接收由音頻數(shù)據(jù)處理程序83發(fā)送的包括ACK或NACK的消息。記錄應用程序85提取存儲在消息的錯誤中的ACK或NACK。
如果在步驟S2402判定記錄應用程序85是能夠執(zhí)行記錄處理的程序,則處理進入步驟S2404,其中,音頻數(shù)據(jù)處理程序83通過用于發(fā)送音頻數(shù)據(jù)的套接字,將所要記錄的音頻數(shù)據(jù)發(fā)送到記錄應用程序85。
在步驟S3404,記錄應用程序85接收通過用于發(fā)送音頻數(shù)據(jù)的套接字發(fā)送的音頻數(shù)據(jù)。
在步驟S3405,記錄應用程序85根據(jù)所接收的音頻數(shù)據(jù)的大小(例如,字節(jié)數(shù))檢查所接收的音頻數(shù)據(jù),例如,是否在音頻數(shù)據(jù)中發(fā)生了損失。
在步驟S3406,如果在音頻數(shù)據(jù)中檢測到損失,則記錄應用程序85通過套接字將其中NACK存儲在錯誤中的消息發(fā)送到音頻數(shù)據(jù)處理程序83。另一方面,如果在音頻數(shù)據(jù)中沒有檢測到損失,則記錄應用程序85通過套接字將其中ACK存儲在錯誤中的消息發(fā)送到音頻數(shù)據(jù)處理程序83。
在步驟S2405,音頻數(shù)據(jù)處理程序83接收由記錄應用程序85發(fā)送的其中ACK或NACK存儲在錯誤中的消息。音頻數(shù)據(jù)處理程序83從消息的錯誤中提取ACK或NACK。
在步驟S2406,音頻數(shù)據(jù)處理程序83判定是否接收到包括NACK的消息。如果判定接收到包括NACK的消息,則處理進入步驟S2407,其中,音頻數(shù)據(jù)處理程序83通過用于發(fā)送音頻數(shù)據(jù)的套接字將音頻數(shù)據(jù)重新發(fā)送到記錄應用程序85。通過步驟S2407中的處理重新發(fā)送的音頻數(shù)據(jù)與通過步驟S2404中的處理發(fā)送的音頻數(shù)據(jù)相同。
在步驟S3407,記錄應用程序85接收由音頻數(shù)據(jù)處理程序83重新發(fā)送的音頻數(shù)據(jù)。如果通過步驟S3404中的處理接收到不帶任何損失的音頻數(shù)據(jù),則不執(zhí)行步驟S3407中的處理。
用于重新發(fā)送音頻數(shù)據(jù)的處理對于每條音頻數(shù)據(jù)僅限于一次。這是因為如果一條音頻數(shù)據(jù)被重新發(fā)送若干次,則音頻數(shù)據(jù)將不能得到及時記錄。
如果在步驟S2406判定接收到包括ACK的消息,則認為記錄應用程序85通過步驟S3404中的處理接收到不帶任何損失的音頻數(shù)據(jù),從而無需重新發(fā)送音頻數(shù)據(jù)。因此,跳過步驟S2407中的處理,并且處理進入步驟S2408。
在步驟S2408,音頻數(shù)據(jù)處理程序83判定是否退出發(fā)送音頻數(shù)據(jù)。如果判定要繼續(xù)發(fā)送音頻數(shù)據(jù),則處理返回到步驟S2404,并且重復用于發(fā)送音頻數(shù)據(jù)的處理。
如果在步驟S2408判定要停止發(fā)送音頻數(shù)據(jù),則處理結束。
如果在步驟S3403判定接收到NACK,則認為記錄應用程序85不是能夠執(zhí)行記錄處理的程序,也就是,記錄應用程序85不能夠發(fā)送音頻數(shù)據(jù)到音頻數(shù)據(jù)處理程序83,從而處理結束。
下一步,將詳細地描述由音頻數(shù)據(jù)處理程序83到回放應用程序86執(zhí)行的處理。
圖12是示出用于激活音頻數(shù)據(jù)處理程序83的處理的流程圖。
在步驟S11,音頻數(shù)據(jù)處理程序83啟動自身即整個音頻數(shù)據(jù)處理程序83的進程。
在步驟S12,音頻數(shù)據(jù)處理程序83執(zhí)行初始化處理。
在步驟S13,音頻數(shù)據(jù)處理程序83向內(nèi)核82請求激活包括在音頻數(shù)據(jù)處理程序83中的各個程序即讀取控制程序101到零數(shù)據(jù)生成程序110的線程。
而且,音頻數(shù)據(jù)處理程序83為讀取數(shù)據(jù)緩沖區(qū)102、記錄數(shù)據(jù)緩沖區(qū)104、回放數(shù)據(jù)緩沖區(qū)109和寫入數(shù)據(jù)緩沖區(qū)111分配存儲區(qū)域。
在多線程系統(tǒng)中,在單個進程中執(zhí)行多個線程,從而多線程系統(tǒng)允許單個進程內(nèi)的多任務處理。同一進程中的線程共享諸如存儲器資源和I/O(輸入/輸出)資源的資源,從而可以容易地在讀取控制程序101到零數(shù)據(jù)生成程序110之間傳輸數(shù)據(jù)。
在步驟S14,內(nèi)核82(以分時方式)并行執(zhí)行包括在音頻數(shù)據(jù)處理程序83中的各個程序,即讀取控制程序101到零數(shù)據(jù)生成程序110,然后處理結束。
并行執(zhí)行讀取控制程序101到零數(shù)據(jù)生成程序110直到請求停止。
圖13是示出發(fā)送控制程序107的消息處理的流程圖。
在步驟S31,發(fā)送控制程序107判定內(nèi)核82是否請求了停止。如果判定未請求停止,則處理進入步驟S32,其中,發(fā)送控制程序107判定是否接收到套接字連接請求或者消息。如果判定未接收到套接字連接請求或消息,則處理返回到步驟S32,并且發(fā)送控制程序107重復判定處理直到接收到套接字連接請求或者消息。
步驟S32中的處理例如通過執(zhí)行稱作“選擇”系統(tǒng)調(diào)用的函數(shù)來實現(xiàn)。
如果在步驟S32判定接收到套接字連接請求或者消息,則處理進入步驟S33,其中,發(fā)送控制程序107判定是否接收到消息。如果判定接收到消息,則處理進入步驟S34,其中,發(fā)送控制程序107從消息中提取命令,激活對應于命令的處理,并且執(zhí)行對應于命令的處理。然后,處理返回到步驟S31,并且重復處理。
另一方面,如果在步驟S33判定接收到套接字連接請求,則處理進入步驟S35,其中,發(fā)送控制程序107與記錄應用程序85或回放應用程序86建立套接字連接。然后,處理返回到步驟S31,并且重復處理。
通過建立套接字連接,例如,對應于記錄應用程序85或回放應用程序86和音頻數(shù)據(jù)處理程序83的端口號由內(nèi)核82作為套接字對象來存儲。套接字服務程序84-1或者套接字服務程序84-2根據(jù)通過建立套接字連接而生成的套接字對象來標識接收音頻數(shù)據(jù)的一方或者要向其傳輸音頻數(shù)據(jù)的一方。
例如,當建立了套接字連接時,請求了建立套接字連接的一方即記錄應用程序85或者回放應用程序86獲得用于標識要從音頻數(shù)據(jù)處理程序83使用的套接字的句柄。
如果在步驟S31判定請求了停止,則處理結束。
接收控制程序108的消息處理與參照圖13所示的流程圖所述的處理相同,從而將省略其描述。
下一步,將參照圖14所示的流程圖描述用于從聲卡18讀取音頻數(shù)據(jù)的由讀取控制程序101執(zhí)行的處理。
在步驟S51,讀取控制程序101判定記錄應用程序85是否請求了停止。如果判定未請求停止,則處理進入步驟S52,其中,讀取控制程序101從聲卡18讀取其大小為讀取數(shù)據(jù)緩沖區(qū)102的一半大小的音頻數(shù)據(jù)。更具體地說,讀取控制程序101通過系統(tǒng)調(diào)用向內(nèi)核82請求從聲卡18讀取音頻數(shù)據(jù),并且內(nèi)核82使設備驅動程序81從聲卡18讀取音頻數(shù)據(jù)。內(nèi)核82將所讀取的音頻數(shù)據(jù)提供給讀取控制程序101。
在步驟S52以及后面將要描述的步驟S56和S59的處理中,所讀取的音頻數(shù)據(jù)由一組遵循IEC 60958標準的子幀組成。
圖15是示出從聲卡18讀取的音頻數(shù)據(jù)的格式的圖。遵循IEC60958標準的音頻數(shù)據(jù)作為流從聲卡18輸入,并且音頻數(shù)據(jù)輸入提供給音頻數(shù)據(jù)處理程序83。另外,從聲卡18輸出從音頻數(shù)據(jù)處理程序83提供的遵循IEC 60958標準的音頻數(shù)據(jù)。
圖15是示出對應于子幀的音頻數(shù)據(jù)的結構的圖,其中,子幀是根據(jù)IEC 60958標準的最小單元。子幀由包括一個樣本的32位數(shù)據(jù)(表示聲音振幅的數(shù)據(jù))組成。一幀由兩個子幀組成,并且包括L(左)聲道的一個樣本和R(右)聲道的一個樣本。幀有時也稱作多樣本(samples)。
也就是,子幀包括L聲道或R聲道的樣本。
塊由192個連續(xù)幀組成。
與圖中的左側相對應的子幀中從最高有效位開始的四位是前序(preamble)。前序表示B、M和W之一。
塊開頭處的子幀包括L聲道樣本,并且塊開頭處的子幀的前序表示B。
包括R聲道樣本的子幀的前序表示W(wǎng)。
除了塊開頭處的子幀之外,包括L聲道樣本的子幀的前序表示M。
前序之后的四位(從最高有效位算起的第五至第八位)是輔助位(輔助樣本位)。輔助位之后的二十位(從最高有效位算起的第九至第28位)是作為聲音樣本(采樣數(shù)據(jù))的音頻樣本字。
在四個輔助位中,當音頻數(shù)據(jù)擴展到24位時,存儲音頻數(shù)據(jù)的高階位。
位于子幀中從最高有效位算起的第29位的一位是表示子幀是否有效的有效性標志(有效性位)(以下也稱作V位)。V位之后的一位表示用戶數(shù)據(jù)(用戶數(shù)據(jù)位)(以下也稱作U位)。位于子幀中從最高有效位算起的第31位的一位是表示聲道狀態(tài)的聲道狀態(tài)位(聲道狀態(tài)位)(以下也稱作C位)。C位之后的一位是奇偶位(以下也稱作P位)。
屬于一塊的各子幀的C位共同表示音頻數(shù)據(jù)的屬性。也就是,表示音頻數(shù)據(jù)屬性的聲道狀態(tài)以與包括L聲道樣本的子幀的C位相對應的192位(24位)表示。
也就是,聲道狀態(tài)由前序表示B的子幀的C位和前序表示M的子幀的C位的順序集合組成。
聲道狀態(tài)包括表示關于音頻數(shù)據(jù)是否用于經(jīng)營用途或商業(yè)用途的區(qū)別的一位、表示音頻數(shù)據(jù)與非音頻數(shù)據(jù)之間的區(qū)別的一位、表示是否存在加重(emphasis)的三位數(shù)據(jù)、根據(jù)IEC 60958標準的8位類別代碼、L位等。
前序W包括與前序B或前序M相同的內(nèi)容。
在由類別代碼表示的類別為光盤,例如CD或MD(微型盤),則包括在各個子幀中的U位具有稱作子碼的格式,并且包括有用于根據(jù)子碼改變記錄在光盤上的內(nèi)容(曲目)的號碼的信息。
子碼如下定義。
U位與所復用的左右聲道一起使用,并且形成平均起來由1,176位組成的子碼塊。CD的一幀由一個包括十二個音頻樣本的子碼化符號組成。子碼塊由98個子碼化符號形成,從而所需U位的數(shù)目為12*98=1,176位。
子碼sync(同步)由至少16個連續(xù)‘0’位表示。起始位以‘1’表示。在起始位之后,傳輸七位Q到W。起始位的間隔可以從最小的8位變至最大的16位。
子碼幀由98個幀組成。子碼幀對于子碼P、子碼Q、子碼R、子碼S、子碼T、子碼U、子碼V和子碼W中的每一個均包括98位。
回到圖14,在步驟S53,讀取控制程序101判定從聲卡18讀取的音頻數(shù)據(jù)的第一子幀的前序是否表示W(wǎng)。如果在步驟S53判定第一子幀的前序表示W(wǎng),則認為第一子幀存儲R聲道的樣本。然后,處理進入步驟S54,其中,讀取控制程序101在由讀取數(shù)據(jù)緩沖區(qū)102的寫入指針表示的位置之后一子幀的位置上,將音頻數(shù)據(jù)存儲在讀取數(shù)據(jù)緩沖區(qū)102中。
在步驟S55,讀取控制程序101根據(jù)用于將音頻數(shù)據(jù)存儲在讀取數(shù)據(jù)緩沖區(qū)102中的步驟S54中的處理更新寫入指針。
在步驟S56,讀取控制程序101從聲卡18讀取其大小小于讀取數(shù)據(jù)緩沖區(qū)102的一半大小一子幀的音頻數(shù)據(jù)。然后,過程進入步驟S60。
另一方面,如果在步驟S53判定第一子幀的前序不表示W(wǎng),則認為第一子幀包括L聲道的樣本。因此,處理進入步驟S57,其中,讀取控制程序101將所讀取的音頻數(shù)據(jù)存儲在由讀取數(shù)據(jù)緩沖區(qū)102的寫入指針表示的位置上。
在步驟S58,讀取控制程序101根據(jù)用于將音頻數(shù)據(jù)存儲在讀取數(shù)據(jù)緩沖區(qū)102中的步驟S57中的處理,更新寫入指針。
在步驟S59,讀取控制程序101從聲卡18讀取其大小為讀取數(shù)據(jù)緩沖區(qū)102的一半大小的音頻數(shù)據(jù)。然后,過程進入步驟S60。
在步驟S60,讀取控制程序101將通過步驟S56中的處理或者步驟S59中的處理讀取的音頻數(shù)據(jù)存儲在由讀取數(shù)據(jù)緩沖區(qū)102的寫入指針表示的位置上。
在步驟S61,讀取控制程序101根據(jù)用于將音頻數(shù)據(jù)存儲在讀取數(shù)據(jù)緩沖區(qū)102中的步驟S60中的處理,更新寫入指針。然后,處理返回到步驟S51,并且重復用于讀取音頻數(shù)據(jù)的處理。
如果在步驟S51判定記錄應用程序85請求了停止,則處理結束。
如上所述,如果從聲卡18讀取的其大小為讀取數(shù)據(jù)緩沖區(qū)102的一半大小的音頻數(shù)據(jù)的開頭處的子幀包括L聲道的樣本,則將音頻數(shù)據(jù)寫入在由讀取數(shù)據(jù)緩沖區(qū)102的寫入指針表示的位置上,如圖16所示。然后,還從聲卡18讀取其大小為讀取數(shù)據(jù)緩沖區(qū)102的一半大小的音頻數(shù)據(jù),并且在先前寫入的音頻數(shù)據(jù)之后將音頻數(shù)據(jù)寫入到讀取數(shù)據(jù)緩沖區(qū)102。
另一方面,如果從聲卡18讀取的其大小為讀取數(shù)據(jù)緩沖區(qū)102的一半大小的音頻數(shù)據(jù)的開頭處的子幀包括R聲道的樣本,則將音頻數(shù)據(jù)寫入在由讀取數(shù)據(jù)緩沖區(qū)102的寫入指針表示的位置之后一幀的位置上。然后,還從聲卡18讀取其大小小于讀取數(shù)據(jù)緩沖區(qū)102的一半大小一子幀的音頻數(shù)據(jù),并且在先前寫入的音頻數(shù)據(jù)之后將音頻數(shù)據(jù)寫入到讀取數(shù)據(jù)緩沖區(qū)102。
從而,將L聲道的子幀存儲在讀取數(shù)據(jù)緩沖區(qū)102的預定位置上,從而防止L聲道和R聲道的聲音顛倒。
下一步,將參照圖18到圖20所示的流程圖描述由用于分析和處理音頻數(shù)據(jù)的音頻數(shù)據(jù)分析和濾波程序103和IEC-60958編碼程序106執(zhí)行的處理。
在步驟S101,音頻數(shù)據(jù)分析和濾波程序103判定是否內(nèi)核82請求了停止。如果判定未請求停止,則處理進入步驟S102,其中,音頻數(shù)據(jù)分析和濾波程序103根據(jù)讀取指針的值判定是否有新音頻數(shù)據(jù)存儲在讀取數(shù)據(jù)緩沖區(qū)102中。
如果在步驟S102判定有新音頻數(shù)據(jù)存儲在讀取數(shù)據(jù)緩沖區(qū)102中,則處理進入步驟S103。在步驟S103,音頻數(shù)據(jù)分析和濾波程序103將序列號寫入到存儲在記錄數(shù)據(jù)緩沖區(qū)104中的音頻數(shù)據(jù)中由寫入指針表示的音頻數(shù)據(jù)的首標。
圖21和22是示出存儲在記錄數(shù)據(jù)緩沖區(qū)104或回放數(shù)據(jù)緩沖區(qū)109中的音頻數(shù)據(jù)的結構的圖。
如圖21所示,存儲在記錄數(shù)據(jù)緩沖區(qū)104中的音頻數(shù)據(jù)和存儲在回放數(shù)據(jù)緩沖區(qū)109中的音頻數(shù)據(jù)包括首標部分和音頻數(shù)據(jù)部分。首標部分包括通過分析從聲卡18獲得的音頻數(shù)據(jù)而獲得的信息,即用于控制音頻數(shù)據(jù)處理的信息。音頻數(shù)據(jù)部分包括從聲卡18獲得的音頻數(shù)據(jù)的樣本,即聲音數(shù)據(jù)本身。單個音頻數(shù)據(jù)部分包括多個音頻數(shù)據(jù)樣本。也就是,單個音頻數(shù)據(jù)部分對應于多個子幀。
通過向音頻數(shù)據(jù)處理程序83發(fā)出開始或停止記錄的指令,允許記錄應用程序85向音頻數(shù)據(jù)處理程序83通知存儲在記錄數(shù)據(jù)緩沖區(qū)104中的數(shù)據(jù)中要開始記錄的音頻數(shù)據(jù)位置或者要停止記錄的音頻數(shù)據(jù)位置。
圖22是示出存儲在記錄數(shù)據(jù)緩沖區(qū)104中的音頻數(shù)據(jù)和存儲在回放數(shù)據(jù)緩沖區(qū)109中的音頻數(shù)據(jù)的首標部分的詳細結構的圖。
首標部分包括序列號、C位信息、SCMS(Serial CopyManagement System,串行拷貝管理系統(tǒng))信息、數(shù)字數(shù)據(jù)類別、外部設備回放標志、音軌(track)改變標志、音軌改變點位置信息、有效音頻數(shù)據(jù)長度、回放信息以及音頻信號電平。
序列號是順序分配給音頻數(shù)據(jù)的號碼。序列號由記錄應用程序85用來得到消逝記錄時間。得到消逝記錄時間的方法將在后面進行描述。
而且,例如,當記錄應用程序85向音頻數(shù)據(jù)處理程序83發(fā)出開始或停止記錄的指令時,記錄應用程序85可以通過序列號向音頻數(shù)據(jù)處理程序83通知存儲在記錄數(shù)據(jù)緩沖區(qū)104中的音頻數(shù)據(jù)中要開始記錄處的音頻數(shù)據(jù)(例如,第一音頻數(shù)據(jù))和要停止記錄處的音頻數(shù)據(jù)(例如,最后音頻數(shù)據(jù))。
在C位信息中,設置與包括在從聲卡18讀取的遵循IEC 60958標準的音頻數(shù)據(jù)中的C位相同的信息。
SCMS信息是通過分析包括在音頻數(shù)據(jù)中的C位而獲得的信息中所包括的表示是否準許記錄從聲卡18讀取的遵循IEC 60958標準的音頻數(shù)據(jù)的信息。
數(shù)字數(shù)據(jù)類別包括通過分析包括在從聲卡18讀取的遵循IEC60958標準的音頻數(shù)據(jù)中的C位而獲得的類別信息,并且還包括用于判定從聲卡18讀取的音頻數(shù)據(jù)是記錄在音頻CD-R(CD-可記錄)上的音頻數(shù)據(jù)還是記錄在普通CD上的音頻數(shù)據(jù)的信息。
音頻CD-R的類別是CD;然而,該類別的特殊之處在于記錄在音頻CD-R上的音頻數(shù)據(jù)的C位中所包括的版權信息以4到10Hz振蕩。由于禁止記錄其中版權信息以4到10Hz振蕩的音頻數(shù)據(jù),因此在首標部分中作為類別存儲表示這一效果的信息。
外部設備回放標志是表示提供通過聲卡18讀取的音頻數(shù)據(jù)的外部回放設備51是否處于回放操作中的標志。
通常,在很多記錄設備中,當音頻數(shù)據(jù)輸入的聲音電平在預定時間段內(nèi)保持不大于預定閾值時,假定檢測到曲目之間的間隔,并且改變曲目的號碼。
然而,在市場上的一些CD中,藝術家有意地包括長的無聲。當記錄從這樣的CD讀取的音頻數(shù)據(jù)時,可能在單個曲目內(nèi)插入曲目之間的間隔。
為了防止此,當外部回放設備51處于回放操作中時,不插入曲目之間的間隔。
當音頻數(shù)據(jù)的類別是CD時,根據(jù)包括在子碼Q中的aframe(幀)是否單調(diào)增加,狹義地,連續(xù)二十次,判定外部回放設備51是否處于回放操作中。因此,只有當音頻數(shù)據(jù)的類別為CD時,才可以判定外部回放設備51是否處于回放操作中。
音軌改變標志表示通過分析通過聲卡18讀取的音頻數(shù)據(jù)的U位而獲得的曲目之間的間隔的檢測。
音軌改變點位置信息表示當音軌改變標志為真時從音頻數(shù)據(jù)部分的開頭處算起檢測到曲目之間的間隔處的字節(jié)數(shù)(當檢測到曲目之間的間隔時)。
有效音頻數(shù)據(jù)長度指定當音頻數(shù)據(jù)由回放應用程序86存儲在回放數(shù)據(jù)緩沖區(qū)109中時必須實際上回放存儲在回放數(shù)據(jù)緩沖區(qū)109中的音頻數(shù)據(jù)中從開頭處開始的多少字節(jié)的音頻數(shù)據(jù)。當對應于單個曲目的音頻數(shù)據(jù)的大小小于音頻數(shù)據(jù)部分的大小時,有效地使用有效音頻數(shù)據(jù)長度。
回放信息是用于得到消逝回放時間或者消逝記錄時間的備注(memo)區(qū)域。用于根據(jù)回放信息得到消逝回放時間或者消逝記錄時間的方法將在后面進行描述。
音頻信號電平表示存儲在記錄數(shù)據(jù)緩沖區(qū)104或者回放數(shù)據(jù)緩沖區(qū)109中的音頻數(shù)據(jù)的信號電平。
回到圖18,在步驟S103,將序列號寫入在由記錄數(shù)據(jù)緩沖區(qū)104的寫入指針表示的音頻數(shù)據(jù)的首標部分中。
在步驟S104,音頻數(shù)據(jù)分析和濾波程序103對存儲在讀取數(shù)據(jù)緩沖區(qū)102中的音頻數(shù)據(jù)中位于由讀取指針表示的讀取位置上的音頻數(shù)據(jù)應用IEC-60958解碼處理和DIN信息解密處理。
更具體地說,音頻數(shù)據(jù)分析和濾波程序103對讀取數(shù)據(jù)緩沖區(qū)102中的音頻數(shù)據(jù)應用用于所謂的IEC-60958解碼的處理。也就是,音頻數(shù)據(jù)分析和濾波程序103從存儲在讀取數(shù)據(jù)緩沖區(qū)102中的遵循IEC 60958標準的音頻數(shù)據(jù)的各子幀中位于讀取位置上的音頻數(shù)據(jù),分離C位、U位和音頻樣本字即聲音的采樣數(shù)據(jù)。音頻數(shù)據(jù)分析和濾波程序103分離C位和U位,并且將分析結果寫入到由記錄數(shù)據(jù)緩沖區(qū)104的寫入指針指定的音頻數(shù)據(jù)的首標部分。
音頻數(shù)據(jù)分析和濾波程序103分析分離出的C位等,并且檢查從聲卡18讀取且存儲在讀取數(shù)據(jù)緩沖區(qū)102中的音頻數(shù)據(jù)是否可以遵循SCMS標準來記錄。如果判定禁止記錄或者必須不記錄音頻數(shù)據(jù),則停止記錄處理。
SCMS標準保證不發(fā)生拷貝兩代上的數(shù)字音頻數(shù)據(jù)。
當類別是CD或MD時,音頻數(shù)據(jù)分析和濾波程序103根據(jù)U位檢測曲目之間的間隔。音頻數(shù)據(jù)分析和濾波程序103將與曲目之間的間隔相對應的信息寫入在由記錄數(shù)據(jù)緩沖區(qū)104的寫入指針指定的音頻數(shù)據(jù)的首標部分中。
圖23是示出類別為CD的情況下子碼Q的結構的圖。
圖24是示出類別為MD的情況下子碼Q的結構的圖。
8位TNO表示被回放的曲目的曲目號。音頻數(shù)據(jù)分析和濾波程序103根據(jù)曲目號檢測曲目之間的間隔。
當類別是CD時,各自由八位組成的子碼Q的amin(分鐘)、asec(秒)和aframe(幀)均包括兩位數(shù)字的BCD(二進制編碼十進制)數(shù)據(jù)。總共具有六位數(shù)字的amin、asce和aframe的BCD數(shù)據(jù)表示記錄在CD上的聲音相對于CD開頭處的消逝時間。由于子碼幀的重復頻率為75Hz,因此aframe包括以1/75秒為單位表示消逝時間的數(shù)據(jù),asec包括以1秒為單位表示消逝時間的數(shù)據(jù),并且amin包括以1分鐘為單位表示消逝時間的數(shù)據(jù)。
在步驟S105,音頻數(shù)據(jù)分析和濾波程序103根據(jù)C位的分析結果,判定是否音頻數(shù)據(jù)被加重(emphasize)。如果判定音頻數(shù)據(jù)被加重,則處理進入步驟S106,其中,音頻數(shù)據(jù)分析和濾波程序103減弱(deemphasize)音頻數(shù)據(jù)。然后,過程進入步驟S107。
如果在步驟S105判定音頻數(shù)據(jù)未被加重,則無需減弱處理。因此,跳過步驟S106中的處理,并且過程進入步驟S107。
因此,由記錄應用程序85記錄的音頻數(shù)據(jù)總是未加重的。
如上所述,提取諸如C位、U位和子碼Q的控制信息,并且根據(jù)所提取的控制信息,禁止音頻數(shù)據(jù)的記錄或者處理內(nèi)容的音頻數(shù)據(jù)。
在步驟S107,音頻數(shù)據(jù)分析和濾波程序103執(zhí)行用于修改音頻樣本字電平的計算,并且將具有修改電平的音頻樣本字寫入在記錄數(shù)據(jù)緩沖區(qū)104的音頻數(shù)據(jù)部分中。例如,音頻數(shù)據(jù)分析和濾波程序103在-∞dB與+18dB之間調(diào)節(jié)音頻樣本字的電平。
在步驟S108,音頻數(shù)據(jù)分析和濾波程序103增加記錄數(shù)據(jù)緩沖區(qū)104的寫入指針。
在步驟S109,音頻數(shù)據(jù)分析和濾波程序103增加讀取數(shù)據(jù)緩沖區(qū)102的讀取指針。然后,過程進入步驟S110。
如果在步驟S102判定沒有新音頻數(shù)據(jù)存儲在讀取數(shù)據(jù)緩沖區(qū)102中,則無需用于將音頻數(shù)據(jù)寫入到記錄數(shù)據(jù)緩沖區(qū)104的處理。因此,跳過步驟S103到S109中的處理,并且過程進入步驟S110。
在步驟S110,音頻數(shù)據(jù)處理程序83根據(jù)來自記錄應用程序85、回放應用程序86或者內(nèi)核82的指令,選擇要寫入到寫入數(shù)據(jù)緩沖區(qū)111的音頻數(shù)據(jù)。
在步驟S111,IEC-60958編碼程序106判定是否選擇了回放數(shù)據(jù)緩沖區(qū)109,也就是,存儲在回放數(shù)據(jù)緩沖區(qū)109中的音頻數(shù)據(jù)是否要寫入到寫入數(shù)據(jù)緩沖區(qū)111。如果判定選擇了回放數(shù)據(jù)緩沖區(qū)109,則處理進入步驟S112,其中,IEC-60958編碼程序106判定是否有新音頻數(shù)據(jù)存儲在回放數(shù)據(jù)緩沖區(qū)109中。
如果在步驟S112判定有新音頻數(shù)據(jù)存儲在回放數(shù)據(jù)緩沖區(qū)109中,則處理進入步驟S113。在步驟S113,IEC-60958編碼程序106對開關105進行開關以從由讀取指針指定的回放數(shù)據(jù)緩沖區(qū)109的讀取位置獲得音頻數(shù)據(jù)。
在步驟S114,IEC-60958編碼程序106使回放數(shù)據(jù)緩沖區(qū)109增加讀取指針。
在步驟S115,IEC-60958編碼程序106根據(jù)IEC 60958對通過步驟S113中的處理獲得的音頻數(shù)據(jù)進行編碼,并且計算音頻數(shù)據(jù)的峰值。然后,過程進入步驟S117。
更具體地說,在步驟S115,IEC-60958編碼程序106提取包括在從回放數(shù)據(jù)緩沖區(qū)109讀取的音頻數(shù)據(jù)的首標部分中的控制信息,并且根據(jù)控制信息處理內(nèi)容的音頻數(shù)據(jù)。
如果在步驟S112判定沒有新音頻數(shù)據(jù)存儲在回放數(shù)據(jù)緩沖區(qū)109中,則處理進入步驟S116。在步驟S116,IEC-60958編碼程序106對開關105進行開關,根據(jù)IEC 60958對從零數(shù)據(jù)生成程序110提供的零數(shù)據(jù)進行編碼,并且計算音頻數(shù)據(jù)的峰值(例如,零)。然后,過程進入步驟S117。
如果在步驟S111判定未選擇回放數(shù)據(jù)緩沖區(qū)109,則無需處理存儲在回放數(shù)據(jù)緩沖區(qū)109中的音頻數(shù)據(jù)。因此,跳過步驟S112到S116中的處理,并且過程進入步驟S117。
在步驟S117,IEC-60958編碼程序106判定是否選擇了記錄數(shù)據(jù)緩沖區(qū)104,也就是,存儲在記錄數(shù)據(jù)緩沖區(qū)104中的音頻數(shù)據(jù)是否要寫入到寫入數(shù)據(jù)緩沖區(qū)111。如果判定選擇了記錄數(shù)據(jù)緩沖區(qū)104,則處理進入步驟S118,其中,IEC-60958編碼程序106判定是否有新音頻數(shù)據(jù)存儲在記錄數(shù)據(jù)緩沖區(qū)104中。
如果在步驟S118判定有新音頻數(shù)據(jù)存儲在記錄數(shù)據(jù)緩沖區(qū)104中,則處理進入步驟S119,其中,IEC-60958編碼程序106對開關105進行開關以從回放數(shù)據(jù)緩沖區(qū)109獲得音頻數(shù)據(jù)。
在步驟S120,IEC-60958編碼程序106根據(jù)IEC 60958對通過步驟S119中的處理而獲得的音頻數(shù)據(jù)進行編碼,并且計算音頻數(shù)據(jù)的峰值。然后,過程進入步驟S122。
如果在步驟S118判定沒有新音頻數(shù)據(jù)存儲在記錄數(shù)據(jù)緩沖區(qū)104中,則處理進入步驟S121。在步驟S121,IEC-60958編碼程序106對開關105進行開關,根據(jù)IEC 60958對從零數(shù)據(jù)生成程序110提供的零數(shù)據(jù)進行編碼,并且計算音頻數(shù)據(jù)的峰值(即零)。然后,過程進入步驟S122。
如果在步驟S117判定未選擇記錄數(shù)據(jù)緩沖區(qū)104,則無需處理存儲在記錄數(shù)據(jù)緩沖區(qū)104中的音頻數(shù)據(jù)。因此,跳過步驟S118到S121中的處理,并且過程進入步驟S122。
在步驟S122,IEC-60958編碼程序106判定是否既未選擇記錄數(shù)據(jù)緩沖區(qū)104又未選擇回放數(shù)據(jù)緩沖區(qū)109。如果判定既未選擇記錄數(shù)據(jù)緩沖區(qū)104又未選擇回放數(shù)據(jù)緩沖區(qū)109,則處理進入步驟S123。在步驟S123,IEC-60958編碼程序106對開關105進行開關,根據(jù)IEC 60958對從零數(shù)據(jù)生成程序110提供的零數(shù)據(jù)進行編碼,并且計算音頻數(shù)據(jù)的峰值(即零)。然后,過程進入步驟S124。
如果在步驟S122判定選擇了記錄數(shù)據(jù)緩沖區(qū)104和回放數(shù)據(jù)緩沖區(qū)109之一,則已經(jīng)獲得了根據(jù)IEC 60958經(jīng)過編碼的音頻數(shù)據(jù)。因此,跳過步驟S123中的處理,并且過程進入步驟S124。
在步驟S124,IEC-60958編碼程序106將根據(jù)IEC 60958經(jīng)過編碼的音頻數(shù)據(jù)寫入在由寫入數(shù)據(jù)緩沖區(qū)111的寫入指針表示的位置上。
在步驟S125,IEC-60958編碼程序106增加寫入數(shù)據(jù)緩沖區(qū)111的寫入指針。
在步驟S126,寫入控制程序112將位于由寫入數(shù)據(jù)緩沖區(qū)111的讀取指針表示的位置上的音頻數(shù)據(jù)寫入到聲卡18。更具體地說,寫入控制程序112通過系統(tǒng)調(diào)用向內(nèi)核82請求將音頻數(shù)據(jù)寫入到聲卡18,并且將位于由寫入數(shù)據(jù)緩沖區(qū)111的讀取指針表示的位置上的音頻數(shù)據(jù)提供給內(nèi)核82。內(nèi)核82使設備驅動程序81將音頻數(shù)據(jù)寫入到聲卡18。提供給聲卡18的音頻數(shù)據(jù)作為流來輸出。
在步驟S127,寫入控制程序112讀取位于由寫入數(shù)據(jù)緩沖區(qū)111的寫入指針表示的位置上的音頻數(shù)據(jù)的回放信息。
在步驟S128,寫入控制程序112增加寫入數(shù)據(jù)緩沖區(qū)111的讀取指針。然后,處理返回到步驟S101,并且重復處理。
如果在步驟S101判定請求了停止,則處理結束。
在由用于分析和處理音頻數(shù)據(jù)的音頻數(shù)據(jù)分析和濾波程序103和IEC-60958編碼程序106執(zhí)行的處理中,傳輸存儲在讀取數(shù)據(jù)緩沖區(qū)102、記錄數(shù)據(jù)緩沖區(qū)104、回放數(shù)據(jù)緩沖區(qū)109和寫入數(shù)據(jù)緩沖區(qū)111中的音頻數(shù)據(jù)。
按照適當?shù)拇涡驁?zhí)行步驟S104中的處理、步驟S115中的處理、步驟S116中的處理、步驟S120中的處理、步驟S121中的處理、以及步驟S123中的處理,從而減少處理音頻數(shù)據(jù)所需的時間。
而且,當存儲在記錄數(shù)據(jù)緩沖區(qū)104中的音頻數(shù)據(jù)存儲在寫入數(shù)據(jù)緩沖區(qū)111中時,可以作為流輸出所要記錄的音頻數(shù)據(jù),從而允許與記錄同時進行回放。
下一步,將參照圖25所示的流程圖描述用于將存儲在記錄數(shù)據(jù)緩沖區(qū)104中的音頻數(shù)據(jù)發(fā)送到記錄應用程序85的由發(fā)送控制程序107執(zhí)行的處理。
在步驟S151,發(fā)送控制程序107判定內(nèi)核82是否請求了停止。如果判定未請求停止,則過程進入步驟S152。
在步驟S152,發(fā)送控制程序107判定是否接收到來自記錄應用程序85的套接字連接請求。如果判定未接收到套接字連接請求,則過程返回到步驟S152,并且重復判定處理直到接收到套接字連接請求。
如果在步驟S152判定接收到套接字連接請求,則發(fā)送控制程序107建立套接字。然后,處理進入步驟S153,其中,發(fā)送控制程序107根據(jù)通過用于交換消息的套接字發(fā)送的消息判定記錄應用程序85是否請求了開始記錄。
為了更具體地描述用于建立套接字的處理,發(fā)送控制程序107向內(nèi)核82請求與記錄應用程序85建立套接字,并且內(nèi)核82在音頻數(shù)據(jù)處理程序83與記錄應用程序85之間建立套接字。
如果在步驟S153判定記錄應用程序85請求了開始記錄,則處理進入步驟S154。在步驟S154,發(fā)送控制程序107設置記錄數(shù)據(jù)緩沖區(qū)104的讀取指針以確定要開始記錄的位置。發(fā)送控制程序107根據(jù)記錄數(shù)據(jù)緩沖區(qū)104的讀取指針,判定是否存在要傳到記錄應用程序85的音頻數(shù)據(jù)。如果判定存在要傳到記錄應用程序85的音頻數(shù)據(jù),則處理進入步驟S155,其中,發(fā)送控制程序107在由記錄數(shù)據(jù)緩沖區(qū)104的讀取指針表示的位置上讀取音頻數(shù)據(jù)。
在步驟S156,發(fā)送控制程序107將所讀取的音頻數(shù)據(jù)寫入到由套接字服務程序84-1建立的以音頻數(shù)據(jù)處理程序83為輸入且以記錄應用程序85為輸出的用于傳輸音頻數(shù)據(jù)的套接字。
例如,發(fā)送控制程序107指定與記錄應用程序85相對應的端口號,并且調(diào)用套接字對象的“發(fā)送”方法來將音頻數(shù)據(jù)寫入到套接字。當發(fā)送控制程序107調(diào)用了套接字對象的“發(fā)送”方法時,套接字服務程序84-1接收從發(fā)送控制程序107寫入的音頻數(shù)據(jù),并且將音頻數(shù)據(jù)存儲在預定緩沖區(qū)中。
現(xiàn)在,將更詳細地描述在不保證輪轉時間且采用事件驅動多任務操作系統(tǒng)的處理系統(tǒng)中使用記錄數(shù)據(jù)緩沖區(qū)104和套接字傳輸音頻數(shù)據(jù)。
記錄數(shù)據(jù)緩沖區(qū)104假脫機(spool)其大小小于記錄所需大小的音頻數(shù)據(jù),并且存儲在記錄數(shù)據(jù)緩沖區(qū)104中的音頻數(shù)據(jù)發(fā)送到記錄應用程序85。因此,防止由記錄應用程序85正在記錄的音頻數(shù)據(jù)的漏失。
在事件驅動多任務操作系統(tǒng)中必須考慮的一個問題是如何向另一方通知所要記錄或回放的音頻數(shù)據(jù)的更新完成。
例如,當以44.1KHz采樣的音頻數(shù)據(jù)以4,096字節(jié)為單位從音頻數(shù)據(jù)處理程序83發(fā)送到記錄應用程序85時,音頻數(shù)據(jù)處理程序83必須每23.22毫秒向記錄應用程序85通知音頻數(shù)據(jù)的更新完成。
圖26示出不使用套接字的情況下的處理的例子。
當不使用套接字時,用于發(fā)出音頻數(shù)據(jù)已被更新的通知的處理將增大開銷。傳統(tǒng)地,為了在不使用套接字的情況下發(fā)出進程間通知,做法是將信號發(fā)送到應用程序或者使用進程間通信的消息隊列。
在圖26中,以A指定的箭頭表示從音頻數(shù)據(jù)處理程序83到記錄應用程序85的通知。在圖26中,以B指定的星號符號表示記錄應用程序85對通知的回復處理。
當將信號發(fā)送到應用程序,或者使用用于進程間通信的消息隊列時,處理具有低優(yōu)先級。因此,除了操作系統(tǒng)的進程調(diào)度的問題之外,還出現(xiàn)一個問題是接收通知的程序的響應時間是變化無常的。
類似地,當使用共享存儲器時,通知將花費較長的時間。
另外,例如,在單個線程內(nèi)執(zhí)行的輪詢處理中,即使設置是每10毫秒不斷地處理數(shù)據(jù),但是間隔根據(jù)系統(tǒng)的狀態(tài)而可能變成20毫秒。
在圖26中,如C所示,可能發(fā)生記錄應用程序85不能在自從由記錄應用程序85接收到來自音頻數(shù)據(jù)處理程序83的通知以來的23.22毫秒內(nèi)執(zhí)行回復處理。在這種情況下,發(fā)生音頻數(shù)據(jù)損失。
作為對比,當使用套接字時,套接字起到互連進程(應用程序)的數(shù)據(jù)管道的作用。
通過套接字發(fā)送音頻數(shù)據(jù)的進程被允許知道套接字是否充滿音頻數(shù)據(jù)。當套接字未充滿音頻數(shù)據(jù)時,允許進程發(fā)送音頻數(shù)據(jù)直到套接字充滿音頻數(shù)據(jù)。通過套接字發(fā)送音頻數(shù)據(jù)的進程僅依賴于套接字的狀態(tài),而不依賴于其他應用程序的狀態(tài)。
如果音頻數(shù)據(jù)存在于套接字中,則允許通過套接字接收音頻數(shù)據(jù)的進程獲得音頻數(shù)據(jù),并且當沒有音頻數(shù)據(jù)存在于套接字中時等待讀取(執(zhí)行其他處理)。通過套接字接收音頻數(shù)據(jù)的進程被允許知道套接字是否為空,并且獲得音頻數(shù)據(jù)直到套接字變空。
也就是,當從音頻數(shù)據(jù)處理程序83來看時,使用套接字提供將音頻數(shù)據(jù)發(fā)送到記錄應用程序85或回放應用程序86的主動性(initiative),從而在回放或記錄期間將防止音頻數(shù)據(jù)的漏失。
現(xiàn)在,將更詳細地描述套接字。
大多數(shù)進程間通信采取使用單臺計算機上的共享資源。也就是,雖然所使用的資源在進程間通信方法之間不同,例如文件系統(tǒng)空間、共享存儲器或者消息隊列,但是大多數(shù)進程間通信的共同之處在于只有正在由計算機執(zhí)行的一個進程才被允許使用資源。
作為操作系統(tǒng)的一個例子,UNIX采用稱作套接字接口的通信手段,它是稱作管道的進程間通信機制的擴展。套接字設計成可以處理網(wǎng)絡上的通信。套接字的特性是高通用性。
更具體地說,使用套接字允許一臺計算機上的進程和另一臺計算機上的進程相互通信。使用套接字允許實現(xiàn)在網(wǎng)絡上分布的客戶端/服務器系統(tǒng)。不限于UNIX,Windows的套接字的規(guī)范也是公開可用的。因此,允許不同操作系統(tǒng)在網(wǎng)絡上相互通信。
套接字是允許在單臺機器上開發(fā)本地客戶端/服務器系統(tǒng)或者基于網(wǎng)絡的客戶端/服務器系統(tǒng)的通信機制,如圖27所示。由UNIX提供的功能如打印、遠程登錄以及FTP(文件傳輸協(xié)議)服務和網(wǎng)絡工具的通信功能使用套接字來實現(xiàn)。
套接字的操作經(jīng)常與撥至公司等的電話通話相比較來描述。也就是,撥至公司的電話通話由接電話者(服務器進程)轉接到適當?shù)牟块T,并且還轉接到適當?shù)娜?服務器套接字)。此時,所接收的通話(客戶端)變得連接到適當?shù)耐ㄔ捘康牡?端點),并且允許在其間起作用的接線員接收另一個電話通話。
在UNIX下,以下面方式建立通過這種套接字的連接。首先,服務器應用創(chuàng)建一個套接字。該套接字是分配給服務器進程的操作系統(tǒng)資源。在套接字由服務器創(chuàng)建出的時候,不允許其他進程訪問該套接字。
然后,服務器進程將一個名稱分配給該套接字。當執(zhí)行本地通信時,分配文件系統(tǒng)上的一個文件名作為套接字的名稱。另一方面,在網(wǎng)絡套接字的情況下,使用與客戶端可以訪問的特定網(wǎng)絡相對應的服務標識符(端口號和訪問點)作為套接字名稱。
服務器進程等待由客戶端訪問該命名套接字。當服務器準許客戶端的訪問時,創(chuàng)建不同于命名套接字的新套接字,然后,使用該新套接字來在客戶端與服務器之間通信。重新使用命名套接字來等待來自其他客戶端的連接請求。
套接字的特征在于三個屬性,即域、類型和協(xié)議。而且,套接字具有地址,并且該地址用作套接字的名稱。地址的格式根據(jù)域而不同。
套接字的域指定用于通過套接字進行通信的網(wǎng)絡。最頻繁使用的套接字的域是因特網(wǎng)網(wǎng)絡。因特網(wǎng)網(wǎng)絡在很多UNIXLAN(局域網(wǎng))環(huán)境和因特網(wǎng)中使用。在支持因特網(wǎng)網(wǎng)絡的協(xié)議(IP(網(wǎng)際協(xié)議))中,使用稱作IP地址的地址族來執(zhí)行通信。在很多情況下,名稱用來標識因特網(wǎng)上的機器;然而,在實際上執(zhí)行通信之前將名稱轉換成低層IP地址。為了在網(wǎng)絡上通過套接字連接到服務,客戶端必須知道或者能夠得到服務器計算機的IP地址。
在服務器上,有可能正在提供多個服務。因此,客戶端使用與IP地址相關聯(lián)的IP端口來指定連接目的地機器的特定服務。在系統(tǒng)內(nèi),端口使用唯一端口號來標識。對于外部機器,使用IP地址和端口號的組合來指定連接目的地。套接字是通信的端點,并且在實際上執(zhí)行通信之前套接字必須連接到一個端口。
服務器等待對特定端口的訪問。公知的服務具有分配給其的預定端口號。例如,F(xiàn)TP(文件傳輸協(xié)議)具有端口號21,而HTTP(超文本傳輸協(xié)議)具有端口號80。
而且,套接字具有類型。這是因為單個域經(jīng)常被提供具有不同特性的通信手段。稱作UNIX域的域套接字提供具有高可靠性的雙向通信路徑。在網(wǎng)絡域的情況下,必須考慮網(wǎng)絡的特性。在網(wǎng)際協(xié)議下,存在兩種不同級別的服務,即流和數(shù)據(jù)報。流套接字基于具有高可靠性的順序雙向字節(jié)流提供連接。因此,確保不發(fā)生所發(fā)送數(shù)據(jù)的損失、重復或者失序。在其他服務即數(shù)據(jù)報套接字的情況下,不建立或維護連接。數(shù)據(jù)報套接字適于信息的一次性查詢,有規(guī)律地提供狀態(tài)信息、收集具有低優(yōu)先級的日志等等。
流套接字用于傳輸音頻數(shù)據(jù)。
下一步,將描述本發(fā)明的記錄/回放設備中的套接字的操作。
圖28是示出在音頻數(shù)據(jù)處理程序83具有要發(fā)送到記錄應用程序85的音頻數(shù)據(jù)的情況下執(zhí)行的處理的圖。
為了從音頻數(shù)據(jù)處理程序83接收音頻數(shù)據(jù),記錄應用程序85重復用于從由套接字服務程序84-1建立的用于將音頻數(shù)據(jù)從音頻數(shù)據(jù)處理程序83傳輸?shù)接涗洃贸绦?5的套接字讀取預定大小的音頻數(shù)據(jù)的處理。
當有音頻數(shù)據(jù)讀入套接字時,記錄應用程序85從套接字獲得預定大小的音頻數(shù)據(jù),并且緊接在從套接字獲得音頻數(shù)據(jù)之后,立即執(zhí)行隨后處理。當沒有音頻數(shù)據(jù)讀入套接字時,記錄應用程序85試圖從套接字讀取音頻數(shù)據(jù),但是由于在套接字中不存在音頻數(shù)據(jù),因此它立即執(zhí)行隨后處理。
無論是有音頻數(shù)據(jù)讀入套接字還是沒有音頻數(shù)據(jù)讀入套接字,都立即執(zhí)行和結束用于從套接字讀取音頻數(shù)據(jù)的記錄應用程序85的處理,并且執(zhí)行隨后處理。
也就是,用于從套接字讀取音頻數(shù)據(jù)的由記錄應用程序85執(zhí)行的處理(進程)總是僅在讀取音頻數(shù)據(jù)所需的時間內(nèi)完成。因此,用于從套接字讀取音頻數(shù)據(jù)的由記錄應用程序85執(zhí)行的處理不等待其他進程的狀態(tài)變化,從而,處理不占據(jù)記錄/回放設備的資源長于音頻數(shù)據(jù)讀取處理所需的時間。
當要發(fā)送到記錄應用程序85的音頻數(shù)據(jù)存儲在記錄數(shù)據(jù)緩沖區(qū)104時,音頻數(shù)據(jù)處理程序83將音頻數(shù)據(jù)寫入到由套接字服務程序84-1建立的用于將音頻數(shù)據(jù)從音頻數(shù)據(jù)處理程序83傳輸?shù)接涗洃贸绦?5的套接字。
當音頻數(shù)據(jù)寫入到套接字時,記錄應用程序85準備讀取,從而音頻數(shù)據(jù)一到達套接字,記錄應用程序85就讀取音頻數(shù)據(jù)。
當要發(fā)送到記錄應用程序85的音頻數(shù)據(jù)未存儲在記錄數(shù)據(jù)緩沖區(qū)104時,音頻數(shù)據(jù)處理程序83不將音頻數(shù)據(jù)寫入到套接字,如圖29所示。只要音頻數(shù)據(jù)存在于套接字中時,記錄應用程序85就執(zhí)行用于讀取音頻數(shù)據(jù)的處理,并且當沒有音頻數(shù)據(jù)存在于套接字中時,不執(zhí)行用于讀取音頻數(shù)據(jù)的處理。
如上所述,步驟S156中的處理不無用地占據(jù)資源,并且在將音頻數(shù)據(jù)寫入到套接字所需的時間段內(nèi)完成。
回到圖25,在步驟S157,如參照圖11所示的流程圖所述,從記錄應用程序85傳輸包括ACK或NACK的消息,從而發(fā)送控制程序107從用于在音頻數(shù)據(jù)處理程序83與記錄應用程序85之間交換消息的套接字讀取包括ACK或NACK的消息。
在步驟S158,發(fā)送控制程序107從消息中提取ACK或NACK,以判定是否接收到NACK。如果判定接收到NACK,則處理進入步驟S159,其中,發(fā)送控制程序107重新發(fā)送通過步驟S155中的處理讀取的音頻數(shù)據(jù)。也就是,發(fā)送控制程序107將音頻數(shù)據(jù)重新寫入到由套接字服務程序84-1建立的以音頻數(shù)據(jù)處理程序83為輸入且以記錄應用程序85為輸出、用于傳輸音頻數(shù)據(jù)的套接字。然后,處理進入步驟S160。
如果在步驟S158判定接收到ACK,則認為在由記錄應用程序85接收的音頻數(shù)據(jù)中沒有發(fā)生任何數(shù)據(jù)損失,從而無需用于重新發(fā)送音頻數(shù)據(jù)的處理。因此,跳過步驟S169中的處理,并且過程進入步驟S160。
在步驟S160,發(fā)送控制程序107增加記錄數(shù)據(jù)緩沖區(qū)104的讀取指針。然后,處理返回到步驟S153,并且重復用于通過套接字發(fā)送音頻數(shù)據(jù)的處理。
如果在步驟S154判定不存在要傳到記錄應用程序85的音頻數(shù)據(jù),則無需執(zhí)行用于發(fā)送音頻數(shù)據(jù)到記錄應用程序85的處理。因此,處理返回到步驟S153,其中,重復關于是否請求了開始記錄的判定。
如果在步驟S153判定未請求開始記錄,則處理進入步驟S161。在步驟S161,發(fā)送控制程序107根據(jù)通過用于交換信息的套接字傳輸?shù)南ⅲ卸ㄓ涗洃贸绦?5是否請求了停止記錄。
如果在步驟S161判定請求了停止記錄,則處理進入步驟S162。在步驟S162,發(fā)送控制程序107根據(jù)記錄數(shù)據(jù)緩沖區(qū)104的讀取指針和寫入指針,判定是否存在要傳到記錄應用程序85的音頻數(shù)據(jù)。如果判定存在要傳到記錄應用程序85的音頻數(shù)據(jù),則必須將整個音頻數(shù)據(jù)發(fā)送到記錄應用程序85。因此,處理進入步驟S155,其中,發(fā)送控制程序107執(zhí)行用于發(fā)送音頻數(shù)據(jù)的處理。
要傳到記錄應用程序85的音頻數(shù)據(jù)是否存在于記錄數(shù)據(jù)緩沖區(qū)104中可以根據(jù)記錄數(shù)據(jù)緩沖區(qū)104的讀取指針的值和記錄數(shù)據(jù)緩沖區(qū)104的寫入指針的值是否相互一致來判定。
如果在步驟S162判定不存在要傳到記錄應用程序85的音頻數(shù)據(jù),則處理進入步驟S163,其中,將表示完成的模式寫入到套接字。然后,處理返回到步驟S151,然后重復處理。
在步驟S163使用的表示回放完成的模式是在圖21所示的結構化音頻數(shù)據(jù)的首標部分中設置的模式。表示完成的模式例如是不出現(xiàn)在普通首標部分中的交替0和1的模式,如圖30所示。
如果在步驟S151判定請求了停止,則處理結束。
下一步,將描述記錄應用程序85的記錄處理。
為了通過比較闡明本發(fā)明的記錄/回放設備中記錄應用程序85的處理,圖31示出傳統(tǒng)記錄處理的流程圖。
在步驟S181,傳統(tǒng)記錄/回放設備判定是否有音頻數(shù)據(jù)存在于記錄數(shù)據(jù)緩沖區(qū)中。如果判定沒有音頻數(shù)據(jù)存在于記錄數(shù)據(jù)緩沖區(qū)中,則處理返回到步驟S181,并且重復處理直到有音頻數(shù)據(jù)存儲在記錄數(shù)據(jù)緩沖區(qū)中。
如果在步驟S181判定有音頻數(shù)據(jù)存在于記錄數(shù)據(jù)緩沖區(qū)中,則處理進入步驟S182,其中,記錄/回放設備從記錄數(shù)據(jù)緩沖區(qū)獲得音頻數(shù)據(jù)。
在步驟S183,記錄/回放設備記錄所獲得的音頻數(shù)據(jù)。然后,處理返回到步驟S181,并且重復記錄處理。
在上述傳統(tǒng)記錄處理中,在步驟S181,在為進程分配的最大時間內(nèi)重復判定處理,直到有音頻數(shù)據(jù)存儲在記錄數(shù)據(jù)緩沖區(qū)中。因此,當正在重復判定處理的時候,記錄/回放設備的資源被判定處理連續(xù)占據(jù)。
在此時間期間,不允許其他進程使用記錄數(shù)據(jù)緩沖區(qū)。例如,不允許其他進程將從聲卡讀取的音頻數(shù)據(jù)寫入到記錄數(shù)據(jù)緩沖區(qū)。
因此,在傳統(tǒng)記錄處理的步驟S181中,重復判定處理,直到有音頻數(shù)據(jù)存儲在記錄數(shù)據(jù)緩沖區(qū)中,從而導致其他進程的延遲。其他進程的延遲影響記錄處理的進程,從而導致記錄處理的進程的延遲。
圖32是示出本發(fā)明的記錄/回放設備中記錄應用程序85的記錄處理的流程圖。
在步驟S201,記錄應用程序85從由套接字服務程序84-1建立的用于將音頻數(shù)據(jù)從音頻數(shù)據(jù)處理程序83傳輸?shù)接涗洃贸绦?5的套接字獲得音頻數(shù)據(jù)。
在步驟S201的處理中,當有音頻數(shù)據(jù)存在于套接字中時,記錄應用程序85立即從套接字獲得音頻數(shù)據(jù),并且步驟S201中的處理結束。
在步驟S201的處理中,當沒有音頻數(shù)據(jù)存在于套接字中時,記錄應用程序85立即結束步驟S201中的處理而不從套接字獲得音頻數(shù)據(jù)。
例如,記錄應用程序85將“接收”消息發(fā)送到套接字對象,從而套接字服務程序84-1獲得控制。套接字服務程序84-1根據(jù)與所接收的音頻數(shù)據(jù)相關聯(lián)的端口號和存儲在內(nèi)核82中的對應于記錄應用程序85的端口號,將音頻數(shù)據(jù)傳輸?shù)接涗洃贸绦?5的接收緩沖區(qū)(接收分組對象),并且將控制返回給記錄應用程序85。因此,當“接收”消息發(fā)送到套接字對象時,對于記錄應用程序85看上去就像是接收緩沖區(qū)接收音頻數(shù)據(jù)一樣。
在步驟S202,記錄應用程序85記錄所獲得的音頻數(shù)據(jù)。然后,處理返回到步驟S201,并且重復記錄處理。
更具體地說,在步驟S202,記錄應用程序85向內(nèi)核82請求將音頻數(shù)據(jù)記錄在HDD 14上,并且將音頻數(shù)據(jù)提供給內(nèi)核82。內(nèi)核82使設備驅動程序81將音頻數(shù)據(jù)記錄在HDD 14上。
下一步,將參照圖33所示的流程圖描述與圖25所示的步驟S156中的處理相關聯(lián)執(zhí)行的用于在一個進程中接收音頻數(shù)據(jù)的由套接字服務程序84-1執(zhí)行的處理。
在步驟S211,套接字服務程序84-1接收通過步驟S156中的處理由發(fā)送控制程序107寫入的音頻數(shù)據(jù),然后處理結束。所接收的音頻數(shù)據(jù)例如存儲在套接字服務程序84-1的預定緩沖區(qū)中。
圖34是與圖32所示的步驟S201中的處理相關聯(lián)執(zhí)行的用于在一個進程中由套接字服務程序84-1傳輸音頻數(shù)據(jù)的處理。
在步驟S221,套接字服務程序84-1判定是否存在要傳輸?shù)接涗洃贸绦?5的音頻數(shù)據(jù)。如果判定存在所要傳輸?shù)囊纛l數(shù)據(jù),則處理進入步驟S222,其中,套接字服務程序84-1將音頻數(shù)據(jù)傳輸?shù)接涗洃贸绦?5,然后處理結束。
如果在步驟S221判定不存在所要傳輸?shù)囊纛l數(shù)據(jù),則跳過步驟S222中的處理,并且處理立即結束。
如上所述,通過本發(fā)明的記錄處理,用于獲得音頻數(shù)據(jù)的記錄應用程序85的處理所需的時間決不超過從套接字讀取音頻數(shù)據(jù)所需的時間。也就是,諸如記錄數(shù)據(jù)緩沖區(qū)104的資源不被具有長執(zhí)行時間的進程占據(jù)。
從而,記錄處理不影響用于從聲卡18讀取音頻數(shù)據(jù)的處理。
因此,在從音頻數(shù)據(jù)處理程序83提供給記錄應用程序85的音頻數(shù)據(jù)中不產(chǎn)生延遲,從而當記錄從外界提供的音頻數(shù)據(jù)時不發(fā)生音頻數(shù)據(jù)的損失。
如上所述,在其中接收作為流提供的內(nèi)容和其中控制將所接收的內(nèi)容記錄在內(nèi)容記錄介質上的方案中,可以記錄內(nèi)容。
而且,在其中在多任務操作系統(tǒng)上執(zhí)行的第一程序控制接收作為流提供的內(nèi)容,其中在多任務操作系統(tǒng)上執(zhí)行的第二程序控制將內(nèi)容記錄在內(nèi)容記錄介質上,以及其中在多任務操作系統(tǒng)上執(zhí)行的第三程序在第一進程中接收要從第一程序傳輸?shù)降诙绦虻膬?nèi)容,并且當不存在所要傳輸?shù)膬?nèi)容時,第三程序在第二進程中立即終止第二進程同時當存在所要傳輸?shù)膬?nèi)容時在終止第二進程之前將內(nèi)容傳輸?shù)降诙绦虻姆桨钢?,可以通過由多任務操作系統(tǒng)控制的設備來更容易地且不產(chǎn)生損失地記錄作為流提供的內(nèi)容。
下一步,將描述記錄應用程序85獲得消逝記錄時間的方法。
圖35是用于獲得消逝記錄時間的由記錄應用程序85執(zhí)行的處理的圖。
在圖35中,以A指定的箭頭表示音頻數(shù)據(jù)處理程序83從聲卡18讀取音頻數(shù)據(jù)的時刻。在圖35中,以B指定的箭頭表示記錄應用程序85從音頻數(shù)據(jù)處理程序83獲得音頻數(shù)據(jù)的時刻。
在音頻數(shù)據(jù)處理程序83中,提供了讀取數(shù)據(jù)緩沖區(qū)102和記錄數(shù)據(jù)緩沖區(qū)104。因此,當使用音頻數(shù)據(jù)處理程序83時,僅根據(jù)所接收音頻數(shù)據(jù)的數(shù)量,不允許記錄應用程序85知道準確的消逝記錄時間。這是因為由記錄應用程序85從音頻數(shù)據(jù)處理程序83獲得的音頻數(shù)據(jù)舊于當前輸入到聲卡18的音頻數(shù)據(jù)。
因此,首先,記錄應用程序85向音頻數(shù)據(jù)處理程序83通知記錄開始。一接收到通知,音頻數(shù)據(jù)處理程序83就從0開始分配號碼給圖22所示的首標部分的序列號。記錄應用程序85例如通過輪詢來有規(guī)律地從音頻數(shù)據(jù)處理程序83讀取由音頻數(shù)據(jù)處理程序83分配給從聲卡18讀取的音頻數(shù)據(jù)的序列號。因為存儲在記錄數(shù)據(jù)緩沖區(qū)104的音頻數(shù)據(jù)的音頻數(shù)據(jù)部分中所存儲的樣本數(shù)固定,因此在原理上可以根據(jù)序列號和樣本數(shù)來計算消逝時間。
當發(fā)生了音軌改變時,以下面方式計算消逝時間。
記錄應用程序85從音頻數(shù)據(jù)處理程序83接收音頻數(shù)據(jù),并且根據(jù)所接收音頻數(shù)據(jù)的首標部分的音軌改變標志(圖22所示)判定曲目是否發(fā)生改變。記錄應用程序85記住當檢測到曲目改變時通過輪詢從音頻數(shù)據(jù)處理程序83獲得的序列號,以及存儲在通過傳輸而接收的音頻數(shù)據(jù)中的序列號。
根據(jù)(通過輪詢而獲得的序列號)-(通過傳輸而接收的序列號)來計算自從曲目(曲目號)改變以來的消逝記錄時間。
例如,如果通過傳輸而接收的音頻數(shù)據(jù)的序列號為4,當根據(jù)音軌改變標志檢測到曲目改變時,如果通過輪詢而獲得的序列號為6,則記錄應用程序85從作為通過輪詢而獲得的序列號的6中減去4,并且根據(jù)作為相減結果的2計算消逝記錄時間。
類似地,如果通過輪詢而獲得的序列號為8,則記錄應用程序85從作為通過輪詢而獲得的序列號的8中減去4,并且根據(jù)作為相減結果的4計算消逝記錄時間。如果通過輪詢而獲得的序列號為10,則記錄應用程序85從作為通過輪詢而獲得的序列號的10中減去4,并且根據(jù)作為相減結果的6計算消逝記錄時間。
從而,即使當曲目在記錄期間發(fā)生改變(發(fā)生了音軌改變)時,也可以準確地計算從曲目的開頭處開始的消逝記錄時間。
下一步,將參照圖36所示的流程圖描述用于從回放應用程序86接收音頻數(shù)據(jù)的由音頻數(shù)據(jù)處理程序83執(zhí)行的處理。
在步驟S231,接收控制程序108判定是否內(nèi)核82請求了停止。如果判定未請求停止,則處理進入步驟S232,其中,接收控制程序108判定是否接收到來自回放應用程序86的套接字連接請求。
如果在步驟S232判定未接收到套接字連接請求,則處理返回到步驟S232,并且重復判定處理直到接收到套接字連接請求。
如果在步驟S232判定接收到套接字連接請求,則處理進入步驟S233,其中,接收控制程序108建立套接字,并且從套接字讀取音頻數(shù)據(jù)。
更具體地說,接收控制程序108向內(nèi)核82請求與回放應用程序86建立套接字,并且內(nèi)核82在接收控制程序108與回放應用程序86之間建立套接字。
接收控制程序108讀取由回放應用程序86寫入到套接字的音頻數(shù)據(jù)。
在步驟S234,接收控制程序108根據(jù)表示音頻數(shù)據(jù)大小的預存儲數(shù)據(jù)和所接收音頻數(shù)據(jù)的大小(例如,字節(jié)數(shù)),判定在音頻數(shù)據(jù)中是否發(fā)生了損失。如果在音頻數(shù)據(jù)中檢測到損失,則處理進入步驟S235,其中,接收控制程序108通過用于交換消息的套接字,將NACK發(fā)送到回放應用程序86。
在步驟S236,接收控制程序108從套接字讀取由回放應用程序86重新發(fā)送的音頻數(shù)據(jù)。然后,過程進入步驟S238。
如果在步驟S234沒有在音頻數(shù)據(jù)中檢測到損失,則無需請求重新發(fā)送音頻數(shù)據(jù)。因此,處理進入步驟S237,其中,接收控制程序108通過用于交換消息的套接字將ACK發(fā)送到回放應用程序86。然后,過程進入步驟S238。
在步驟S238,接收控制程序108判定從套接字讀取的音頻數(shù)據(jù)的首標部分的模式是否與回放完成模式如圖30所示的模式一致。如果沒有檢測到回放完成模式,則繼續(xù)接收處理。因此,處理進入步驟S239,其中,接收控制程序108將從套接字讀取的音頻數(shù)據(jù)寫入到由回放數(shù)據(jù)緩沖區(qū)109的寫入指針表示的位置。
在步驟S240,接收控制程序108增加回放數(shù)據(jù)緩沖區(qū)109的寫入指針。
在步驟S241,接收控制程序108根據(jù)回放數(shù)據(jù)緩沖區(qū)109的寫入指針和讀取指針的值,判定回放數(shù)據(jù)緩沖區(qū)109是否有空處。如果判定回放數(shù)據(jù)緩沖區(qū)109沒有空處,則重復步驟S241中的判定處理,直到在回放數(shù)據(jù)緩沖區(qū)109中出現(xiàn)空處。
如果在步驟S241判定回放數(shù)據(jù)緩沖區(qū)109有空處,則處理返回到步驟S233,并且重復用于接收音頻數(shù)據(jù)的處理。
現(xiàn)在,將描述用于通過套接字將音頻數(shù)據(jù)從回放應用程序86發(fā)送到音頻數(shù)據(jù)處理程序83的處理。
圖37是示出回放數(shù)據(jù)緩沖區(qū)109有空處的情況下所執(zhí)行的處理的圖。
當存在所要發(fā)送的音頻數(shù)據(jù)時,為了將音頻數(shù)據(jù)發(fā)送到音頻數(shù)據(jù)處理程序83,回放應用程序86執(zhí)行用于將音頻數(shù)據(jù)寫入到由套接字服務程序84-2建立的用于將音頻數(shù)據(jù)從回放應用程序86傳輸?shù)揭纛l數(shù)據(jù)處理程序83的套接字的處理。當不存在所要發(fā)送的音頻數(shù)據(jù)時,回放應用程序86不執(zhí)行用于將音頻數(shù)據(jù)寫入到套接字的處理。
當存在要發(fā)送到音頻數(shù)據(jù)處理程序83的音頻數(shù)據(jù)時,回放應用程序86將預定大小的音頻數(shù)據(jù)寫入到套接字,并且立即執(zhí)行隨后處理。當不存在要發(fā)送到音頻數(shù)據(jù)處理程序83的音頻數(shù)據(jù)時,則由于不可獲得音頻數(shù)據(jù),因此回放應用程序86立即執(zhí)行隨后處理。
無論是音頻數(shù)據(jù)寫入到套接字還是音頻數(shù)據(jù)不寫入到套接字,都立即執(zhí)行和結束用于將音頻數(shù)據(jù)寫入到音頻數(shù)據(jù)的回放應用程序86的處理,并且執(zhí)行隨后處理。
也就是,用于將音頻數(shù)據(jù)寫入到套接字的回放應用程序86的處理總是僅在音頻數(shù)據(jù)寫入處理所需的時間內(nèi)完成。因此,用于將音頻數(shù)據(jù)寫入到套接字的回放應用程序86的處理不等待其他進程的狀態(tài)變化,并且不占據(jù)記錄/回放設備的資源長于音頻數(shù)據(jù)寫入處理所需的時間。
當回放數(shù)據(jù)緩沖區(qū)109有空處時,為了從回放應用程序86接收音頻數(shù)據(jù),音頻數(shù)據(jù)處理程序83從由套接字服務程序84-2建立的的用于將音頻數(shù)據(jù)從回放應用程序86傳輸?shù)揭纛l數(shù)據(jù)處理程序83的套接字讀取預定大小的音頻數(shù)據(jù)。
當回放數(shù)據(jù)緩沖區(qū)109沒有空處時,音頻數(shù)據(jù)處理程序83不從套接字讀取音頻數(shù)據(jù),如圖38所示。不管回放數(shù)據(jù)緩沖區(qū)109是否有空處,當存在所要發(fā)送的音頻數(shù)據(jù)時,回放應用程序86都執(zhí)行用于將音頻數(shù)據(jù)寫入到套接字的處理,并且當不存在所要發(fā)送的音頻數(shù)據(jù)時,不執(zhí)行用于將音頻數(shù)據(jù)寫入到套接字的處理。
如果在步驟S238檢測到回放完成模式,則認為回放應用程序86發(fā)出了音頻數(shù)據(jù)結束通知。因此,處理返回到步驟S231,并且執(zhí)行用于判定是否接收到停止請求的處理。
如果在步驟S231判定請求了停止,則處理結束。
圖39是用于由回放應用程序86讀取音頻數(shù)據(jù)的處理的流程圖。
在步驟S261,回放應用程序86從CD 91獲得所要回放的音頻數(shù)據(jù)。
更具體地說,在步驟S261,回放應用程序86向內(nèi)核82請求從CD 91讀取音頻數(shù)據(jù)。內(nèi)核82使設備驅動程序81控制CD-ROM驅動器15讀取記錄在CD 91上的音頻數(shù)據(jù),并且將音頻數(shù)據(jù)提供給回放應用程序86。
回放應用程序86類似地從HDD 14讀取音頻數(shù)據(jù)。
在步驟S262,回放應用程序86將音頻數(shù)據(jù)提供給由套接字服務程序84-2建立的用于將音頻數(shù)據(jù)從回放應用程序86傳輸?shù)揭纛l數(shù)據(jù)處理程序83的套接字。然后,處理返回到步驟S261,并且重復回放處理。
在步驟S262的處理中,當存在要提供給音頻數(shù)據(jù)處理程序83的音頻數(shù)據(jù)時,回放應用程序86立即將音頻數(shù)據(jù)提供給套接字,并且步驟S262中的處理結束。
另一方面,在步驟S262的處理中,當不存在要提供給音頻數(shù)據(jù)處理程序83的音頻數(shù)據(jù)時,回放應用程序86不將音頻數(shù)據(jù)提供給套接字,并且立即結束步驟S262中的處理。
用于允許套接字服務程序84-2從回放應用程序86接收音頻數(shù)據(jù)的處理與參照圖33所示的流程圖所述的處理相同,從而將省略其描述。
用于允許套接字服務程序84-2將音頻數(shù)據(jù)傳輸?shù)揭纛l數(shù)據(jù)處理程序83的處理與參照圖34所述的處理相同,從而將省略其描述。
如上所述,通過本發(fā)明的回放處理,用于提供音頻數(shù)據(jù)的回放應用程序86的處理所需的時間決不超過將音頻數(shù)據(jù)寫入到套接字所需的時間。因此,諸如回放數(shù)據(jù)緩沖區(qū)109的資源不被具有長執(zhí)行時間的進程占據(jù)。
因此,回放處理不影響用于將音頻數(shù)據(jù)寫入到聲卡18的處理。
從而,在從回放應用程序86提供給音頻數(shù)據(jù)處理程序83的音頻數(shù)據(jù)中不產(chǎn)生延遲,并且當將音頻數(shù)據(jù)輸出到外界時在音頻數(shù)據(jù)中不發(fā)生損失。
如上所述,在本發(fā)明的記錄/回放設備中,即使它由不保證進程執(zhí)行定時的多任務操作系統(tǒng)控制,也允許穩(wěn)定的回放和記錄而不產(chǎn)生聲音漏失或者聲音跳躍,這是音頻設備的顯然要求。
如上所述,在其中內(nèi)容從記錄介質讀取并且作為流發(fā)送的方案中,可以回放內(nèi)容。
而且,在其中在多任務操作系統(tǒng)上執(zhí)行的第一程序控制在內(nèi)容記錄介質上記錄的內(nèi)容,其中在多任務操作系統(tǒng)上執(zhí)行的第二程序控制發(fā)送存儲在緩沖區(qū)中的內(nèi)容的流,以及其中在多任務操作系統(tǒng)上執(zhí)行的第三程序在第一進程中接收要從第一程序傳輸?shù)降诙绦虻膬?nèi)容,并且在緩沖區(qū)有空處的情況下,當不存在所要傳輸?shù)膬?nèi)容時,第三程序在第二進程中立即終止第二進程同時當存在所要傳輸?shù)膬?nèi)容時在終止第二進程之前將內(nèi)容傳輸?shù)骄彌_區(qū)的方案中,可以通過由多任務操作系統(tǒng)控制的設備來更容易地并且不產(chǎn)生損失地作為流回放內(nèi)容。
下一步,將描述回放應用程序86獲得消逝回放時間的方法。
圖40是示出用于獲得消逝回放時間的由回放應用程序86執(zhí)行的處理的圖。圖40中以C指定的箭頭表示回放應用程序86將音頻數(shù)據(jù)發(fā)送到音頻數(shù)據(jù)處理程序83的時刻。圖40中以D指定的箭頭表示音頻數(shù)據(jù)處理程序83將音頻數(shù)據(jù)提供給聲卡18的時刻。
在音頻數(shù)據(jù)處理程序83中,提供了回放數(shù)據(jù)緩沖區(qū)109和寫入數(shù)據(jù)緩沖區(qū)111。因此,當使用音頻數(shù)據(jù)處理程序83時,僅根據(jù)所發(fā)送的音頻數(shù)據(jù),不允許回放應用程序86知道準確的消逝回放時間。也就是,由回放應用程序86提供給音頻數(shù)據(jù)處理程序83的音頻數(shù)據(jù)與當前正在從聲卡18輸出的音頻數(shù)據(jù)相比是更新的音頻數(shù)據(jù)。
當將音頻數(shù)據(jù)傳輸?shù)揭纛l數(shù)據(jù)處理程序83時,回放應用程序86將備注寫入到圖21所示的首標部分的回放信息(圖22)?;胤判畔⒌膬?nèi)容根據(jù)回放進程而是任意的。例如,回放應用程序86寫入表示消逝回放時間的時間信息以便以后可以識別回放時間。
回放應用程序86例如通過輪詢來從音頻數(shù)據(jù)處理程序83獲得附于要寫入到聲卡18的音頻數(shù)據(jù)(緊鄰在寫入之前的音頻數(shù)據(jù))的回放信息(備注)。
回放應用程序86根據(jù)包括在所獲得的回放信息中的表示消逝回放時間的時間信息,顯示消逝回放時間。
從而,允許回放應用程序86顯示與當前正在聽取(輸出)的曲目的消逝回放時間相等的消逝回放時間。
如上所述,根據(jù)本發(fā)明,音頻硬件如聲卡18和HDD 14的控制通過音頻數(shù)據(jù)處理程序83變成黑盒。因此,記錄應用程序85和回放應用程序86無需單獨控制音頻硬件。
而且,由于音頻數(shù)據(jù)處理程序83執(zhí)行特定于音頻數(shù)據(jù)的處理,例如,遵循IEC 60958標準的處理,因此用于記錄音頻數(shù)據(jù)的記錄應用程序85或者用于回放音頻數(shù)據(jù)的回放應用程序86無需執(zhí)行特定于音頻數(shù)據(jù)的處理。而且,音頻數(shù)據(jù)處理程序83分析包括在遵循IEC60958標準的音頻數(shù)據(jù)中的信息,并且將分析結果存儲在結構化音頻數(shù)據(jù)中,并且將結構化音頻數(shù)據(jù)提供給記錄應用程序85。因此,可以更容易地實現(xiàn)記錄應用程序85。
例如,當正在記錄從CD讀取的音頻數(shù)據(jù)時,通過分析包括在音頻數(shù)據(jù)中的子碼Q來檢測曲目之間的間隔需要經(jīng)驗知識。因此,難以高度準確地檢測曲目之間的間隔。使用音頻數(shù)據(jù)處理程序83允許在沒有這種知識的情況下準確且容易地檢測曲目之間的間隔。
而且,由于音頻數(shù)據(jù)處理程序83將從回放應用程序86提供的音頻數(shù)據(jù)轉換成遵循IEC 60958標準的音頻數(shù)據(jù),因此回放應用程序86無需執(zhí)行用于設置音頻數(shù)據(jù)中除音頻樣本字以外的信息如前序、V位和C位的的處理。
也就是,音頻數(shù)據(jù)處理程序83完全負責遵循IEC 60958標準的音頻數(shù)據(jù)的分析和計算,并且向記錄應用程序85和回放應用程序86提供與對于數(shù)字音頻設備顯然的規(guī)則相關聯(lián)的版權保護和處理。因此,可以在短期內(nèi)容易地開發(fā)記錄應用程序85和回放應用程序86。
使用包括在結構化音頻數(shù)據(jù)中的信息,允許記錄應用程序85或回放應用程序86獲得記錄時間或回放時間。
除了用于從聲卡18讀取音頻數(shù)據(jù)的讀取數(shù)據(jù)緩沖區(qū)102之外,音頻數(shù)據(jù)處理程序83還具有用于將音頻數(shù)據(jù)發(fā)送到音頻數(shù)據(jù)處理程序83的記錄數(shù)據(jù)緩沖區(qū)104。因此,減少記錄期間的聲音漏失。而且,除了用于將音頻數(shù)據(jù)提供給聲卡18的寫入數(shù)據(jù)緩沖區(qū)111之外,音頻數(shù)據(jù)處理程序83還具有用于從回放應用程序86接收音頻數(shù)據(jù)的回放數(shù)據(jù)緩沖區(qū)109。因此,減少回放期間的聲音跳躍。
在記錄或回放期間,允許回放應用程序86或記錄應用程序85控制音頻數(shù)據(jù)處理程序83以執(zhí)行開始、停止和暫停操作。因此,可以更精細地控制記錄和回放。
由于音頻數(shù)據(jù)處理程序83登記單個記錄應用程序85,并且僅將音頻數(shù)據(jù)提供給所登記的記錄應用程序85,因此即使激活多個進程,也在記錄期間防止由于音頻數(shù)據(jù)的攔截而產(chǎn)生的聲音漏失。類似地,音頻數(shù)據(jù)處理程序83登記單個回放應用程序86,并且僅從所登記的回放應用程序86接收音頻數(shù)據(jù)。因此,即使激活多個進程,也在回放期間防止由于無關音頻數(shù)據(jù)的中斷而產(chǎn)生的聲音跳躍。
雖然描述了本發(fā)明的記錄/回放設備執(zhí)行音頻數(shù)據(jù)處理程序83、記錄應用程序85和回放應用程序86,但是可替換地,多個設備可以各自單獨執(zhí)行音頻數(shù)據(jù)處理程序83、記錄應用程序85和回放應用程序86之一。在這種情況下,通過網(wǎng)絡發(fā)送音頻數(shù)據(jù)。
而且,由于允許音頻數(shù)據(jù)處理程序83通過套接字與其他程序交換消息,因此例如,當在開發(fā)期間或者銷售之后出現(xiàn)問題時,可以通過網(wǎng)絡更新音頻數(shù)據(jù)處理程序83。
雖然描述了HDD 14和CD 91作為用于在其上記錄音頻數(shù)據(jù)的內(nèi)容記錄介質的例子,但是不限于HDD 14和CD 91,可以在諸如磁盤31、光盤32、磁光盤33或半導體存儲器34的內(nèi)容記錄介質上記錄內(nèi)容,并且可以回放記錄在諸如磁盤31、光盤32、磁光盤33或半導體存儲器34的內(nèi)容記錄介質上的內(nèi)容。
處理序列可以采用硬件或者采用軟件來執(zhí)行。當處理序列采用軟件來執(zhí)行時,將組成軟件的程序從記錄介質安裝到內(nèi)嵌在專用硬件中的計算機或者能夠通過安裝在其上的各種程序執(zhí)行各種功能的通用計算機等上。
如圖1所示,記錄介質可以是用于以與計算機分開的方式將程序分發(fā)給用戶的其上記錄有程序的包介質,例如磁盤31(包括軟盤)、光盤32(包括CD-ROM(致密盤-只讀存儲器))和DVD(數(shù)字多功能盤))、磁光盤33(包括MD(微型盤))或者半導體存儲器34??商鎿Q地,記錄介質可以是以包括在計算機中的方式分發(fā)給用戶的其上記錄有程序的未示出的ROM或者HDD 14。
用于執(zhí)行上述處理序列的程序可以根據(jù)需要通過諸如路由器或調(diào)制解調(diào)器的接口利用有線或無線通信介質如局域網(wǎng)、因特網(wǎng)、數(shù)字衛(wèi)星廣播安裝在計算機上。
在本說明書中,包括在存儲于記錄介質上的程序中的步驟可以包括并行或者單獨執(zhí)行的處理,以及按照所述次序順序執(zhí)行的處理。
在本說明書中,系統(tǒng)是指由多個設備組成的整個設備。
工業(yè)適用性根據(jù)本發(fā)明,在由不保證輪轉時間的多任務操作系統(tǒng)控制的設備中,可以更容易地且不產(chǎn)生損失地記錄作為流提供的內(nèi)容。
權利要求
1.一種記錄設備,用于在操作系統(tǒng)的控制下將第一內(nèi)容數(shù)據(jù)記錄在記錄介質上,其中,作為流輸入第一內(nèi)容數(shù)據(jù),所述記錄設備包括數(shù)據(jù)接收控制裝置,用于在由操作系統(tǒng)控制的第一程序的控制下,控制接收輸入第一內(nèi)容數(shù)據(jù);數(shù)據(jù)記錄控制裝置,用于在由操作系統(tǒng)控制的第二程序的控制下,控制將輸入第一內(nèi)容數(shù)據(jù)記錄在記錄介質上;以及傳輸裝置,用于在由操作系統(tǒng)控制的第一進程的控制下,接收被指定要從數(shù)據(jù)接收控制裝置傳輸?shù)綌?shù)據(jù)記錄控制裝置的第一內(nèi)容數(shù)據(jù),并且用于在由操作系統(tǒng)控制的第二進程的控制下控制傳輸?shù)谝粌?nèi)容數(shù)據(jù),僅當正在接收要傳輸?shù)綌?shù)據(jù)記錄控制裝置的數(shù)據(jù)的時候,第二進程才控制傳輸,并且一完成傳輸,就立即終止第二進程。
2.根據(jù)權利要求1所述的記錄設備,其中,傳輸裝置是用于控制將數(shù)據(jù)從由操作系統(tǒng)控制的一個程序傳輸?shù)接刹僮飨到y(tǒng)控制的另一個程序的套接字。
3.根據(jù)權利要求1所述的記錄設備,其中,數(shù)據(jù)接收控制裝置包括第一存儲裝置,用于以第一數(shù)據(jù)長度為單位存儲輸入第一內(nèi)容;第二存儲裝置,用于以與第一數(shù)據(jù)長度不同的第二數(shù)據(jù)長度為單位存儲第一內(nèi)容數(shù)據(jù);以及數(shù)據(jù)傳輸裝置,用于將以第一數(shù)據(jù)長度為單位存儲在第一存儲裝置中的第一內(nèi)容數(shù)據(jù)轉換成第二數(shù)據(jù)長度的單位,并且將經(jīng)過轉換的內(nèi)容數(shù)據(jù)傳輸?shù)降诙鎯ρb置;并且其中,數(shù)據(jù)接收控制裝置以第二數(shù)據(jù)長度為單位將存儲在第二存儲裝置中的第一內(nèi)容數(shù)據(jù)輸出到傳輸裝置。
4.根據(jù)權利要求1所述的記錄設備,還包括提取裝置,用于提取包括在輸入第一內(nèi)容數(shù)據(jù)中的控制信息。
5.根據(jù)權利要求4所述的記錄設備,其中,根據(jù)由提取裝置提取的控制信息禁止將輸入第一內(nèi)容數(shù)據(jù)記錄在記錄介質上。
6.根據(jù)權利要求4所述的記錄設備,還包括處理裝置,用于根據(jù)由提取裝置提取的控制信息,對輸入第一內(nèi)容數(shù)據(jù)執(zhí)行預定處理。
7.根據(jù)權利要求1所述的記錄設備,其中,數(shù)據(jù)接收控制裝置還控制以第二內(nèi)容數(shù)據(jù)的形式發(fā)送輸入第一內(nèi)容數(shù)據(jù),其中,第二內(nèi)容數(shù)據(jù)是其數(shù)據(jù)格式與第一內(nèi)容數(shù)據(jù)的數(shù)據(jù)格式不同的流數(shù)據(jù)。
8.根據(jù)權利要求1所述的記錄設備,其中,傳輸裝置還包括登記裝置,用于登記請求了發(fā)送數(shù)據(jù)到傳輸裝置的用于控制數(shù)據(jù)接收控制裝置的第一程序,并且其中,傳輸裝置拒絕用于從由與第一程序不同的程序控制的其他接收控制裝置發(fā)送內(nèi)容數(shù)據(jù)的請求。
9.根據(jù)權利要求8所述的記錄設備,其中,傳輸裝置的登記裝置還登記請求了從傳輸裝置接收數(shù)據(jù)的用于控制數(shù)據(jù)記錄控制裝置的第二程序,并且其中,只有當?shù)怯浟说诙绦驎r才準許從數(shù)據(jù)接收控制裝置發(fā)送數(shù)據(jù)。
10.一種記錄方法,用于在操作系統(tǒng)的控制下將第一內(nèi)容數(shù)據(jù)記錄在記錄介質上,其中,作為流輸入第一內(nèi)容數(shù)據(jù),所述記錄方法包括數(shù)據(jù)接收控制步驟,在由操作系統(tǒng)控制的第一程序的控制下,控制接收輸入第一內(nèi)容數(shù)據(jù);數(shù)據(jù)記錄控制步驟,在由操作系統(tǒng)控制的第二程序的控制下,控制將輸入第一內(nèi)容數(shù)據(jù)記錄在記錄介質上;以及傳輸步驟,在由操作系統(tǒng)控制的第一進程的控制下,接收被指定要從第一程序傳輸?shù)降诙绦虻牡谝粌?nèi)容數(shù)據(jù),并且在由操作系統(tǒng)控制的第二進程的控制下控制傳輸?shù)谝粌?nèi)容數(shù)據(jù),僅當正在接收要傳輸?shù)降诙绦虻臄?shù)據(jù)的時候,第二進程才控制傳輸,并且一完成傳輸,就立即終止第二進程。
11.根據(jù)權利要求10所述的記錄方法,其中,第二進程是控制將數(shù)據(jù)從由操作系統(tǒng)控制的一個程序傳輸?shù)接刹僮飨到y(tǒng)控制的另一個程序的套接字。
12.根據(jù)權利要求10所述的記錄方法,其中,第一程序以第一數(shù)據(jù)長度為單位將輸入第一內(nèi)容存儲在第一存儲裝置中,其中,第一程序以與第一數(shù)據(jù)長度不同的第二數(shù)據(jù)長度為單位將第一內(nèi)容數(shù)據(jù)存儲在第二存儲裝置中,其中,第一程序將以第一數(shù)據(jù)長度為單位存儲在第一存儲裝置中的第一內(nèi)容數(shù)據(jù)轉換成第二數(shù)據(jù)長度的單位,并且將經(jīng)過轉換的第一內(nèi)容數(shù)據(jù)傳輸?shù)降诙鎯ρb置,并且其中,第一程序以第二數(shù)據(jù)長度為單位將存儲在第二存儲裝置中的第一內(nèi)容數(shù)據(jù)輸出到第一進程。
13.根據(jù)權利要求10所述的記錄方法,還包括提取步驟,提取包括在輸入第一內(nèi)容數(shù)據(jù)中的控制信息。
14.根據(jù)權利要求13所述的記錄方法,其中,根據(jù)在提取步驟提取的控制信息,禁止將輸入第一內(nèi)容數(shù)據(jù)記錄在記錄介質上。
15.根據(jù)權利要求13所述的記錄方法,還包括處理步驟,根據(jù)在提取步驟提取的控制信息,對輸入第一內(nèi)容數(shù)據(jù)執(zhí)行預定處理。
16.根據(jù)權利要求10所述的記錄方法,其中,第二程序還控制以第二內(nèi)容數(shù)據(jù)的形式發(fā)送輸入第一內(nèi)容數(shù)據(jù),其中,第二內(nèi)容數(shù)據(jù)是其數(shù)據(jù)格式與第一內(nèi)容數(shù)據(jù)的數(shù)據(jù)格式不同的流數(shù)據(jù)。
17.根據(jù)權利要求10所述的記錄方法,其中,第二進程還包括登記步驟,登記請求了發(fā)送數(shù)據(jù)到第二進程的第一程序,并且其中,第二進程拒絕用于從與第一程序不同的程序發(fā)送內(nèi)容數(shù)據(jù)的請求。
18.根據(jù)權利要求17所述的記錄方法,其中,第二進程還登記請求了從傳輸步驟接收數(shù)據(jù)的第二程序,并且其中,只有當?shù)怯浟说诙绦驎r,第二進程才準許從第一程序發(fā)送數(shù)據(jù)。
全文摘要
一種由其中不保證輪轉時間的多任務操作系統(tǒng)控制的記錄設備。該記錄設備更容易地且不帶損失地記錄作為流提供的內(nèi)容。音頻數(shù)據(jù)處理程序(83)控制接收所輸入的音頻數(shù)據(jù)。記錄應用程序(85)控制將所輸入的音頻數(shù)據(jù)記錄到HDD(14)上。套接字服務程序(84-1)在第一進程的控制下從音頻數(shù)據(jù)處理程序(83)接收音頻數(shù)據(jù),并且僅在接收要傳輸?shù)接涗洃贸绦?85)的數(shù)據(jù)的時間段內(nèi)才在第二進程的控制下控制音頻數(shù)據(jù)的傳輸。在傳輸結束之后立即終止第二進程。本發(fā)明適用于記錄或再現(xiàn)音頻數(shù)據(jù)的記錄/再現(xiàn)設備。
文檔編號G06F9/46GK1585928SQ0380149
公開日2005年2月23日 申請日期2003年9月3日 優(yōu)先權日2002年9月10日
發(fā)明者工藤繁孝, 后藤隆志 申請人:索尼株式會社