專利名稱:多媒體播放器部件目標(biāo)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明通常涉及一種改進(jìn)的計算機(jī)系統(tǒng),特別是涉及一種用于在兩個多媒體部件目標(biāo)之間對數(shù)據(jù)進(jìn)行路由選擇的系統(tǒng)。版權(quán)通告本專利申請的部分內(nèi)容受版權(quán)保護(hù)。版權(quán)所有者允許對出現(xiàn)在專利局的專利文獻(xiàn)或記錄中或?qū)@_中的復(fù)制再現(xiàn),但在其它任何情況下保留所有版權(quán)。
與本發(fā)明相關(guān)的背景技術(shù)對計算機(jī)系統(tǒng)而言,發(fā)展最快的應(yīng)用恐怕就是多媒體了。用戶愈來愈多地使用計算機(jī)將圖形,聲音和圖象信息表示給終端用戶。用戶愈來愈需要一種人與處理控制的接口,以用于管理多媒體的表示。過去,使用時間矩陣和編程語言來完成多媒體的表示。然而,模擬一個靈活的混合電路插件板以使得能夠把帶有信息表示的音樂或聲音表示成展開的多媒體表示是不可能的。
不具有本發(fā)明能力的當(dāng)前多媒體系統(tǒng)的例子是在NEWMEDIA三月刊(1993)上發(fā)表的“It’s Showtime”(第36-42頁)中所描述的Apple’sOuicktime和Microsoft’s Video for Windows。在IEEE Spectrum三月刊(1993)第22-31頁的“Interactive Multimedia”和IEEE Spectrum(1993)第32-39頁的“The Technclogy Framework”中討論了解決在現(xiàn)有技術(shù)中遇到的路由選擇問題的重要性。所述文章指出了用于控制多媒體產(chǎn)生的美學(xué)接口的重要性。
本發(fā)明的目的因此,本發(fā)明的一個主要目的就是要提供一種系統(tǒng)和一種方法,用于在多媒體表示的過程中由具有存儲器和顯示器的計算機(jī)對多媒體數(shù)據(jù)進(jìn)行路由選擇。本發(fā)明的技術(shù)方案本發(fā)明提供了一種用于多媒體表示的系統(tǒng)和方法。該系統(tǒng)包括一個處理器;一個與該處理器相連并受其控制的存貯器;一個與該處理器相連并受其控制的顯示器;一個與該處理器相連并受其控制的多媒體設(shè)備;位于該處理器的存貯器之中的部件目標(biāo),該部件目標(biāo)用于管理該多媒體設(shè)備,該部件目標(biāo)包括至少一個用于交換多媒體信息的端口;用于把該至少一個端口連接到多媒體設(shè)備以便于交換多媒體信息的裝置;以及由所述處理器控制在該多媒體設(shè)備以及該部件目標(biāo)端口之間確定信息路由的裝置。
本發(fā)明還提供了一種用于在連接有存貯器,多媒體設(shè)備,和顯示器的處理器上進(jìn)行多媒體表示的方法,該方法以包括以下步驟a)在所述處理器的存貯器之中生成一個部件目標(biāo),該部件目標(biāo)包括至少一個用于交換多媒體信息的端口;b)用該部件目標(biāo)管理所述的多媒體設(shè)備;c)把所述的至少一個用于交換多媒體信息的端口連接到所述的多媒體設(shè)備以便于交換多媒體信息;以及d)在所述的多媒體設(shè)備以及所述的部件目標(biāo)端口之間確定信息路由。本發(fā)明的有益效果在本發(fā)明的系統(tǒng)中的處理器在與之相連的存儲器中建立一個部件目標(biāo)用于管理多媒體設(shè)備,該部件目標(biāo)包括至少一個用于交換多媒體信息的端口。該處理器還包括一個連接目標(biāo),用于把所述的至少一個端口連接到該多媒體設(shè)備,以實現(xiàn)多媒體信息的交換。而且該處理器在多媒體設(shè)備和部件目標(biāo)端口之間對信息進(jìn)行路由選擇。
附圖的簡要說明
圖1的方框圖示出了依據(jù)最佳實施例的一個個人計算機(jī)系統(tǒng);圖2簡單地示出了在現(xiàn)有技術(shù)中使用一個磁帶機(jī)、一個混頻器、一個混響單元,一對話筒和一對揚(yáng)聲器的組合家用音響裝置;圖3示出了根據(jù)一個最佳實施例的媒體部件;圖4示出了根據(jù)一個最佳實施例的音頻播放器部件;圖5示出了根據(jù)一個最佳實施例的扇入和扇出端口;圖6示出了根據(jù)一個最佳實施例的具有零或多個音頻輸入端口并具有零或多個音頻輸出端口的音頻部件;圖7示出了根據(jù)一個最佳實施例通過使用一個音頻播放器去記錄和播放聲音注釋所使能的聲音注釋的應(yīng)用;圖8示出最根據(jù)一個最佳實施例的聲音通信/耳機(jī)應(yīng)答的應(yīng)用;圖9示出了根據(jù)一個最佳實施例的一個被外部同步到主時鐘的多媒體播放器;圖10示出了根據(jù)一個最佳實施例的將三種聲音,即音樂、音響效果和話外音混合到一起并通過諸如一個揚(yáng)聲器的輸出設(shè)備加以輸出;圖11示出了根據(jù)一個最佳實施例的某些音頻類型;圖12示出了根據(jù)一個最佳實施例將一種音頻類型轉(zhuǎn)換成另一種音頻類型的轉(zhuǎn)換處理;圖13示出了根據(jù)一個最佳實施例的一個遠(yuǎn)程過程調(diào)用;圖14示出了根據(jù)一個最佳實施例具有用于從其輸入緩沖器中讀出數(shù)據(jù),對數(shù)據(jù)進(jìn)行處理以及將處理結(jié)果寫入其輸出緩沖器的一個相關(guān)Run()成員功能的音頻處理器結(jié)構(gòu);
圖15示出了根據(jù)一個最佳實施例的音頻處理器;圖16示出了根據(jù)一個最佳實施例在圖15中所示之網(wǎng)絡(luò)是如何執(zhí)行處理的;圖17示出了根據(jù)一個最佳實施例的一個音頻端口;圖18示出了根據(jù)一個最佳實施例的諸如是一個播放機(jī)的音頻處理器;圖19示出了根據(jù)一個最佳實施例與用于激活一個音頻處理器相關(guān)的遞歸邏輯;圖20示出了根據(jù)一個最佳實施例用于表示與一個用于釋放所述音頻處理器相關(guān)的詳細(xì)邏輯的流程圖;圖21示出了根據(jù)一個最佳實施例表示與運(yùn)行一個音頻處理器相關(guān)的邏輯的流程圖;圖22示出了根據(jù)一個最佳實施例將一個視頻數(shù)字轉(zhuǎn)換器部件連接到一個觀查器部件上以便在計算機(jī)屏幕上進(jìn)行顯示的例子;圖23示出了根據(jù)一個最佳實施例在一個效果處理器中對來自兩個視頻目標(biāo)的圖象進(jìn)行混合并將其結(jié)果顯示于計算機(jī)屏幕上的一個例子;圖24示出了根據(jù)一個最佳實施例如何使用圖形端口;圖25示出了根據(jù)一個最佳實施例表示與一個輸出端口的Write成員功能相關(guān)的邏輯的流程圖;圖26示出了根據(jù)一個最佳實施例的一個輸入端口的讀出處理;圖27示出了根據(jù)一個最佳實施例的一個輸入端口的下一個成員處理;
圖28示出了根據(jù)一個最佳實施例兩個部件MIDI播放機(jī)2800和MIDI接口2810是如何被用于操縱聯(lián)接到所述計算機(jī)上的音樂合成器以便進(jìn)行演奏的;圖29示出了根據(jù)一個最佳實施例MIDI數(shù)據(jù)是如何被記錄和如何從一個外部音樂合成器被播放的;圖30示出最根據(jù)一個最佳實施例MIDI數(shù)據(jù)是如何被播放的;圖31示出了根據(jù)一個最佳實施例的包括有MIDI和音頻端口的媒體部件;圖32示出了根據(jù)一個最佳實施例被劃分成公用、實時和互斥信息的詳細(xì)的系統(tǒng)信息;圖33示出了根據(jù)一個最佳實施例MIDI信息的某些格式;圖34示出了一種根據(jù)最佳實施例的封裝MIDI信息類型和結(jié)構(gòu),狀態(tài)字節(jié)和時間標(biāo)記的MIDI包目標(biāo);圖35示出了根據(jù)一個最佳實施例的一個扇入操作的例子;圖36示出了根據(jù)一個最佳實施例的一個MIDI輸出端口的Write()成員功能;圖37示出了根據(jù)一個最佳實施例的一個MIDI輸入端口的Read()成員功能;圖38示出了根據(jù)一個最佳實施例的具有一個單一輸入端口和兩個輸出端口的媒體部件;圖39示出了一個根據(jù)最佳實施例能夠演奏時基媒體順序的媒體部件;圖40示出了根據(jù)一個最佳實施例用于使一個音頻部件播放和記錄音頻數(shù)據(jù)的音頻播放機(jī);
圖41示出了根據(jù)一個最佳實施例的一個揚(yáng)聲器部件的例了;圖42示出了根據(jù)一個最佳實施例的話筒部件的例子;圖43示出了根據(jù)一個最佳實施例的一個混頻器部件的例子;圖44示出了根據(jù)一個最佳實施例的一個分離設(shè)備部件的例子;圖45示出了根據(jù)一個最佳實施例的一個增益部件的例子;圖46示出了根據(jù)一個最佳實施例的一個回波部件的例子;圖47示出了根據(jù)一個最佳實施例的一個抖顫(fuzz)部件的例子;圖48示出了根據(jù)一個最佳實施例的一個音頻類型轉(zhuǎn)換器的例子;圖49示出了根據(jù)一個最佳實施例的一個音頻多路轉(zhuǎn)換器;圖50示出了根據(jù)一個最佳實施例的一個聲音部件;圖51示出了根據(jù)一個最佳實施例被置入一個聲音部件之中的部件;圖52示出了根據(jù)一個最佳實施例的一個實際的揚(yáng)聲器部件;圖53示出了根據(jù)一個最佳實施例的一個實際的話筒部件;圖54示出了根據(jù)一個最佳實施例的一個圖形播放機(jī)部件;圖55示出了根據(jù)一個最佳實施例的一個圖形觀看器部件;圖56示出了根據(jù)一個最佳實施例的一個視頻數(shù)字轉(zhuǎn)換器部件;圖57示出了根據(jù)一個最佳實施例的一個MIDI播放機(jī)部件;圖58示出了根據(jù)一個最佳實施例的MIDI接口部件;圖59示出了根據(jù)一個最佳實施例的一個MIDI濾波器部件;圖60示出了根據(jù)一個最佳實施例的一個MIDI映象器部件;圖61示出了根據(jù)一個最佳實施例的一個MIDI程序映象器部件;圖62示出了根據(jù)一個最佳實施例的一個MIDI注釋映象器部件;以及圖63示出了根據(jù)一個最佳實施例的一個MIDI頻道映象器部件。
本發(fā)明的最佳實施例本發(fā)明最好應(yīng)用于駐留在諸如是IBMPS/2或AppleMacintosh計算機(jī)的個人計算機(jī)上的操作系統(tǒng)中。典型的硬件環(huán)境示于圖1,該圖示出了根據(jù)本發(fā)明的一個工作站的典型的硬件結(jié)構(gòu),它包括一個諸如是傳統(tǒng)微機(jī)的中央處理單元10和一些通過系統(tǒng)總線相互連接的其它單元。圖1所示的工作站包括一個隨機(jī)存儲存儲器(RAM)14,一個只讀存儲器(ROM)16,一個用于將諸如是一個磁盤單元20的外圍設(shè)備連接到總線的I/O適配器18,一個用于將鍵盤24,鼠標(biāo)26,揚(yáng)聲器28,話筒32和/或諸如觸屏設(shè)備的其它用戶接口設(shè)備(未示出)連接到所述總線上的用戶接口適配器22,一個用于將所述工作站連接到數(shù)據(jù)處理網(wǎng)絡(luò)上的通信適配器34和一個用于將所述的總線連接到一個顯示設(shè)備38上的顯示器適配器36。所述工作站中具有例如Apple System/7操作系統(tǒng)這樣的操作系統(tǒng)。
在一個最佳實施例中,本發(fā)明是根據(jù)使用面向目標(biāo)編程技術(shù)的C++編程語言加以執(zhí)行的。如本專業(yè)技術(shù)領(lǐng)域以內(nèi)的普通技術(shù)人員所理解的那樣,面向目標(biāo)編程(OOP)的目標(biāo)是多個包含有數(shù)據(jù)結(jié)構(gòu)和在所述數(shù)據(jù)上進(jìn)行操作的軟件實體。這些元素一起使得所述目標(biāo)能夠根據(jù)由其數(shù)據(jù)元素所表征的特征和由其數(shù)據(jù)控制功能所表征的特性去有效地模擬現(xiàn)實存在的任一實體。利用這種方式,目標(biāo)可以模擬象人和計算機(jī)這樣的具體事物,并且它們可以模擬象數(shù)這樣的抽象概念或幾何概念。目標(biāo)技術(shù)的優(yōu)點(diǎn)源于三個基本原理,即封裝、多形性和繼承。
目標(biāo)隱藏或封裝它們數(shù)據(jù)的內(nèi)部結(jié)構(gòu)和使其功能可以進(jìn)行工作的算法。目標(biāo)不展示這些實施細(xì)節(jié),目標(biāo)表示代表沒有用多余信息的抽象的接口。多形性是封裝的進(jìn)一步驟,其概念是多種形狀,一個接口。軟件部件能夠產(chǎn)生另一個部件的請求而不必確切了解那個部件是什么。接收所述請求的部件解釋它,并根據(jù)它的變量和數(shù)據(jù)確定如何執(zhí)行所述請求。第三個原則是繼承,它允許研制者重復(fù)使用予先存在的設(shè)計和代碼。這種能力使研制者得以避免從無到有的建立軟件。進(jìn)而,通過繼承,研制者獲得具有繼承性的子類別,這樣,研制者隨后就可以定制以滿足他們的特殊需要。
現(xiàn)有技術(shù)的方法是將在一個過程環(huán)境中的多個目標(biāo)分出層次并將庫進(jìn)行分類。市場上的很多應(yīng)用結(jié)構(gòu)都是采取這種設(shè)計方法。在這種設(shè)計中,在一個單片操作系統(tǒng)之上有一個或多個目標(biāo)層。雖然這種方法在所述目標(biāo)層中應(yīng)用了包括封裝,多形性和繼承的所有原則并且這種方法相對于過程編程技術(shù)而言是一種改進(jìn),但這種方法有某些限制。這些困難是由下面這樣一個事實所引起的,即雖然研制者很容易重新使用他們自己的目標(biāo),但很難使用其它系統(tǒng)的目標(biāo),并且所述的研制者仍然需要選用過程操作系統(tǒng)(OS)調(diào)用才能進(jìn)入較低的非目標(biāo)層。
面向目標(biāo)編程的另一個概念就是趨向于應(yīng)用開發(fā)的結(jié)構(gòu)處理。對結(jié)構(gòu)最理性的定義之一來自Illinois大學(xué)的Ralph E.Johnson和Purdue的Vincent F.Russ。在Illinois大學(xué)教學(xué)報告UIUCDCS91-1696發(fā)表的1991論文“重新使用面向目標(biāo)設(shè)計”中,他們作出了如下定義“一個抽象的類別就是一組共同協(xié)作以執(zhí)行一組職責(zé)的執(zhí)行規(guī)定的一組計算職責(zé)的一組目標(biāo)類別”。根據(jù)編程的觀點(diǎn),所述的結(jié)構(gòu)是多組用于提供工作應(yīng)用的預(yù)制結(jié)構(gòu)的交互連接目標(biāo)的類別。例如,一個用戶接口結(jié)構(gòu)可以提供繪圖窗口,滾動條以及菜單等的支持和“系統(tǒng)預(yù)置”特性。由于所述的結(jié)構(gòu)是基于目標(biāo)技術(shù)的,所以這些特性能夠被繼承和發(fā)展,從而允許研制者在一個專門技術(shù)的特定領(lǐng)域內(nèi)拓展所述的結(jié)構(gòu)并建立定制的解決辦法。它超過傳統(tǒng)編程的主要優(yōu)點(diǎn)就在于所述編程員未改變原來的代碼而代之以擴(kuò)展所述的軟件。另外,由于所述的結(jié)構(gòu)提供了體系引導(dǎo)和模型而同時又允許它們隨后自由地將所述特定的作用唯一地提供給出問題的區(qū)域,研制者就可以不必盲目地通過代碼層進(jìn)行工作。
從商業(yè)的觀點(diǎn)來看,可以把結(jié)構(gòu)看作是一種封裝或包括一個特定知識領(lǐng)域中專門技術(shù)的一種方式。合作發(fā)展組織、獨(dú)立軟件供應(yīng)商以及系統(tǒng)綜合者在諸如制造、計算以及流通業(yè)務(wù)等特殊領(lǐng)域內(nèi)已經(jīng)獲得了有關(guān)的專門知識。這些專門知識被包括在它們的代碼之中。通過將其收錄在所述組織的編碼之內(nèi),所述結(jié)構(gòu)允許所述的組織收集和封裝那個專門技術(shù)的共同特征。首先,這允許研制者建立或擴(kuò)展利用這種專門技術(shù)的應(yīng)用,其次,所述的問題獲得了解決并自始至終貫徹執(zhí)行和使用所述的商業(yè)規(guī)劃和設(shè)計。結(jié)構(gòu)以及結(jié)構(gòu)后面所隱含的專門技術(shù)對于那些在垂直市場中已經(jīng)獲得了諸如制造、會計或生物技術(shù)的專門知識的組織而言具有至關(guān)重要的意義,并且它能夠提供一種分布式結(jié)構(gòu)以用于封裝、轉(zhuǎn)賣和推廣應(yīng)用他們的專門知識,并促進(jìn)技術(shù)的進(jìn)步和普及。
從歷史上來看,所述結(jié)構(gòu)只是在最近才作為個人計算站的主要概念而出現(xiàn)。這種進(jìn)展是由于可獲得諸如C++的面向目標(biāo)語言而推動的。傳統(tǒng)上,C++大多是從UNIX系統(tǒng)和研究者的工作站中發(fā)現(xiàn)的,而不是從商業(yè)設(shè)備的計算機(jī)上發(fā)現(xiàn)的。正是諸如C++和其它諸如Smalltalk等面向目標(biāo)語言的語言,而使一些大學(xué)和研究單位研發(fā)出導(dǎo)致今天的商用結(jié)構(gòu)和類別庫的產(chǎn)品。某些這類產(chǎn)品的例子包括Stanford大學(xué)的InterView和來自Caunegie-Mellon大學(xué)的Andrew toolkit,以及來自Zurich大學(xué)的ET++結(jié)構(gòu)。
所述結(jié)構(gòu)種類的范圍從用于協(xié)助開發(fā)用戶接口的應(yīng)用結(jié)構(gòu)直到用于提供諸如通信、打印文件系統(tǒng)支援以及圖形等的基本系統(tǒng)軟件服務(wù)的低級結(jié)構(gòu)。所述應(yīng)用結(jié)構(gòu)的商用實例是MacAPP(Apple),Bedrock(Symantec),OWL(Borland),NeXTStep App kit(NeXT),和Smalltalk-80MVC(ParcPlace)。
利用所述結(jié)構(gòu)進(jìn)行編程要求習(xí)慣于其它種類型系統(tǒng)的研制人員采取一種新的思維方式。事實上,它根本不象傳統(tǒng)意義上的“編程”。在諸如DOS或UNIX等老式操作系統(tǒng)中,研制者自己的程序提供了所述結(jié)構(gòu)的全部。所述的操作系統(tǒng)通過系統(tǒng)調(diào)用來提供服務(wù),即當(dāng)它需要服務(wù)時,研制者的程序?qū)a(chǎn)生一個調(diào)用,而在提供了所述的服務(wù)時,則控制其返回。所述的程序結(jié)構(gòu)是以控制流程為基礎(chǔ)的,所述控制流程包含于所述研制者編寫的代碼之中。
當(dāng)使用所述結(jié)構(gòu)時,這一切都是相反的。所述研制者不再決定控制流程。所述研制者必須放棄根據(jù)執(zhí)行流程來理解編程任務(wù)的意向。必須根據(jù)所述目標(biāo)的職責(zé)來考慮,這就必須依賴結(jié)構(gòu)去確定任務(wù)應(yīng)該在何時被執(zhí)行。由研制者寫入的程序是由研制者未寫入甚至是研制者從沒有見過的代碼激活的??刂屏鞒讨械倪@一轉(zhuǎn)變對于那些僅熟悉過程編程的研制人員來言可能是一個重大的心理障礙。然而,一旦理解了這一點(diǎn),所述的結(jié)構(gòu)編程所需要進(jìn)行的工作量要遠(yuǎn)比其它類型的編程少得多。
利用與一個應(yīng)用結(jié)構(gòu)向研制者提供予制功能相同的方式,諸如包括于一個最佳實施例中的系統(tǒng)結(jié)構(gòu)通過提供系統(tǒng)級服務(wù)使用相同的概念。諸如是系統(tǒng)程編員的研制者使用子類別/置換來建立定制的解決方法。例如,可以認(rèn)為一個多媒體結(jié)構(gòu)能夠提供用于支援諸如音頻,視頻,MIDI,動畫片制作等新的各種設(shè)備的基礎(chǔ)。需要支援一種新設(shè)備的研制者應(yīng)當(dāng)對一個設(shè)備驅(qū)動器進(jìn)行寫入。為了利用結(jié)構(gòu)達(dá)到這些目的,研制者僅需要將所規(guī)定的特征和特性提供給新設(shè)備。
在這種情況下,研制者提供一種工具用于建立將要被多媒體網(wǎng)絡(luò)調(diào)用的成員功能。研制者的直接受益是每種設(shè)備所需的類屬代碼已經(jīng)由多媒體結(jié)構(gòu)所提供。這就意味著研制者需要編寫,測試和調(diào)試的設(shè)備驅(qū)動器代碼將更少。使用系統(tǒng)結(jié)構(gòu)的另一個例子應(yīng)當(dāng)具有一個用于SCSI設(shè)備、NuBus插件和圖形設(shè)備的單獨(dú)的I/O結(jié)構(gòu)。由于具有繼承功能,所以每一個結(jié)構(gòu)都為在其設(shè)備類別內(nèi)發(fā)現(xiàn)的通用功能提供支援。其它的研制者然后可以根據(jù)這些相容的接口以應(yīng)用于其它種類的設(shè)備。
最佳實施例采用了所述結(jié)構(gòu)的概念,并將其應(yīng)用于整個系統(tǒng)。對于商業(yè)或聯(lián)合研制者、系統(tǒng)綜合者或OEM而言,這就意味著有關(guān)諸如MacApp等的結(jié)構(gòu)已經(jīng)展示了所有優(yōu)點(diǎn),即不僅包括諸如文本和用戶接口方面的有關(guān)應(yīng)用層級的優(yōu)點(diǎn),而且還包括諸如圖形,多媒體,文件系統(tǒng),I/O以及測試之類的系統(tǒng)級服務(wù)的優(yōu)點(diǎn)。
在一個最佳實施例總體結(jié)構(gòu)中的應(yīng)用的建立很象寫入一個遵守結(jié)構(gòu)協(xié)議的特殊區(qū)域段。利用這種方式,編程的整個概念都政變了。取代逐行編寫調(diào)用多API層次的代碼,通過從在這種環(huán)境之中予先存在的結(jié)構(gòu)獲取類別,然后附加上新的特性和/或?qū)⑺龅睦^承特性置換成所需特性來開發(fā)所述軟件。
由此,研制者的工作就變成了收集編寫的代碼并與所有其它的結(jié)構(gòu)應(yīng)用共享這些代碼。由于研制者將能夠根據(jù)相互間的工作來生成代碼,所以這個概念是相當(dāng)有用的。這也使得研制者可以根據(jù)需要的多少來靈活地實現(xiàn)定制操作。某些結(jié)構(gòu)將被用作其本身。在某些情況下,定制量將是最小化,所以研制者所插入的段將很小。在其它的情況下,研制者可以作非常廣泛的修改并建立某些全新的設(shè)計。
在圖1所示的最佳實施例中,一個多媒體數(shù)據(jù)路由選擇系統(tǒng)通過計算機(jī)系統(tǒng)來管理所述多媒體信息的移動,而駐留在RAM14中的多媒體部件在CPU10控制下或通過總線12或通信適配器34與外部相關(guān)系以負(fù)責(zé)顯示多媒體信息,不需要一個中心播放機(jī)去協(xié)同或管理系統(tǒng)的全部操作。這種體系結(jié)構(gòu)提供了靈活性,并為一個新類型媒體的加入提供了增加的可擴(kuò)展性。所述系統(tǒng)利用各種多媒體目標(biāo),其中的某些可用作連接目標(biāo)。所述的連接目標(biāo)包括增益,濾波器,放大器,混頻器,播放機(jī),和其它在面向目標(biāo)操作系統(tǒng)中用作目標(biāo)的多媒體部件。上述所討論的目標(biāo)包括一個代碼或方法部件和一個數(shù)據(jù)部件。所述系統(tǒng)包括一個鼠標(biāo),以便于拖曳/投放,兩次按動(double clicking),投放啟動,光標(biāo)定位,以及其它典型操作的圖符操作。
在視頻和音頻產(chǎn)生工作室中,諸如聲音,MIDI,和視頻的媒體利用實際上的插入線為處于電源,效果處理器,和轉(zhuǎn)接器之間的信號進(jìn)行路由選擇。信號處理算法也經(jīng)常被表示成所述電阻,轉(zhuǎn)接器和處理器的網(wǎng)絡(luò)。這兩種模型都可以被表示為被連接目標(biāo)的導(dǎo)向圖形。一個最佳實施例允許在個人計算機(jī)系統(tǒng)上實現(xiàn)把目標(biāo)連接到一起的模型。圖2示出一個現(xiàn)有技術(shù)的家用組合音響裝置,它包括一個磁帶機(jī),一個混頻器,一個混響單元,一對話筒機(jī),和一對揚(yáng)聲器。由于所述的話筒被連接到所述磁帶機(jī)上,所以聲音輸入的路徑選擇為從所述的話筒到所述的磁帶機(jī),在這里,所述的聲音被記錄下來。由于所述聯(lián)接是由磁帶機(jī)連接到混頻器,所以當(dāng)磁帶機(jī)進(jìn)行播放時,其信號將被傳送給混頻器。同樣,混響單元和揚(yáng)聲器被連接到與混頻器相連的放大器。
一個最佳實施例使用面向目標(biāo)技術(shù)來表示一個連接模型。多媒體目標(biāo)可以相互連接,從而生成直接的數(shù)據(jù)流圖形。另外,一組標(biāo)準(zhǔn)的多媒體目標(biāo)被規(guī)定給所述系統(tǒng)。這些目標(biāo)可以被連接到一起,以便于多媒體數(shù)據(jù)從一個目標(biāo)流到另一個目標(biāo)。通過利用諸如線,線段或其它適當(dāng)?shù)膸缀谓Y(jié)構(gòu)的幾何圖形將多個媒體目標(biāo)連接起來,以助于所述的連接操作。下面要討論的圖示出了各種多媒體目標(biāo)的例子,包括連接目標(biāo)和用于表示內(nèi)部數(shù)據(jù)結(jié)構(gòu)和連接多媒體目標(biāo)的邏輯的幾何圖。
用于路由選擇的類別基于時間的媒體部件(此后稱為媒體部件)的基本類別是用于路由選擇的中心抽象。一個媒體部件具有零或多個輸入端口和零或多個輸出端口。在圖3中,媒體部件具有一個單一的輸入端口300和兩個輸出端口310和320。端口300、310和320用黑色的三角形來表示。
通過將媒體部件的端口相連接將所述媒體部件的子類別連接到一起。這種處理類似于在一個記錄工作室內(nèi)使用插入碼將音頻和視頻部件相接到一起。在圖4中,一個媒體部件的子類別、即一個音頻播放機(jī)部件目標(biāo)被連接到另一媒體子類別,即一個揚(yáng)聲器部件目標(biāo)上。所述的音頻播放機(jī)具有一個輸出端口,且所述揚(yáng)聲器具有一個輸入端口。利用成員功能調(diào)用對所述的媒體部件進(jìn)行控制。例如圖4中的音頻播放機(jī)就具有與播放音頻數(shù)據(jù)相關(guān)的成員功能。當(dāng)調(diào)用所述音頻播放機(jī)的成員功能Play()時,音頻數(shù)據(jù)將從所述的音頻播放機(jī)傳送給揚(yáng)聲器,從而可以從計算機(jī)的揚(yáng)聲器中聽到所述的音頻。由于所述的揚(yáng)聲器部件能夠播放傳送給它的任何音頻數(shù)據(jù),所以它不具有Play()功能。所述的媒體部件完全可以用軟件實現(xiàn)。然而,所述的媒體部件也可表示一個實際的硬件。例如,一個揚(yáng)聲器部件可以用于表示一個計算機(jī)的播放硬件。在這種方式之下,諸如是一個視頻磁帶記錄機(jī),混頻器和效果處理器的外部媒體設(shè)備可以被表示成媒體部件并可以被連接到一起。
連接媒體部件通過連接媒體部件的端口可以將所述的媒體部件連接到一起。為了避免客戶和部件把數(shù)據(jù)同時寫入同一個端口,從而損害數(shù)據(jù)的完整性,客戶機(jī)不允許對端口進(jìn)行直接存取??蛻魴C(jī)應(yīng)當(dāng)在多線索安全代用目標(biāo)的基礎(chǔ)上執(zhí)行連接操作。根據(jù)上下文的關(guān)系,術(shù)語“代用”一詞涉及一種允許多個客戶機(jī)去安全共享所述類示例的基礎(chǔ)類別的特殊表示。在所述媒體部件的情況下,代用端口允許對實際的端口進(jìn)行有限的間接控制。每一個媒體部件都具有用于建立與其每個輸入和輸出端口相關(guān)的代用的成員功能。這些端口代用是一些極輕的目標(biāo)并且非常適于通過地址邊界,由此有助于連接駐留于不同地址空間的媒體部件。
每個端口和端口代用具有與其相關(guān)的數(shù)據(jù)類型。這些類型的例子是MIDI數(shù)據(jù),44k赫茲16位的音頻數(shù)據(jù),22K赫茲8位的音頻數(shù)據(jù)和用于視頻的圖形數(shù)據(jù)。當(dāng)兩個端口被要求連接時,一個類型談判協(xié)議保證所述端口能夠支援兼容數(shù)據(jù)類型。假如所述端口不具有通用類型,就要產(chǎn)生一個異常。
在兩個具有互不兼容端口類型的目標(biāo)之間插入有轉(zhuǎn)換器目標(biāo)。所述轉(zhuǎn)換器是一種取入一種數(shù)據(jù)而產(chǎn)生不同類型數(shù)據(jù)的部件。扇入和扇出端口的例子示于圖5??梢赃x擇多個特殊的子類別以禁止扇入和/或扇出。例如,音頻端口既禁止扇入又禁止扇出,并試圖通過將一個端口連接到一個以上的其它端口來產(chǎn)生所述的異常。扇入和扇出性質(zhì)是利用特定的媒體子類別進(jìn)行處理的。例如,在MIDI中,扇出將相同的數(shù)據(jù)傳送給多個接收者,而扇入則從多個發(fā)送器中接收數(shù)據(jù)。
通過下述步驟將兩個媒體部件A和B連接到一起1)調(diào)用A的成員功能,以請求一個輸出端口代用,Pa;2)調(diào)用B的成員功能以便要求B去請求一個輸入端口代用,Pb;3)調(diào)用Pa的成員功能ConnectTo并在Pb中作為自變量進(jìn)行傳送。
所述端口可以通過調(diào)用Pa的成員功能DisconnectFrom并在Pb中作為自變量進(jìn)行傳送而斷開連接。當(dāng)要連接或斷開連接任一媒體部件時,無論端口類型是一個音頻,圖形,MIDI,或某些其它多媒體數(shù)據(jù)類型,都會激發(fā)上述過程。當(dāng)兩個端口都被連接時,沒有編譯時間檢查。例如,沒有什么東西可以使軟件研制者避免去編寫,編譯,和鏈接一個試圖將音頻端口與所述MIDI端口相連的代碼。代之,一個異常在運(yùn)行時間內(nèi)被產(chǎn)生。這種特性被明顯地設(shè)計進(jìn)所述的路由選擇系統(tǒng)以便使得可多形性地連接媒體端口。例如,一個插入模塊可以在特定的連接時間把媒體端口對連接到一起,而不需要對不同的端口類型進(jìn)行特殊處理。利用一個插入器可以用完全相同的方式對音頻,視頻,和MIDI端口進(jìn)行處理。多個目標(biāo)間的連接可以用在表示諸如一個顯示器上的圖符的所述多媒體目標(biāo)的標(biāo)記之間劃一個線段來可視地加以表示。
音頻數(shù)據(jù)的路由選擇音頻數(shù)據(jù)可在計算機(jī)上數(shù)字化,存貯,處理,和播放。一個計算機(jī)也可以用于合成和播放所述音頻。一個模擬/數(shù)字轉(zhuǎn)換器(ADC)被用于將一個模擬音頻電子信號轉(zhuǎn)換成一系列的稱為數(shù)字音頻取樣的數(shù)碼。所述音頻通常以每秒8000次取樣的取樣頻率被取樣,以用于全程的電話質(zhì)量音頻;每秒鐘44,100次取樣,以用于小型磁盤(CD)質(zhì)量音頻和每秒鐘48,000次取樣,以用于數(shù)字音頻磁帶(DAT)。一旦成為數(shù)字形式,所述的音頻就可以利用計算機(jī)加以存貯和處理。使用數(shù)/模轉(zhuǎn)換器(DAC)將所述的數(shù)字音頻取樣轉(zhuǎn)換回模擬音頻電子信號。一個最佳實施例定義了用于為所述媒體部件之間的數(shù)字音頻數(shù)據(jù)進(jìn)行路由選擇的端口目標(biāo)(稱為音頻端口)的子類別。音頻輸出端口可以被連接到音頻輸入端口,以為音頻數(shù)據(jù)進(jìn)行路由選擇。若一個媒體部件具有至少一個音頻端口,它將被稱之為一個音頻部件。所有音頻部件都是媒體部件基本類別的子類別。如圖6所示,一個音頻部件具有零或多個音頻輸入端口或零或多個音頻輸出端口。通過連接所述音頻部件的端口,可以將它們連接到一起。這類似于使用插入碼去把利用硬件的立體部件連接到一起。
一個最佳實施例有助于說明所述的音頻部件是如何連接以建立各種有趣的應(yīng)用的。圖7,圖8,圖9和圖10示出了能夠使用音頻部件構(gòu)成的某些舉例應(yīng)用。圖7示出了使用一個音頻播放機(jī)如何寫入一個聲音注釋應(yīng)用以及如何記錄和播放所述的聲音注釋。一個電話聽筒被用于輸入和輸出。圖8示出了聲音郵件/電話應(yīng)答應(yīng)用是如何構(gòu)成的。一個音頻播放機(jī)在電話線上播放一個致意輸出,而另一個音頻播放機(jī)記錄一個輸入信息。圖9示出了一個音樂應(yīng)用。作為一個特殊效果的回波被加到一個樂器的聲音上并通過一個揚(yáng)聲器被播放出來。圖10示出了如何將三種聲音一種是音樂,一種是聲音效果,一種是畫外音,混合到一起并將它們通過諸如揚(yáng)聲器的一個輸出設(shè)備加以傳送。
像所有的媒體部件一樣,通過連接所述音頻部件的端口便可將它們連接到一起。這個操作是通過選擇一個音頻部件端口,從一個部件端口向另一個多媒體部件端口延展諸如一條線的幾何圖形以及建立用于記住在所述顯示器上幾何表示的所述鏈接的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)的。每一個音頻部件都具有用于建立與其輸入和輸出端口相關(guān)的代用的成員功能??蛻魴C(jī)通過根據(jù)每個部件申請的輸入和/或輸出端口代用,然后使用由所述代用目標(biāo)所提供的成員功能來執(zhí)行連接操作,從而把實際的輸入端口連接到實際的輸出端口。每個音頻端口和端口代用具有與其相關(guān)的音頻類型。圖11列表了一些由所述最佳實施例支持的音頻類型。
由所述顯示器上的鏈接線段所表示的連接表示一個單一的音頻通道。通過使用其中用于左通道而另一個用于右通道的兩個連接來處理立體聲。當(dāng)有兩個端口被要求連接時,一個談判協(xié)議保證所述端口能夠支援可兼容的數(shù)據(jù)類型。假如所述端口不具有通用類型,那么將產(chǎn)生一個異常。假如發(fā)生這種情況,一個音頻類型轉(zhuǎn)換器可以被插入到所述兩個端口之間以將一種類型轉(zhuǎn)換成另一種類型,如圖12所示。在一個音頻部件的網(wǎng)絡(luò)中,不允許存在有回路(循環(huán))。任何可能導(dǎo)致回路的連接企圖都將導(dǎo)致產(chǎn)生異常。通過在諸如表示多媒體目標(biāo)的標(biāo)記的音頻輸入和輸出端口的圖形的圖符之間延展諸如一個線段的幾何圖形,便可以在所述的顯示器上幾何地表示連接音頻部件的處理。
實現(xiàn)音頻部件基于客戶機(jī)一服務(wù)器的體系結(jié)構(gòu)被用于實現(xiàn)音頻部件。對于每一個音頻部件而言,都具有一個駐留于稱為音頻服務(wù)程序的任務(wù)之中的音頻處理器目標(biāo)。所述的音頻處理器目標(biāo)負(fù)責(zé)執(zhí)行實際的信號處理。所述的音頻部件子類別必須寫入一個音頻部件和一個音頻處理器子類別??蛻魴C(jī)/服務(wù)器方案被用于加強(qiáng)性能。若在單一任務(wù)之下執(zhí)行了所有數(shù)據(jù)的移動和信號處理,則可以最有效地實現(xiàn)音頻的插接線結(jié)構(gòu)。這就避免了不必要的交互處理通信(IPC)和上下文轉(zhuǎn)換。若所述的客戶機(jī)存在于多項不同的任務(wù)之中,就需要一個聲音服務(wù)器把處理集中在一個單一任務(wù)中。
還可以有另外一種實現(xiàn)方法,這種方法根據(jù)每個音頻部件的不同的任務(wù)對信號進(jìn)行處理。不需要用于音頻處理的服務(wù)器。這是一種具有很多優(yōu)點(diǎn)的替換,但遺憾的是它有一個缺點(diǎn),即它完成數(shù)量級的速度要比本發(fā)明最佳實施例所進(jìn)行的處理慢。在單處理機(jī)的情況下,即使是所述的機(jī)器具有加強(qiáng)的處理功率,這個比率也基本保持不變。
客戶機(jī)/服務(wù)器模塊音頻部件需要方便與它們相對應(yīng)的音頻處理器之間進(jìn)行通信。一個遠(yuǎn)程過程調(diào)用接口(RPC)被用于完成此任務(wù)。通常,一個音頻部件子類別的成員功能遠(yuǎn)程激活在所述音頻處理器上的“真實的”成員功能。圖13是一個方框圖,它示出了根據(jù)最佳實施例的遠(yuǎn)程過程調(diào)用。
執(zhí)行連接與音頻部件相反,音頻處理器具有音頻端口。音頻部件具有音頻端口代用。只要將在客戶地址空間中的兩個端口代用連接在一起時,在聲音服務(wù)器地址空間中的相應(yīng)音頻端口就被連接到一起。所述的子類別不需要起任何使能作用,這些作用都是由所述結(jié)構(gòu)完成的。
處理音頻音頻端口之間的連接是利用音頻數(shù)據(jù)緩沖器完成的。每個連接或“插入線”都具有與其相關(guān)的緩沖器。音頻處理器可以對與該緩沖器的地址和規(guī)模相關(guān)的音頻端口提出要求。圖14是一個方框圖,它示出了一個具有相關(guān)Run()成員功能的音頻處理器結(jié)構(gòu)。所述的Run()成員功能用于從其輸入緩沖器中讀出數(shù)據(jù),對這些數(shù)據(jù)進(jìn)行處理以及將處理結(jié)果寫入其輸出緩沖器。所述緩沖器的規(guī)模是可變的,但其最佳規(guī)模是可容納5毫秒取樣。這個規(guī)模對于獲取從起始到停止時間長達(dá)10分鐘的性能目標(biāo)是需要的。
基于幀的處理所述的聲音服務(wù)器使用稱作基于幀的處理的技術(shù)來處理聲音取樣,所述的基本處理如下1)排序音頻處理器以便生產(chǎn)者早于消費(fèi)者。
2)對于每個音頻處理器而言,調(diào)用它的Run()成員功能。只要當(dāng)一個I/O設(shè)備請求數(shù)據(jù)時,重復(fù)這個步驟。
對于處理音頻而言,由于一旦指定了所述的運(yùn)行順序,就能夠通過調(diào)用Run()很容易地產(chǎn)生所述幀,所以這是一個極為有效的方式。由于它使用了能夠在一個單一幀中進(jìn)行完全處理的固定規(guī)模的緩沖器,所以,Run()的執(zhí)行是非常有效的。例如,參看圖15,該圖示出了一個音頻處理器網(wǎng)絡(luò)。每個音頻處理器或結(jié)點(diǎn)都被標(biāo)有一個字母。
為了產(chǎn)生聲音,所述的聲音服務(wù)器執(zhí)行下列步驟1)排序音頻處理器以便生產(chǎn)者早于消費(fèi)者;2)在諸如是所述揚(yáng)聲器的音頻I/O設(shè)備需要更多數(shù)據(jù)時運(yùn)行它們。
圖16示出了對于圖15所示之網(wǎng)絡(luò)這種處理是如何執(zhí)行的。在所述第一個方框中排序所述的音頻處理器,然后,以一個規(guī)定的順序運(yùn)行所述的處理器。同時,每個處理器都獲得信息。在這個時間以前,沒有處理器被運(yùn)行。換言之,在所述處理器獲得適當(dāng)信息之前,所述處理器進(jìn)入等待狀態(tài)。
排序音頻處理器使用稱為模擬數(shù)據(jù)流的技術(shù)來排序音頻處理器。由于在大多數(shù)場合下,所述的排序都是由一個結(jié)構(gòu)自動確定的,所以大多數(shù)子類別成員都不必耽心排序。模擬數(shù)據(jù)流以拓?fù)溥壿嫶涡蚍磸?fù)通過所述的網(wǎng)絡(luò),就像數(shù)據(jù)從一個處理器通向下一個處理器一樣。作這項工作的目的是為了看一看哪一個音頻處理器可以運(yùn)行,而哪一些音頻處理器不能夠運(yùn)行。運(yùn)行的音頻處理器被放入運(yùn)行表中并在所述運(yùn)行階段被反復(fù)停止運(yùn)行。
若滿足下述條件,則一個音頻處理器的結(jié)點(diǎn)將能夠運(yùn)行#1它的輸入端口具有可獲得的數(shù)據(jù),以及#2它的輸入端口具有可以放置數(shù)據(jù)的地方。
每個音頻處理器都具有一個CanRun()成員功能,若所述的的結(jié)點(diǎn)可以運(yùn)行,則它返回到TRUE。CanRun()缺省執(zhí)行使用上述法則,所以,若所述的音頻處理器需要置換一個法則的話,一個子類別僅需要置換所述的CanRun()。若一個音頻處理器可以運(yùn)行,那么它將模擬從所有輸出端口輸出的數(shù)據(jù)流。Fire()實際上恰恰在周轉(zhuǎn)并調(diào)用每個輸出端口上其它的Fire()成員功能。輸出端口的啟動能夠模擬所述端口輸出的數(shù)據(jù)流,從而使得模擬數(shù)據(jù)在另一側(cè)的輸入端口處可用。輸入端口具有一個IsAvailable()成員功能。當(dāng)所述的端口具有可獲得的模擬數(shù)據(jù)時,它返回到TRUE。圖17示出了根據(jù)一個最佳實施例的音頻端口。
由于對延遲的輸入處于靜止?fàn)顟B(tài),所以延遲的優(yōu)先級必須高于CanRun()。因此,所述的延遲必須仍然能夠產(chǎn)生輸出,直到所述的延遲用盡為止。所述的輸入端口不再具有可獲得的數(shù)據(jù),但是所述的音頻處理器必須仍然在運(yùn)行。當(dāng)沒有輸入可以適用并且在所述延遲期間內(nèi)仍然有必須輸出的數(shù)據(jù)時,必須修改CanRun()以使其返回到TRUE。即使是在數(shù)據(jù)流準(zhǔn)則被滿足的情況下,由于當(dāng)所述播放機(jī)處于停止?fàn)顟B(tài)時,所述播放機(jī)不能運(yùn)行,所以播放機(jī)也必須置換CanRun()。播放機(jī)必須修改所述法則,從而使得在所述播放機(jī)處于停止?fàn)顟B(tài)時,CanRun()總是能夠返回到FALSE,而與所述的數(shù)據(jù)流準(zhǔn)則是否得到了滿足無關(guān)。音頻處理器能夠詢問它的音頻輸出端口以確定從數(shù)據(jù)被寫入所述端口的緩沖器開始到所述音頻實際上被用戶聽到為止的延遲。這就允許音頻處理器被同步到任一時基。圖18,圖19和圖20示出了與音頻處理器相關(guān)的邏輯流程。一個諸如是播放機(jī)的音頻處理器確定哪一種處理是需要的并激勵示于圖18中的RequestOrder。
圖18是一個流程圖,它示出了根據(jù)一個最佳實施的用于調(diào)用一個順序請求的詳細(xì)邏輯。處理是在端1800處開始并直接通向功能塊1810以使得運(yùn)行表失效。通過丟棄啟動一個多媒體目標(biāo),在一個多媒體目標(biāo)上連扣兩下鼠標(biāo)或使用任意一個表示操作啟動的其它圖符操作可以使所述的運(yùn)行表失效。而后在判定塊1820處執(zhí)行一個測試以確定所述的音頻處理器是否能夠運(yùn)行。假如是,那么在功能塊1830處釋放音頻處理器,控制轉(zhuǎn)向端1850。但是,若所述的音頻處理器不能運(yùn)行,那么在功能塊1840中激活所述音頻處理器,控制轉(zhuǎn)向端1850。
圖19示出了根據(jù)一個最佳實施例與激活一個音頻處理器相關(guān)的遞歸邏輯的流程圖。處理是在端1900處開始的,這里的控制來自功能塊1840或由終端1990處產(chǎn)生的遞歸調(diào)用。在二者之一的情況下,控制立即去往功能塊1910,在這里,變址i為零,計數(shù)N被設(shè)置得等于音頻處理器輸出端口的數(shù)。然后在判斷塊1920執(zhí)行一個測試,以確定是否計數(shù)i=N。如果是,控制返回到端1930。如果不是,所述輸出端口在功能塊1940處被啟動。所述輸出端口在功能塊1950處被標(biāo)記為已經(jīng)啟動。在功能塊1960處把所述輸出端口連接到音頻處理器,在功能塊1970增加計數(shù)i,并在功能塊1980執(zhí)行一個測試,以確定所述的音頻處理器是否能夠運(yùn)行,通過端1900為圖19所示之邏輯產(chǎn)生一個遞歸調(diào)用。如果不能運(yùn)行,控制轉(zhuǎn)向判斷塊1920以繼續(xù)進(jìn)行處理。
圖20的流程圖詳細(xì)地示出了與釋放所述音頻處理器相關(guān)的邏輯。處理是在端2000處開始的,在這里,控制來自功能塊1830或從端2018或2080產(chǎn)生的一個遞歸調(diào)用。在這兩種情況下,控制都直接導(dǎo)向功能塊2004。在功能塊2004,變址i等于0而計數(shù)N被設(shè)置等于音頻處理器輸出端口的數(shù)。然后,在判斷塊1920執(zhí)行一個測試,以確定計數(shù)i是否等于N。如果是,控制轉(zhuǎn)向功能塊2020,以重置變址和計數(shù)的初值。然后在判斷塊2024執(zhí)行一個測試以確定是否i=N,如果不是,那么在功能塊2040中,輸入端口i被標(biāo)記為沒有被啟動,在功能塊2050獲得連接到所述輸入端口的音頻處理器。在功能塊2060,計數(shù)增加,并且在功能塊2070處執(zhí)行一個測試,以確定所述的音頻處理器是否能夠運(yùn)行。假如是,控制在端2040處返回。如果所述的音頻處理器不能夠運(yùn)行,通過端2080為圖20所示之邏輯提供一個遞歸調(diào)用。若所述的音頻處理器能夠運(yùn)行,控制轉(zhuǎn)向判斷塊2024以對變址進(jìn)行再次測試。
若在判斷塊2006處變址i不等于N,那么在功能塊2008內(nèi)所述輸出端口被標(biāo)記為NOT啟動。在功能塊2010處獲得連接到所述輸出端口的音頻處理器,在功能塊2012處計數(shù)增加,并在判斷塊2014處執(zhí)行一個測試以確定所述的音頻處理器是否能夠運(yùn)行。如果所述的音頻處理器不可以運(yùn)行,通過端2018為圖20所示之邏輯提供一個遞歸調(diào)用。若不是這樣,則控制轉(zhuǎn)向判斷塊2006以再次測試所述變址并繼續(xù)進(jìn)行處理。
圖21是一個流程圖,它表示了根據(jù)一個最佳實施例與運(yùn)行一個音頻處理器相關(guān)的邏輯。處理開始于端2100并直接通向判斷塊2104,以確定所述的運(yùn)行表是否失效。若運(yùn)行表沒有失效,那么在功能塊2106執(zhí)行一個拓?fù)溥壿嬇判?,從而對所述音頻處理器根據(jù)其啟動順次進(jìn)行排序。然后在功能塊2110,所述的排序表被標(biāo)為有效并且控制轉(zhuǎn)向功能塊2120。假如在判斷塊2104處所述運(yùn)行表是無效的,那么控制轉(zhuǎn)向功能塊2120,以復(fù)位所述變址i和重新對計數(shù)N置數(shù)。接著,在判斷塊2122中執(zhí)行一個測試,以判斷所述計數(shù)i是否達(dá)到了計數(shù)值N。如果是,處理完成,控制轉(zhuǎn)向端2130。如果不是,音頻處理器i如同在功能塊2124中描述的那樣運(yùn)行,且變址i如在功能塊2126中描述的那樣增加。
視頻和圖形數(shù)據(jù)的路由選擇視頻信息可以在一個計算機(jī)上被數(shù)字化,存貯,處理和播放。一個視頻數(shù)字轉(zhuǎn)換器被用于把一個模擬視頻電子信號轉(zhuǎn)換成一系列被稱作一個幀的數(shù)字圖象。每一秒鐘被進(jìn)行數(shù)字轉(zhuǎn)換的幀的數(shù)量被稱之為幀速率。每秒15幀或13幀是典型的幀速率。一旦處于數(shù)字形式,就可以利用計算機(jī)對所述的視頻進(jìn)行存貯和處理。通過在計算機(jī)屏幕上以原來的幀速率按順序顯示所述的數(shù)字圖象,所述的視頻就可以被播放出來。
一個圖形目標(biāo)是用于表示能夠在計算機(jī)屏幕上進(jìn)行顯示的任一目標(biāo)的基本類別。所述圖形目標(biāo)的子類別包括(但不受其限制)有多邊形、曲線和數(shù)字圖象。數(shù)字化視頻的每一幀是一個數(shù)字圖象,因此可以利用一個圖形目標(biāo)來表示。
圖形輸入和輸出端口被用于對從一個媒體部件到另一個媒體部件的圖形目標(biāo)進(jìn)行路由選擇。當(dāng)每一個視頻幀都是一個圖形目標(biāo)時,數(shù)字視頻可以這種方式進(jìn)行路由選擇。由于圖形端口可以對任何圖形目標(biāo)進(jìn)行路由選擇,所以動畫數(shù)據(jù)也能夠使用圖形端口進(jìn)行路由選擇。使用包含有圖形端口的媒體部件,可以建立其間具有視頻流的視頻目標(biāo)網(wǎng)絡(luò)。利用這種方式,可以構(gòu)成各種有趣的應(yīng)用。圖22示出了根據(jù)本發(fā)明一個實施例把一個視頻數(shù)字轉(zhuǎn)換器部件插入到觀看者部件之中以在計算機(jī)的屏幕上進(jìn)行顯示的例子。
圖23是一個較復(fù)雜的例子,它示出了根據(jù)一個最佳實施例如何將來自兩個視頻目標(biāo)的圖象在一個效果處理器中進(jìn)行混合并在計算機(jī)屏幕上進(jìn)行顯示。借助于所述的端口代用將圖形端口連接到一起。每一個視頻部件都具有用于建立與其輸入和輸出端口相關(guān)的代理的成員功能。客戶機(jī)通過申請來自每個部件的輸入和/或輸出端口代用執(zhí)行所述的連接操作。然后,利用由所述代用目標(biāo)提供的成員功能將實際輸入端口連接到實際輸出端口上。每一個圖形端口和端口代用具有與其相關(guān)的圖形類型。當(dāng)兩個端口被要求連接時,一個類型談判協(xié)議保證所述的端口能夠支援兼容的數(shù)據(jù)類型。若所述端口不具有通用類型,將產(chǎn)生一個異常。
所述連接視頻部件的處理可以通過在表示視頻輸入和輸出端口的標(biāo)記之間延展諸如一個線段的幾何圖符在一個顯示器上幾何地加以表示。
數(shù)據(jù)的路由選擇通過指向圖形目標(biāo)的寫指針和讀指針可以使圖形端口控制圖形數(shù)據(jù)。用于寫入的端口執(zhí)行是完全同步的所述圖形輸出端口的Write()成員功能被阻塞,直到所述圖形目標(biāo)被傳送給接收機(jī)為止。由于性能方面的原因,所述的圖形端口不使用拷貝語義。由于在這種操作之中包含有一定數(shù)量的處理器和存貯器,所以,應(yīng)避免RGB位映象的拷貝,代之以將指向所述圖形目標(biāo)的指針從所述的圖形輸出端口傳送至所述圖形輸入端口。如果一個共享存貯器被用于存貯正在被寫入和讀出的所述圖形目標(biāo),或者如果在一個任務(wù)的整個地址空間中拷貝所述的圖形目標(biāo),所述同步接口就在所述整個地址空間中起作用。在所述連接被破壞所引起的事件中,被封鎖的圖形端口將不再被封鎖。
圖24示出了根據(jù)一個最佳實施例是如何使用所述圖形端口的。1)在源媒體部件中的任務(wù)將一個圖形目標(biāo)寫入到所述媒體部件的輸出端口中;2)指向所述圖形目標(biāo)的指針被傳送給所述目地媒體部件的一個已連接的輸入端口;3)在所述目地媒體部件中的任務(wù)調(diào)用它的輸入端口的Read()成員功能,并且被封鎖、解封鎖和閱讀所述的圖形目標(biāo)指針;4)當(dāng)這個任務(wù)完成了對所述圖形目標(biāo)的處理時,它調(diào)用所述目地媒體部件輸入端口的Next()成員功能;5)源媒體部件的任務(wù)被釋放,并從寫調(diào)用返回。由于所述的目地已伴隨它而結(jié)束,所以,可以安全地處置所述的圖形目標(biāo)。
圖25示出了一個表示與一個輸出端口Write成員功能相關(guān)的邏輯流程圖。指向圖形目標(biāo)的指針被送至這個成員功能中。處理是在端2500開始的,并直接通向判斷塊2510,以確定所述的端口是否已被連接。如果所述的端口未被連接,那么,如在端2520所示,就要產(chǎn)生一個異常。如果所述端口已被連接,那么在判斷塊2350處執(zhí)行一個檢測,以確定所連接的端口不處于同一地址空間。若所述的端口不處于同一地址空間,那么在功能塊2540處,整個的圖形目標(biāo)被拷貝到共享存貯器中。若所述地址處于同一地址空間,則指向所述圖形目標(biāo)的指針被拷貝到存貯器中。在這兩種情況的任一種情況下,下一步都是要將一個標(biāo)志信息如在功能塊2560處所描述的那樣傳送給所述的輸入端口,并封鎖所述的任務(wù)直到如在功能塊2570處所描述的那樣的所述輸入端口通知所述的端口處理已經(jīng)完成為止,同時在端2580處結(jié)束。
圖26示出了根據(jù)一個最佳實施例的輸入端口的讀處理。所述處理開始于端2600,并直接通往判斷塊2610以確定所述的端口是否已被連接。如果所述的端口未被連接,則所述結(jié)構(gòu)在端2620處產(chǎn)生一個異常。如果所述端口已被連接,將在判斷塊2630處執(zhí)行另處一個測試,以確定所述圖形是否已以準(zhǔn)備好。如果不是,執(zhí)行一個塊任務(wù),直到如在功能塊2640處所描述的那樣準(zhǔn)備好所述的目標(biāo),且控制轉(zhuǎn)到功能塊2650。如果所述的圖形已經(jīng)準(zhǔn)備好,指針返回到功能塊2650中的所述圖形目標(biāo),控制通過端2660返回。
圖27示出了根據(jù)一個最佳實施例的一個輸入端口的下一個成員處理。所述處理開始于端2700,并直接通往判斷塊2710以確定所述的端口是否已被連接。如果所述的端口未被連接,那么如在端2720處所示產(chǎn)生一個異常。如果所述的端口已被連接,那么如在功能塊2730內(nèi)所示要發(fā)送一個適當(dāng)?shù)臉?biāo)志信息,并且在判斷塊2740處要執(zhí)行另一個測試,以確定已經(jīng)被連接的端口是否處于同一地址空間。若所述的端口處于同一地址空間,那么如在功能塊2750中所示的刪除所述圖形目標(biāo)的拷貝,且所述處理在端2760處結(jié)束。
MIDI數(shù)據(jù)的路由選擇如同在MIDI Manufacturers Association Publication(1990)的題目為“MIDI 1.0 Detailed Specification”中所討論的那樣,樂器數(shù)字接口(MIDI)規(guī)定一個接口,用于在電子樂器、計算機(jī)、序列發(fā)生器、亮度控制器、混頻器和磁帶記錄機(jī)之間交換信息。MIDI廣泛地應(yīng)用于記錄工作室和日常演出之中,并在工作室記錄、自動控制、音頻視頻生成以及合成領(lǐng)域中具有極大影響。利用其本身和其它媒體相結(jié)合,MIDI對于計算機(jī)在多媒體應(yīng)用方面扮演著極其重要的角色。與數(shù)字式音頻相比較,MIDI文件占據(jù)更少的空間,且所述信息是便于控制和觀察的符號。例如,典型的3分鐘MIDI文件可以在盤上要求30到60K字節(jié)。另一方面,一個CD優(yōu)質(zhì)立體聲文件可能每秒要求大約200K字節(jié),或3分鐘36兆字節(jié)。MIDI數(shù)據(jù)可以以音樂注釋,圖形鋼琴滾動(graphic piano-roll)或適于對不同樂器進(jìn)行編輯和再賦值的信息表的形式出現(xiàn)。一般的MIDI具有標(biāo)準(zhǔn)化的樂器分配,從而極大地鼓勵多媒體產(chǎn)品的生產(chǎn)者。
MIDI輸入和輸出端口被用于為時間特征MIDI信息包從一個媒體部件到另一個媒體部件進(jìn)行路由選擇。MIDI端口作為一個信箱區(qū),用于跨越地址空間的MIDI信息包的通信。通過連接包含有MIDI端口的媒體部件,可以構(gòu)成很多有趣的MIDI的應(yīng)用。圖28示出了兩個部件,即一個MIDI播放機(jī)2800和一個MIDI接口2810是如何被用來演奏一個被連接到所述計算機(jī)上的音樂合成器的。所述的MIDI接口被用于連接諸如是一個音樂合成器的外部設(shè)備。所述的MIDI信息包被從MIDI播放機(jī)送到所述的MIDI接口。所述MIDI接口2810將所述的MIDI信息包轉(zhuǎn)換成將要傳送給所述音樂合成器以用于播放的MIDI數(shù)據(jù)。
圖29示出了所述的MIDI數(shù)據(jù)是如何被記錄和如何從一個外部音樂合成器中播放出來的。所述的MIDI端口2910具有一個用于根據(jù)從所述的音樂合成器接收的數(shù)據(jù)產(chǎn)生所述MIDI信息包的MIDI輸出端口。所述的MIDI播放機(jī)具有一個MIDI輸入端口,用于讀取這些信息包并把它們存貯到計算機(jī)上。圖30示出了MIDI數(shù)據(jù)是如何被播放3000,濾波3010和傳送給一個外部音樂合成器3020的。濾波器3010能夠在其輸入端3000執(zhí)行一個操作,并將操作結(jié)果傳送給它的輸出端3010。多個特定的濾波器可以被寫入,以例如增加額外的注釋,從而建立MIDI回波、延遲,或者截去音調(diào)帶以減少帶寬負(fù)載。
圖31示出了包含有MIDI和音頻端口的媒體部件。以軟件為基礎(chǔ)的音樂合成器從它的輸入端口讀取MIDI信息包并輸出表示在其輸入端上讀入的音符的數(shù)字音頻。借助于所述的端口代理將MIDI端口連接到一起。每個MIDI部件具有多種成員功能,以用于建立和其輸入輸出端口相關(guān)的代理。通過向每一個部件申請輸入和/或輸出端口代理并利用代理目標(biāo)提供的成員功能,客戶機(jī)執(zhí)行連接操作,把實際的輸入端口連接到實際的輸出端口上。每一個MIDI端口和端口代理都具有與其相關(guān)的MIDI類型。當(dāng)要求連接兩個端口時,一個類型談判協(xié)議保證所述的端口能夠支援兼容的數(shù)據(jù)類型。若所述端口不具有通用類型,將產(chǎn)生一個異常。
通過在代表MIDI輸入和輸出端口的標(biāo)記之間延展諸如是一個線段的幾何圖形,可以幾何地表示連接MIDI部件的處理。
MIDI信息包用于通過傳送和接收信息支援MIDI彼此相互通信的部件。MIDI標(biāo)準(zhǔn)定義了兩種信息通道信息和系統(tǒng)信息。所述的通道信息被進(jìn)一步分成聲音信息和模式信息。系統(tǒng)信息還進(jìn)一步被分成通用,實時和互斥信息,如圖32所示。通道聲音信息包括一個MIDI設(shè)備能夠聽到的通道號(0-15)。通道模式信息在基本通道上進(jìn)行傳送,以確定一個樂器對于所述通道聲音信息的響應(yīng)。系統(tǒng)通用信息送往所有的接收機(jī),系統(tǒng)實時信息將同步信息載送給時基樂器。系統(tǒng)互斥信息允許制造者在標(biāo)準(zhǔn)規(guī)定之外提供MIDI支援。除了可以有選擇地歸入狀態(tài)字節(jié)的同類連續(xù)信息(運(yùn)行狀態(tài))以外,所有的信息都可以用一個狀態(tài)字節(jié)開始。除了所述系統(tǒng)互斥以外的所有信息都具有0、1或2個數(shù)據(jù)字節(jié)。所述的系統(tǒng)互斥信息由任意數(shù)量的數(shù)據(jù)字節(jié)組成,并可由EOX字節(jié)結(jié)束。圖33示出了根據(jù)最佳實施例的MIDI信息的格式。
MIDI信息包封裝所述的標(biāo)準(zhǔn)MIDI包目標(biāo)封裝所有的MIDI信息類型及結(jié)構(gòu)。另外,如圖34所示,所有的MIDI包目標(biāo)都具有一個狀態(tài)字節(jié)和一個時間標(biāo)記。通過定義具有方便結(jié)構(gòu)和存取成員功能的信息類型,MIDI信息包的子類別反映了所述的MIDI協(xié)議。
MIDI端口MIDI端口用于在媒體部件之間交換MIDI信息包。一個MIDI輸出端口能夠?qū)懸粋€MIDI信息包,而一個MIDI輸入端口能夠讀一個MIDI信息包。一個輸出端口可以被連接到具有一個代用端口的輸入端口上。所述的代用端口不能讀或?qū)慚IDI信息包,它們是一些能夠通往其它地址空間以支援連接的被動目標(biāo)。提供成員功能以便在某一時刻將一個或多個信息寫給一個輸出端口。類似地,當(dāng)從一個輸入端口讀出時,所有被緩存信息的下一個信息或下一個計數(shù)都可以被請求。在所述緩存器未被騰空之前,禁止讀出,并且利用另一個任務(wù)來取消被禁止的Read調(diào)用。被寫入一個輸出端口的所述信息包的拷貝從一個輸入端口被讀出。
信息包按出現(xiàn)的次序被讀出并且不依時間標(biāo)記而排序。假如需要兩個數(shù)據(jù)流的時序歸并程序,那么將需要一個排序歸并目標(biāo)。為了理解為什么一個輸入端口不被排序,就要首先回憶一下其時間既可以朝前以可以朝后流動的信息包??紤]包括有以6,8和10秒這個順序所產(chǎn)生事件的特殊重放的情況。假如時間從5開始直到11周轉(zhuǎn)并返到到5,那么事件的次序?qū)⑹?,8,10,10,8,6而不是6,6,8,8,10,10。出于時間是在兩個方向上行進(jìn),因而使得所述的排序不足以用于緩存所述的信息包,因而它是不精確的。
所述連接的扇入和扇出被支援,扇入和扇出提供了一種能力,即它可以使一個MIDI輸出端口被連接到一個以上的MIDI輸入端口,并且可以使得一個輸入端口具有連接到一個以上的MIDI輸出端口。圖35示出了根據(jù)一個最佳實施例的一個扇形展開操作。
實施MIDI端口一個最佳實施例使用了一個被連接端口的表,以保持追蹤MIDI端口的連接,并使用了一個共享緩沖器,以用于傳送和接收信息包。每個端口都保持有一個與其相連接的所有其它端口的表。這個表利用Connect和Disconnect調(diào)用進(jìn)行修改,并且當(dāng)所述端口被破壞時,利用這個表通知所有與其相連的端口該端口已不復(fù)存在。當(dāng)事實上這個輸入端口被破壞時,這種處理避免了一個輸出端口在其連接表內(nèi)含有一個輸入端口并試圖向該輸入端口寫入。由此,一個輸出端口保持有一個用于執(zhí)行Write調(diào)用的輸入端口表,并且它向其表中的每一個端口進(jìn)行寫入。而一個輸入端口保持有與其相連的輸出端口的表,并且當(dāng)其脫離時,這些端口必須被告知。一個共享緩沖器支援生產(chǎn)者和消費(fèi)者之間的協(xié)議。當(dāng)所述的緩沖器是空的時,一個任務(wù)可以被中斷,直到它不空為止。隨后被置入其緩沖器的另一項任務(wù)可以通知被中斷的任務(wù)它已被寫入。替換之,其它的任務(wù)也可以取消所述的中斷,以產(chǎn)生另一種類型的通知。
圖36示出了一個MIDI輸出端口的Write()成員功能。所述處理開始于端3600,并直接通往功能框3610以對計數(shù)器置初值并限制用于一個回路的值。然后,在判斷塊3620處執(zhí)行一個測試以確定所述的計數(shù)是否已經(jīng)達(dá)到了所述的限定值。如果所述的計數(shù)已經(jīng)達(dá)到了限定值,那么在端3670處理完成。若所述的計數(shù)值未達(dá)到所述的限定值,那么在功能塊3630處,所述信息包的拷貝被插入一個端口的緩沖器,并且在判斷塊3640處執(zhí)行一個測試,以確定所述的緩沖器是否具有一個消息。如果所述緩沖器不是空的,那么將如功能塊3650所示發(fā)送一個適當(dāng)?shù)南ⅰH舨皇沁@種情況,就不必傳送消息。在這兩種情況的任一種情況下,都要在功能塊3660處增加所述的計數(shù),并且控制通過端3670返回。
圖37示出了一個MIDI輸出端口的Read()成員功能。處理開始于判斷塊3700,以確定所述緩沖器是否是空的。若是,所述任務(wù)被中斷,直到所述緩沖器包含有信息,或者是在功能塊3710處產(chǎn)生一個取消。在判斷塊3730處執(zhí)行一個測試確定所述的等待是否已被取消。若是,則在端3750處產(chǎn)生一個異常。若不是或者是在判斷塊3700處所述緩沖器不是空的,則在功能塊3720處將信息包從所述緩沖器拷貝到調(diào)用程序中,并通過在端3740處的返回完成了所述處理。
抽象多媒體部件媒體部件被稱之為媒體部件基本類別的基于時間的媒體部件是用于路由選擇的主要抽象。一個媒體部件具有零或多個輸入端口和零或多個輸出端口。例如在圖38中,所述的媒體部件具有一個單一的輸入端口和兩個輸出端口。媒體順序媒體順序是表示媒體內(nèi)容(包括音頻順序)的抽象基本類別。媒體順序的子類別用于表示音頻、視頻和MIDI的削減。媒體順序的特征在于寬度和類型表。由浮點(diǎn)值所表示的寬度指出所述的數(shù)據(jù)有多長。所述數(shù)據(jù)還被類型化以指出例如視頻或音頻等的哪一種類型的聲音由所述數(shù)字所表示??梢杂靡粋€子類別去支援多種類型。例如一個音頻子類別可以利用線性形式和壓縮形式等兩種形式提供數(shù)據(jù)。由于這種可能,所以媒體順序具有一個類型表。播放機(jī)圖39示出的一個基于時間的媒體播放機(jī)(player)基本類別的例子是一個能夠演奏時基媒體順序(稱之為媒體順序)的媒體部件。一個媒體順序是一個能夠被用于表示音頻,視頻,和動畫制作或MIDI數(shù)據(jù)的削減的抽象基本類別。所述時基媒體順序的子類別被用于執(zhí)行音頻,視頻,動畫制作,以及MIDI數(shù)據(jù)。一個播放機(jī)類似于一個磁帶記錄機(jī),而一個媒體順序類似于一個卡型盒式磁帶。一個播放機(jī)具有用于演奏所述媒體順序的play()成員功能,具有用于將其記錄到所述順序中的Record()成員功能以及用于停止播放或記錄的Stop()成員功能。它還具有一個用于在一個順序中尋找一個位置的Seek()成員功能以及一個允許所述播放機(jī)被同步到其它播放機(jī)或軟件時鐘上的成員功能。所述的播放機(jī)與數(shù)據(jù)分離后,該播放機(jī)可以被重復(fù)使用。在演奏了一個盒帶以后,一個播放機(jī)可以被構(gòu)成以演奏或記錄另外一個盒帶。
標(biāo)準(zhǔn)音頻部件音頻播放機(jī)圖40示出了一個用于使一個音頻部件播放和記錄音頻數(shù)據(jù)的音頻播放機(jī)。該音頻播放機(jī)具有一個相關(guān)的基本類別。所述的音頻數(shù)據(jù)被存貯于是媒體順序的子類別并稱為音頻順序的目標(biāo)中。音頻播放機(jī)類似于一個磁帶記錄機(jī),所述的音頻順序類似于一個卡型盒式磁帶。音頻播放機(jī)是播放機(jī)的子類別。同所有播放聲音,視頻,或MIDI的播放機(jī)一樣,一個音頻播放機(jī)具有play()成員功能,所以聲音可以被聽到。它還具有一個Record()成員功能,所以所述的順序可以被記錄(如果允許寫的話),同時還具有一個Stop()成員功能,用以停止記錄和演奏。它還具有Seek()成員功能,用以對聲音中的一個點(diǎn)進(jìn)行隨機(jī)存取。另外,它還具有允許所述的播放機(jī)被同步到其它媒體播放機(jī)或一個軟件時鐘上的成員功能。揚(yáng)聲器圖41示出了一個揚(yáng)聲器部件的例子。揚(yáng)聲器部件是一個與音頻輸出設(shè)備相關(guān)的抽象基本類別。一個系統(tǒng)可以具有一系列與其相連的聲音輸出設(shè)備。一個揚(yáng)聲器部件可以被子分類,以表示所述輸出設(shè)備的各種特性。例如,存在一個揚(yáng)聲器部件的子類別用于允許使用電話送受話器或電話線進(jìn)行播放。一個揚(yáng)聲器部件是一個邏輯輸出設(shè)備??梢杂泻芏鄵P(yáng)聲器部件的示例存在,所有這些部件都可被混合到一起并在計算機(jī)的實際揚(yáng)聲器上放出。一個立體聲輸出設(shè)備由所述揚(yáng)聲器部件的兩個子類別表示,其一用于左聲道,而另一個用于右聲道。話筒圖42示出了根據(jù)一個最佳實施例的話筒部件。一個話筒部件是一個表示諸如話筒或線路輸入的聲音輸入源的抽象基本類別。一個系統(tǒng)可以具有與其相連的一系列聲音輸入設(shè)備。話筒部件可以被子分類以表示這些設(shè)備。例如,所述話筒部件的子類別被用于從所述電話送受話器或電話線上進(jìn)行記錄。同所述揚(yáng)聲器部件一樣,所述的話筒部件是一個邏輯設(shè)備??梢杂泻芏嘣捦膊考氖纠嬖?,所有的這些示例都產(chǎn)生來自與相同實際話筒相同的聲音。一個話筒部件具有一個輸出。由于話筒部件是一個數(shù)據(jù)源,所以,必須通過調(diào)用Start()來明白無誤地啟動它。它可以通過調(diào)用Stop()加以停止。利用兩個話筒部件的子類別來表示立體聲輸入設(shè)備,其一是左聲道,其二是右聲道?;祛l器圖43示出了一個混頻器部件的例子?;祛l器部件是一種把兩個或多個音頻輸入總和成一個音頻輸出的抽象基本類別。輸入的數(shù)量是由對所述構(gòu)成設(shè)備的輸入所確定的。分離器圖44示出了一個分離器部件的例子。所述的分離器部件是一個抽象基本類別,它僅有一個輸入,并將該輸入分離成兩個或多個輸出。所述輸出的數(shù)量取決于什么傳送給了所述的構(gòu)成設(shè)備。增益圖45示出了一個增益部件的例子。增益部件是一個抽象基本類別,它能夠增加或衰減一個信號的幅值。它被用于音量控制并具有SetGain()和GetGain()功能。一個增益部件將每一個輸入聲音取樣數(shù)學(xué)地乘以增益值,并將其結(jié)果傳送給它的輸出端。增益值為1.0基本不能改變所述信號,而增益值為2.0則使其音量增大兩倍,增益值為0.5則使其信號的音量變成原來的一半。太高的信號電平則受到削減?;夭▓D46示出了根據(jù)一個最佳實施例的一個回波部件。一個回波部件是用于將一個回波加到其輸入端并在其輸出端上產(chǎn)生結(jié)果的抽象基本類別。一個回波部件具有三個可以選擇的參數(shù)延遲長度,反饋,和混合速率。較長的延遲長度使得所輸入的聲音很象它處于一個大峽谷之中,而短的延遲能夠產(chǎn)生類似于噴氣飛機(jī)猛沖的卷邊(flanging)效果;反饋確定所聽到的回波的數(shù)量;而混合速率確定有多少回波的信號被混合回來。抖顫(Fuzz)圖47示出了一個根據(jù)最佳實施例的抖顫部件。抖顫部件是一個把抖顫加入到一個聲音內(nèi)的抽象基本類別。這個效果在吉它或樂器聲音上最有用了。音頻類型轉(zhuǎn)換器圖48示出了一個音頻轉(zhuǎn)換器的例子。音頻類型轉(zhuǎn)換器是一個把一種音頻類型轉(zhuǎn)換成另一種音頻類型的抽象基本類別。音頻多路轉(zhuǎn)換器圖49示出了根據(jù)一個最佳實施例的一個音頻多路轉(zhuǎn)換器的例子。一個音頻多路轉(zhuǎn)換器部件把多種音頻類型根據(jù)一個特定選擇轉(zhuǎn)換成其它的多種音類型。聲音圖50示出了根據(jù)一個最佳實施例的一個聲音部件。聲音部件是用于方便地記錄和播放聲音的目標(biāo)部件。圖51示出了嵌入所述聲音部件中的多個部件。聲音部件5100包括有一個話筒部件5110,一個(用于控制輸入電平的)增益部件5120、一個音頻播放機(jī)部件5130、(用于控制輸出電平的)另一增益部件5140和揚(yáng)聲器部件5150。給出一個聲音文件名,聲音部件將自動地建立正確的音頻順序,且所需的音頻部件就能演奏和記錄所述文件。實際的揚(yáng)聲器圖52示出了根據(jù)一個最佳實施例的一個實際的揚(yáng)聲器部件。一個實際的揚(yáng)聲器被用于所述計算機(jī)的輸出放大器和揚(yáng)聲器的代用。它被用于控制整個計算機(jī)的音量。如果所述計算機(jī)還有另外的聲音輸出設(shè)備,那么將存在有實際揚(yáng)聲器的相應(yīng)子類別。實際揚(yáng)聲器部件具有SetVolume()和GetVolume()成員功能,用于建立和獲得整個音量級。實際話筒圖53示出了根據(jù)一個最佳實施例的一個實際話筒的例子。一個實際話筒部件表示與話筒或線路輸入相關(guān)的實際硬件??梢栽O(shè)置進(jìn)入計算機(jī)的整個輸入電平。
標(biāo)準(zhǔn)視頻部件圖形播放機(jī)圖54示出了根據(jù)最佳實施例的一個圖形播放機(jī)部件。一個圖形播放機(jī)部件是一個抽象基本類別,該類別涉及到能夠演奏和記錄隨時間而變化的圖形目標(biāo)的時間圖形目標(biāo)的部件。圖形順序是時間圖形的子類別。一個圖形順序是圖形目標(biāo)的順序序列。其中,每一個圖形目標(biāo)都具有一個時間寬度。一個圖形播放機(jī)類似于一個視頻磁帶記錄機(jī),而一個圖形順序類似于一個視頻卡式盒帶。圖形播放機(jī)是播放機(jī)的子類別。像所有的用于播放聲音,視頻或MIDI的播放機(jī)一樣,一個圖形播放機(jī)具有Play()成員功能,所以,能夠看到所述的圖形目標(biāo);圖形播放機(jī)還具有Record()成員功能,所以能夠記錄所述的順序(若果允許寫);它還具有Stop()成員功能,所以能夠停止記錄或播放;它還具有Seek()成員功能,可以對所述順序中的一個點(diǎn)進(jìn)行隨機(jī)存??;同時,它還具有允許所述播放機(jī)被同步到其它媒體播放機(jī)或一個軟件時鐘的成員功能。圖形觀察器圖55示出了根據(jù)一個最佳實施例的一個圖形觀察器部件的例子。圖形觀察器部件被用于在計算機(jī)顯示器上觀察圖形目標(biāo)。一個圖形播放機(jī)必須被連接到一個圖形觀察器上,以便觀看播放的圖形目標(biāo)。由于使用了對消費(fèi)者電子視頻的模擬,所以,一個圖形播放機(jī)就像一個視頻磁帶記錄機(jī),而圖形觀察器就像是一個視頻顯示監(jiān)示器。視頻數(shù)字轉(zhuǎn)換器圖56示出了根據(jù)一個最佳實施例的一個視頻數(shù)字轉(zhuǎn)換器的例子。視頻數(shù)字轉(zhuǎn)換器通過一個連接到所述計算機(jī)上的硬件視頻數(shù)字轉(zhuǎn)換器把模擬視頻轉(zhuǎn)換成圖形目標(biāo)。視頻數(shù)字轉(zhuǎn)換器可與圖形播放機(jī)連接以記錄進(jìn)入計算機(jī)的模擬視頻。由于模擬了消費(fèi)者的電子視頻,所以,所述的視頻數(shù)字轉(zhuǎn)換器類似于一個視頻攝影機(jī),而圖形播放機(jī)則類似于一個視頻磁帶記錄機(jī)。
標(biāo)準(zhǔn)的MIDI部件MIDI播放機(jī)圖57示出了根據(jù)一個最佳實施例的MIDI播放機(jī)部件。MIDI播放機(jī)部件是一種部件的抽象基本類別,所述部件能夠演奏和記錄MIDI順序。MIDI順序是MIDITrack的集合,一個MIDITrack是一個順序序列的MIDI信息包。MIDI播放機(jī)是播放機(jī)的子類別。像所有能夠播放聲音、視頻或MIDI的播放機(jī)一樣,一個MIDI播放機(jī)具有Play()成員功能。所以,MIDI信息包可以被傳送給一個外部音樂合成器;它具有Record()成員功能,所以能夠記錄來自外部鍵盤的MIDI信息(假設(shè)寫是被允許的);它還具有Stop()成員功能,用于停止記錄或播放;它還具有Seek()成員功能,用于對所述順序中的一個點(diǎn)進(jìn)行隨機(jī)存取。同時,它還具有允許所述播放機(jī)被同步到其它媒體播放機(jī)或一個軟件時鐘上的成員功能。MIDI接口圖58示出了根據(jù)一個最佳實施例的一個MIDI接口部件的例子。MIDI接口部件既能將MIDI信息包傳送給一個外部音樂合成器又能接收它們。一個MIDI播放機(jī)必須被連接到一個MIDI接口上,以便演奏或記錄MIDI數(shù)據(jù)。MIDI濾波器圖59示出了根據(jù)一個最佳實施例的一個MIDI濾波器部件的例子。MIDI濾波器部件是一個與具有一個MIDI輸入端口和一個MIDI輸出端口的目標(biāo)的抽象基本類別。子類別提供了一種將輸入數(shù)據(jù)轉(zhuǎn)換成輸出數(shù)據(jù)的變換算法。MIDI映象器圖60示出了根據(jù)一個最佳實施例的一個MIDI映象器部件的例子。所述MIDI映象器部件是使用一個字典將輸入MIDI信息包映象給輸出MIDI信息包的MIDI濾波器的一個子類別。所述字典內(nèi)的每個入口都是一對MIDI信息包,即一個輸入信息包(稱為鍵入)和一個輸出信息包(稱為值)。進(jìn)入所述MIDI映象器的輸入MIDI信息包被用作查尋所述字典的鍵入,查尋的結(jié)果就是要從輸出端口輸出的輸出MIDI信息包。MIDI程序映象器圖61示出了根據(jù)一個最佳實施例的一個MIDI程序映象。MIDI程序映象器部件是MIDI映象器的一個子類別。它把MIDI程序變化信息轉(zhuǎn)換成另外的MIDI程序變化信息。它能夠用于把任一樂器映象到任一其它樂器上。MIDI注釋映象器圖62示出了根據(jù)一個最佳實施例的一個MIDI注釋映象器部件。MIDI注釋映象部件是MIDI映象器的子類別,它轉(zhuǎn)換MIDI注釋通和MIDI注釋斷,從而使所述注釋可以被調(diào)換。MIDI通道映象器圖63示出了根據(jù)一個最佳實施例的一個MIDI通道映象器部件。MIDI通道映象器部件是MIDI的映象器的子類別。它轉(zhuǎn)換MIDI通道聲音和模式信息,并能用于通用目的的通道變化。
雖然本發(fā)明是根據(jù)最佳實施例而予敘述的,但本發(fā)明領(lǐng)域內(nèi)的一般技術(shù)人員可根據(jù)本發(fā)明的原理進(jìn)行不同的變型及改變。因此,本發(fā)明的范圍受權(quán)利要求的保護(hù)。
權(quán)利要求
1.一種用于多媒體表示的系統(tǒng),其特征在于包括a)一個處理器;b)一個與所述處理器相連并受其控制的存貯器;c)一個與所述處理器相連并受其控制的顯示器;d)一個與所述處理器相連并受其控制的多媒體設(shè)備;e)位于所述處理器的存貯器之中的部件目標(biāo),該部件目標(biāo)用于管理所述的多媒體設(shè)備,所述的部件目標(biāo)包括至少一個用于交換多媒體信息的端口;f)用于把所述的至少一個端口連接到多媒體設(shè)備以便于交換多媒體信息的裝置;以及g)由所述處理器控制在所述的多媒體設(shè)備以及所述的部件目標(biāo)端口之間確定信息路由的裝置。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),還包括用于連接多個多媒體設(shè)備并交換多媒體信息的裝置。
3.根據(jù)權(quán)利要求1所述的系統(tǒng),還包括對位于所述處理器的存貯器之中的多個部件目標(biāo)進(jìn)行排序,以致具有一個多媒體輸出的所述的多個部件目標(biāo)在請求該多媒體輸出之前被處理的裝置。
4.根據(jù)權(quán)利要求3所述的系統(tǒng),還包括在第二部件目標(biāo)被處理之前根據(jù)第二部件目標(biāo)的輸出處理一個第一部件目標(biāo)的裝置。
5.根據(jù)權(quán)利要求4所述的系統(tǒng),還包括把每個部件目標(biāo)處理組織成一個幀操作的裝置。
6.根據(jù)權(quán)利要求4所述的系統(tǒng),還包括使所述的第二部件目標(biāo)根據(jù)所述的第一部件目標(biāo)的輸出等待直到所述的第一部件目標(biāo)已經(jīng)完成了處理以開始第二部件目標(biāo)的處理的裝置。
7.根據(jù)權(quán)利要求3所述的系統(tǒng),還包括以一指定的順序遞歸地激勵多個部件目標(biāo)的裝置。
8.一種用于在連接有存貯器,多媒體設(shè)備,和顯示器的處理器上進(jìn)行多媒體表示的方法,其特征在于包括以下步驟a)在所述處理器的存貯器之中生成一個部件目標(biāo),該部件目標(biāo)包括至少一個用于交換多媒體信息的端口;b)用該部件目標(biāo)管理所述的多媒體設(shè)備;c)把所述的至少一個用于交換多媒體信息的端口連接到所述的多媒體設(shè)備以便于交換多媒體信息;以及d)在所述的多媒體設(shè)備以及所述的部件目標(biāo)端口之間確定信息路由。
9.根據(jù)權(quán)利要求8所述的方法,還包括連接多個多媒體設(shè)備以及它們的相關(guān)的部件目標(biāo)并交換多媒體信息的步驟。
10.根據(jù)權(quán)利要求8所述的方法,還包括對位于所述處理器的存貯器之中的多個部件目標(biāo)進(jìn)行排序,以致具有一個多媒體輸出的所述多個部件目標(biāo)在請求該多媒體輸出之前被處理的步驟。
11.根據(jù)權(quán)利要求10所述的方法,還包括在第二部件目標(biāo)被處理之前根據(jù)第二部件目標(biāo)的輸出處理一個第一部件目標(biāo)的步驟。
12.根據(jù)權(quán)利要求11所述的方法,還包括把每個部件目標(biāo)處理組織成一個幀操作的步驟。
13.根據(jù)權(quán)利要求11所述的方法,還包括使所述的第二部件目標(biāo)根據(jù)所述的第一部件目標(biāo)的輸出等待直到所述的第一部件目標(biāo)已經(jīng)完成了處理以開始第二部件目標(biāo)的處理的步驟。
14.根據(jù)權(quán)利要求10所述的方法,還包括以一指定的順序遞歸地激勵多個部件目標(biāo)的步驟。
全文摘要
一種用計算機(jī)在多媒體表示的過程中對不同的多媒體事件進(jìn)行路由選擇的技術(shù)。該計算機(jī)具有一個存儲器和一個顯示器。一個具有存儲器,顯示器,和多媒體設(shè)備的處理器在處理器的存儲器中建立一個用于管理該多媒體設(shè)備的部件目標(biāo),該部件目標(biāo)包括至少一個用于交換多媒體信息的端口。該處理器包括一個連接目標(biāo),用于把所述的至少一個端口連接到該多媒體設(shè)備以實現(xiàn)多媒體信息的交換。該處理器還對多媒體設(shè)備和部件目標(biāo)之間的信息進(jìn)行路由選擇。
文檔編號G06F9/46GK1130432SQ94193273
公開日1996年9月4日 申請日期1994年1月6日 優(yōu)先權(quán)日1993年9月13日
發(fā)明者史蒂文·H·米而恩, 詹姆斯·邁可爾·廷戴爾, 約翰·C·托別斯, 邁可爾·R·丟辭, 布萊德里·艾倫·愛德曼, 馬休茲·登曼 申請人:塔里根特公司