專利名稱:多媒體同步系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)系統(tǒng)的改進(jìn),尤其涉及對各種多媒體事件的定時(shí)進(jìn)行同步處理的系統(tǒng)。
本申請與歐頓等人(Debra L.Orton David B.Goldsmith,Christopher P.Moeller以及Andrew G.Heninger)于1992年12月23日提交到美國聯(lián)邦專利商標(biāo)局并轉(zhuǎn)讓給本申請人(Taligent,Inc.)的題為“面向目標(biāo)的結(jié)構(gòu)系統(tǒng)”有關(guān),該專利申請已于1993年12月23日提交到中國專利局,其申請?zhí)枮?3112880.3該專利申請的內(nèi)容為本申請所引用。本申請的部分內(nèi)容受版權(quán)保護(hù)。版權(quán)所有人允許在專利商標(biāo)局中該專利申請作為專利文件被傳真復(fù)印,但保留所有其它的版權(quán)。
多媒體也許是發(fā)展最快的計(jì)算機(jī)系統(tǒng)應(yīng)用。越來越多的用戶采用計(jì)算機(jī)向終端用戶表示圖形,聲音以及圖象信息。用戶越來越希望有用于管理多媒體表示的人類工程學(xué)界面。過去,系統(tǒng)時(shí)鐘通常被用于在一特定時(shí)刻開始播放聲音。但是,使聲音或音樂表達(dá)與信息顯示同步的工具作為未折合(unfolded)的多媒體表達(dá)是不可能的。
現(xiàn)有的不具備本發(fā)明的同步能力的多媒體系統(tǒng)的例子包括蘋果公司的“Quicktime”以及微軟公司的Video for Win-dows”(刊載于“NEWMEDIA”1993年3月期第36頁到42頁),題為“It’s Showtime”。IEEE Spectrum在1993年3月期第22頁到31頁以“Interacive Multimedia”和32頁到39頁以“The Technology Framework”為題討論了解決先有技術(shù)中的同步問題的重要性。這兩篇文章指出了多媒體內(nèi)部操作性的重要性。而該內(nèi)部操作性則是由本發(fā)明的同步性能表達(dá)的。
因此,本發(fā)明的主要目的是提供一種利用具有存儲器和顯示器的計(jì)算機(jī)在多媒體表達(dá)的全過程對各種多媒體事件進(jìn)行同步的系統(tǒng)和方法。在存儲器中定義與當(dāng)前時(shí)刻的內(nèi)部或外部源關(guān)聯(lián)的時(shí)鐘目標(biāo),該時(shí)鐘目標(biāo)可在顯示器上顯示,但是,一旦其連接被定義,它們也能被隱藏。代表音頻,視頻或其他多媒體事件的至少一個(gè)多媒體目標(biāo)被定義并連接到一個(gè)或多個(gè)特定的時(shí)鐘目標(biāo)。然后,處理器使這些多媒體目標(biāo)與相關(guān)的時(shí)鐘目標(biāo)同步。
圖1是根據(jù)本發(fā)明最佳實(shí)施例的個(gè)人計(jì)算機(jī)框圖;圖2展示了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的時(shí)鐘目標(biāo);圖3是根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的系統(tǒng)定時(shí)器;圖4示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的時(shí)鐘目標(biāo)的定時(shí)輸入的外部源;圖5示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的主時(shí)鐘目標(biāo)和從時(shí)鐘目標(biāo);圖6示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例用于驅(qū)動時(shí)鐘目標(biāo)層級的時(shí)鐘源;圖7示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的時(shí)基序列;
圖8示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的時(shí)基媒體播放器;圖9示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的多媒體播放器,該播放器與主時(shí)鐘外部同步。
圖10是根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例作為另一個(gè)時(shí)鐘目標(biāo)的主時(shí)鐘目標(biāo),該另一時(shí)鐘依次成為再一個(gè)時(shí)鐘的主時(shí)鐘;圖11示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的音頻和視頻序列同步;圖12示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的音頻播放器(主播放器),該播放器與一視頻播放器(從播放器)同步;圖13示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的音頻序列,其中的視頻序列被同步以便以比音頻序列快一倍的速率播放。
圖14示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的計(jì)算機(jī)顯示,其中,一個(gè)視頻序列被同步以便以比音頻序列快一倍的速率播放。
圖15示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的主從播放器目標(biāo);圖16示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的調(diào)節(jié)旋鈕;圖17示出了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例的調(diào)節(jié)旋鈕,該旋鈕作為多個(gè)多媒體目標(biāo)的控制器;圖17B和17C是根據(jù)本發(fā)明的一個(gè)實(shí)施例的調(diào)節(jié)旋鈕的流程圖;圖18展示了根據(jù)本發(fā)明的一個(gè)實(shí)施例出現(xiàn)在計(jì)算機(jī)顯示器上的時(shí)鐘層級;圖19示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例通過定時(shí)源而間接與另一時(shí)鐘相連的時(shí)鐘;圖20是根據(jù)本發(fā)明的一個(gè)實(shí)施例的SetTime邏輯的詳細(xì)流程圖;圖21是根據(jù)本發(fā)明的一個(gè)實(shí)施例的TickleWakeups功能的邏輯流程圖;圖22是根據(jù)本發(fā)明的一個(gè)實(shí)施例的Get Current Time操作的邏輯流程圖;圖23是根據(jù)本發(fā)明的一個(gè)實(shí)施例的延遲和告警處理的邏輯流程圖;圖24是根據(jù)本發(fā)明的一個(gè)實(shí)施例Sync To Keep MyTime處理的邏輯流程圖;圖25示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的音頻播放器;圖26示出了根據(jù)本發(fā)明一個(gè)實(shí)施例作為控制器的音頻播放器;圖27是根據(jù)本發(fā)明的一個(gè)實(shí)施例受控于一個(gè)時(shí)鐘的音頻播放器的流程圖;圖28示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的日出圖象序列;圖29是根據(jù)本發(fā)明的一個(gè)實(shí)施例與一圖形播放器有關(guān)的邏輯;
圖30示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的MIDI序列和MIDI Track格式;圖31示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例通過一個(gè)驅(qū)動器播放一個(gè)序列的MIDI播放器;圖32是根據(jù)本發(fā)明的一個(gè)實(shí)施例的MIDI播放器的詳細(xì)邏輯流程圖;圖33示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的空白桌面顯示;圖34示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的選定時(shí)鐘目標(biāo)定義顯示;圖35示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的各個(gè)時(shí)鐘目標(biāo)和多媒體目標(biāo);圖36示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的各個(gè)連接到一起的時(shí)鐘目標(biāo)和多媒體目標(biāo);以及圖37示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的可見目標(biāo),該可見目標(biāo)與一個(gè)音頻目標(biāo)同步。
本發(fā)明最好在IBM PS/2或Apple Macintosh計(jì)算機(jī)之類的個(gè)人機(jī)中的操作系統(tǒng)里實(shí)施。圖1示出了具有代表性的硬件環(huán)境,它展示了根據(jù)本發(fā)明的工作站的典型硬件構(gòu)造,它包括一個(gè)中央處理器10(例如常規(guī)的中央處理器),以及多個(gè)與系統(tǒng)總線12相連的其他部件。圖1所示工作站包括一個(gè)RAM14,ROM16,用于連接磁盤部件20之類的外圍設(shè)備到總線的I/O適配器18,用于把鍵盤24,鼠標(biāo)器26,揚(yáng)聲器28,麥克風(fēng)32以及/或其他接口設(shè)備(例如觸摸式屏幕設(shè)備)等連到總線的用戶接口適配器22,用于把工作站連到數(shù)據(jù)處理網(wǎng)絡(luò)23的通信適配器34,以及把總線連到顯示設(shè)備38的顯示適配器36。該工作站中的操作系統(tǒng)為Apple Sys-tem/7一類的操作系統(tǒng)。
在一個(gè)最佳實(shí)施例中,本發(fā)明是以采用面向目標(biāo)的編程技術(shù)的C++程序語言實(shí)現(xiàn)的。正如本領(lǐng)域一般技術(shù)人員所理解的,面向目標(biāo)的編程(OOP)目標(biāo)是包括數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)中的操作的軟件實(shí)體。這些單元一起以數(shù)據(jù)單元表示的特性以及由其數(shù)據(jù)操縱功能表示的行為使目標(biāo)實(shí)際成型為任意現(xiàn)實(shí)社會中的實(shí)體。以這種方式,目標(biāo)可以成型為具體的事物,例如人和計(jì)算機(jī),而且亦可成型為抽象概念,例如數(shù)字或幾何概念。目標(biāo)技術(shù)的好處來自于三個(gè)基本原理封裝,多形性以及繼承,所謂封裝(encapsulation)是指一種把數(shù)據(jù)以相應(yīng)的過程存儲起來的技術(shù),而多形性則是指在一個(gè)共用的界面后面隱藏不同實(shí)現(xiàn)。從而簡化目標(biāo)之間的通信的能力。繼承則是指一種處理,其中,分類可以利用在分類層級的分支上高于該分類的所有分類所限定的方法和變量。
目標(biāo)隱藏或封裝其數(shù)據(jù)的內(nèi)部結(jié)構(gòu)和算法。除了展現(xiàn)這些實(shí)施細(xì)節(jié),目標(biāo)展示清楚表達(dá)其抽象而無冗余信息的界面。多形則將封裝又推進(jìn)一步。該概念是多個(gè)形狀,一個(gè)界面。一個(gè)軟件部件(Component)可以提出另一部件的請求而無需知道那一部件倒例底是怎樣的,按收請求的部件對其進(jìn)行解釋可根據(jù)其變量和數(shù)據(jù)確定如何執(zhí)行該請求。第三個(gè)原理是繼承,它允許開發(fā)者再使用先有的設(shè)計(jì)和編碼。這一能力使開發(fā)者避免擦除以生成軟件。進(jìn)而,通過繼承,開發(fā)者獲得繼承了行為的子分類,從而使開發(fā)者將其客戶化以滿足特定的需求。
一種先有技術(shù)的方法是在過程環(huán)境中對目標(biāo)和分類庫進(jìn)行分層,市場上的許多應(yīng)用結(jié)構(gòu)都采用了這種設(shè)計(jì)方法。在這種設(shè)計(jì)中,在單一操作系統(tǒng)的頂部有至少一個(gè)層級。雖然這一方式利用了目標(biāo)層級中的封裝,多形性以及繼承,而且是對過程編程技術(shù)的重大改進(jìn),但其仍有限制,其困難之處在于雖然開發(fā)者很易再使用他們的目標(biāo),但其他系統(tǒng)則很難使用這些目標(biāo)而且開發(fā)者仍需由過程操作系統(tǒng)(OS)調(diào)用進(jìn)入較低的非目標(biāo)層級。
面向目標(biāo)編程的另一方面是應(yīng)用開發(fā)的結(jié)構(gòu)方式,結(jié)構(gòu)的最合理定義之一是由依利諾易斯大學(xué)(University of Llli-nois)的強(qiáng)森(Ralph E.Johnson)以及普渡(Purdue)的盧棱(Vincent F.Russo)做出的在他們1991年發(fā)表的題為“面向目標(biāo)的設(shè)計(jì)的再使用(Reusing Object-Oriented Designs)”(該文發(fā)表在依利諾易斯大學(xué)的技術(shù)報(bào)告UIUCDCS91-1696頁)一文中提出了以下定義“一個(gè)抽象分類是一組合作執(zhí)行一組響應(yīng)的目標(biāo)的設(shè)計(jì)。因此,一個(gè)結(jié)構(gòu)是一組合作執(zhí)行定義組的計(jì)算響應(yīng)的目標(biāo)分類。從編程觀點(diǎn)出發(fā),結(jié)構(gòu)實(shí)際上是一組提供工作應(yīng)用程序的預(yù)制結(jié)構(gòu)的內(nèi)連目標(biāo)分類組。例如,一個(gè)用戶界面結(jié)構(gòu)可以提供繪制視窗,卷動條以及選項(xiàng)屏等的支持和“系統(tǒng)預(yù)置”行為。由于結(jié)構(gòu)基于目標(biāo)技術(shù),該行為可被繼承和置換以使開發(fā)者對結(jié)構(gòu)進(jìn)行擴(kuò)展并在一特定的區(qū)域生成客戶化方案,由于編程不改變初始碼而只是擴(kuò)展軟件,上述優(yōu)點(diǎn)便成為一個(gè)優(yōu)于傳統(tǒng)編程的主要特點(diǎn)。此外,由于結(jié)構(gòu)提供了體系結(jié)構(gòu)指導(dǎo)和模型并在同時(shí)允許為問題范疇提供了唯一的獨(dú)特行為,開發(fā)者不會盲目地通過編碼層級進(jìn)行工作。
從商業(yè)觀點(diǎn)來看,結(jié)構(gòu)被視為在一特定知識領(lǐng)域封裝或嵌入專門知識的方式,公司開發(fā)機(jī)構(gòu),獨(dú)立軟件銷售商(ISV)以及系統(tǒng)集成者已經(jīng)提出了在特定區(qū)域中的專門知識的要求,這些特定區(qū)域包括制造,財(cái)會,以及現(xiàn)金交易。該專門知識被嵌入編碼中。結(jié)構(gòu)允許這些開發(fā)機(jī)構(gòu)捕捉并封裝該專門知識的通用特性,其過程是將其嵌入機(jī)構(gòu)的編碼之中,首先,這使得開發(fā)者生成或護(hù)展利用該專門知識的應(yīng)用程序。因此把問題解決一次并使商業(yè)規(guī)律和設(shè)計(jì)被前后一致地實(shí)施和使用。另外,在結(jié)構(gòu)后面的嵌入專門知識以及結(jié)構(gòu)對已經(jīng)在統(tǒng)管生產(chǎn)和銷售的市場的知識(例如生產(chǎn),財(cái)會或生物技術(shù))的那些機(jī)構(gòu)有策略的有益含義,或生物技術(shù)需要包裝,再銷售,以及推廣應(yīng)用其知識,并進(jìn)而推廣和開發(fā)普及其技術(shù)。
從歷史而言,結(jié)構(gòu)(framework)只是在最近才成為個(gè)人計(jì)算機(jī)的主流概念。這一發(fā)展得力于面向目標(biāo)語言(例如C++)的發(fā)展。C++最早是在UNIX系統(tǒng)和研究人員的工作站上實(shí)現(xiàn)的,而不是在商用個(gè)人計(jì)算機(jī)上發(fā)現(xiàn)的。正是C++語言以及其他面向目標(biāo)的語言(例如Smalltalk等等)使得許多大學(xué)和研究項(xiàng)目產(chǎn)生了當(dāng)今商用結(jié)構(gòu)和分類庫的先驅(qū)。這些例子包括斯坦福大學(xué)(Standford University)的InterViews,卡內(nèi)基-麥倫大學(xué)(Carnegie-Mellon University)的Andrewtoolkit,以及赤瑞茨大學(xué)(University of Zurich)的ET++結(jié)構(gòu)。
根據(jù)想解決的問題以及涉及的系統(tǒng)層級,有多種結(jié)構(gòu)。這些結(jié)構(gòu)包括幫助開發(fā)用戶界面的應(yīng)用程序結(jié)構(gòu)以及提供基本系統(tǒng)軟件服務(wù)(例如通信,打印,文件系統(tǒng)支持,圖形等等)的低級結(jié)構(gòu),應(yīng)用結(jié)構(gòu)的商用例子是MacApp(Apple),Bedrock(Symantec),OWL(Borland)、NextStep App Kit(NeXT),以及Smalltalk-80 MVC(ParcPlace)等等。
結(jié)構(gòu)編程要求與常規(guī)的其他系統(tǒng)不同的新思維方式。事實(shí)上,它與傳統(tǒng)概念的“編程”全然不同。在以前的操作系統(tǒng)中(例如DOS或UNIX)開發(fā)者自己的程序提供了所有結(jié)構(gòu),操作系統(tǒng)通過系統(tǒng)調(diào)用提供服務(wù)——開發(fā)者的程序在需要服務(wù)時(shí)以及服務(wù)完成控制返回時(shí)進(jìn)行調(diào)用。程序結(jié)構(gòu)基于嵌入開發(fā)者寫的編碼中的控制流程。
當(dāng)結(jié)構(gòu)使用時(shí),其過程相反,開發(fā)者不再依賴控制流程。開發(fā)者必須根據(jù)執(zhí)行流程事先了解編程任務(wù)的趨向。進(jìn)而,必須依據(jù)目標(biāo)的響應(yīng)性進(jìn)行思考,這必須根據(jù)結(jié)構(gòu)確定何時(shí)執(zhí)行任務(wù)。由開發(fā)者所寫的程序由不是開發(fā)者寫的而且開發(fā)者從未見到的編碼激勵(lì)??刂屏鞒讨械霓D(zhuǎn)換可能對只在過程編程中有經(jīng)驗(yàn)的開發(fā)者構(gòu)成較大的心理障礙。但是,一旦明白之后,結(jié)構(gòu)編程所需工作就大大少于其他編程。
以一個(gè)應(yīng)用結(jié)構(gòu)(application framework)給用戶提供預(yù)制功能性的同樣方法,系統(tǒng)結(jié)構(gòu)(正如在最佳實(shí)施中包括的)通過提供系統(tǒng)級服務(wù)而實(shí)現(xiàn)同樣概念。系統(tǒng)程序員之類的開發(fā)者可用其進(jìn)行子分類/置換以生成客戶化的方案。例如,考慮一個(gè)可以提供基礎(chǔ)以支持視頻,音頻,MIDI動畫等等新的以及多功能設(shè)備的多媒體結(jié)構(gòu)需要支持一種新設(shè)備的開發(fā)者必須寫一個(gè)設(shè)備驅(qū)動程序。若以結(jié)構(gòu)完成這一任務(wù),則開發(fā)者只需支持該新設(shè)備的特定特性和行為。
在這種情況下,開發(fā)者提供將為該多媒體結(jié)構(gòu)調(diào)用的某種成員功能實(shí)施。開發(fā)者可得到的好處在于每類設(shè)備需要的通用編碼已由多媒體結(jié)構(gòu)提供了。這意味著開發(fā)者要編寫,測試和檢測的設(shè)備驅(qū)動程序編碼減少了。使用系統(tǒng)結(jié)構(gòu)(Sys-tem framwork)的另一例子是對于計(jì)算機(jī)系統(tǒng)接口(SCSI)設(shè)備,NuBus卡,以及圖形設(shè)備提供各自的I/O結(jié)構(gòu)。由于有繼承功能性,每個(gè)結(jié)構(gòu)為在其設(shè)備類別中發(fā)現(xiàn)的通用功能性提供支持,其他開發(fā)者則可依據(jù)對各種設(shè)備一致的界面。
本發(fā)明的一個(gè)最佳實(shí)施例采用了結(jié)構(gòu)的概念并將其應(yīng)用于整個(gè)系統(tǒng)。對于商業(yè)和企業(yè)開發(fā)者,系統(tǒng)集成商或OEM,這意味著象MacAfpp一類的結(jié)構(gòu)所展示的優(yōu)點(diǎn)可以不僅作用于文本和用戶界面之類的事物,而且亦可用于系統(tǒng)的服務(wù),例如圖形,多媒體,文件系統(tǒng),I/O,以及測試等等。
在一個(gè)最佳實(shí)施例的體系結(jié)構(gòu)中的應(yīng)用程序生成基本與編寫附加到結(jié)構(gòu)協(xié)議的特定域的謎塊類似。在這一方式中,編程的整個(gè)概念改變了,代之以在調(diào)用多個(gè)API層級的編碼行之后寫編碼行,軟件將由在該環(huán)境中的先有結(jié)構(gòu)導(dǎo)出的分類所發(fā)展,然后根據(jù)需要加入新行為并/或替換繼承的行為。
如此,開發(fā)者的應(yīng)用程序成為由所有其他結(jié)構(gòu)應(yīng)用程序編寫和共享的編碼集。由于開發(fā)者將可在相互的工作上工作,因此這是一個(gè)很有力的概念,這也為開發(fā)者提供了根據(jù)需要進(jìn)行客戶化的靈活性。某些結(jié)構(gòu)將被原樣使用。在某些情況下,客戶化的量將很小,所以開發(fā)者插入的謎塊將很小。在另外的情況中,用戶可以進(jìn)行很大修改并生成全新的事件。
在一個(gè)最佳實(shí)施例中,如圖1所示,軟件時(shí)鐘負(fù)責(zé)提供時(shí)基,而位于RAM14中并由CPU10控制(或通過總線12或通信適配器34外接)的多媒體播放器則負(fù)責(zé)跟蹤時(shí)鐘。無需中央播放器來協(xié)調(diào)或管理系統(tǒng)的整個(gè)處理。這一體系結(jié)構(gòu)在新的媒體類型加入時(shí)很靈活并可擴(kuò)展。由本發(fā)明的最佳實(shí)施例實(shí)現(xiàn)的系統(tǒng)和方法可提供以下特性。
·播放器可經(jīng)常進(jìn)行檢查以確保應(yīng)用程序要求的準(zhǔn)確同步級。
·多個(gè)時(shí)鐘可相互同步,而且時(shí)鐘間的線性時(shí)間關(guān)系可用于指示各個(gè)序列相互間的速度及偏移。
·多個(gè)時(shí)間源。任何時(shí)鐘(以及任何播放器)可以不僅與系統(tǒng)時(shí)鐘同步,亦可與外部時(shí)間源(例如來自錄象帶的時(shí)間碼)同步,或與用戶動作(例如調(diào)諧軟件結(jié)構(gòu)的微調(diào)/往復(fù)旋鈕等其他控制)同步。
·時(shí)鐘可以向后倒退。
·時(shí)鐘可跨越多個(gè)地址空間。
術(shù)語定義何謂時(shí)鐘?如圖2所示,軟件時(shí)鐘是一個(gè)執(zhí)行以下功能的目標(biāo)。
·時(shí)鐘有“當(dāng)前時(shí)刻”,由時(shí)間目標(biāo)200所示,時(shí)間目標(biāo)是一個(gè)浮點(diǎn)數(shù),它以微微秒(10-12)的精度進(jìn)行時(shí)間測量。為測定該當(dāng)前時(shí)刻而提供了成員功能。一個(gè)成員功能是作用于一個(gè)目標(biāo)的功能。當(dāng)前時(shí)刻在時(shí)鐘正轉(zhuǎn)時(shí)可以增加。但其值亦可在時(shí)鐘反轉(zhuǎn)時(shí)減小。
·延遲時(shí)鐘可以在某一時(shí)刻停止一段時(shí)間,該時(shí)間叫做“延遲時(shí)刻”。若時(shí)鐘正轉(zhuǎn),則當(dāng)時(shí)鐘的當(dāng)前時(shí)刻大于或等于延遲時(shí)刻時(shí),但時(shí)間不會停止;若時(shí)鐘反轉(zhuǎn),則在當(dāng)前時(shí)刻小于或等于該延遲時(shí)刻時(shí),時(shí)間不會停止。
告警時(shí)鐘可以在一特定時(shí)刻把一個(gè)IPC(內(nèi)部處理通信)消息送到一個(gè)端口,該時(shí)刻稱為告警時(shí)刻。若時(shí)鐘正轉(zhuǎn),則在時(shí)鐘的當(dāng)前時(shí)刻大于或等于該告警時(shí)刻時(shí)送出該P(yáng)IC消息。若時(shí)鐘反轉(zhuǎn),則在時(shí)鐘的當(dāng)前時(shí)刻小于或等于該告警時(shí)刻時(shí)送出該IPC消息。
·多個(gè)時(shí)間源通常,時(shí)鐘的時(shí)間先于基于系統(tǒng)定時(shí)器的實(shí)時(shí)。該系統(tǒng)定時(shí)器由圖3的時(shí)間源目標(biāo)300表示,但是,亦可將時(shí)鐘同步到另一時(shí)間源,例如從一個(gè)錄象設(shè)備(VTR)進(jìn)入計(jì)算機(jī)的電影和電視工程師協(xié)會(Society of Motion Pic-ture and Television Engineers(SMPTE))時(shí)間碼,如圖4所示。時(shí)鐘的當(dāng)前時(shí)刻將跟蹤來自VTR的時(shí)間碼,當(dāng)VTR加速時(shí),時(shí)鐘也會以時(shí)鐘速率加速。而當(dāng)VTR減速時(shí),時(shí)鐘亦會降低其速率。當(dāng)VTR反轉(zhuǎn)時(shí),時(shí)鐘亦會反轉(zhuǎn)。時(shí)鐘會總是與VTR保持同步。
一個(gè)時(shí)間源亦象時(shí)鐘一樣有當(dāng)前時(shí)刻,一個(gè)線性函數(shù)可用來指示時(shí)間源當(dāng)前時(shí)刻和時(shí)鐘的當(dāng)前時(shí)刻之間的關(guān)系。
Tclock=a·T timesource+b;這里,Tdock是時(shí)鐘的當(dāng)前時(shí)刻;Ttimesource是時(shí)間源的當(dāng)前時(shí)刻;a是確定時(shí)鐘當(dāng)前時(shí)刻相對于時(shí)間源的當(dāng)前時(shí)刻的比率的浮點(diǎn)值;b則是確定時(shí)鐘當(dāng)前時(shí)刻相對于時(shí)間源的當(dāng)前時(shí)刻的偏移的時(shí)間目標(biāo)。
該函數(shù)稱為“時(shí)鐘函數(shù)”。
·同步時(shí)鐘亦可相互同步,給定兩個(gè)時(shí)鐘,一個(gè)主時(shí)鐘和一個(gè)從時(shí)鐘,則時(shí)鐘函數(shù)可由一個(gè)時(shí)間源表示;Tslave=a·Tmaster+b;Tslave是從時(shí)鐘的當(dāng)前時(shí)刻;a是確定從時(shí)鐘當(dāng)前時(shí)刻相對于主時(shí)鐘當(dāng)前時(shí)刻的比值的浮點(diǎn)值;b則是確定從時(shí)鐘當(dāng)前時(shí)刻相對于主時(shí)鐘當(dāng)前時(shí)刻的偏移的時(shí)間目標(biāo)。
例如在圖5中,時(shí)鐘510(從時(shí)鐘)與主時(shí)鐘500同步。從時(shí)鐘可以是另一時(shí)鐘的主時(shí)鐘,一個(gè)時(shí)鐘可以是任意數(shù)量的從時(shí)鐘的主時(shí)鐘。由于這兩條定理,可以生成時(shí)鐘的隨機(jī)樹結(jié)構(gòu)。圖6示出了用于驅(qū)動軟件時(shí)鐘層級的時(shí)間源。
提供了兩個(gè)時(shí)鐘成員功能以便將時(shí)鐘同步。它們在從時(shí)鐘上調(diào)用。一個(gè)成員功能叫做SyncTo(),它使客戶得以指定主時(shí)鐘,比率以及偏移。第二個(gè)則稱為SyncToKeepMyTime(),它使客戶得以指定主時(shí)鐘和比率,但計(jì)算偏移從而使從時(shí)鐘的當(dāng)前時(shí)刻在同步之時(shí)不會改變。
此外,成員功能SetRate可用于直接設(shè)定從時(shí)鐘相對于其主時(shí)鐘的比率。
在不同地址空間的時(shí)鐘目標(biāo)和時(shí)間源目標(biāo)可被同步到一起。
·起動和停止,時(shí)鐘可被停止,在這種情況下其當(dāng)前時(shí)刻不變,而無論其主時(shí)鐘是否改變,一個(gè)停止的時(shí)鐘可被再次啟動,從而致使該時(shí)鐘繼續(xù)跟隨其主時(shí)鐘。其比率未改變。它保持為時(shí)鐘停止前的比率。但在時(shí)鐘啟動時(shí)偏移改變了,它的當(dāng)前時(shí)刻即為時(shí)鐘停止時(shí)的時(shí)刻。
·設(shè)定速率時(shí)鐘的功能之比可設(shè)定為任意浮點(diǎn)值。當(dāng)比率改變時(shí),偏移也改變但時(shí)鐘的當(dāng)前時(shí)刻不改變。
何謂時(shí)基媒體序列一個(gè)時(shí)基媒體序列是一個(gè)抽象基本分類,該分類用于代表一部分音頻,視頻,動畫或樂器數(shù)字接口(MIDI)數(shù)據(jù),或任何隨時(shí)間變化的其他數(shù)據(jù)。其始于時(shí)刻O并有一由一時(shí)間目標(biāo)代表的期間,圖7即為3秒期間的時(shí)基序列。時(shí)基媒體序列的子分類用于實(shí)施音頻,視頻和MIDI序列。
何謂時(shí)基媒體播放器一個(gè)時(shí)基媒體播放器(此后稱之為播放器)是一個(gè)抽象基本分類;它用于播放和記錄一個(gè)時(shí)基媒體序列。這一分類可以是子分類以生成音頻,視頻和MIDI的播放器,圖8示了一個(gè)時(shí)基媒體播放器的例子,一個(gè)播放器有一個(gè)相關(guān)的軟件時(shí)鐘目標(biāo)。軟件時(shí)鐘的當(dāng)前時(shí)刻800代表了播放器的播放位置810,播放位置810與一個(gè)磁帶記錄器上的磁頭相類似。通常,播放器的時(shí)鐘與一個(gè)系統(tǒng)預(yù)置時(shí)鐘或系統(tǒng)定時(shí)器之類的時(shí)間源同步。這樣一個(gè)播放器被認(rèn)為是“內(nèi)部被同步的”。但是,播放器的時(shí)鐘亦可與另一時(shí)間源或時(shí)鐘(包括另一播放器的時(shí)鐘)相同步。這樣的播放器被認(rèn)為是“外部同步的”。
圖9中,播放器900被外部同步于主時(shí)鐘910。主時(shí)鐘910根據(jù)其與從時(shí)鐘的同步而確定播放器900的播放位置。
例如播放器的時(shí)鐘與主時(shí)鐘同步,從而Tplayer=1·Tmaster+O若主時(shí)鐘變慢,播放器的播放速度以時(shí)鐘步進(jìn)降低;若主時(shí)鐘加快,則播放器加速。在所有情況下播放器與主時(shí)鐘保持同步。
當(dāng)外部同步時(shí),播放器負(fù)責(zé)確保其播放位置總是反映播放期間的時(shí)鐘當(dāng)前時(shí)刻。這一情形也同樣發(fā)生在記錄期間。
播放器的時(shí)鐘亦可用作為一個(gè)對于外部時(shí)鐘的主時(shí)鐘,該外部時(shí)鐘依次可以作為另一時(shí)鐘的主時(shí)鐘。圖10中,播放器A的時(shí)鐘1000作為時(shí)鐘X1010的主時(shí)鐘。時(shí)鐘X1010又作為播放器B的時(shí)鐘1020的主時(shí)鐘。當(dāng)播放器A1000播放時(shí),時(shí)鐘X1010和播放器B1020跟隨播放器A的時(shí)鐘。當(dāng)播放器A停止時(shí),其時(shí)鐘不動且時(shí)鐘X或播放器B的時(shí)鐘亦不動。當(dāng)外部同步時(shí),播放器的責(zé)任是確保其時(shí)鐘的當(dāng)前位置總是反映播放位置。
同步時(shí)基媒體序列主/從播放器為了把音頻和視頻序列同步到一起,如圖11所示,兩個(gè)播放器的時(shí)鐘應(yīng)按圖12所示進(jìn)行同步。視頻播放器將總是跟隨音頻播放器。若音頻播放器加速,則視頻播放器也加速,若音頻播放器減速,則視頻播放器亦減速。若音頻停止,則視頻亦將停止。若音頻開始反轉(zhuǎn),則視頻亦反轉(zhuǎn)。任意兩個(gè)時(shí)基媒體播放器均可以此方式同步,而不僅限于音頻和視頻。
播放器和共用時(shí)鐘同步為了在一個(gè)音頻序列之后一秒啟動一個(gè)視頻序列(其中該視頻序列以比音頻序列快一倍的速度播放),如圖3所示,則需生成兩個(gè)播放器且其時(shí)鐘必須與一個(gè)主時(shí)鐘同步,如圖14所示。任意多個(gè)時(shí)基媒體序列可與一個(gè)主時(shí)鐘同步。
菊花鏈播放器一個(gè)播放器可以既為控制源亦為受控源,如圖15所示,這類播放器是外部同步的,而且因此必須象一個(gè)受控源一樣。同時(shí)可在沒有外部影響情況下作為一個(gè)控制源。一個(gè)受控源1520只可與主/從播放器1510的時(shí)鐘相連。多個(gè)播放器可以被菊花鏈按在一起。
實(shí)施軟件微調(diào)/往復(fù)旋鈕速率控制器一個(gè)微調(diào)/往復(fù)旋鈕是一個(gè)可用于控制時(shí)基媒體序列集的播放速率的圖形裝置。當(dāng)其處于“往復(fù)”模式時(shí),旋鈕的位置控制了播放速率。當(dāng)其處于微調(diào)模式時(shí),該旋鈕控制播放位置??捎密浖r(shí)鐘實(shí)現(xiàn)一個(gè)軟件微調(diào)/往復(fù)旋鈕。可將該微調(diào)/往復(fù)施鈕的圖形表示繪制于計(jì)算機(jī)屏幕之上,如圖16所示,并由一個(gè)鼠標(biāo)器所控制,當(dāng)處于微調(diào)模式時(shí),屏幕上的控制器旋鈕1610的位置可被譯為序列中的時(shí)間位置,一個(gè)時(shí)間源被用于表達(dá)該時(shí)間位置。每次當(dāng)該旋鈕設(shè)定于新位置時(shí),時(shí)間源的當(dāng)前時(shí)刻被設(shè)定于該序列中的相應(yīng)時(shí)間位置。
一個(gè)時(shí)鐘目標(biāo)受控于該時(shí)間源。然后,通過把至少一個(gè)播放器與時(shí)鐘目標(biāo)同步,它們將跟隨圖17所示的旋鈕所確定的位置。當(dāng)處于往復(fù)模式時(shí),時(shí)鐘目標(biāo)由系統(tǒng)時(shí)間源控制,屏幕上的旋鈕的位置可被譯為是播放速率。每次當(dāng)用戶改變屏幕上的旋鈕位置時(shí),相應(yīng)速率就設(shè)定在時(shí)鐘上。設(shè)定該時(shí)鐘速率則致使所有同步的播放器相應(yīng)地改變它們的速率。
圖17B是根據(jù)一個(gè)最佳實(shí)施例與往復(fù)控制操作有關(guān)的詳細(xì)邏輯流程圖。當(dāng)鼠標(biāo)器按鈕在功能框1700處被測到是已按下時(shí),在判別框1702處進(jìn)行測試以決定是否鼠標(biāo)器光標(biāo)位于圖16中所示往復(fù)控制器的旋鈕11610上。若是,則在功能框1704處將往復(fù)時(shí)鐘速率設(shè)為零并把往復(fù)時(shí)鐘設(shè)定為等于零當(dāng)前時(shí)刻。然后,在功能框1706處,播放器受控于往復(fù)時(shí)鐘并在功能框1708處啟動播放器,最后處理完成于1710處。
當(dāng)鼠標(biāo)器位置的改變在功能框1720處被測到時(shí),則在功能框1722處計(jì)算在中午12點(diǎn)和旋鈕位置之間的角度,并在判別框1724處進(jìn)行測試以確定是否該角度為負(fù)值。若是,則在功能框1728處把符號設(shè)為-1,角度d=-d,然后控制去往判別框1730。若測試在功能框1726處失敗,則符號被設(shè)定為1,然后在判別框1730處進(jìn)行測試以確定是否d>=0°但<80°,然后速率被設(shè)定等于符號*d/80°且控制去往功能框1742以便將往復(fù)時(shí)鐘速率設(shè)定為速率。若否,則在判別框1736處進(jìn)行測試以確定是否80°≤α<100°。然后速率被設(shè)定為等于符號*1.0且控制去往功能框1742以便將往復(fù)時(shí)鐘速率設(shè)為速率。若否,則速率設(shè)定為等于*1+(d-100°)/80°且控制去往功能框1742以設(shè)定該往復(fù)時(shí)鐘速率等于速率。
當(dāng)鼠標(biāo)被釋放時(shí),如功能框1744所示,則播放器在功能框1746處停止且該播放器受控于播放器的內(nèi)部時(shí)鐘,如功能框1748所示。
圖17C是根據(jù)一個(gè)最佳實(shí)施例的微調(diào)模式操作的詳細(xì)邏輯流程圖。若在功能框1750處測得鼠標(biāo)器按鈕被扣下,則在功能框1752處進(jìn)行測試以確定是否鼠標(biāo)器光標(biāo)在旋鈕上。若不在,則處理終止于1762。若在,則在功能框1754處把微調(diào)時(shí)間源當(dāng)前時(shí)刻設(shè)定為零,最后的旋鈕位置設(shè)定等于中午;每度時(shí)間在功能框1756處設(shè)定等于2秒/360°,在功能框1758處使播放器受控于微調(diào)時(shí)間源并在功能框1760處啟動該播放器。
若鼠標(biāo)器按鈕在功能框1764處改變了位置,則在功能框1760處計(jì)算當(dāng)前旋鈕位置。在最后旋鈕位置和當(dāng)前旋鈕位置之間的偏差則在功能框1768處計(jì)算。而時(shí)間差在功能框1770處計(jì)算,且微調(diào)時(shí)間源當(dāng)前進(jìn)刻在功能框1772處被設(shè)定等于時(shí)間差。
當(dāng)鼠標(biāo)器按鈕在功能框1774處釋放時(shí),便在功能框1776處停止播放器,而且播放器在功能框1780處被設(shè)定受控于其內(nèi)部時(shí)鐘。
時(shí)間源和時(shí)鐘目標(biāo)的實(shí)現(xiàn)時(shí)間源實(shí)現(xiàn)一個(gè)時(shí)間源和所有與其同步的時(shí)鐘組叫作時(shí)鐘層級。圖18是一個(gè)最佳實(shí)施例的計(jì)算機(jī)顯示上的時(shí)鐘層級展示。時(shí)間源必須能提供其當(dāng)前時(shí)刻和實(shí)現(xiàn)告警和延時(shí),告警和延時(shí)叫做“喚醒”。送出一個(gè)IPC消息(一個(gè)告警)或中止一段時(shí)間(延時(shí))叫做啟動一個(gè)喚醒。時(shí)間源負(fù)責(zé)啟動設(shè)置在時(shí)鐘層級中任何時(shí)鐘上的任意的和全部的喚醒。
對于時(shí)鐘層級上的每個(gè)時(shí)鐘,時(shí)間源都保持一個(gè)“直接函數(shù)”,該函數(shù)用于把時(shí)間源的當(dāng)前時(shí)刻轉(zhuǎn)換成時(shí)鐘的當(dāng)前時(shí)刻。直接函數(shù)具有以下形式Tclock=a*Ttimesource+b;這里Tclock是時(shí)鐘的當(dāng)前時(shí)刻Ttimesource是時(shí)間源的當(dāng)前時(shí)刻。
a是確定時(shí)鐘的當(dāng)前時(shí)刻相對于時(shí)間源的當(dāng)前時(shí)刻的速率的浮點(diǎn)值。
b是確定時(shí)鐘的當(dāng)前時(shí)刻相對于時(shí)間源的當(dāng)前時(shí)刻的偏移的時(shí)間目標(biāo)。
“反向直接函數(shù)”用于反向轉(zhuǎn)換,即從時(shí)鐘的當(dāng)前時(shí)刻到時(shí)間源的當(dāng)前時(shí)刻的轉(zhuǎn)換Ttimesource=(Tclock-b)/a當(dāng)一個(gè)時(shí)鐘通過至少一個(gè)其他時(shí)鐘間接連到一個(gè)時(shí)間源時(shí),可由幾何置換來計(jì)算直接函數(shù)。例如,考慮圖9中的時(shí)鐘Y,它是與具有以下等式的時(shí)間源1920相關(guān)的一個(gè)函數(shù)Tclockx=ax*Ttimesource+bx時(shí)鐘Y1900相對于時(shí)鐘X1910的函數(shù)為Tclocky=ay*Tclockx+by時(shí)鐘Y1900的直接函數(shù)可由置換所計(jì)算Tclocky=ay*(ax*Ttimesource+bx)+by=(ay*ax)*Ttimesource+(ay*bx+by)=a*Ttimesource+b這里,a=ay*axb=by*bx+by設(shè)置時(shí)間源的當(dāng)前時(shí)刻有兩種時(shí)間源,即受驅(qū)動的和不受驅(qū)動的受驅(qū)動時(shí)間源由客戶設(shè)置的當(dāng)前時(shí)刻而持續(xù)更新。通過調(diào)用驅(qū)動時(shí)間源的SetTime()成員功能可完成這一任務(wù)。圖20示出了實(shí)現(xiàn)Set-Time()的流程圖。處理始于2000,在該處,“新時(shí)間”被送至SetTime()并在功能框2010處保存該新當(dāng)前時(shí)刻。
通過在判別框2020處比較“新時(shí)間”和時(shí)間源的以前的當(dāng)前時(shí)刻,可以確定時(shí)間源的方向。若其為大,則時(shí)間源正向并且控制去往判別框2040,若其較小,則時(shí)間源反向且控制去往判別框2030,若其相等,則時(shí)間源的方向保持不變?!跋乱粫r(shí)刻”是需要啟動的下一喚醒。若時(shí)間源正向而且“下一時(shí)刻”小于或等于當(dāng)前時(shí)刻,則稍后會有喚醒。若時(shí)間源是向反且“下一時(shí)刻”大于等于當(dāng)前時(shí)刻,則稍后會有喚醒。標(biāo)記有“反饋喚醒”的功能框2050啟動以后的所有告警和延時(shí)。有關(guān)啟動喚醒的細(xì)節(jié)將在下面的“時(shí)間源的喚醒表”部分予以詳述。處理終止于框2060。
一個(gè)非驅(qū)動時(shí)間源無需被保持告知何為當(dāng)前時(shí)刻,系統(tǒng)定時(shí)器等可用于時(shí)間源。在系統(tǒng)定時(shí)器中,基本操作系統(tǒng)保持跟蹤當(dāng)前時(shí)刻。非驅(qū)動時(shí)間源知道如何發(fā)現(xiàn)其當(dāng)前時(shí)刻。而且它有一個(gè)成員功能,GetNextTime(),它返回應(yīng)被啟動的告警或延時(shí)的下一時(shí)刻。只要在時(shí)間源中加入一個(gè)新的告警或延時(shí),就調(diào)用GetNextTime()。當(dāng)要啟動一個(gè)新的告警或延時(shí)之時(shí),可以調(diào)用時(shí)間源的反饋喚醒()成員功能從而啟動以后的任何喚醒。這便使實(shí)施者得以生成無需驅(qū)動時(shí)間源要求的恒定SetTime()調(diào)用的一個(gè)時(shí)間源。
獲得時(shí)間源的當(dāng)前時(shí)刻時(shí)間源可以很快地獲得其當(dāng)前時(shí)刻。其原因在于驅(qū)動時(shí)間源有一個(gè)存在一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu)中的值。而對于非驅(qū)動時(shí)間源而言,它可以查詢基本操作系統(tǒng)。
處理喚醒延時(shí)和告警喚醒都由時(shí)間源以類似方式處理。時(shí)間源在某一時(shí)刻(稱之為喚醒時(shí)刻),從將被啟動的喚醒的時(shí)鐘得到一個(gè)請求。該喚醒時(shí)刻由一個(gè)反向直接函數(shù)從請求時(shí)鐘的時(shí)基被轉(zhuǎn)換成時(shí)間源的當(dāng)?shù)貢r(shí)基。時(shí)間源檢測是否以后有喚醒而且是否需要被啟動。若以后有喚醒,時(shí)間源將啟動它。否則,時(shí)間源把喚醒加入到喚醒的時(shí)序表(叫做喚醒表)中。
時(shí)間源的喚醒表只要當(dāng)喚醒表由于去除或加入了一個(gè)喚醒而改變時(shí),就調(diào)用時(shí)間源的GetNextTime方法并計(jì)算下一次啟動一個(gè)喚醒的時(shí)間。若該時(shí)間源是驅(qū)動時(shí)間源,則其成員功能SetTime()在有至少一個(gè)其后的喚醒時(shí)就調(diào)用反饋喚醒(TickleWake-ups())。TickleWakeups()檢查整個(gè)喚醒表并啟動所有以后的喚醒。當(dāng)一個(gè)喚醒被啟動時(shí),它便從該表中被去除。一個(gè)非驅(qū)動時(shí)間源的GetNextTime()成員功能可被置換以發(fā)現(xiàn)何時(shí)需要調(diào)用TickleWakeups()并然后把一個(gè)定時(shí)器設(shè)為在那時(shí)候消失。當(dāng)定時(shí)器消失時(shí),時(shí)間源調(diào)用TickleWakeups()”圖21展示了TickleWakeups()功能的詳細(xì)邏輯。處理始于2102并立即去往功能框2104,在該處改變變量被設(shè)定等于“偽”。然后,在功能框2120處獲得第一個(gè)喚醒并在功能框2160處進(jìn)行測試以確定是否喚醒到時(shí),若是,則在功能框2150處啟動喚醒,并在功能框2140處獲得下一喚醒。改變的變量被設(shè)定為“真”,且控制返回判別框2160等待下一喚醒。
若喚醒在判別框2160處來到時(shí),則在判別框2170處測試改變的變量。若變量改變?yōu)椤罢妗?,則在功能框2180處得到下一時(shí)刻。若“偽”,則控制去往2190結(jié)束處理。
軟件時(shí)鐘實(shí)施獲取一個(gè)軟件時(shí)鐘的當(dāng)前時(shí)刻為獲取時(shí)鐘的當(dāng)前時(shí)刻,時(shí)鐘過程首先從時(shí)鐘層級的時(shí)鐘源里獲得當(dāng)前時(shí)刻,然后獲取直接函數(shù)并將時(shí)間源的當(dāng)前時(shí)刻轉(zhuǎn)換成時(shí)鐘的當(dāng)前時(shí)刻,如圖22的邏輯流程圖所示那樣。該處理始于2200并立即去往功能框2210以獲取時(shí)鐘層級的時(shí)間源,然后在功能框2220處獲取時(shí)間源的時(shí)間并在功能框2230處獲取直接函數(shù)。最后,在功能框2240處把直接函數(shù)用于時(shí)間源的時(shí)間,從而導(dǎo)致在2250處返回的當(dāng)前時(shí)刻。
由于時(shí)鐘和時(shí)間源可在不同的地址空間,所以時(shí)間源的當(dāng)前時(shí)刻和時(shí)鐘的直接函數(shù)都存在兩個(gè)地址空間之間所共用的存儲器中。采用一個(gè)信號量(semaphore)來確保直接函數(shù)和時(shí)間源的時(shí)間在從共享存儲器中讀出時(shí)沒有改變。
在軟件時(shí)鐘上設(shè)定延時(shí)有兩種延時(shí),一種叫做“DelayUntil(),它是時(shí)鐘的成員功能。該延時(shí)將阻止客戶的任務(wù)直到時(shí)鐘的當(dāng)前時(shí)刻到達(dá)一特定值。第2種延時(shí)是叫做Delay For()的時(shí)鐘的成員功能。它將客戶任務(wù)阻止直到某一特定的時(shí)間量過去。第二種延時(shí)實(shí)際上等于調(diào)用第一種延時(shí),它指定了一個(gè)等于時(shí)鐘當(dāng)前時(shí)刻加上需要的消逝時(shí)間量。
為了延遲時(shí)鐘,時(shí)鐘送出想要延遲的時(shí)間直到時(shí)鐘層級的時(shí)間源。時(shí)間源采用時(shí)鐘的反向直接函數(shù)將其譯為時(shí)間源的當(dāng)?shù)貢r(shí)間(并且如果它是一個(gè)Delay For()而且不是De-layUntil()的話,加入當(dāng)前時(shí)刻)。該請求被加入喚醒表(正如已在“處理喚醒”部分討論過的),而且調(diào)用程序被停止直到喚醒被啟動。
在軟件時(shí)鐘上設(shè)定一個(gè)告警在時(shí)鐘上設(shè)定告警與在時(shí)鐘上設(shè)定延時(shí)完全一樣,不同之處只在于調(diào)用程序不被停止,代之以消息被送到一個(gè)特定的端口。圖23是一個(gè)展示如何實(shí)現(xiàn)延時(shí)和告警的流程圖。處理始于2300,在該處輸入輸入時(shí)間和接收器。然后在功能框2310處獲取直接函數(shù)并在功能框2320處應(yīng)用直接函數(shù)的反向,然后在功能框2340處進(jìn)行測試以確定是否該延時(shí)為Delay For。若是,則在功能框2342處獲得當(dāng)前時(shí)刻。該當(dāng)前時(shí)刻被加到時(shí)間中,且控制去往功能框2346。
若不是DelayFor,則在功能框2346處生成具有時(shí)間和接收者的喚醒。然后在功能框2350處進(jìn)行另一測試以確定是否喚醒到時(shí)。若否,則該喚醒在功能框2352處被加到喚醒表,并在2372處執(zhí)行GetNextTime。然后控制回到功能框2370處進(jìn)行刪除。處理終止于2392。若喚醒在處理框2350處已到時(shí)且若喚醒是一延時(shí),則在功能框2354處對任務(wù)解鎖并在功能框2360處去除喚醒。最后處理結(jié)束于2392。若喚醒是一告警,則在功能框2356處送出一消息并在功能框2360處去除該喚醒。處理最后結(jié)束了2392。
時(shí)鐘的同步時(shí)鐘同步在軟件時(shí)鐘和時(shí)間源中實(shí)施??蛻粲脙蓚€(gè)軟件時(shí)鐘成員功能進(jìn)行時(shí)鐘同步。它們都在從時(shí)鐘上調(diào)用以便將其與一個(gè)主時(shí)鐘同步。一個(gè)叫做SyncTo()的成員功能使用戶指定主時(shí)鐘或時(shí)間源,速率,以及偏移。如二個(gè)成員功能叫做SyncToKeepMy Time(),它允許客戶指定主時(shí)鐘以及速率,但計(jì)算偏移從而使從時(shí)鐘的當(dāng)前時(shí)刻在同步的時(shí)刻不改變其值。
SyncToKeep My Time()SyncToKeepMyTime()允許客戶指定主時(shí)鐘和一個(gè)速率,但計(jì)算偏移以致于在同步時(shí)刻從時(shí)鐘的當(dāng)前時(shí)刻之值不會改變。圖24展示了該功能的詳細(xì)邏輯,處理始于2400并立即去往判別框2420以確定是在主時(shí)鐘位于同樣的時(shí)鐘層級。若否,則在功能框2410處把時(shí)間源之間的所有后續(xù)同步延遲并在判別框2430處進(jìn)行測試以確定是否該主時(shí)鐘受控于另一從時(shí)鐘,若是,則通過功能框2454返回一個(gè)錯(cuò)誤且控制去往終端2499。
若否,則在功能框2432處獲得從時(shí)鐘的當(dāng)前時(shí)刻。所有有關(guān)時(shí)鐘的信息在功能框2434處被抽取出來,在功能框2436處更新新的主時(shí)間源,在功能框2438處獲取主時(shí)鐘的直接函數(shù),該函數(shù)根據(jù)當(dāng)前時(shí)刻和提供的速率在功能框2440處計(jì)算從時(shí)鐘的函數(shù)。直接函數(shù)根據(jù)主時(shí)鐘的直接函數(shù)在功能框2442處計(jì)算,時(shí)鐘喚醒在2444處再次被計(jì)算,然后在判別框2446處進(jìn)行檢測以確定是否有方向變化。若是,則所有喚醒在功能框2448處被啟動。若否,則處理去往2450以重復(fù)每個(gè)從時(shí)鐘的處理并在功能框2452處提供時(shí)間源之間的同步。處理結(jié)束于2499處。
若主時(shí)鐘在判別框2420中確定位于相同時(shí)間源中,則在判別框2460中進(jìn)行另一檢測以確定是否主時(shí)鐘現(xiàn)在受控于另一從時(shí)鐘。若否,則在功能框2462處獲取從時(shí)鐘的當(dāng)前時(shí)刻,在功能框2464處獲得主時(shí)鐘的直接函數(shù),在功能框2466處根據(jù)當(dāng)前時(shí)刻和提供的速率計(jì)算從時(shí)鐘的函數(shù),功能框2468處計(jì)算直接函數(shù),并在功能框2470處重新計(jì)算時(shí)鐘喚醒,并在判別框2472處進(jìn)行檢測以確定是否方向改變了。若是,則所有喚醒在功能框2474處啟動。若否,則對所有從時(shí)鐘的處理在功能框2476處重復(fù),處理結(jié)束于終端2499。
新的時(shí)鐘函數(shù)計(jì)算如下從時(shí)鐘在同步到主時(shí)鐘之前的函數(shù)Tslave=aoriginal*Tmaster+boriginal從時(shí)鐘在與主時(shí)鐘同步之后并有一新速率anew時(shí)的函數(shù)。
Tslave=anew*Tmaster+bnew這里bnew為Tnewslave=Tslave即bnew=Tmaster*(as-anew)+boriginalSync To()Sync To()允許用戶指定主時(shí)鐘或時(shí)間源,速率以及偏移。處理與圖24所示邏輯非常相似。該時(shí)鐘新函數(shù)在SyncTo()情況下計(jì)算如下從時(shí)鐘在同步到主時(shí)鐘之前的函數(shù)Tslave=aoriginal*Tmaster+boriginal從時(shí)鐘在與主時(shí)鐘同步之后具有新的速率anew和偏移bnew時(shí)的函數(shù)
Tslave=anew*Tmaster+bnew一個(gè)時(shí)鐘可與任何其他時(shí)鐘同步。即使它們位于不同的時(shí)鐘層級。
聲音播放器實(shí)施一個(gè)聲音播放器目標(biāo)包括一段數(shù)字化聲音樣本。它具有成員功能從而可以取出和存儲聲音樣本。
一個(gè)聲音播放器播放聲流從而可在喇叭上聽到該聲音。通過從聲音流中周期地讀出數(shù)據(jù)并將其寫入一個(gè)聲音輸出端口便可實(shí)現(xiàn)上述功能。讀出周期由一個(gè)數(shù)/模轉(zhuǎn)換器(DAC)確定,DAC把數(shù)字聲音樣本轉(zhuǎn)換成模擬電信號,該信號可由連到一個(gè)喇叭的音頻放大器轉(zhuǎn)換成聲音。該DAC每秒轉(zhuǎn)換N個(gè)數(shù)字聲音樣本。N叫做DAC的樣本率。DAC有等待轉(zhuǎn)換的聲音樣本的內(nèi)部緩沖器。聲音播放器在主處理器中執(zhí)行,它把從一個(gè)聲音序列讀出的樣本存入該DAC的緩沖區(qū)。當(dāng)該緩沖區(qū)有一半為空時(shí),DAC中斷主處理器。聲音播放器然后用從聲音序列中讀出的下一批聲音樣本充滿該緩沖區(qū)。該處理示于圖25中。
圖26展示了聲音播放器作為控制源的情況。聲音播放器有一個(gè)作為另一時(shí)鐘的控制源的時(shí)鐘。這是通過確保聲音播放器的時(shí)鐘總是反映喇叭當(dāng)時(shí)再現(xiàn)的樣本的時(shí)間的方式而實(shí)現(xiàn)的。例如,若在時(shí)刻T,揚(yáng)聲器在播放聲音序列起始部分的第88200個(gè)取樣,且DAC和聲音序列的取樣率均為每秒44100個(gè)取樣,則聲音播放器的時(shí)鐘必須是時(shí)間2秒。通過生成由DAC驅(qū)動的時(shí)間源可實(shí)現(xiàn)這一功能。每次DAC輸出一個(gè)信號指示緩沖區(qū)已由取樣允滿時(shí),它會中斷主處理器,主處理器然后將會把時(shí)間源的當(dāng)前時(shí)間增加一個(gè)時(shí)間增量,該時(shí)間增加等于最后中斷以來所轉(zhuǎn)換的取樣數(shù)量。這由以下決定<增量時(shí)間>=<最后一次中斷的取樣)>/<DAC取樣率>
該聲音播放器把其軟時(shí)鐘和DAC時(shí)間源同步。其線性函數(shù)符合下式Taudioplayerclock=1*TDACtimesource+b這里b被設(shè)定以致當(dāng)序列播放開始時(shí),Taudioplayerclock=0采用時(shí)鐘的SetTime功能可實(shí)現(xiàn)這一功能。
音頻播放器作為受控源聲音播放器可與一外部時(shí)鐘同步。在這一情況下,聲音播放器必須確保揚(yáng)聲器再現(xiàn)的樣本與外部時(shí)鐘。例如,若在一給定時(shí)刻外部時(shí)鐘目標(biāo)的當(dāng)前時(shí)刻是兩秒,則在聲音序列中的第88200個(gè)樣本會在該時(shí)刻由揚(yáng)聲器再現(xiàn),假設(shè)聲音序列的取樣率為44100。該處理實(shí)現(xiàn)如下聲音播放器等待來自DAC的中斷,指示需要更多聲音數(shù)據(jù)。該播放器然后檢查其時(shí)鐘的當(dāng)前時(shí)刻,確定是否需要加速或降低播放速率或跳到聲音序列中的新位置,以便確保正確的樣本從揚(yáng)聲器播放。然后使用數(shù)字信號處理算法在輸出取得之前把聲音序列取樣率轉(zhuǎn)換成DAC的取樣率。
圖27展示了根據(jù)本發(fā)明最佳實(shí)施例與控制一個(gè)聲音播放器有關(guān)的詳細(xì)邏輯。處理始于2700,在該處進(jìn)入等待狀態(tài)直到一個(gè)DAC中斷發(fā)生。當(dāng)DAC中斷發(fā)生時(shí),控制去往功能框2710以獲取時(shí)鐘時(shí)間。然后在功能框2720處計(jì)算與該DAC速率有關(guān)的時(shí)鐘速率,并在2730處進(jìn)行測試以確定時(shí)鐘速率是否太多。若是,則將時(shí)鐘速率設(shè)定為最大,若否,則在功能框2750處計(jì)算需要的位置。功能框2750需要更多解釋,因?yàn)槠涮幚砩婕案?。即是聲流理想位置的?jì)算。這一位置確定了播放器將輸出的下一樣本。因?yàn)镈AC引入的延時(shí),這一值的計(jì)算是不普通的。當(dāng)播放器把一個(gè)樣本輸出到DAC時(shí),它進(jìn)入DAC的內(nèi)部緩沖區(qū)。直到所有在DAC緩沖區(qū)里的樣本都空了的時(shí)候,揚(yáng)聲器才停止再現(xiàn)樣本。幸運(yùn)地,該延時(shí)可按下式計(jì)算delayDAC=<Samples in internal bufferDAC>/SampleRateDAC聲音序列取樣將以時(shí)鐘速率(Clock Rate)確定的速率輸出,這來自于與DAC時(shí)鐘位置相關(guān)的外部時(shí)鐘位置。為確定理想位置,DAC延時(shí)被減去,但是此之前必須被轉(zhuǎn)換成聲流的時(shí)基。這是按以下方式完成的delayaudiosequence=(delayDAC*ClockRate)聲流的理想位置則按下式計(jì)算desinedPosition=<Position of next sample in sequence>-delaysaudio sequeuey然后,在功能框2760處比較需要的位置和實(shí)際位置以確定是否其太偏離實(shí)際位置。若是,則在功能框2770處查找聲音序列到需要位置。在任何情況下,在功能框2780處取樣圖形播放器實(shí)施一個(gè)圖形序列目標(biāo)是一個(gè)圖形目標(biāo)集。圖形序列中的圖形目標(biāo)可被數(shù)字化成為視頻幀,提供動畫片的幀,或任何其他與時(shí)間相關(guān)的圖形目標(biāo)。一個(gè)圖形序列具有成員功能,即可以訪問存貯和檢索用的各個(gè)單獨(dú)的圖形。每一圖形有一期間;因此,圖形有一等于分量圖形目標(biāo)期間總和的時(shí)間。圖形序列還提供把序列的期間內(nèi)的時(shí)間映射到一特定圖形目標(biāo)的成員功能。圖28展示了日出的圖象序列示例,其中每個(gè)圖形目標(biāo)的期間示于其下方。
一個(gè)圖形播放器通過其圖形輸出端口播放一個(gè)圖形序列,該圖形端口連到一個(gè)圖形輸入端口。該播放器有一可以驅(qū)動其他時(shí)鐘(控制源)或被驅(qū)動(受控源)的軟件時(shí)鐘。該播放器根據(jù)其時(shí)鐘時(shí)間順序通過圖形序列的圖形目標(biāo)時(shí)鐘被限于從零到等于被播放的圖形序列時(shí)間的時(shí)間的范圍之內(nèi),播放器延時(shí)直到當(dāng)前幀的期間已在時(shí)鐘上消逝。然后播放器檢測時(shí)鐘上的當(dāng)前時(shí)刻,獲得映射到那一時(shí)刻的序列的圖形目標(biāo),并將該圖形目標(biāo)寫入到輸出端口。
播放器在選擇將被寫入到輸出端口的圖形目標(biāo)時(shí)總是用當(dāng)前時(shí)刻。這樣便在低性能時(shí)提供自動降級。若寫入圖形目標(biāo)用時(shí)超過其時(shí)間,至少會漏掉一幀。時(shí)鐘方向的變化也會有類似情況發(fā)生。與圖形播放器相關(guān)的詳細(xì)邏輯示于圖29的流程圖中。處理始于2900并立即去往功能框2910以進(jìn)入延遲直到下一圖形目標(biāo)的時(shí)間。然后在該延時(shí)之后,在功能框2920處獲得時(shí)鐘時(shí)間,圖形目標(biāo)在2930處寫入一個(gè)輸出端口,并在功能框2940處進(jìn)行測試以確定是否已調(diào)用停止成員功能。若是,則處理結(jié)束于2960。若否,則在判別框2950處進(jìn)行測試以確定是否是最后一幀且時(shí)鐘是否受控。若否,則控制去往功能框2910。若是,則處理結(jié)束于終端2960。
注意若播放器的時(shí)鐘與另一時(shí)鐘同步,則顯示循環(huán)繼續(xù)執(zhí)行直到播放器確實(shí)停止。但是,若時(shí)鐘不同步,則在序列的最后圖形被寫入時(shí)退出循環(huán)。
MIDI播放器實(shí)施一個(gè)midi序列目標(biāo)是一個(gè)MIDI事件集。其成員功能控制播放以及訪問MIDI事件的時(shí)序軌道。一個(gè)MIDI序列和MIDI追蹤格式示于圖30。
一個(gè)midi播放器通過其輸出端口播放一個(gè)midi序列,該輸出端口與任意輸入端口相連,這些輸入端口包括在MI-DI合成器上用于最終輸出的MIDI驅(qū)動器的輸入端口。該播放器跟隨軟件時(shí)鐘從而在事件成為當(dāng)前事件時(shí)將其輸出,該處理可良好地在正向和反向時(shí)間流中完成并在主處理器落后時(shí)考慮降級決策。圖31展示了通過一個(gè)驅(qū)動器為一個(gè)合成器播放一個(gè)序列的MIDI播放器。
MIDI播放器可作為同步的控制源或受控源,其取決于所采用的由其基本分類——時(shí)基媒體播放器(Time-BasedMedia Player)——繼承而來的SyncTo和SyncToSelf成員功能。實(shí)施細(xì)節(jié)不改變并跟隨一個(gè)具有兩個(gè)特殊事件的簡單時(shí)序事件循環(huán)。第一個(gè)特殊事件處理時(shí)間轉(zhuǎn)換方向,通常,播放器通過延時(shí)直到把下一事件成為當(dāng)前事件時(shí)進(jìn)行工作。在延時(shí)結(jié)束時(shí),播放器對時(shí)間進(jìn)行檢測以確定是否有一特定事件發(fā)生。第一特殊事件發(fā)生于延時(shí)是較早的時(shí)候。這一情況由下面的主循環(huán)流程中的第一判別框表示。在檢測時(shí),播放器將改變方向,所以“下一個(gè)”變成為與其原來相反。第二個(gè)特殊事件與處理器超載有關(guān)。當(dāng)主機(jī)不再保持,應(yīng)用降級決策。播放器在到達(dá)序列終端時(shí)停止于正向情況下的最后事件或在反向情況下的第一事件。
圖32展示了MIDI播放器詳細(xì)邏輯的流程圖。處理始于3200并立即去往功能框3210以進(jìn)入一個(gè)直到下一MIDI事件的延時(shí)。當(dāng)下一事件準(zhǔn)備好要被執(zhí)行時(shí),在功能框3220處獲取時(shí)鐘時(shí)間,在判別框3230進(jìn)行檢測以確定是否該事件是早。若是,則方向改變且控制去往功能框3210。若否,則在功能框3242處進(jìn)行另一檢測以確定該事件是否晚。若是,則應(yīng)用降低以趕上,且控制去往功能框3260,并在功能框3270處進(jìn)行測試以確定是否最后事件已完成且時(shí)鐘目標(biāo)不是受控源。若最后事件已執(zhí)行且時(shí)鐘不是受控的,則控制去往功能框3210以處理下一事件。
顯示屏幕圖33到37示出了根據(jù)本發(fā)明的最佳實(shí)施例的顯示。圖33展示了一個(gè)空的桌上顯示,用戶被其表達(dá)從而開始定義軟件時(shí)鐘并將其與一個(gè)多媒體目標(biāo)同步。圖34展示了根據(jù)本發(fā)明最佳實(shí)施例的選擇時(shí)鐘目標(biāo)定義顯示。用戶從信息3410的選項(xiàng)屏中選擇時(shí)鐘目標(biāo)定義。尤其是,時(shí)鐘選項(xiàng)屏項(xiàng)3420所示。圖35展示了根據(jù)本發(fā)明的最佳實(shí)施例用圖34所示的選項(xiàng)屏選擇限定的各種時(shí)鐘目標(biāo)和多媒體目標(biāo)。一個(gè)移動條目標(biāo)3510,微調(diào)/快移控制器3520,時(shí)鐘目標(biāo)3530,以及一個(gè)動畫多媒體目標(biāo)3540被展示,就象它們出現(xiàn)在一個(gè)實(shí)際的多媒體表示中一樣。
圖36是根據(jù)本發(fā)明的最佳實(shí)施例連接到一起的多個(gè)時(shí)鐘目標(biāo)以及多媒體目標(biāo)。該連接由一個(gè)光標(biāo)把一個(gè)幾何圖形例如一個(gè)線段進(jìn)行橡皮帶生成的方式而生成,從而可把一個(gè)時(shí)鐘目標(biāo)3610連到另一時(shí)鐘目標(biāo)3620,或多媒體目標(biāo)3630和3640。圖37展示了根據(jù)本發(fā)明的最佳實(shí)施例與一個(gè)聲音目標(biāo)同步的視頻目標(biāo)。視頻目標(biāo)3710與音頻時(shí)鐘目標(biāo)3720同步以控制由動畫多媒體目標(biāo)3730表示的顯示以及有關(guān)的多媒體音樂表示。
本領(lǐng)域的一段技術(shù)人員可依據(jù)本發(fā)明的精神對以上實(shí)施例進(jìn)行變型和變形,本發(fā)明受權(quán)利要求的保護(hù)。
權(quán)利要求
1.一個(gè)用于多媒體表示的計(jì)算機(jī)系統(tǒng),其特征在于包括一個(gè)存儲器;一個(gè)顯示器;一個(gè)時(shí)鐘目標(biāo),該時(shí)鐘目標(biāo)有一個(gè)位于存儲器中的當(dāng)前時(shí)刻且可在顯示器上顯示;多個(gè)位于存儲器中的多媒體目標(biāo),該多媒體目標(biāo)可在顯示器中顯示;以及一個(gè)用于把至少一個(gè)多媒體目標(biāo)與時(shí)鐘目標(biāo)同步的處理器。
2.權(quán)利要求1所述的系統(tǒng),還包括用于通過一個(gè)圖符操作啟動同步的處理裝置
3.權(quán)利要求2所述系統(tǒng),還包括通過在時(shí)鐘目標(biāo)上連扣兩下以啟動同步的處理裝置。
4.權(quán)利要求2所述系統(tǒng),還包括通過投入而激勵(lì)同步的處理裝置。
5.權(quán)利要求1所述系統(tǒng),還包括把多個(gè)多媒體目標(biāo)與時(shí)鐘目標(biāo)同步的裝置。
6.權(quán)利要求1所述系統(tǒng),還包括把多個(gè)時(shí)鐘目標(biāo)與一個(gè)時(shí)鐘目標(biāo)同步的裝置。
7.權(quán)利要求1所述系統(tǒng),還包括調(diào)整同步的顆粒性的裝置。
8.權(quán)利要求1所述系統(tǒng),還包括獲取當(dāng)前時(shí)刻的外部裝置。
9.權(quán)利要求1所述系統(tǒng),還包括用于獲得當(dāng)前時(shí)刻的外部時(shí)間源。
10.權(quán)利要求1所述系統(tǒng),還包括迫使當(dāng)前時(shí)刻反向運(yùn)行的裝置。
11.權(quán)利要求1所述系統(tǒng),其中的時(shí)鐘目標(biāo)可以跨越多個(gè)地址空間。
12.權(quán)利要求1所述系統(tǒng),還包括通過一個(gè)在顯示上連接兩個(gè)目標(biāo)的幾何圖形而把時(shí)鐘目標(biāo)連到多媒體目標(biāo)的裝置。
13.權(quán)利要求12所述系統(tǒng),其中的幾何圖形是一個(gè)線段。
14.一種在計(jì)算機(jī)上同步多媒體表示的方法,其中的計(jì)算機(jī)有一存儲器和一個(gè)顯示器,該方法的特征在于包括以下步驟(a)生成一個(gè)具有位于存儲器中的相關(guān)當(dāng)前時(shí)刻并可在顯示器上顯示的時(shí)鐘目標(biāo);(b)生成多個(gè)位于存儲器中并可在顯示器上顯示的多個(gè)多媒體目標(biāo);(c)把至少一個(gè)多媒體目標(biāo)與時(shí)鐘目標(biāo)同步。
15.權(quán)利要求14所述方法,還包括通過一個(gè)圖符操作啟動同步的步驟。
16.權(quán)利要求15所述方法,還包括在時(shí)鐘目標(biāo)上按扣兩下以啟動同步的步驟。
17.權(quán)利要求15所述方法,還包括通過投入而激發(fā)同步的步驟。
18.權(quán)利要求14所述方法,還包括把多個(gè)多媒體目標(biāo)與時(shí)鐘目標(biāo)同步的步驟。
19.權(quán)利要求14所述方法,還包括把多個(gè)時(shí)鐘與一個(gè)時(shí)鐘同步的步驟。
20.權(quán)利要求14所述方法,還包括調(diào)整同步的顆粒性的步驟。
21.權(quán)利要求14所述方法,還包括從一個(gè)外部設(shè)備獲得當(dāng)前時(shí)刻的步驟。
22.權(quán)利要求14所述方法,還包括詢問獲得當(dāng)前時(shí)刻的多個(gè)外部時(shí)間源的步驟。
全文摘要
本發(fā)明涉及對多個(gè)多媒體事件提供同步定時(shí)的系統(tǒng)和方法,時(shí)鐘目標(biāo)被限定在存儲器中且與當(dāng)前時(shí)刻的內(nèi)部和外部源關(guān)聯(lián)。時(shí)鐘目標(biāo)亦可在顯示器上顯示,但亦可在連接被定義之后隱藏起來。至少一個(gè)代表音頻、視頻或其他多媒體事件的多媒體目標(biāo)被定義和連接到特定的時(shí)鐘目標(biāo)。然后,處理器把多媒體目標(biāo)和相關(guān)的時(shí)鐘目標(biāo)或目標(biāo)同步。最后,多個(gè)多媒體事件與相關(guān)的時(shí)鐘同步實(shí)施。
文檔編號G06F3/048GK1109695SQ94190279
公開日1995年10月4日 申請日期1994年1月6日 優(yōu)先權(quán)日1993年5月10日
發(fā)明者史蒂芬·H·米爾恩, 馬修·L·德曼, 約翰·C·托拜爾斯, 詹姆斯·M·蒂德爾 申請人:塔里根特公司