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