JPH09503070A - オブジェクト指向midiシステム - Google Patents

オブジェクト指向midiシステム

Info

Publication number
JPH09503070A
JPH09503070A JP7509148A JP50914895A JPH09503070A JP H09503070 A JPH09503070 A JP H09503070A JP 7509148 A JP7509148 A JP 7509148A JP 50914895 A JP50914895 A JP 50914895A JP H09503070 A JPH09503070 A JP H09503070A
Authority
JP
Japan
Prior art keywords
midi
multimedia
audio
port
objects
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP7509148A
Other languages
English (en)
Inventor
セカンド トブラス,ジョン,シー.,ザ
ミルネ,スティーヴン,エイチ.
Original Assignee
タリジェント インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by タリジェント インコーポレイテッド filed Critical タリジェント インコーポレイテッド
Publication of JPH09503070A publication Critical patent/JPH09503070A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/40Information retrieval; Database structures therefor; File system structures therefor of multimedia data, e.g. slideshows comprising image and additional audio data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • Y10S707/99945Object-oriented database structure processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Business, Economics & Management (AREA)
  • Data Mining & Analysis (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Human Resources & Organizations (AREA)
  • Strategic Management (AREA)
  • Software Systems (AREA)
  • Tourism & Hospitality (AREA)
  • General Business, Economics & Management (AREA)
  • Quality & Reliability (AREA)
  • Operations Research (AREA)
  • Multimedia (AREA)
  • Databases & Information Systems (AREA)
  • Marketing (AREA)
  • Economics (AREA)
  • Electrophonic Musical Instruments (AREA)
  • Processing Or Creating Images (AREA)

Abstract

(57)【要約】 オブジェクト指向MIDIシステムに関するもので、MIDIオブジェクトを種々のマルチメディア・オブジェクトに結合して、ストレージとディスプレイを備えたコンピュータを使用してマルチメディア・プレゼンテーションのオブジェクト指向シミュレーションを可能にするシステムが開示されている。複数のマルチメディア・オブジェクトは、ストレージに置かれた少なくとも1つの結合オブジェクトと少なくとも1つのMIDIオブジェクトを含めてディスプレイ上で作成される。マルチメディア・オブジェクトは、少なくとも1つのMIDIオブジェクトを含めてディスプレイから表示される。マルチメディア・オブジェクトとMIDIオブジェクトは結合され、情報はそのコネクション(結合)を経由してマルチメディア・オブジェクトとMIDIオブジェクト間で転送され、マルチメディア・プレゼンテーションが作成される。

Description

【発明の詳細な説明】 オブジェクト指向MIDIシステム 著作権所有表記 本明細書の一部には、著作権保護の対象となる内容が含まれている。著作権所 有者は、米国特許商標庁の特許ファイルまたは記録に記載されている特許ドキュ メントまたは特許開示事項を第三者が複製することを妨げるものではないが、そ の他の場合には、著作権に係る一切の権利を留保する。 発明の分野 本発明は、一般的には、コンピュータ・システムにおける改良に関し、より具 体的には、ミディ(MIDI)情報をマルチメディア・コンポーネント(構成要素)間 でルーチング(経路指定)するシステムに関する。 発明の背景 マルチメディアは、コンピュータ・システムのアプリケーションの中でおそら く最も急成長しているアプリケーションであろう。グラフィック(図形)、サウ ンド(音声)およびイメージング(画像)情報をエンドユーザに提供するために ユーザによるコンピュータの使用がますます増加している。マルチメディア・プ レゼンテーション(multimedia presentation)を管理するためのエルゴノミック (人間工学的)インタフェースに対するユーザの要求が高まっている。従来は、 マルチメディア・プレゼンテーションを実現するためにタイム・マトリックス(t ime matrix)とプログラミング言語が使用されていた。しかし、ミュージックや サウンドのプレゼンテーションが情報の表示と一緒にマルチメディア・プレゼン テーションとして展開されるように、柔軟性のあるミキシング・ボード (mixing board)シミュレーションすることは可能ではなかった。 本発明の機能を備えていない現存マルチメディア・システムの例として、アッ プル社のQuicktimeとマイクロソフト社のVideo for Windowsがある。これらはNE WMEDIAの3月号の"It's Showtime"、pp.36-42(1993)に記載されている。従来技 術に当面しているルーチング問題の解決手法を得ることの重要性は、IEEE Spect rumの3月号、“Interactive Multimedia”(「インタラクティブ・マルチメデ ィア」)、pp.22-31(1993)および“Technology Framework”(「テクノロジ・ フレームワーク」)、IEEE Spectrum、pp.32-39(1993)に論じられている。これ らの論文はマルチメディア・プロダクションを制御するためのエステティック・ インタフェース(aesthetic interface)の重要性を指摘している。 発明の概要 以上に鑑みて、本発明の主目的は、マルチメディア・プレゼンテーションが進 行している過程で、ストレージ(記憶装置)とディスプレイ(表示装置)を備え たコンピュータを使用してオーディオ・マルチメディア・データを結合し、ルー チング(routing−経路指定)し、フィルタリングするシステムと方法を提供す ることである。システム内のプロセッサは接続されたストレージと接続されたデ ィスプレイをもち、これらはプロセッサの制御下に置かれている。複数のマルチ メディア・オブジェクトはストレージ内に作成され、ディスプレイから表示され る。結合オブジェクトもストレージ内に作成され、ディスプレイから表示される が、これはマルチメディア・オブジェクトをオーディオ・オブジェクトに結合す る際に使用される。 図面の簡単な説明 図1は、好適実施例によるパーソナル・コンピュータ・システムを示すブロッ ク図である。 図2は、テープ・デッキ、ミキサ、残響ユニット、ペアのマイクロホン、およ びペアのスピーカを利用している、従来の単純なホームスタジオ・セットアップ (配置)を示す図である。 図3は、好適実施例によるメディア・コンポーネントを示す図である。 図4は、好適実施例によるオーディオ・プレーヤ・コンポーネントを示す図で ある。 図5は、好適実施例によるファンイン・ポートとファンアウト・ポートを示す 図である。 図6は、好適実施例によるゼロ個または1個以上のオーディオ入力ポートとゼ ロ個または1個以上のオーディオ出力ポートをもつオーディオ・コンポーネント を示す図である。 図7は、オーディオ・プレーヤの使用によって音声注釈(voice annotaions)を レコーディング(録音)しプレイ(再生)するように働く、好適実施例による音 声注釈アプリケーションを示す図である。 図8は、好適実施例による音声メール/電話応答アプリケーションを示す図で ある。 図9は、好適実施例においてマスタ・クロックと外部から同期がとられるマル チメディア・プレーヤを示す図である。 図10は、好適実施例において1つにミキシングされて、スピーカなどの出力デ バイスから出力される3つのサウンド(ミュージック用、サウンド効果用、ナレ ータ音声用)を示す図である。 図11は、好適実施例に従ってサポートされるオーディオ・タイプの一部を示す 図である。 図12は、好適実施例に従ってあるオーディオ・タイプから別のオーディオ・タ イプへ変換する変換プロセスを示す図である。 図13は、好適実施例によるリモート・プロシージャ・コール(remote procedur e call)を示す図である。 図14は、好適実施例に従ってデータをその入力バッファから読み取り、そのデ ータを処理し、処理結果をその出力バッファに書き出す、関連のRun()メンバ 関数をもつオーディオ・プロセッサ・アーキテクチャを示す図である。 図15は、好適実施例によるオーディオ・プロセッサを示す図である。 図16は、好適実施例に従って図15に示すネットワークで処理がどのように行わ れるかを示す図である。 図17は、好適実施例によるオーディオ・ポートを示す図である。 図18は、好適実施例によるプレーヤなどのオーディオ・プロセッサを示す図で ある。 図19は、好適実施例に従ってオーディオ・プロセッサをアクチベートするとき に関連するリカーシブ・ロジックを示すフローチャートである。 図20は、好適実施例に従ってオーディオ・プロセッサを非アクチベートすると きに関連する詳細ロジックを示すフローチャートである。 図21は、好適実施例に従ってオーディオ・プロセッサを実行するときに関連す るロジックを示すフローチャートである。 図22は、好適実施例に従ってビデオ・ディジタイザ・コンポーネントをビュワ ー・コンポーネントにパッチングしてコンピュータ・スクリーン上に表示する例 を示す図である。 図23は、好適実施例に従って2つのビデオ・オブジェクトからのイメージを効 果プロセッサでミキシングして、その結果をコンピュータ・スクリーンから表示 する例を示す図である。 図24は、好適実施例に従ってグラフィック・ポートがどのように使用されるか を示す図である。 図25は、好適実施例による出力ポートのWriteメンバ関数に関連するロジック を示すフローチャートである。 図26は、好適実施例による入力ポートのRead処理を示す図である。 図27は、好適実施例による入力ポートのnextメンバ処理を示す図である。 図28は、好適実施例に従ってMIDIプレーヤ2800とMIDIインタフェース2810の2 コンポーネントがどのように使用されて、コンピュータに結合されたミュージッ ク・シンセサイザをプレイするかを示す図である。 図29は、好適実施例に従ってMIDIデータが外部のミュージック・シンセサイザ からどのようにレコーディング(録音)されプレイバック(再生)されるかを示 す図である。 図30は、好適実施例に従ってMIDIデータがどのようにプレイバック(再生)さ れるかを示す図である。 図31は、好適実施例によるMIDIポートとオーディオ・ポートの両方を含んでい るメディア・コンポーネントを示す図である。 図32は、好適実施例に従って共通(common)メッセージ、リアルタイム(realtim e)メッセージおよび排他(exclusive)メッセージに区分されたシステム・メッセ ージの詳細を示す図である。 図33は、好適実施例によるMIDIメッセージのフォーマットの一部を示す図であ る。 図34は、好適実施例によるMIDIメッセージのタイプと構造、ステータス(状態 )バイトおよびタイムスタンプをカプセル化しているMIDIパケット・オブジェク トを示す図である。 図35は、好適実施例によるファンニング(fanning)オペレーションの例を示す 図である。 図36は、好適実施例によるMIDI出力ポートのWrite()メンバ関数を示す図であ る。 図37は、好適実施例によるMIDI入力ポートのRead()メンバ関数を示す図である 。 図38は、好適実施例による単一入力ポートと2出力ポートをもつメディア・コ ンポーネントを示す図である。 図39は、好適実施例に従って時間基準(time-based)メディア・シーケンスをプ レイ(再生)できるメディア・コンポーネントの例を示す図である。 図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マッパ(mapper)コンポーネントを示す図である 。 図61は、好適実施例によるMIDIプログラム・マッパ(program mapper)コンポー ネントを示す図である。 図62は、好適実施例によるMIDI音符マッパ(note mapper)コンポーネントを示 す図である。 図63は、好適実施例によるMIDIチャネル・マッパ(channel mapper)コンポーネ ントを示す図である。 発明の詳細な説明 本発明は、好ましくは、IBM(登録商標)社PS/2(登録商標)またはアップル (登録商標)社マッキントッシュ(登録商標)コンピュータなどのパーソナル・ コンピュータ上に置かれているオペレーティング・システムの環境(コンテキス ト)で実施される。代表的なハードウェア環境は図1に示されているが、同図は 従来のマイクロプロセッサのような中央演算処理ユニット10、およびシステム・ バス12を介して相互に接続された複数の他のユニットを装備した、本発明による ワークステーションの代表的ハードウェア構成を示している。図1に示すワーク ステーションは、ランダム・アクセス・メモリ(RAM)14、リードオンリ・メモリ( ROM)16、ディスク・ユニット20などの周辺デバイスをバスに接続するための入出 力アダプタ18、キーボード24、マウス26、スピーカ28、マイクロホン32および/ またはタッチ・スクリーン・デバイス(図示せず)などのユーザ・インタフェー ス・デバイスをバスに接続するためのユーザ・インタフェース・アダプタ22、ワ ークステーションをデータ処理ネットワーク23に接続するための通信アダプタ34 、およびバスをディスプレイ・デバイス38に接続するための表示アダプタ36を装 備している。ワークステーションには、アップル社System/7(登録商標)オペレ ーティング・システムなどのオペレーティング・システムが置かれている。 好適実施例では、本発明は、オブジェクト指向プログラミング技法を使用して C++ プログラミング言語で実現されている。この分野に精通しているものならば 容易に理解されるように、オブジェクト指向プログラミング(Object-Oriented P rogramming-OOP)のオブジェクトは、データ構造とデータに対するオペレーショ ン(操作、演算など)からなるソフトウェア・エンティティ(software entity )である。これらのエレメントが協力し合うことにより、オブジェクト は、そのデータ・エレメントで表されたその特性、およびそのデータ操作関数(d ata manupulation functions)で表されたその作用(behavior)からとらえて、ほ とんどどのような実世界のエンティティでも仮想的(virtually)にモデル化する ことができる。この方法によると、オブジェクトは人やコンピュータなどの具体 物をモデル化することができ、また、数や幾何学的概念などの抽象概念をモデル 化することができる。オブジェクト・テクノロジの利点は次の3つの基本的原理 から得られるものである。それはカプセル化(encapsulation)、多態(polymorphi sm)および継承(inheritance)である。 オブジェクトは、そのデータの内部構造と、その関数が実行されるときのアル ゴリズムとを隠して外から見えないようにする。つまりカプセル化する。これら のインプリメンテーション細部を見せる代わりに、オブジェクトは、外部情報(e xtraneous information)のないクリーンな形でその抽象化(abstractions)を表し ているインタフェースを提示する。多態はカプセル化をさらに一歩進めたもので ある。この考え方は、多数の形態をもつ、1つのインタフェースである。あるソ フトウェア・コンポーネントは、別のコンポーネントがなんであるかを正確に知 らなくても、その別のコンポーネントを要求することができる。要求を受け取っ たコンポーネントはその要求を解釈し、その要求をどのように実行すべきかを、 その変数とデータに従って判断する。三番目の原理である継承によれば、開発者 は既存の設計やコードを再利用することができる。この機能を利用すると、開発 者はソフトウェアを初めから作ることが回避される。むしろ、継承を通して、開 発者は作用を継承するサブクラスを派生し、その作用を開発者独自の要求に合っ たものにカストマイズすることができる。 従来のアプローチでは、オブジェクトとクラス・ライブラリを手続き型環境で 階層化する方法がとられていた。市販されている多くのアプリケーション・フレ ームワークはこの設計手法を採用している。この設計では、モノリシック・オペ レーティング・システム(monolithic operating system)の上に1つまたは2つ 以上のオブジェクト層が置かれている。このアプローチでは、カプセル化、多態 および継承のすべての原理がオブジェクト層に採用され、手続き型プログラミン グ技法を大幅に改善しているが、このアプローチにはいくつかの制約がある。 これらの問題は、開発者が自身のオブジェクトを再利用することは容易であるが 、他のシステムからのオブジェクトを使用することが困難であるため、手続き型 オペレーティング・システム(OS)のコールを使用して下位の非オブジェクト層ま で到達する必要があることに起因している。 オブジェクト指向プログラミングがもつもう1つの側面は、アプリケーション を開発するのにフレームワーク・アプローチを採用していることである。フレー ムワークの最も合理的な定義の1つとして、イリノイ大学のRalph E.JohnsonとP urdueのVincent F.Russoによるものがある。両氏の1991年の論文“Reusing Obje ct-Oriented Designs”(「オブジェクト指向設計の再利用」、University of I llinois techreport UIUCDCS91-1696)の中で、次のような定義を提案している 。「抽象クラスとは、一組の責任分担を協力し合って実行するオブジェクトの集 合を設計したものである。従って、フレームワークとは、組で定義された計算責 任分担を協力し合って実行するオブジェクト・クラスが集まったものである。」 プログラミング側から見たときは、フレームワークとは、基本的には、実働アプ リケーション(working application)の事前に作られた構造を提供する、相互に 接続されたオブジェクト・クラスの集まりである。例えば、ユーザ・インタフェ ース・フレームワークは、ウィンドウ(drawing window)、スクロールバー、メニ ューなどの描画をサポートし、これらの「デフォルト(省略時)」の作用を提供 することができる。フレームワークはオブジェクト・テクノロジを基礎において いるので、この作用を継承してオーバライド(override)することにより、開発者 はフレームワークを拡張し、カストマイズした解決手法を特定の専門分野で作る ことができる。これが従来のプログラミングに比べて大きな利点であるのは、プ ログラマはオリジナル・コードを変更することなく、むしろソフトウェアを拡張 できるからである。さらに、フレームワークは、アーキテクチャに関するガイダ ンスとモデリングを提供すると同時に、問題領域に特有の個々のアクションを指 定することから開発者を解放するので、開発者はいくつかのコード層を通って盲 目的に作業する必要がない。 ビジネス側から見たときは、フレームワークは、特定の知識分野において専門 知識をカプセル化または具現化する方法と見ることができる。企業の開発集団、 独立ソフトウェア・ベンダ(Independent Software Vendors - ISV)およびシステ ム・インテグレータ(systems integrators)は、前述した例のように、製造、会 計、通貨取引きといった特定分野における専門知識をもっている。この専門知識 はコードで具現化されている。フレームワークを使用すると、企業は、その専門 知識を企業のコードで具現化することにより、専門知識の共通特性を取り込んで 、パッケージ化することができる。まず、そのようにすると、開発者は専門知識 を利用するアプリケーションを作成または拡張できるので、問題がいったん解決 されれば、ビジネス・ルールや設計は統一的に実施され、使用されることになる 。また、フレームワークと、フレームワークの背景にある具現化された専門知識 は、製造、会計、バイオテクノロジといった垂直的マーケットにおいて専門知識 を得た企業にとっては、戦略的資産をもつことを意味し、企業の専門知識をパッ ケージ化し、再販し、流布し、テクノロジの進歩と普及化を促進するための分配 メカニズムをもつことになる。 歴史的には、フレームワークがパーソナル・コンピューティング・プラットフ ォーム上の主流概念として出現したのは、つい最近のことである。この移行を助 長したのが、C++ といったオブジェクト指向言語の出現である。従来において、 C++ は、コマーシャル・ベースのコンピュータよりむしろ、大部分がUNIXシステ ムと研究者のワークステーション上に搭載されていた。いくつかの大学や研究所 のプロジェクトが今日の商用フレームワークおよびクラス・ライブラリの先駆け となり得たのは、C++ などの言語やSmalltalkなどの他のオブジェクト指向言語 のお陰である。その例のいくつかを挙げると、スタンフォード大学のInterViews 、カーネギ・メロン大学のAndrewツールキット、チューリッヒ大学のET++フレー ムワークがある。 フレームワークは、どのレベルのシステムに関心があり、どのような問題を解 決しようとしているかに応じて、多種類のものがある。フレームワークの種類は ユーザ・インタフェースの開発を支援するアプリケーション・フレームワークか ら、通信、印刷、ファイル・システム・サポート、グラフィックスなどの基本的 システム・ソフトウェア・サービスを提供する低レベルのフレームワークまでに わたっている。商用化されているアプリケーション・フレームワークの 例をいくつか挙げると、MacApp(App1e)、Bedrock(Symantec)、OWL(Borland)、Ne XtStep App Kit(NeXT)、Smalltak-80 MVC(ParcPlace)がある。 フレームワークでプログラミングを行うには、他の種類のシステムに慣れてい る開発者は、新しい考え方が必要がある。確かに、このプログラミングは、従来 考えられていたプログラミングとはまったく異なっている。DOSやUNIXなどの旧 スタイルのオペレーティング・システムでは、開発者自身のプログラムが構造全 体になっている。オペレーティング・システムはシステム・コール(system call )を通してサービスを提供している。つまり、開発者のプログラムはサービスの 必要時にコールを行い、サービスが提供されたとき制御が返却される。プログラ ム構造は制御の流れに基礎を置き、これは開発者が書いたコードに具現化されて いる。 フレームワークが使用されるときは、これとは反対である。開発者は制御の流 れに責任をもつ必要がなくなる。開発者は、プログラミング・タスクを実行の流 れからとらえて理解しようとする癖を止めなければならない。むしろ、オブジェ クトの責任分担からとらえて思考する必要があるので、タスクをいつ実行させる かを判断するには、フレームワークに頼らざるを得なくなる。開発者が書いたル ーチンは、開発者が書かなかった、従って開発者には見えないコードによってア クチベート(activate−活性化)される。この制御の流れのフリップフロップは 、手続き型プログラミングだけに経験のある開発者にとっては、大きな心理的障 壁となっている。しかし、このことをいったん理解してしまえば、フレームワー ク・プログラミングによると、他のタイプのプログラミングによる場合よりも作 業量が大幅に減少することになる。 アプリケーション・フレームワークが開発者にプレハブの機能を提供するのと 同じように、本発明の好適実施例に含まれているようなシステム・フレームワー クはシステム・レベルのサービスを提供することによって同じ考え方をてこにし ている。つまり、システム・プログラマといった開発者は、システム・レベルの サービスをサブクラス化またはオーバライドして、カストマイズした解決手法を 作成することができる。例えば、オーディオ、ビデオ、MIDI、アニメーションな どの新規なデバイスや異種デバイスをサポートする基礎を提供できるマルチメ ディア・フレームワークについて考えてみることにする。新しい種類のデバイス をサポートする必要がある場合、開発者はデバイス・ドライバを書く必要が起こ ることになる。フレームワークでこれを行う場合は、開発者に要求されることは 、その新デバイスに特有の特性と作用を指定するだけである。 この場合の開発者は、マルチメディア・フレームワークから呼び出されるある 種のメンバ関数(member functions)のインプリメンテーションを用意することに なる。開発者にとって即時に利点となることは、デバイスのカテゴリ別に必要に なる汎用コード(generic code)がマルチメディア・フレームワークにすでに用意 されていることである。このことは、デバイス・ドライバ開発者が書き、テスト し、デバッグするコードが少なくなることを意味する。システム・フレームワー クを使用するもう1つの例は、入出力フレームワークがSCSIデバイス、NuBusカ ード、およびグラフィックス・デバイス別になっていることである。機能は継承 されるので、各フレームワークには、そのデバイス・カテゴリに見られる共通機 能に対するサポートが用意されている。この場合、他の開発者は、これらの統一 インタフェース(consistent interfaces)を通して、あらゆる種類のデバイスに アクセスすることが可能になる。 好適実施例ではフレームワークという考え方が取り入れられ、この考え方をシ ステム全体に適用している。業者または企業の開発者、システム・インテグレー タ、またはOEMにとっては、このことは、MacAppのようなフレームワークの場合 に説明されているすべての利点が、テキストやユーザ・インタフェースといった ものではアプリケーション・レベルで生かせるだけでなく、グラフィックやマル チメディア、フィアル・システム、入出力、テストなどのサービスではシステム ・レベルでも生かせることを意味する。 好適実施例のアーキテクチャでのアプリケーション作成は、基本的には、フレ ームワーク・プロトコルに準拠するドメイン(問題領域)別の断片を書くのと似 ている。このように、プログラミングという概念全体が変わっている。複数のAP I階層をコール(呼び出すこと)するコードを一行ずつ書くのではなく、ソフト ウェアはこの環境内の既存のフレームワークからクラスを導出し、そのあとで、 必要に応じて新しい作用(behavior)を追加したりおよび/または継承した作 用をオーバライド(override)したりすることによって開発される。 以上のように、開発者のアプリケーションは、書かれたあと、他のすべてのフ レームワーク・アプリケーションによって共有されるコードの集合となる。これ が強力な概念となっているのは、開発者は各人の作業に積み上げるように構築し ていくことができるからである。また、開発者は、必要に応じて多かれ少なかれ カストマイズする柔軟性も得られる。フレームワークには、そのままで使用され るものがある。ある場合には、カストマイズ量は最小限になるので、開発者がプ ラグインする断片は小さくなる。他の場合には、開発者は大幅に修正を行って、 まったく新しいものを作成することも可能である。 好適実施例では、図1に示すように、マルチメディア・データ・ルーチング・ システムがコンピュータ・システムを通るマルチメディア情報の移動を管理し、 他方では、RAM 14に常駐していてCPU 10の制御下に置かれている、あるいはバス 12または通信アダプタ34を通して外部接続されている複数のメディア・コンポー ネントがマルチメディア情報を提示すること(プレゼンテーション)を受け持っ ている。システムの処理全体を調整または管理するための中央プレーヤ(central player)は不要になっている。このアーキテクチャは柔軟性があり、新しいメデ ィア・タイプが追加されたときの拡張性を向上している。システムは様々なメデ ィア・オブジェクトを利用しており、その一部は結合オブジェクト(connecting object)として使用できるようになっている。結合オブジェクトとしては、ゲイ ン、フィルタ、増幅器、ミキサ、プレーヤ、その他のマルチメディア・コンポー ネントがあり、これらはオブジェクト指向オペレーティング・システムにおける オブジェクトとして個別的に実現されている。オブジェクトは、上述したように 、コードまたはメソッド・コンポーネントとデータ・コンポーネントとを含んで いる。システムには、ドラッグ/ドロップ、ダブルクリック、ドロップ・ラーン チ(drop-launching)、カーソル位置付けなどやその他の代表的なアイコン操作を 容易にするマウスが含まれている。 ビデオおよびオーディオ・プロダクション・スタジオでは、サウンド、MIDI、 ビデオなどのメディアは物理的パッチ・コード(patch cord)を利用してソース( 送信側)、効果プロセッサ(effects processor)、およびシンク(受信側)の 間で信号を転送している。信号処理アルゴリズムも、ソース、シンク、およびプ ロセッサのネットワークとして表されることがよくある。これらのモデルはどち らも、結合されているオブジェクトの有向グラフ(directed graphs)として表現 することができる。好適実施例によれば、このモデル(複数のオブジェクトを1 つに結合する)をコンピュータ・システム上に実現することが可能である。図2 はテープ・デッキ、ミキサ、残響ユニット(reverberation unit)、ペアのマイク ロホン、およびペアのスピーカを利用している従来の単純なホームスタジオ・セ ットアップ(配置)を示している。マイクロホンはテープ・デッキに接続されて いるので、サウンド入力はマイクロホンからテープ・デッキへ転送され、そこで サウンドをレコーディング(録音)することができる。テープ・デッキをプレイ バック(再生)するときは、テープ・デッキがミキサに接続されているのでその 信号はミキサへ送られる。同様に、残響ユニットとスピーカはミキサに接続され た増幅器に接続されている。 好適実施例では、オブジェクト指向テクノロジを利用して結合モデル(connect ion model)を表現している。マルチメディア・オブジェクトを相互に結合するこ とにより、有向データ・フロー・グラフ(directed data flow graphs)を作成す ることができる。さらに、マルチメディア・オブジェクトの標準セットがシステ ムに対し定義されている。これらのオブジェクトを共に結合することにより、オ ブジェクトからオブジェクトへのマルチメディア・データ・フローが容易化され る。これらの結合オペレーションは、線(line)や線分(line segment)、その他の 適当な幾何学形状などの幾何学図形を通してマルチメディア・オブジェクトを結 合することにより容易化されている。以下に説明する図形は種々のマルチメディ ア・オブジェクトの例を示しているが、この中には、結合オブジェクトと、マル チメディア・オブジェクトを結合する内部データ構造とロジックを表すために使 用される幾何学図形とが含まれている。 ルーチングのためのクラス 時間基準(time-based)メディア・コンポーネント(以下、メディア・コンポー ネントと呼ぶ)基底クラス(base class)は、ルーチングのとき使用される中心の 抽象クラス(abstraction)である。メディア・コンポーネントはゼロ個または1 個以上の入力ポートおよびゼロ個または1個以上の出力ポートをもっている。図 3に示す例では、メディア・コンポーネントは1つの入力ポート300と2つの出 力ポート310,320をもっている。ポート300,310および320は塗りつぶした三角形 で表されている。 メディア・コンポーネントのサブクラスはそれぞれのポートを結合することに より1つに結合される。この処理はレコーディング・スタジオにおいて、パッチ ・コードを使用してオーディオ・コンポーネントとビデオ・コンポーネントを1 つに結合するのと似ている。図4において、メディア・コンポーネントのサブク ラスであるオーディオ・プレーヤ・コンポーネント・オブジェクトは別のメディ ア・コンポーネント・サブクラスであるスピーカ・コンポーネント・オブジェク トに結合されている。オーディオ・プレーヤは1つの出力ポートをもち、スピー カは1つの入力ポートをもっている。メディア・コンポーネントはメンバ関数コ ール(member function call)を使用して制御される。例えば、図4に示すオーデ ィオ・プレーヤはオーディオ・データをプレイ(再生)するためのメンバ関数を もっている。オーディオ・プレーヤのメンバ関数Play()がコールされると、オー ディオ・データはオーディオ・プレーヤからスピーカへ送られ、そこでオーディ オ(音声)がコンピュータのスピーカから聞こえるようにされる。スピーカ・コ ンポーネントがPlay()関数をもっていないのは、そこに送られてきたどのオーデ ィオ・データでもプレイするからである。メディア・コンポーネントは全体をソ フトウェアで実現することができる。しかし、あるメディア・コンポーネントが 物理的ハードウェア部分を表すことも可能である。例えば、スピーカ・オブジェ クトはコンピュータのプレイバック(再生)・ハードウェアを表すために使用で きる。このようにすると、ビデオ・テープ・レコーダ、ミキサ、効果プロセッサ などの外部メディア・デバイスをメディア・コンポーネントとして表して、1つ に結合することができる。 メディア・コンポーネントの結合 メディア・コンポーネントはそれぞれのポートを結合することによって1つに 結合される。複数のクライアント・オブジェクトとコンポーネントがデータを同 じポートに同時に書いてデータ保全性(data integrity)を破壊するのを防止する ために、クライアントはポートを直接にアクセスすることが禁止されている。そ の代わりに、クライアントはマルチスレッド・セーフ(multithread-safe)のサロ ゲート・オブジェクト(surrogate object)について結合オペレーションを実行す る。以下の説明の文脈において、「サロゲート(surrogate) - 代用」という用語 は基礎となるクラスの特殊表現であり、複数のクライアントがそのクラスのイン スタンスを安全に共有できるようにすることを意味する。メディア・コンポーネ ントの場合には、サロゲート・ポートによると、実際のポートの制限された間接 的操作が可能である。すべてのメディア・コンポーネントは、その入力ポートと 出力ポートの各々ごとにサロゲートを作成するメンバ関数をもっている。これら のサロゲート・ポートは非常に軽量なオブジェクトであり、アドレス境界をトラ バース(traverse - 通り抜けること)に適しているので、異なるアドレス空間に 置かれているメディア・コンポーネントの結合が容易化されている。 各ポートとポート・サロゲートはそれぞれに関連づけられたデータ・タイプ(d ata type - データ型)をもっている。データ・タイプの例としては、MIDIデータ 、44 kHz 16 ビット・オーディオ・データ、22 kHz 8ビット・オーディオ・デー タ、およびビデオのグラフィック・データがある。2つのポートを結合すること が要求されると、タイプ・ネゴシエーション・プロトコル(typenegotiation pro tocol)は、これらのポートにコンパチブル(互換性をもつ)データ・タイプをサ ポートする能力があるかどうかを確かる。これらのポートが共通のタイプをもっ ていなければ、例外が引き起こされる。 非互換性ポート・タイプをもつオブジェクト間にはコンバータ・オブジェクト を挿入することが可能である。コンバータは、あるタイプのデータを受け入れて 異なるタイプのデータを出力するコンポーネントである。ファンイン・ポートと ファンアウト・ポートの例を示したのが図5である。特定のサブクラスは、ファ ンインおよび/またはファンアウトを許可しないことを選択することができる。 例えば、オーディオ・ポートは両方を許可しないので、1つのポートを2つ以上 の他のポートに結合しようとすると例外が引き起こされる。ファンインとファン アウトのプロパティ(特性)は特定のメディア・サブクラスによって処理される 。例えば、MIDIでは、ファンアウトは同じデータを複数の受信側へ送信し、ファ ンインは複数の送信側からのデータをマージする。 2つのメディア・コンポーネントAとBは、次の方法によって1つに結合され る。 1) Aのメンバ関数をコールして出力ポートのサロゲートPaを要求する。 2) Bのメンバ関数をコールしてBのメンバ関数に入力ポートのサロゲートPb を要求するように求める。 3) Paのメンバ関数ConnectToをコールし、Pbを引数として渡す。 ポートは、Paのメンバ関数DisconnectFromをコールし、Pbを引数として渡すこ とにより切り離すことができる。上記のプロシージャは、ポート・タイプがオー ディオであるか、グラフィックであるか、MIDIであるか、他のマルチメディア・ データ・タイプであるかに関係なく、いずれかのメディア・コンポーネントを結 合または切り離すとき呼び出される。2つのポートが結合されるときコンパイル 時検査(compile-time checking)は行われない。例えば、ソフトウェア開発者が オーディオ・ポートをMIDIポートに結合することを試みるコードを書き、コンパ イルし、リンクするとき、それを妨げるものは何もない。その代わりに、実行時 (run time)に例外が引き起こされる。この作用(behavior)はメディア・ポートの 多態的(polymorphic)結合を可能にするために、ルーチン・システムに組み込ま れるように明示的に設計されている。例えば、パッチング・モジュール(patchin g module)は、異種のポート・タイプに特別な扱いをしなくても、特定の結合時 にペアのメディア・ポートを1つに結合することを可能にする。オーディオ、ビ デオおよびMIDIポートはすべて、パッチャ(patcher)によってまったく同じ扱い を受けることになる。オブジェクトの結合は、ディスプレイ上のアイコンのよう な、マルチメディア・オブジェクトを表す記号(indicia)間を線分で引くことに より視覚的に表現することができる。 オーディオ・データのルーチング オーディオはコンピュータ上でディジタル化し、ストアし、処理し、プレイバ ック(再生)することができる。また、コンピュータはオーディオをシンセサイ ズしてプレイバックするためにも使用できる。アナログ−ディジタル・コンバー タ(Analog to Digital Converter - ADC)はアナログ・オーディオ電気信号を、 ディジタル・オーディオ・サンプル(digital audio sample)と呼ばれる数字の列 に変換するために使用される。オーディオは、電話品質のオーディオでは毎秒80 00サンプルのレートで、コンパクトディスク(CD)品質のオーディオでは毎秒44,1 00サンプルのレートで、ディジタル・オーディオ・テープ(Digital Audio Tape - DAT)では毎秒48,000サンプルのレートでサンプリングされるのが代表的 である。数字の形態に変換されたオーディオはストアして、コンピュータによっ て処理することができる。ディジタル・オーディオ・サンプルはディジタル−ア ナログ・コンバータ(Digital to Analog Converter - DAC)を使用してアナログ ・オーディオ電気信号に逆変換される。好適実施例では、オーディオ・ポートと 名づけたポート・オブジェクトのサブクラスが定義されている。これらは、ディ ジタル・オーディオ・データをメディア・コンポーネント間で転送(ルーチング )するために使用される。オーディオ出力ポートをオーディオ入力ポートに結合 すると、オーディオ・データを転送することができる。あるメディア・コンポー ネントが少なくとも1つのオーディオ・ポートをもっていれば、それはオーディ オ・コンポーネントと呼ばれる。すべてのオーディオ・コンポーントはメディア ・コンポーネント基底クラスのサブクラスである。オーディオ・コンポーネント は図6に示すように、ゼロ個または1個以上のオーディオ入力ポートとゼロ個ま たは1個以上のオーディオ出力ポートをもっている。オーディオ・コンポーネン トはそのポートを結合することにより、共に結合することができる。これは、ハ ードウェアを利用してステレオ・コンポーネントを1つに結合するためにパッチ ・コード(patch cord)を使用するのと似ている。 好適実施例によれば、オーディオ・コンポーネントの結合が容易化されている ので、様々な興味深いアプリケーションを作ることができる。図7,図8,図9 および図10はオーディオ・コンポーネントを使用して作ることができるアプリケ ーション例のいくつかを示したものである。図7はオーディオ・プレーヤを使用 すると、音声注釈(voice annotation)をレコーディング(録音)して、プレイ( 再生)するための音声注釈アプリケーションをどのように書くことができるかを 示している。電話ハンドセット(送受話器)は入出力のために使用されている。 図8は音声メール/電話応答アプリケーションをどのように作ることができるか を示している。一方のオーディオ・プレーヤはあいさつをプレイして電話回線上 に送出し、その間に他方のオーディオ・プレーヤは到来メッセージをレコーディ ングしている。図9はミュージック・アプリケーションを示している。特殊効果 のエコーが楽器のサウンドに加えられ、スピーカからプレイされている。図10は ミュージック用とサウンド効果用とナレータ音声(voice over)用の3つのサ ウンドがどのように1つにミックスされて、スピーカなどの出力デバイスから出 力されるかを示している。 すべてのメディア・コンポーネントと同じように、オーディオ・コンポーネン トはそれぞれのポートを結合することにより共に結合される。このオペレーショ ンは、オーディオ・コンポーネント・ポートを選択し、線などの幾何学図形をそ のコンポーネント・ポートから別のマルチメディア・コンポーネント・ポートま で延長し、ディスプレイ上に図形表現されたリンケージを収めておくデータ構造 を作ると、簡単に行うことができる。すべてのオーディオ・コンポーネントはそ の入力ポートと出力ポートのサロゲートを作るメンバ関数をもっている。クライ アントは、まず入力および/または出力ポート・サロゲートを各コンポーネント に要求し、次に、サロゲート・オブジェクトから提供されるメンバ関数を使用し て実際の入力ポートを実際の出力ポートに結合することによって結合オペレーシ ョンを実行する。各オーディオ・ポートとポート・サロゲートはそれぞれに関連 づけられたオーディオ・タイプをもっている。図11は好適実施例によってサポー トされるオーディオ・タイプのいくつかを示している。 ディスプレイ上にリンキング線分で表されたコネクションは単一のオーディオ ・チャネルを表している。ステレオは左チャネル用と右チャネル用の2つのコネ クションを使用して処理される。2つのポートを結合することが要求されると、 タイプ・ネゴシエーション・プロトコルは、これらのポートに互換性データ・タ イプをサポートする能力があるかどうかを確かめる。ポートが共通のタイプをも っていないと、例外が引き起こされる。このようなことが起こったとき、図12に 示すようにオーディオ・タイプ・コンバータを2つのポート間に挿入しておくと 、一方のタイプから他方のタイプへ変換することができる。オーディオ・コンポ ーネントのネットワークではループ(サイクル)が許されない。ループになるよ うな結合を行おうとすると、例外が引き起こされる。オーディオ・コンポーネン トを結合するプロセスは、マルチメディア・オブジェクトを表す記号(indicia) のオーディオ入力と出力ポートを表すアイコンに似た図形の間を、線分などの幾 何学図形で結ぶことによりディスプレイ上に図形的に表現される。 オーディオ・コンポーネントの実現 クライアント−サーバ・ベースのアーキテクチャはオーディオ・コンポーネン トを実現するために使用される。すべてのオーディオ・コンポーネントに対して 、オーディオ・プロセッサ・オブジェクトがあり、これはサウンド・サーバと名 づけたタスクに置かれている。オーディオ・プロセッサ・オブジェクトは実際の 信号処理を行うことを受け持っている。オーディオ・コンポーネント・サブクラ ス側(subclasser)はオーディオ・コンポーネントとオーディオ・プロセッサ・サ ブクラスの両方を書く必要がある。クライアント/サーバ・アプローチはパフォ ーマンスを向上するために使用される。オーディオをパッチ・コード・スタイル でルーチングすることは、データ移動と信号処理をすべて単一のタスクで行うよ うにすれば、最も効率的に実現される。そうすれば、不必要なプロセス間通信(I nterprocess Communication - IPC)とコンテクスト・スイツチ(context switch) を使用しないで済むことになる。クライアントが多数の異なるタスクに置かれて いるとすると、サウンド・サーバには処理を単一タスクで集中化することが要求 されることになる。 これとは別の実現方法も開発されているが、この実現方法によれば、信号処理 はオーディオ・コンポーネントごとに別々のタスクで扱われている。オーディオ 処理にはサーバは不要である。これは多数の利点をもつエレガントな方法である が、残念ながら欠点が1つある。それは、本発明の好適実施例で提案しているア プローチに比べて速度が1桁以上遅いことである。モノプロセッサでは、この比 率は、処理能力が向上したマシンが作られたときでも、ほぼ一定のままになって いる。 クライアント/サーバ・モデル オーディオ・コンポーネントには、それぞれに対応するオーディオ・プロセッ サと通信するための機能が必要である。リモート・プロシージャ・コール(Remot e Procedure Call - RPC)インタフェースはこの目的のために使用されて いる。一般的に、オーディオ・コンポーネント・サブクラスのメンバ関数はオー ディオ・プロセッサ上の「実」メンバ関数を遠隔的(remotely)に呼び出している 。図13は好適実施例によるリモート・プロシージャ・コールを示すブロック図で ある。 結合方法 オーディオ・プロセッサは、オーディオ・コンポーネントとは異なり、オーデ ィオ・ポートを所有している。オーディオ・コンポーネントはオーディオ・ポー ト・サロゲートを所有している。2つのポート・サロゲートがクライアント・ア ドレス空間で共に結合されると、対応するオーディオ・ポートがサウンド・サー バ・アドレス空間で共に結合される。サブクラス側はどのイネーブリング・アク ションもとる必要がない。その代わりに、フレームワークがこれを行う。 オーディオの処理 オーディオ・ポート間のコネクションはオーディオ・データのバッファを使用 して実現されている。各コネクション、つまり、「パッチ・コード」はそれと関 連づけられたバッファをもっている。オーディオ・プロセッサはそのオーディオ ・ポートの各々に対して、そのバッファのアドレスとサイズを要求することがで きる。図14はデータをその入力バッファから読み取り、そのデータを処理し、そ の結果をその出力バッファに書き出す関連のRun() メンバ関数をもつオーディオ ・プロセッサ・アーキテクチャを示すブロック図である。バッファのサイズは可 変であるが、好ましいサイズは5ミリ秒に相当するサンプル数を収容するように なっている。このサイズは、最大待ち時間を10msにしてサウンドを開始し、停止 できるパフォーマンス目標を達成するために必要である。 フレーム・ベース処理 サウンド・サーバはフレーム・ベース処理(frame-based processing)と呼ばれ る手法を使用してサウンド・サンプルを処理する。基本的プロセスは以下に説明 するとおりである。 1) プロジューサがコンシューマの前に来るようにオーディオ・プロセッサを 順序付ける。 2) 各オーディオ・プロセッサごとに、そのRun()メンバ関数をコールする。 このステップは入出力デバイスがデータを要求するつど繰り返される。 この方法によると、オーディオが非常に効率よく処理されるが、これは実行順 序が決まれば、Run() をコールすることによってフレームを安価に作ることがで きるからである。Run() は単一フレームで完全に処理できる固定サイズのバッフ ァを利用するので、そのインプリメンテーションを非常に効率よく行うことがで きる。オーディオ・プロセッサのネットワークを示している図15を例にして説明 する。各オーディオ・プロセッサ、つまり、ノードは英字を付けて示されている 。 サウンドを作るために、サウンド・サーバは以下のステップを実行する。 1) プロジューサがコンシューマの前に来るようにオーディオ・プロセッサを 順序付ける。そして、 2) スピーカなどのオーディオ入出力デバイスがデータを要求するたびにオー ディオ・プロセッサを実行する。 図16は、図15に示すネットワークでこの処理がどのように行われるかを示して いる。最初のブロックでは、オーディオ・プロセッサが順序付けられ、そのあと プロセッサはその特定順序で実行される。これと並行して、プロセッサの各々ご とに情報が得られる。どのプロセッサも、その時間が来るまでは実行されない。 言い換えれば、そのプロセッサで該当の情報が得られるまでは、そのプロセッサ は待ち状態に置かれている。 オーディオ・プロセッサの順序付け オーディオ・プロセッサはシミュレート・データ・フロー(simulated data fl ow)と呼ばれる手法を用いて順序付けがされる。順序付けは、多くの場合、フレ ームワークによって自動的に判断されるので、大部分のサブクラス側は順序付け について気にする必要はない。シミュレート・データ・フローは、あたかもデー タがあるプロセッサから次のプロセッサへ渡されるかのように、トポロジ的順序 でにネットワークを通過するように繰り返されていく。これが行われるのは、ど のオーディオ・プロセッサが実行できるか、どのオーディオ・プロセッサが実行 できないかを確かめるためである。実行されるオーディオ・プロセッサは実行リ スト(run list)上に置かれ、実行フェーズの期間なん度も利用される。 オーディオ・プロセッサ・ノードは次のとき実行可能になっている。 #1 その入力ポートにデータがあり、かつ #2 その出力ポートにデータを置いておく場所がある。 各オーディオ・プロセッサはCanRun()メンバ関数をもっており、ノードが実行可 能であればTRUEが返却される。CanRun()のデフォルト(省略時)では上記のルー ルを使用するので、サブクラス側がCanRun()をオーバライド(override)する必要 があるのは、オーディオ・プロセッサがこのルールをオーバライドする必要があ る場合だけである。あるオーディオ・プロセッサが実行可能であると、そのプロ セッサはすべての出力ポートからデータが流れ出るようにシミュレートする。Fi re()は、実際にはターンアラウンドして、各出力ポートに対して別のFire()メン バ関数をコールするだけである。出力ポートをファイア(fire)することは、デー タがポートから流れ出ることをシミュレートし、シミュレートされたデータは他 方の側の入力ポート上に取り出すことができる。入力ポートはIsAvailable()メ ンバ関数をもっており、そのポートにシミュレートされたデータがあれば、TRUE が返却される。図17は好適実施例によるオーディオ・ポートを示している。 ディレイ(delay)への入力はサイレントになるので、ディレイはCanRun()に優 先していなければならない。従って、ディレイは、ディレイが使用尽くされるま で出力を作り出していなければならない。入力ポートにデータが残っていなくて も、オーディオ・プロセッサは実行されていなければならない。CanRun()は、入 力が得られないが、出力する必要のあるデータがまだディレイに残っているとき TRUEを返却するように修正しなければならない。プレーヤが停止されると、プレ ーヤはデータフロー基準に合致していても実行できないので、プレーヤもCanRun ()をオーバライドしなければならない。プレーヤは、データフロー基準に合致し ているかどうかに関係なく、プレーヤが停止されたときCanRun()が常にFALSEを 返却するようにルールを変更しなければならない。オーディオ・プロセッサはそ のオーディオ出力ポートに問い合わせて、データがポートのバッファに書かれた ときからオーディオが実際にユーザに聞こえるようになるまでのディレイを確か めることができる。これにより、オーディオ・プロセッサは任意の時間基準と同 期をとることが可能になる。図18,図19および図20はオーディオ・プロセッサに 関連するロジックを示すフローチャートである。プレーヤなどのオーディオ・プ ロセッサは実行が要求されていると判断すると、図18に示すようにRequestOrder を呼び出す。 図18は、好適実施例に従って順序付け要求(order request)をコールするとき の詳細ロジックを示すフローチャートである。処理は端子1800から開始され、即 時に機能ブロック1810へ移って実行リストに無効(invalid)のマークを付ける。 この実行リストは、マルチメディア・オブジェクトをドロップ・ラーンチ(drop launching)するか、マルチメディア・オブジェクトに対してダブルクリックする か、あるいはオペレーションの初期化を意味する他のアイコン操作を使用すると 、無効のマークが付けられる。次に、判定ブロック1820でテストが行われ、オー ディオ・プロセッサが実行可能かどうかが判断される。実行可能であれば、次に 、判定ブロック1830で、オーディオ・プロセッサは非アクチベート(inactivate) され、コントロールが端子1850へ渡される。逆に、オーディオ・プロセッサが実 行不能であれば、機能ブロック1840で、オーディオ・プロセッサはアクチベート (activate)され、コントロールが端子1850へ渡される。 図19は好適実施例に従ってオーディオ・プロセッサをアクチベートするときの リカーシブ・ロジック(recursive logic)を示すフローチャートである。処理は 端子1900から開始され、そこでコントロールが機能ブロック1840から渡されるか 、リカーシブ・コール(recursive call)が端子1990から出される。どちらの場合 も、コントロールは即時に機能ブロック1910へ渡され、そこでインデックスiが ゼロに等しくされ、カウンタNがオーディオ・プロセッサ出力ポートの数と等し い値にセットされる。そのあと、判定ブロック1920でテストが行われ、カウンタ i=Nかどうかが判断される。そうであれば、コントロールが端子1930で返却さ れる。そうでなければ、出力ポートiが機能ブロック1940でファイアされ、ファ イアされたとのマークが機能ブロック1950で出力ポートに付けられ、出力ポート に結合されたオーディオ・プロセッサが機能ブロック1960で取得され、カウンタ iが機能ブロック1970でインクリメントされ、テストが判定ブロック1980で行わ れてオーディオ・プロセッサが実行可能かどうかが判断される。オーディオ・プ ロセッサが実行可能ならば、図19に示すロジックへのリカーシブ・コールが端子 1900から出される。そうでなければ、コントロールが判定ブロック1920へ渡され て処理が続行される。 図20はオーディオ・プロセッサを非アクチベートするときの詳細ロジックを示 すフローチャートである。処理は端子2000から開始され、そこでコントロールが 機能ブロック1830から渡されるか、リカーシブ・コールが端子2018または2080か ら出される。どちらの場合も、コントロールは即時に機能ブロック2004へ渡され 、そこでインデックスiがゼロに等しくされ、カウンタNがオーディオ・プロセ ッサ出力ポートの数に等しい値にセットされる。次に、テストが判定ブロック19 20で行われ、カウンタi=Nかどうかが判断される。そうであれば、コントロー ルが機能ブロック2020へ渡され、インデックスとカウンタが再初期化される。そ のあと、判定ブロック2024でテストが行われ、i=Nかどうかが判断される。そ うでなければ、入力ポートiはファイアしなかったとのマークが機能ブロック20 40で付けられ、入力ポートに結合されたオーディオ・プロセッサが機能ブロック 2050で取得され、カウンタが機能ブロック2060でインクリメントされ、テストが 判定ブロック2070で行われてオーディオ・プロセッサが実行可能であるかどうか が判断される。そうであれば、コントロールが端子2024から返却される。オーデ ィオ・プロセッサが実行不能ならば、図20に示すロジックへのリカー シブ・コールが端子2080から出される。オーデイオ・プロセッサが実行可能なら ば、コントロールが判定ブロック2024へ渡されインデックスが再びテストされる 。 インデックスiが判定ブロック2006でNに等しくなければ、出力ポートiはフ ァイアしていなかったとのマークが機能ブロック2008で付けられ、出力ポートに 結合されたオーディオ・プロセッサが機能ブロック2010で取得され、カウンタi が機能ブロック2012でインクリメントされ、テストが判定ブロック2014で行われ てオーディオ・プロセッサが実行可能かどうかが判断される。オーディオ・プロ セッサが実行不能ならば、図20に示すロジックへのリカーシブ・コールが端子20 18から出される。そうでなければ、コントロールが判定ブロック2006へ渡されて インデックスが再テストされ、処理が続行される。 図21は好適実施例に従ってオーディオ・プロセッサを実行するときのロジック を示すフローチャートである。処理は端子2100から開始され、即時に判定ブロッ ク2104へ移って実行リストが有効かどうかが判断される。実行リストが有効でな ければ、トポロジカル・ソート(topological sort)が機能ブロック2106で行われ 、オーディオ・プロセッサがファイア順にソートされる。次に、機能ブロック21 10で、ソートされたリストに有効のマークが付けられ、コントロールが機能ブロ ック2120へ渡される。実行リストが判定ブロック2104で有効でなかったときは、 コントロールは機能ブロック2120へ渡されて、インデックスiがリセットされカ ウンタNが初期化される。次に、テストが判定ブロック2122で行われ、カウンタ iがカウントNまで達したかどうかが判断される。そうであれば、処理は完了し 、コントロールは端子2130へ渡される。そうでなければ、オーディオ・プロセッ サiは機能ブロック2124に示すように実行され、インデックスiは機能ブロック 2126に示すようにインクリメントされる。 ビデオとグラフィカル・データのルーチング ビデオ情報はコンピュータ上で、ディジタル化し、ストアし、処理し、プレイ バック(再生)することができる。ビデオ・ディジタイザは、アナログ・ビデオ 電気信号をフレームと呼ばれるディジタル・イメージの列に変換するために使用 される。1秒当たりにディジタル化されるフレームの数はフレーム・レート(fra me rate)と呼ばれる。1秒当たり15〜30フレームが代表的なフレーム・レートで ある。ディジタル化されたビデオは格納して、コンピュータによって処理するこ とができる。ビデオはディジタル・イメージをコンピュータ・スクリーンから元 のフレーム・レートで順番に表示することによってプレイバックすることができ る。 グラフィック・オブジェクトは、コンピュータ・スクリーンから表示できるオ ブジェクトを表現するために使用される基底クラスである。グラフィック・オブ ジェクトのサブクラスとしては、多角形、曲線、ディジタル・イメージなどがあ るが、これらに限定されない。ディジタル化ビデオの各フレームはディジタル・ イメージであるので、グラフィック・オブジェクトによって表現することができ る。 グラフィック入力および出力ポートはグラフィック・オブジェクトを一方のメ ディア・コンポーネントから他方のメディア・コンポーネントへ転送するために 使用される。ディジタル・ビデオがこのように転送できるのは、各ビデオ・フレ ームがグラフィック・オブジェクトであるからである。グラフィック・ポートは どのグラフィック・オブジェクトでも転送できるので、アニメーション・データ も、グラフィック・ポートを使用して転送することが可能である。グラフィック ・ポートを収めているメディア・コンポーネントを使用すると、ビデオ・オブジ ェクトのネットワークを構築してビデオ・オブジェクト間でビデオをストリーム 化することが可能である。このようにすると、種々の興味のあるアプリケーショ ンを作ることができる。図22は、好適実施例に従ってビデオ・ディジタイザ・コ ンポーネントをビュワー・コンポーネントにパッチングして、コンピュータのス クリーンから表示する例を示している。 図23は、好適実施例に従って2つのビデオ・オブジェクトからのイメージを効 果プロセッサでミキシングして、その結果をコンピュータ・スクリーンから表示 する、もっと複雑な例を示したものである。グラフィック・ポートはポート・サ ロゲートによって1つに結合される。すべてのビデオ・コンポーネントはその入 力ポートと出力ポートのサロゲートを作るメンバ関数をもっている。クライアン トは入力および/出力ポート・サロゲートを各コンポーネントに要求することに よって結合オペレーションを実行する。そのあと、サロゲート・オブジェクトか ら提供されるメンバ関数を使用して、実際の入力ポートを実際の出力ポートに結 合する。各グラフィック・ポートとポート・サロゲートはそれぞれに関連づけら れたグラフィック・タイプをもっている。2つのポートを結合するが要求される と、タイプ・ネゴシエーション・プロトコルは、これらのポートに互換性データ ・タイプをサポートする能力があるかどうかを確かめる。ポートが共通のタイプ をもっていなければ、例外が引き起こされる。 ビデオ・コンポーネントを結合するプロセスは、ビデオ入力と出力ポートを表 す記号(indicia)間を線分などの幾何学図形で結ぶことにより、ディスプレイ上 で図形表現することができる。 データのルーチング グラフィック・ポートはグラフィック・オブジェクトを指すポインタを読み書 きすることによってグラフィック・データを操作する。書くときのポート・イン プリメンテーションは同期式になっている。グラフィック出力ポートのWrite() メンバ関数は、送られてきたグラフィック・オブジェクトの処理を、受信側が完 了するまでブロックされる。グラフィック・ポートはパフォーマンス上の理由か らコピー・セマンティックス(copy semantics)を採用していない。RPGビットマ ップ・イメージをコピーしないようにしたのは、そのようなオペレーションを行 うために含まれるプロセッサとストレージ量のためである。その代わりに、グラ フィック・オブジェクトを指すポインタがグラフィック出力ポートからグラフィ ック入力ポートへ送られる。同期式インタフェースは、読み書きされるグラフィ ック・オブジェクトを格納するために共有メモリが使用されるときや、あるいは グラフィック・オブジェクトがタスクのアドレス空間にまたがってコピーされる とき、複数のアドレス空間にまたがって機能する。ブロックされたグラフィック ・ポートは、コネクションが切り離されるイベントでアンブロックされ る。 図24はグラフィック・ポートが好適実施例に従ってどのように使用されるかを 示している。1) ソース・メディア・コンポーネント中のタスクはグラフィック ・オブジェクトをメディア・コンポーネントの出力ポートに書き出す。2) グラ フィック・オブジェクトを指すポインタはデスティネーション・メディア・コン ポーネントの結合された入力ポートへ転送される。3) デスティネーション・メ ディア・コンポーネント中のタスクはその入力ポートのRead()メンバ関数をコー ルしてブロックしたあとで、アンブロックしてグラフィック・オブジェクト・ポ インタを読み取っている。4) このタスクはグラフィック・オブジェクトの処理 を終えると、デスティネーション・メディア・コンポーネントの入力ポートのNe xt()メンバ関数をコールする。5) ソース・メディア・コンポーネントのタスク はアンブロックして、Writeコールからリターンする。デスティネーションはす でにグラフィック・オブジェクトの処理を終えているので、そのグラフィック・ オブジェクトはタスクによって安全に処分される。図25は出力ポートのWriteメ ンバ関数に関連するロジックを示すフローチャートである。グラフィック・オブ ジェクトを指すポインタはこのメンバ関数に渡される。処理は端子2500から開始 され、即時に判定ブロック2510へ移ってポートが結合されているかどうかが判断 される。ポートが結合されていなければ、端子2520に示すように例外が引き起こ される。ポートが結合されていれば、テストが判定ブロック2530で行われその結 合ポートが同じアドレス空間内にあるかどうかが判断される。ポートが同じアド レス空間内になければ、機能ブロック2540で、グラフィック・オブジェクト全体 が共有メモリにコピーされる。ポートが同じアドレス空間内にあれば、グラフィ ック・ポートを指すポインタがメモリにコピーされる。どちらの場合も、次のス テップでは、機能ブロック2560に示すように通知が入力ポートへ送られ、機能ブ ロック2570に示すようにポートの処理が完了したとの通知が入力ポートからある までタスクがブロックされ、端子2580で終了する。 図26は好適実施例による入力ポートのRead(読取り)処理を示している。処理 は端子2600から開始され、即時に判定ブロック2610へ移ってポートが結合されて いるかどうかが判断される。ポートが結合されていなければ、フレームワークは 端子2620で例外を引き起こす。ポートが結合されていれば、別のテストが判定ブ ロック2630で行われ、グラフィックがレディ(準備状態)にあるかどうかが判断 される。そうでなければ、機能ブロック2640に示すようにオブジェクトがレディ になるまでブロック・タスク(block task)が処理され、コントロールが機能ブロ ック2650へ渡される。グラフィックがレディにあれば、ポインタが機能ブロック 2650でグラフィック・オブジェクトへ返され、コントロールが端子2660から返さ れる。 図27は好適実施例による入力ポートのNextメンバ処理を示している。処理は端 子2700から開始され、即時に判定ブロック2710へ移ってポートが結合されている かどうかが判断される。ポートが結合されていなければ、端子2720に示すように 例外が引き起こされる。ポートが結合されていれば、機能ブロック2730に示すよ うに該当の通知が送られ、別のテストが判定ブロック2740で行われて、結合ポー トが同じアドレス空間内にあるかどうかが判断される。ポートが同じアドレス空 間内にあれば、処理は端子2760で完了する。ポートが同じアドレス空間内になけ れば、グラフィック・オブジェクトのコピーが機能ブロック2750に示すように削 除され、処理は端子2760で終了する。 MIDIデータのルーチング 楽器ディジタル・インタフェース(Musical Instrument Digital Interface-MI DI)は電子楽器、コンピュータ、シーケンサ、照明コントローラ、ミキサ、およ びテープ・レコーダ間で情報をやりとりするためのインタフェースを定義してい る。これについては、MIDI 1.0 Detailed Specification(1990)というタイトル のMIDI Manufacturers Association出版物に説明されている。MIDIはレコーディ ング・スタジオとライブ・パフォーマンスの両方で幅広く使用されており、スタ ジオのレコーディングと自動化コントロール、オーディオ・ビデオ・プロダクシ ョン、およびコンポジションの分野で大きな影響を与えている。MIDIは単独でも 、他のメディアと併用されるときも、コンピュータをマルチメディア・アプリケ ーションに応用する上で統合的な役割を果たしている。ディジタル・オー ディオと比べると、MIDIファイルが占めるスペースははるかに少なく、情報は操 作と表示に都合がよいように記号化されている。例えば、代表的な3分のMIDIフ ァイルでは、ディスク上に30〜60キロバイトが必要になるのに対し、CD品質のス テレオ・オーディオ・ファイルでは毎秒約200キロバイト、つまり、3分間では3 6メガバイトが必要になる。MIDIデータは記譜法(musical notaion)としても、グ ラフィカル・ピアノロール(graphical piano roll)としても、編集や異なる楽器 への再割当てに適したメッセージ・リストとしても表示することが可能である。 一般的なMIDIでは、楽器割当てが標準化されているので、マルチメディア・タイ トル・プロジューサに大きな剌激を与えている。 MIDI入力ポートと出力ポートは、タイムスタンプ付きMIDIパケットを一方のメ ディア・コンポーネントから他方のメディア・コンポーネントへ転送するために 使用される。MIDIポートは、MIDIパケットをアドレス空間にまたがって伝達する ときのメールボックスの働きをする。多くの興味のあるMIDIアプリケーションは MIDIポートを収めているメディア・コンポーネントを結合することによって作成 することができる。図28は、MIDIプレーヤ2800とMIDIインタフェース2810の2つ のコンポーネントをどのように使用すると、コンピュータに結合されたミュージ ック・シンセサイザをプレイ(演奏)できるかを示している。MIDIインタフェー スはミュージック・シンセサイザなどの外部デバイスを接続するために使用され る。MIDIパケットはMIDIプレーヤからMIDIインタフェースへ送られる。MIDIイン タフェース2810はMIDIパケットをMIDIデータに変換し、これはミュージック・シ ンセサイザへ送られてプレイバックされる。 図29はMIDIデータがどのようにレコーディングされ、外部ミュージック・シン セサイザからプレイバックされるかを示している。MIDIインタフェース2910はMI DI出力ポートをもち、ミュージック・シンセサイザから送られてきたデータに基 づいてMIDIパケットを出力する。MIDIプレーヤ2900はMIDI入力ポートをもってい る。入力ポートはこれらのパケットを読み取って、コンピュータ上に格納する。 図30はMIDIデータがどのようにプレイバック(3000)され、フィルタ(3010)にかけ られて、外部ミュージック・シンセサイザ(3020)へ送られるかを示している。フ ィルタ3010はその入力3000についてオペレーションを行い、その結果をそ の出力へ受け渡すことができる。例えば、MIDIエコー、ディレイを作るために余 分の音符(note)を追加したり、バンド幅負荷を軽減するためにピッチ・バンド(p itch band)を取り除いたりするように特定のフィルタを書くことができる。 図31はMIDIポートとオーディオ・ポートの両方を収めているメディア・コンポ ーネントを示している。ソフトウェア・ベースのミュージック・シンセサイザは その入力ポートからMIDIパケットを読み取り、入力ポートから読み取った音符を 表しているディジタル・オーディオを出力する。MIDIポートはポート・サロゲー トによって共に結合されている。すべてのMIDIコンポーネントはその入力ポート と出力ポートのサロゲートを作るメンバ関数をもっている。クライアントはまず 入力および/または出力ポート・サロゲートを各コンポーネントに要求し、次に サロゲート・オブジェクトから提供されるメンバ関数を使用して実際の入力ポー トを実際の出力ポートに結合することによって結合操作を実行する。各MIDIポー トとポート・サロゲートはそれぞれに関連づけられたMIDIタイプをもっている。 2つのポートを結合することが要求されると、タイプ・ネゴシエーション・プロ トコルは、これらのポートに互換性データ・タイプをサポートする能力があるか を確かめる。ポートが共通のタイプをもっていないと、例外が引き起こされる。 MIDIコンポーネントを結合するプロセスは、MIDI入力ポートと出力ポートを表 す記号(indicia)間を線分などの幾何学図形で結ぶことにより図形表現すること ができる。 MIDIパケット MIDIをサポートするデバイスは、MIDIメッセージを送受することにより相互に 通信する。MIDI標準は2種類のメッセージを定義している。チャネル・メッセー ジとシステム・メッセージである。チャネル・メッセージはさらに音声(voice) メッセージとモード・メッセージに分かれている。システム・メッセージは、図 32に示すようにさらに共通(common)メッセージ、リアルタイム(realtime)メッセ ージおよび排他(exclusive)メッセージに分かれている。チャネル音声メッ セージはMIDIデバイスが聞き取ることができるチャネル番号(0 - 15)を収容して いる。チャネル・モード・メッセージは基本チャネル上を送出されて、チャネル 音声メッセージに対する楽器の応答を決定する。システム共通メッセージはすべ ての受信器へ送られ、システム・リアルタイム・メッセージはクロック・ベース の楽器へ同期化情報を搬送する。システム排他メッセージを使用すると、メーカ は標準で規定されたサポートを越えるMIDIサポートを提供することができる。す べてのメッセージはステータス(状況)バイトから始まっている。ただし、同じ タイプのメッセージが連続するときは、ステータス・バイト(ランニング状況) を除くことができる(除くかどうかは任意である)。システム排他メッセージを 除くすべてのメッセージ・タイプは、0個、1個または2個のデータ・バイトを もっている。システム排他メッセージは任意数のデータ・バイトからなり、最後 はEOX バイトで終わっている。図33は好適実施例によるメッセージのフォーマッ ト(形式)を示している。 MIDIパケットは標準をカプセル化する MIDIパケット・オブジェクトはすべてのMIDIメッセージ・タイプと構造をカプ セル化している。さらに、すべてのMIDIパケット・オブジェクトは図34に示す ようにステータス・バイトとタイムスタンプをもっている。MIDIパケットのサブ クラスは便利なコンストラクタとアクセス・メンバ関数を使用してメッセージ・ タイプを定義することによってMIDIプロトコルを反映している。 MIDIポート MIDIポートはメディア・コンポーネント間でMIDIパケットをやりとりするため に使用される。MIDI出力ポートはMIDIパケットを書き出すことができ、MIDI入力 ポートはMIDIパケットを読み取ることができる。出力ポートはサロゲート・ポー トによって入力ポートに結合することができる。サロゲート・ポートはMIDIパケ ットを読むことも、書くこともできない。その代わりに、これらは受動的オブ ジェクト(passive object)であるので、他のアドレス空間に渡すことによってコ ネクション(結合)をサポートすることができる。メンバ関数は一度に1つまた は多数のメッセージを出力ポートに書くために用意されたものである。同様に、 入力ポートから読み取るとき、次のメッセージを要求することも、バッファに入 っているすべてのメッセージのカウントを要求することもできる。Readはバッフ ァが空でなくなる(non-empty)までブロックされ、ブロックされたReadコールは 別のタスクによってキャンセルすることができる。出力ポートに書かれたパケッ トのコピーは入力ポートから読み取られる。 パケットは到着順に読み取られるのでタイムスタンプ別にはソートされない。 2つのストリームを時間順にマージする必要があるときは、ソーティング・マー ジ(sorting merge)オブジェクトが必要になる。入力ポートがなぜソートをしな いのかを理解するには、まず時間が前後の両方向に流れることを思い起こせばよ い。そこで、イベントが6、8および10秒のシーケンスで起こる、ある特定のプ レイバック・シナリオについて検討することにする。時間が5から始まり、11ま で進み、ターンアラウンドして再び5に戻るとすると、イベントの順序は6、8 、10、10、8、6になるはずであり、6、6、8、8、10、10にはならない。パ ケットをバッファリングするのにソーティングが十分でないのは、まさに時間が 両方向に流れるためである。 コネクションのファンインとファンアウトがサポートされている。ファンニン グ(fanning)とは、MIDI出力ポートを2つ以上のMIDI入力ポートに結合できる能 力のことであるので、MIDI入力ポートはそこに結合された2つ以上のMIDI出力ポ ートをもつことができる。図35は好適実施例によるファンニング・オペレーショ ンの例を示している。 MIDIポートの実現 好適実施例では、結合ポートのリストを利用してMIDIポートのコネクションを 記録し、共有バッファを利用してパケットの受渡しを行っている。各ポートはそ こに結合された他のすべてのポートのリストを維持している。このリストはConn ect(結合)コールとDisconnect(切離し)コールによって更新され、ポートが 壊されたときに使用されて、ポートが消滅したことを、そこに結合されているす べてのポートに通知する。この処理によると、実際に入力ポートが壊されたとき は、出力ポートはその結合リストにその入力ポートをもつことができないので、 そこに書くことができなくなる。そのために、出力ポートは入力ポートのリスト を維持しており、それを使用してWriteコールを実現し、リスト内の各ポートに 書くようにしている。また、入力ポートはそこに結合されている出力ポートのリ ストを維持しており、入力ポートが消滅したとき、出力ポートに通知しなければ ならない。共有バッファはプロジューサ−コンシューマ・プロトコル(producer- consumer protocol)をサポートしている。バッファが空になったとき、タスクは バッファが空でなくなるまでブロックすることができる。そのあとでそのバッフ ァに置く(deposit)別のタスクは、バッファに書いたことをブロックされたタス クに通知することができる。別の方法として、さらに別のタスクがブロックをキ ャンセルして、別の種類の通知を行うこともできる。 MIDI出力ポートのWrite()メンバ関数は図36に示されている。処理は端子3600 から開始され、即時に機能ブロック3610へ移ってカウンタと、ループの制限値と を初期化する。次に、判定ブロック3620でテストが行われ、カウンタが制限値ま で達したかどうかが判断される。カウンタが制限値まで達していれば、処理は端 子3670で完了している。カウンタが達していなければ、機能ブロック3630でパケ ットのコピーがポートのバッファに挿入され、そして、テストが判定ブロック36 40で行われ、バッファにメッセージがあるかどうかが判断される。バッファが空 でなければ、該当のメッセージが機能ブロック3650に示すように送信される。そ うでなければ、メッセージは送信されない。どちらの場合も、カウンタは機能ブ ロック3660でインクリメントされ、コントロールが端子3670から返される。 MIDI入力ポートのRead()メンバ関数は図37に示されている。処理は判定ブロッ ク3700から開始され、バッファが空であるかどうかが判断される。そうであれば 、タスクはバッファに情報が入るまで、あるいは機能ブロック3710でキャンセル が行われるまでブロックされる。テストが判定ブロック3730で行われ、待ちがキ ャンセルされたかどうかが判断される。そうであれば、例外が端子3750で引き起 こされる。そうでなければ、あるいはバッファが判定ブロック3700で空になって いなければ、パケットが機能ブロック3720でバッファからコピーされて呼出し側 へ送られ、端子3740からリターンして処理を完了する。 抽象マルチメディア・コンポーネント メディア・コンポーネント 時間基準メディア・コンポーネントはメディア・コンポーネント基底クラスと 呼ばれ、ルーチングを行うとき使用される中心の抽象クラスである。メディア・ コンポーネントはゼロ個または1個以上の入力ポートとゼロ個または1個以上の 出力ポートをもっている。図38に示す例では、メディア・コンポーネントは1つ の入力ポートと2つの出力ポートをもっている。 メディア・シーケンス メディア・シーケンス(mediasequence)はオーディオ・シーケンスを含めて、 メディア内容を表している抽象基底クラスである。メディア・シーケンスのサブ クラスはオーディオ、ビデオ、およびMIDIのクリップを表すために使用される。 メディア・シーケンスの特徴は持続時間(duration)とタイプのリストをもってい ることである。持続時間は浮動小数点値で表され、データがどれだけの長さであ るかを示している。データもタイプを有しており。どのタイプのサウンドがデー タによって表されているか(例えば、ビデオ、オーディオなど)を示している。 サブクラスは複数のタイプをサポートすることが可能である。例えば、オーディ オ・サブクラスはリニア形式でも、圧縮形式でもデータを与えることができる。 これが可能であるために、メディア・シーケンスはタイプのリストをもっている 。 プレーヤ 図39は時間基準メディア・プレーヤ(プレーヤ)基底クラスの例を示しており 、これは時間基準メディア・シーケンス(メディア・シーケンストと呼ぶことに する)をプレイできるメディア・コンポーネントである。メディア・シーケンス はオーディオ、ビデオ、アニメーション、またはMIDIデータのクリップを表すた めに使用できる抽象基底クラスである。時間基準メディア・シーケンスのサブク ラスはオーディオ、ビデオ、アニメーション、およびMIDIシーケンスを実現する ために使用される。プレーヤはテープ・レコーダに似ており、メディア・シーケ ンスはカセット・テープに似ている。プレーヤはメディア・シーケンスをプレイ するPlay()メンバ関数、シーケンスの中にレコーディングするRecord()メンバ関 数、およびプレイバックまたはレコーディングを停止するstop()メンバ関数をも っている。プレーヤはシーケンス内の位置までシークするSeek()メンバ関数もも っており、ほかにも、プレーヤが他のプレーヤと、あるいはソフトウェア・クロ ックと同期をとることを可能にするメンバ関数ももっている。プレーヤをデータ から分離すると、プレーヤを再使用することも可能である。あるカセットをプレ イしたあと、プレーヤに別のカセットをプレイまたはレコーディングするように 指示することができる。 標準オーディオ・コンポーネント オーディオ・プレーヤ 図40はオーディオ・プレーヤを示しており、これはオーディオ・コンポーネン トがオーディオ・データをプレイし、レコーディングするための関連の抽象基底 クラスをもっている。オーディオ・データは、オーディオ・シーケンスと呼ばれ 、メディア・シーケンスのサブクラスであるオブジェクトに格納される。オー ディオ・プレーヤはテープ・レコーダに似ており、オーディオ・シーケンスはカ セットに似ている。オーディオ・プレーヤはプレーヤのサブクラスである。すべ てのプレーヤ(サウンド、ビデオ、またはMIDI)と同じように、オーディオ・プ レーヤはサウンドを聞こえるようにするPlay()メンバ関数と、シーケンスをレコ ーディングできるようにする(ただし、書込みが許可されている場合)Record() メンバ関数と、レコーディングまたはプレイを停止するstop()とをもっている。 また、サウンド内の個所をランダムにアクセスするSeek()メンバ関数をもってい る。さらに、プレーヤが別のメディア・プレーヤまたはソフトウェア・クロック と同期をとることを可能にするメンバ関数をもっている。 スピーカ 図41はスピーカ・コンポーネントの例を示している。スピーカ・コンポーネン トはオーディオ出力デバイスの抽象基底クラスである。システムには、複数のサ ウンド出力デバイスが結合可能である。スピーカ・コンポーネントをサブクラス 化すると、出力デバイスの種々の特徴を表すことができる。例えば、スピーカ・ コンポーネントのサブクラスは、電話ハンドセット(送受話器)または電話回線 を利用してプレイバックを可能にするものが存在している。スピーカ・コンポー ネントは論理出力デバイスである。従って、スピーカ・コンポーネントの多数の インスタンスが存在することができるので、すべてが1つにミックスされて、コ ンピュータの物理スピーカからプレイアウトされることになる。ステレオ出力デ バイスはスピーカ・コンポーネントの2つのサブクラス(左チャネル用と右チャ ネル用)で表されることになる。 マイクロホン 図42は好適実施例によるマイクロホン・コンポーネントを示している。マイク ロホン・コンポーネントは、マイクロホンやライン入力などのサウンド入力ソー スを表している抽象基底クラスである。システムには、複数のサウンド入力デバ イスが結合可能である。マイクロホン・コンポーネントをサブクラス化するとこ れらのデバイスを表すことができる。例えば、マイクロホン・コンポーネントの サブクラスを使用すると、電話ハンドセットや電話回線からのレコーディングが 容易化される。スピーカ・コンポーネントと同様に、マイクロホン・コンポーネ ントは論理デバイスである。従って、マイクロホン・コンポーネントの多数のイ ンスタンスが存在できる。すべてのインスタンスは同じ物理マイクロホンから入 力された同一のオーディオを出力する。マイクロホン・コンポーネントは1つの 出力をもっている。マイクロホン・コンポーネントはデータのソースであるので 、Start()をコールして明示的に始動しなければならない。stop()をコールする と停止できる。ステレオ入力デバイスはマイクロホン・コンポーネントの2つの サブクラス(左チャネル用と右チャネル用)によって表される。 ミキサ 図43はミキサ・コンポーネントの例を示している。ミキサ・コンポーネントは 2つまたはそれ以上のオーディオ入力を総和して1つのオーディオ出力に送る抽 象基底クラスである。入力の数はコンストラクタ(constructor)への入力によっ て決まる。 スプリッタ 図44はスプリッタ・コンポーネントの例を示している。スプリッタ・コンポー ネントは1つの入力を受け取り、それを2つまたはそれ以上の出力に分割する抽 象基底クラスである。出力の数は、コンストラクタになにが渡されたかによって 決まる。 ゲイン 図45はゲイン・コンポーネントの例を示している。ゲイン・コンポーネントは 信号の振幅(サイズ)を増減できる抽象基底クラスである。これはボリューム・ コントロールのために使用され、SetGain() 関数とGetGain() 関数をもっている 。数学的には、ゲイン・コンポーネントは各入力サウンド・サンプルにゲイン値 を掛けて、その結果をその出力へ送る。ゲイン値が1.0のときは、信号はまった く変更されない。ゲインが2.0のときは、信号は音量の2倍になり、ゲイン値が. 5のときは、信号は音量の半分になる。大きな信号レベルはクリップされる。 エコー 図46は好適実施例によるエコー・コンポーネントを示している。エコー・コン ポーネントはエコーをその入力に付加し、その結果をその出力から発生する抽象 基底クラスである。エコー・コンポーネントはユーザがセットできる3つのパラ メータをもっている。それはディレイ長さ、フィードバック、およびミックス比 である。ディレイ長さが大きいと、入力は大きな深い峡谷の中にいるような音を 出し、ディレイが小さいと、ジェット機のヒュー音(whoosing)に似たフランジン グ効果(flanging effect)が得られる。フィードバックは聞こえるエコーの数を 決めるものである。ミックス比はエコーされた信号がどれだけミックスされて戻 されるかを決めるものである。 ファズ 図47は好適実施例によるファズ(fuzz)コンポーネントを示している。ファズ・ コンポーネントは歪みをサウンドに加える抽象基底クラスである。この効果はギ ターや楽器のサウンドで最も有用である。 オーディオ・タイプ・コンバータ 図48はオーディオ・タイプ・コンバータの例を示している。オーディオ・タイ プ・コンバータ・コンポーネントはあるオーディオ・タイプから別のオーディ オ・タイプへ変換する抽象基底クラスである。 オーディオ・マルチコンバータ 図49は好適実施例によるオーディオ・マルチコンバータを示している。オーデ ィオ・マルチコンバータ・コンポーネントは特定の選択に基づいて複数のオーデ ィオ・タイプから複数の他のオーディオ・タイプへ変換するものである。 サウンド 図50は好適実施例によるサウンド・コンポーネントを示している。サウンド・ コンポーネントはサウンドをレコーディングし、プレイするとき利用すると便利 なオブジェクトである。図51はサウンド・コンポーネントに組み込まれたコンポ ーネントを示している。サウンド・コンポーネント5100はマイクロホン・コンポ ーネント5110、ゲイン・コンポーネント5120(入力レベルを制御するためのもの )、オーディオ・プレーヤ・コンポーネント5130、別のゲイン・コンポーネント 5140(出力レベルを制御するもの)、およびスピーカ・コンポーネント5150を収 めている。サウンド・ファイル名が与えられていれば、サウンド・コンポーネン トは正しいオーディオ・シーケンスと必要なオーディオ・コンポーネントを自動 的に作成して、そのファイルをプレイし、レコーディングする。 物理スピーカ 図52は好適実施例による物理スピーカ・コンポーネントを示している。物理ス ピーカ・コンポーネントはコンピュータの出力増幅器とスピーカのサロゲートで ある。これはコンピュータ全体のボリュームを制御するために使用される。コン ピュータに他のサウンド出力デバイスがあれば、物理スピーカの対応するサブク ラスが存在することになる。物理スピーカ・コンポーネントは、総ボリューム・ レベルをセットし、得るためのSetVolume() とGetVolume() メンバ関数をもって いる。 物理マイクロホン 図53は好適実施例による物理マイクロホン・コンポーネントを示している。物 理マイクロホン・コンポーネントはマイクロホンまたはライン入力の実際のハー ドウェアを表している。コンピュータに入力される総入力レベルをセットするこ とができる。 標準ビデオ・コンポーネント グラフィック・プレーヤ 図54は好適実施例によるグラフィック・プレーヤ・コンポーネントを示してい る。グラフィック・プレーヤ・コンポーネントは、時間により変化するグラフィ ック・オブジェクトである時間グラフィック・オブジェクトをプレイし、レコー ディングすることができるコンポーネントの抽象基底クラスである。グラフィッ ク・シーケンスは時間グラフィックのサブクラスである。グラフィック・シーケ ンスはグラフィック・オブジェクトが、順序付けられたシーケンスであり、そこ では各グラフィック・オブジェクトは持続時間をもっている。グラフィック・プ レーヤはビデオ・テープ・レコーダに似ており、グラフィック・シーケンスはビ デオ・カセットに似ている。グラフィック・プレーヤはプレーヤのサブクラスで ある。すべてのプレーヤ(サウンド、ビデオまたはMIDI)と同様に、グラフィッ ク・プレーヤはグラフィック・オブジェクトが見えるようにするPlay()メンバ関 数と、シーケンスをレコーディングできるようにするRecord()メンバ関数(ただ し、書込みが許される場合)と、レコーディングまたはプレイを停止するstop() とをもっている。シーケンス内の個所をランダムにアクセスするためのSeek()メ ンバ関数ももっている。プレーヤが別のメディア・プレーヤまたはソフトウェア ・クロックと同期をとることを可能にするメンバ関数をもっている。 グラフィック・ビュワー 図55は好適実施例によるグラフィック・ビュワー(graphic viewer)コンポーネ ントを示している。グラフィック・ビュワー・コンポーネントはグラフィック・ オブジェクトをコンピュータ・ディスプレイから表示するために使用される。プ レイされているグラフィック・オブジェクトを見るためには、グラフィック・プ レーヤをグラフィック・ビュワーに結合しなければならない。コンシューマ・エ レクトロニク・ビデオにたとえると、グラフィック・プレーヤはビデオ・テープ ・レコーダに似ており、グラフィック・ビュワーはビデオ・ディスプレイ・モニ タに似ている。 ビデオ・ディジタイザ 図56は好適実施例によるビデオ・ディジタイザ・コンポーネントを示している 。ビデオ・ディジタイザ・コンポーネントはコンピュータに接続されたハードウ ェア・ビデオ・ディジタイザによってディジタル化されたアナログ・ビデオをグ ラフィック・オブジェクトに変換するものである。ビデオ・ディジタイザをグラ フィック・プレーヤに結合すると、コンピュータに入ってくるアナログ・ビデオ をレコーディングすることができる。コンシューマ・エレクトロニク・ビデオに たとえると、ビデオ・ディジタイザはビデオ・カメラに似ており、グラフィック ・プレーヤはビデオ・テープ・レコーダに似ている。 標準MIDIコンポーネント MIDIプレーヤ 図57は好適実施例によるMIDIプレーヤ・コンポーネントを示している。MIDIプ レーヤ・コンポーネントはMIDIシーケンスをプレイし、レコーディングすること ができるコンポーネントの抽象基底クラスである。MIDIシーケンスはMIDIトラッ クが集まったものである。MIDIトラックはMIDIパケットが順序付けられたシーケ ンスである。MIDIプレーヤはプレーヤのサブクラスである。すべてのプレーヤ( サウンド、ビデオ、またはMIDI)と同様に、MIDIプレーヤはMIDIパケットを外部 ミュージック・シンセサイザへ送信できるようにするPlay()メンバ関数と、外部 キーボードからのMIDIメッセージをレコーディングできるようにする(ただし、 書込みが許される場合)Record()メンバ関数と、レコーディングまたはプレイを 停止するstop()とをもっている。シーケンス内の個所をランダムにアクセスする Seek()メンバ関数をもっている。また、プレーヤが別のメディア・プレーヤまた はソフトウェア・クロックと同期をとることを可能にするメンバ関数をもってい る。 MIDIインタフェース 図58は好適実施例によるMIDIインタフェース・コンポーネントを示している。 MIDIインタフェース・コンポーネントはMIDIパケットを外部ミュージック・シン セサイザとの間で送受信する。MIDIメッセージをプレイまたはレコーディングす るためには、MIDIプレーヤがMIDIインタフェースに結合されていなければならな い。 MIDIフィルタ 図59は好適実施例によるMIDIフィルタ・コンポーネントを示している。MIDIフ ィルタ・コンポーネントは1つのMIDI入力ポートと1つのMIDI出力ポートをもつ オブジェクトの抽象基底クラスである。サブクラスは入力データを出力データに 変換する変換アルゴリズムを提供する。 MIDIマッパ 図60は好適実施例によるMIDIマッパ・コンポーネントを示している。MIDIマッ パ・コンポーネントはMIDIフィルタのサブクラスであり、ディクショナリ(辞 書)を使用して入力MIDIパケットを出力MIDIパケットにマッピング(対応づけ) する。ディクショナリの各エントリはペアのMIDIパケット、つまり、入力パケッ ト(キーと呼ばれる)と出力パケット(値と呼ばれる)になっている。MIDIマッ パに送り込まれた入力MIDIパケットはディクショナリへのルックアップ・キーと して使用される。ルックアップの結果は出力MIDIパケットであり、これは出力ポ ートから書き出される。 MIDIプログラム・マッパ 図61は好適実施例によるMIDIプログラム・マッパ(program mapper)コンポーネ ントを示している。MIDIプログラム・マッパ・コンボーネントはMIDIマッパのサ ブクラスである。これはMIDIプログラム変更メッセージを他のMIDIプログラム変 更メッセージに変換する。ある楽器を他の楽器に対応づけるために使用すること ができる。 MIDI音符マッパ 図62は好適実施例によるMIDI音符マッパ(note mapper)コンポーネントを示し ている。MIDI音符マッパ・コンポーネントはMIDIマッパのサブクラスである。こ れはMIDI音符のオンとオフのメッセージを変換し、音符を置き換え(トランスポ ーズ)できるようにする。 MIDIチャネル・マッパ 図63は好適実施例によるMIDIチャネル・マッパ(channel mapper)コンポーネン トを示している。MIDIチャネル・マッパ・コンポーネントはMIDIマッパのサブク ラスである。これはMIDIチャネル音声とモード・メッセージを変換し、汎用目的 のチャネル変更に使用できる。
───────────────────────────────────────────────────── フロントページの続き (51)Int.Cl.6 識別記号 庁内整理番号 FI G10H 1/00 102 9289−5L G06F 15/40 380E 7925−5L 15/20 Z (81)指定国 EP(AT,BE,CH,DE, DK,ES,FR,GB,GR,IE,IT,LU,M C,NL,PT,SE),OA(BF,BJ,CF,CG ,CI,CM,GA,GN,ML,MR,NE,SN, TD,TG),AT,AU,BB,BG,BR,BY, CA,CH,CN,CZ,DE,DK,ES,FI,G B,HU,JP,KP,KR,KZ,LK,LU,LV ,MG,MN,MW,NL,NO,NZ,PL,PT, RO,RU,SD,SE,SK,UA,UZ,VN

Claims (1)

  1. 【特許請求の範囲】 1.マルチメディア・プレゼンテーションのためのシステムであって、 (a)プロセッサと、 (b)プロセッサの制御下に置かれていて、プロセッサに接続されたストレー ジと、 (c)プロセッサの制御下に置かれていて、プロセッサに接続されたディスプ レイと、 (d)ストレージに置かれていてディスプレイから表示可能である複数のマル チメディア・オブジェクトと、 (e)ストレージに置かれていてディスプレイから表示可能である結合オブジ ェクトであって、マルチメディア・オブジェクトのうちの第1のものをMIDIオブ ジェクトに結合する際に使用されるものと、 (f)プロセッサの制御下に置かれていて、第1のマルチメディア・オブジェ クトとMIDIオブジェクト間で結合オブジェクトを通して情報をルーチングする手 段とを備えていることを特徴とするシステム。 2.請求項1に記載のシステムにおいて、マルチメディア・オブジェクト内にあ って、MIDI情報を受信する少なくとも1つのポート手段を含むことを特徴とする システム。 3.請求項1に記載のシステムにおいて、マルチメディア・オブジェクト内にあ って、MIDI情報を送信する少なくとも1つのポート手段を含むことを特徴とする システム。 4.請求項2に記載のシステムにおいて、外部デバイスとのインタフェースとな る手段を含むことを特徴とするシステム。 5.請求項1に記載のシステムにおいて、ミュージックをプレイする手段を含む ことを特徴とするシステム。 6.請求項1に記載のシステムにおいて、レコーディングされた情報の上にボイ スをダビングする手段を含むことを特徴とするシステム。 7.請求項1に記載のシステムにおいて、MIDIタイプから別のメディア・タイプ に変換する手段を含むことを特徴とするシステム。 8.請求項1に記載のシステムにおいて、MIDIタイプから複数のメディア・タイ プに変換する手段を含むことを特徴とするシステム。 9.請求項1に記載のシステムにおいて、データ・タイプをマルチメディア・オ ブジェクトの各ポートとリンクし、マルチメディア・オブジェクトを多態的に結 合する手段を含むことを特徴とするシステム。 10.請求項9に記載のシステムにおいて、異種タイプのマルチメディア・オブジ ェクトをリンクするオーディオ変換手段を含むことを特徴とするシステム。 11.接続されたストレージとディスプレイを備えたプロセッサを含むコンピュー タ・システムでマルチメディア・プレゼンテーションを可能にする方法であって 、 (a)少なくとも1つの結合オブジェクトと少なくとも1つのビデオ・オブジ ェクトを含む複数のマルチメディア・オブジェクトをストレージ内に作成するス テップと、 (b)マルチメディア・オブジェクトをディスプレイから表示するステップと 、 (c)MIDIオブジェクトをディスプレイから表示するステップと、 (d)マルチメディア・オブジェクトをMIDIオブジェクトに結合するステップ と、 (e)マルチメディア・オブジェクトとMIDIオブジェクト間で情報をルーチン グしてマルチメディア・プレゼンテーションを作成するステップとを備えたこと を特徴とする方法。 12.請求項11に記載の方法において、MIDI情報をマルチメディア・オブジェクト ・ポートで受信するステップを含むことを特徴とする方法。 13.請求項11に記載の方法において、MIDI情報をマルチメディア・オブジェクト ・ポートへ送信するステップを含むことを特徴とする方法。 14.請求項12に記載の方法において、外部デバイスとのインタフェースとなるス テップを含むことを特徴とする方法。 15.請求項11に記載の方法において、ミュージックをプレイするステップを含む ことを特徴とする方法。 16.請求項11に記載の方法において、レコーディングされた情報の上にボイスを ダビングするステップを含むことを特徴とする方法。 17.請求項11に記載の方法において、MIDIから別のメディア・タイプに変換する ステップを含むことを特徴とする方法。 18.請求項11に記載の方法において、MIDIタイプから複数のメディア・タイプに 変換するステップを含むことを特徴とする方法。 19.請求項11に記載の方法において、データ・タイプをマルチメディア・オブジ ェクトの各ポートとリンクし、マルチメディア・オブジェクトを多態的に結合す るステップを含むことを特徴とする方法。 20.請求項19に記載の方法において、異種タイプのマルチメディア・オブジェク トをリンクするステップを含むことを特徴とする方法。
JP7509148A 1993-09-13 1994-01-06 オブジェクト指向midiシステム Pending JPH09503070A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/114,640 1993-09-13
US08/114,640 US5388264A (en) 1993-09-13 1993-09-13 Object oriented framework system for routing, editing, and synchronizing MIDI multimedia information using graphically represented connection object
PCT/US1994/000143 WO1995008150A1 (en) 1993-09-13 1994-01-06 Object-oriented midi system

Publications (1)

Publication Number Publication Date
JPH09503070A true JPH09503070A (ja) 1997-03-25

Family

ID=22356512

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7509148A Pending JPH09503070A (ja) 1993-09-13 1994-01-06 オブジェクト指向midiシステム

Country Status (8)

Country Link
US (1) US5388264A (ja)
EP (1) EP0714530B1 (ja)
JP (1) JPH09503070A (ja)
CN (1) CN1125489A (ja)
AU (1) AU6083294A (ja)
CA (1) CA2153963C (ja)
DE (1) DE69403914T2 (ja)
WO (1) WO1995008150A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6757303B1 (en) 1998-03-27 2004-06-29 Yamaha Corporation Technique for communicating time information

Families Citing this family (116)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5646362A (en) * 1992-10-12 1997-07-08 Yamaha Corporation Sound parameter editing device for an electronic musical instrument
AU688314B2 (en) * 1993-03-31 1998-03-12 Apple Inc. Costume objects
US5452435A (en) * 1993-03-31 1995-09-19 Kaleida Labs, Inc. Synchronized clocks and media players
US5459865A (en) * 1993-04-05 1995-10-17 Taligent Inc. Runtime loader
US5530859A (en) * 1993-05-10 1996-06-25 Taligent, Inc. System for synchronizing a midi presentation with presentations generated by other multimedia streams by means of clock objects
US5590271A (en) * 1993-05-21 1996-12-31 Digital Equipment Corporation Interactive visualization environment with improved visual programming interface
JP3770616B2 (ja) 1993-09-13 2006-04-26 オブジェクト テクノロジー ライセンシング コーポレイション オブジェクト指向ビデオ・システム
AU6019994A (en) 1993-09-13 1995-04-03 Taligent, Inc. Multimedia data routing system
JPH07104981A (ja) * 1993-09-30 1995-04-21 Hitachi Software Eng Co Ltd オブジェクトリンク情報を用いたプログラム構築装置
DE69403664T2 (de) * 1993-10-29 1998-01-02 Taligent Inc Graphisches editorfachwerksystem
JP3185505B2 (ja) * 1993-12-24 2001-07-11 株式会社日立製作所 会議録作成支援装置
US5555370A (en) * 1993-12-28 1996-09-10 International Business Machines Corporation Method and system for creating complex objects for use in application development
US5615326A (en) * 1993-12-30 1997-03-25 Taligent, Inc. Object-oriented viewing framework having view grouping
US5619636A (en) * 1994-02-17 1997-04-08 Autodesk, Inc. Multimedia publishing system
US5689704A (en) * 1994-03-04 1997-11-18 Sony Corporation Recording medium, recording/playback device which uses commands in character string form for audio system control
US5664216A (en) * 1994-03-22 1997-09-02 Blumenau; Trevor Iconic audiovisual data editing environment
SE503022C2 (sv) * 1994-06-15 1996-03-11 Ericsson Telefon Ab L M Distribuerad förbindelsestyrning i telekommunikationsnät
US5526478A (en) * 1994-06-30 1996-06-11 Silicon Graphics, Inc. Three dimensional model with three dimensional pointers and multimedia functions linked to the pointers
US5680563A (en) * 1994-07-25 1997-10-21 Object Technology Licensing Corporation Object-oriented operating system enhancement for filtering items in a window
US5542078A (en) * 1994-09-29 1996-07-30 Ontos, Inc. Object oriented data store integration environment for integration of object oriented databases and non-object oriented data facilities
US5768607A (en) * 1994-09-30 1998-06-16 Intel Corporation Method and apparatus for freehand annotation and drawings incorporating sound and for compressing and synchronizing sound
ATE169417T1 (de) 1994-10-14 1998-08-15 United Parcel Service Inc Mehrstufiges paketverfolgungssystem
US5623592A (en) * 1994-10-18 1997-04-22 Molecular Dynamics Method and apparatus for constructing an iconic sequence to operate external devices
US5642497A (en) * 1995-01-30 1997-06-24 Tektronix, Inc. Digital disk recorder using a port clock having parallel tracks along a timeline with each track representing an independently accessible media stream
EP0735472A3 (en) * 1995-03-31 2000-01-19 Sun Microsystems, Inc. Method and apparatus for conspiracy among objects
US5832264A (en) * 1995-07-19 1998-11-03 Ricoh Company, Ltd. Object-oriented communications framework system with support for multiple remote machine types
US6449660B1 (en) 1995-07-31 2002-09-10 International Business Machines Corporation Object-oriented I/O device interface framework mechanism
TW302453B (ja) * 1995-08-25 1997-04-11 Ibm
US6467085B2 (en) * 1995-10-17 2002-10-15 Telefonaktiebolaget L M Ericsson (Publ) System and method for reducing coupling in an object-oriented programming environment
US5680461A (en) * 1995-10-26 1997-10-21 Sun Microsystems, Inc. Secure network protocol system and method
US6298476B1 (en) 1995-12-04 2001-10-02 International Business Machines Corporation Object oriented software build framework mechanism
US5751280A (en) * 1995-12-11 1998-05-12 Silicon Graphics, Inc. System and method for media stream synchronization with a base atom index file and an auxiliary atom index file
US5768505A (en) * 1995-12-19 1998-06-16 International Business Machines Corporation Object oriented mail server framework mechanism
US6144967A (en) * 1996-01-25 2000-11-07 International Business Machines Corporation Object oriented processing log analysis tool framework mechanism
US5781186A (en) * 1996-02-02 1998-07-14 Lucent Technologies Inc. Arrangement for specifying presentation of multimedia message components
US5841432A (en) * 1996-02-09 1998-11-24 Carmel; Sharon Method and system of building and transmitting a data file for real time play of multimedia, particularly animation, and a data file for real time play of multimedia applications
US5864868A (en) * 1996-02-13 1999-01-26 Contois; David C. Computer control system and user interface for media playing devices
US6041345A (en) * 1996-03-08 2000-03-21 Microsoft Corporation Active stream format for holding multiple media streams
US5870587A (en) * 1996-03-20 1999-02-09 International Business Machines Corporation Information-handling system, method, and article of manufacture including a mechanism for providing an improved application binary interface
US6009457A (en) * 1996-04-01 1999-12-28 Rocket Network, Inc. Distributed real-time communications system
US6434739B1 (en) 1996-04-22 2002-08-13 International Business Machines Corporation Object oriented framework mechanism for multi-target source code processing
US6081798A (en) * 1996-04-24 2000-06-27 International Business Machines Corp. Object oriented case-based reasoning framework mechanism
US5778378A (en) 1996-04-30 1998-07-07 International Business Machines Corporation Object oriented information retrieval framework mechanism
US5689437A (en) * 1996-05-31 1997-11-18 Nec Corporation Video display method and apparatus
US5826064A (en) * 1996-07-29 1998-10-20 International Business Machines Corp. User-configurable earcon event engine
US6289363B1 (en) * 1996-08-23 2001-09-11 International Business Machines Corporation Navigation editor framework for building mulitmedia titles
US6275222B1 (en) * 1996-09-06 2001-08-14 International Business Machines Corporation System and method for synchronizing a graphic image and a media event
US6317123B1 (en) * 1996-09-20 2001-11-13 Laboratory Technologies Corp. Progressively generating an output stream with realtime properties from a representation of the output stream which is not monotonic with regard to time
US6067566A (en) * 1996-09-20 2000-05-23 Laboratory Technologies Corporation Methods and apparatus for distributing live performances on MIDI devices via a non-real-time network protocol
US5883957A (en) * 1996-09-20 1999-03-16 Laboratory Technologies Corporation Methods and apparatus for encrypting and decrypting MIDI files
US5915252A (en) * 1996-09-30 1999-06-22 International Business Machines Corporation Object oriented framework mechanism for data transfer between a data source and a data target
US6104874A (en) * 1996-10-15 2000-08-15 International Business Machines Corporation Object oriented framework mechanism for order processing including pre-defined extensible classes for defining an order processing environment
US5937189A (en) * 1996-11-12 1999-08-10 International Business Machines Corporation Object oriented framework mechanism for determining configuration relations
US5892913A (en) * 1996-12-02 1999-04-06 International Business Machines Corporation System and method for datastreams employing shared loop architecture multimedia subsystem clusters
US5970498A (en) * 1996-12-06 1999-10-19 International Business Machines Corporation Object oriented framework mechanism for metering objects
TW409245B (en) * 1996-12-11 2000-10-21 Koninkl Philips Electronics Nv A method and device for user-presentation of a compilation system
US5913038A (en) * 1996-12-13 1999-06-15 Microsoft Corporation System and method for processing multimedia data streams using filter graphs
US5790855A (en) * 1997-01-31 1998-08-04 Sun Microsystems, Inc. System, method and article of manufacture for type checking appropriateness of port connection and variable type matching in connection with multiport object-oriented components
US5913065A (en) * 1997-01-31 1999-06-15 Sun Microsystems, Inc. System, method and article of manufacture for creating hierarchical folder components for use in a java application or applet
US6496870B1 (en) 1997-01-31 2002-12-17 Sun Microsystems, Inc. System, method and article of manufacture for collaboration with an application
US5842020A (en) * 1997-01-31 1998-11-24 Sun Microsystems, Inc. System, method and article of manufacture for providing dynamic user editing of object oriented components used in an object oriented applet or application
US6438615B1 (en) 1997-01-31 2002-08-20 Sun Microsystems, Inc. System, method and article of manufacture for using multiple bidirectional ports in association with a java application or applet
US5884078A (en) * 1997-01-31 1999-03-16 Sun Microsystems, Inc. System, method and article of manufacture for creating an object oriented component having multiple bidirectional ports for use in association with a java application or applet
US5936860A (en) * 1997-03-28 1999-08-10 International Business Machines Corporation Object oriented technology framework for warehouse control
US6041312A (en) * 1997-03-28 2000-03-21 International Business Machines Corporation Object oriented technology framework for accounts receivable and accounts payable
US5987423A (en) * 1997-03-28 1999-11-16 International Business Machines Corporation Object oriented technology framework for order processing
US6654933B1 (en) * 1999-09-21 2003-11-25 Kasenna, Inc. System and method for media stream indexing
WO1998044717A2 (en) * 1997-04-01 1998-10-08 Medic Interactive, Inc. System for automated generation of media programs from a database of media elements
US6014637A (en) * 1997-04-30 2000-01-11 International Business Machines Corporation Object oriented framework mechanism for fulfillment requirements management
US6335972B1 (en) 1997-05-23 2002-01-01 International Business Machines Corporation Framework-based cryptographic key recovery system
US6473893B1 (en) 1997-05-30 2002-10-29 International Business Machines Corporation Information objects system, method, and computer program organization
US5937402A (en) * 1997-06-19 1999-08-10 Ontos, Inc. System for enabling access to a relational database from an object oriented program
US5893106A (en) * 1997-07-11 1999-04-06 International Business Machines Corporation Object oriented server process framework with interdependent-object creation
US6513152B1 (en) 1997-07-23 2003-01-28 International Business Machines Corporation Object oriented framework mechanism for customization of object oriented frameworks
US6378002B1 (en) 1997-08-05 2002-04-23 International Business Machines Corporation, Object oriented server process framework with implicit data handling registry for remote method invocations
US6052670A (en) * 1997-08-29 2000-04-18 International Business Machines Corporation Object oriented framework mechanism for an electronic catalog
US6035305A (en) * 1997-08-29 2000-03-07 The Boeing Company Computer-based method of structuring product configuration information and configuring a product
US6016495A (en) * 1997-09-19 2000-01-18 International Business Machines Corporation Object-oriented framework mechanism for providing persistent storage
US6331864B1 (en) * 1997-09-23 2001-12-18 Onadime, Inc. Real-time multimedia visual programming system
US6175872B1 (en) * 1997-12-12 2001-01-16 Gte Internetworking Incorporated Collaborative environment for syncronizing audio from remote devices
US6233389B1 (en) * 1998-07-30 2001-05-15 Tivo, Inc. Multimedia time warping system
US8577205B2 (en) * 1998-07-30 2013-11-05 Tivo Inc. Digital video recording system
US8380041B2 (en) * 1998-07-30 2013-02-19 Tivo Inc. Transportable digital video recorder system
US7558472B2 (en) * 2000-08-22 2009-07-07 Tivo Inc. Multimedia signal processing system
US6976208B1 (en) * 1998-11-03 2005-12-13 International Business Machines Corporation Progressive adaptive time stamp resolution in multimedia authoring
KR100308024B1 (ko) * 1998-11-07 2001-10-19 구자홍 객체지향분산처리시스템에서멀티미디어스트림데이터의제어및자원할당을위한방법
US6628305B1 (en) 1998-11-09 2003-09-30 International Business Machines Corporation Architecture and definition of an extensible, object-oriented graphical user interface framework for managing and administering heterogenous digital library datastores
US7168062B1 (en) * 1999-04-26 2007-01-23 Objectbuilders, Inc. Object-oriented software system allowing live modification of an application
US6694355B1 (en) * 2000-03-14 2004-02-17 Reuben Bahar Method and system for collectively generating user-created designs of products and property via a communications network
US6760721B1 (en) 2000-04-14 2004-07-06 Realnetworks, Inc. System and method of managing metadata data
US6607499B1 (en) 2000-04-19 2003-08-19 James Becher Portable real time, dry mechanical relaxation and physical therapy device simulating application of massage and wet hydrotherapy for limbs
US6494851B1 (en) 2000-04-19 2002-12-17 James Becher Real time, dry mechanical relaxation station and physical therapy device simulating human application of massage and wet hydrotherapy
US7310678B2 (en) * 2000-07-28 2007-12-18 Kasenna, Inc. System, server, and method for variable bit rate multimedia streaming
US7277956B2 (en) * 2000-07-28 2007-10-02 Kasenna, Inc. System and method for improved utilization of bandwidth in a computer system serving multiple users
US9419844B2 (en) 2001-09-11 2016-08-16 Ntech Properties, Inc. Method and system for generation of media
US20060015904A1 (en) 2000-09-08 2006-01-19 Dwight Marcus Method and apparatus for creation, distribution, assembly and verification of media
US7114161B2 (en) * 2000-12-06 2006-09-26 Microsoft Corporation System and related methods for reducing memory requirements of a media processing system
US20030018978A1 (en) * 2001-03-02 2003-01-23 Singal Sanjay S. Transfer file format and system and method for distributing media content
EP1374080A2 (en) * 2001-03-02 2004-01-02 Kasenna, Inc. Metadata enabled push-pull model for efficient low-latency video-content distribution over a network
US20070230921A1 (en) * 2001-04-05 2007-10-04 Barton James M Multimedia time warping system
US7139981B2 (en) * 2001-06-13 2006-11-21 Panoram Technologies, Inc. Media management system
US20070022387A1 (en) * 2001-06-13 2007-01-25 Mayer Theodore Iii Media management system
US6976036B2 (en) * 2001-11-06 2005-12-13 Science Applications International Corporation Database management system
US6768046B2 (en) * 2002-04-09 2004-07-27 International Business Machines Corporation Method of generating a link between a note of a digital score and a realization of the score
US7139890B2 (en) * 2002-04-30 2006-11-21 Intel Corporation Methods and arrangements to interface memory
US20040199650A1 (en) * 2002-11-14 2004-10-07 Howe John E. System and methods for accelerating data delivery
US20040154461A1 (en) * 2003-02-07 2004-08-12 Nokia Corporation Methods and apparatus providing group playing ability for creating a shared sound environment with MIDI-enabled mobile stations
AU2004254950A1 (en) * 2003-06-24 2005-01-13 Ntech Properties, Inc. Method, system and apparatus for information delivery
US20050071764A1 (en) * 2003-09-28 2005-03-31 Denny Jaeger Method for creating a collection of multimedia interactive graphic elements using arrow logic
US20050262245A1 (en) * 2004-04-19 2005-11-24 Satish Menon Scalable cluster-based architecture for streaming media
DK2408202T3 (en) 2004-11-19 2017-08-28 Tivo Solutions Inc Method and device for secure transfer and playback of multimedia content
US7793329B2 (en) * 2006-02-06 2010-09-07 Kasenna, Inc. Method and system for reducing switching delays between digital video feeds using multicast slotted transmission technique
US20080109557A1 (en) * 2006-11-02 2008-05-08 Vinay Joshi Method and system for reducing switching delays between digital video feeds using personalized unicast transmission techniques
US8145704B2 (en) 2007-06-13 2012-03-27 Ntech Properties, Inc. Method and system for providing media programming
US8893035B2 (en) * 2008-09-17 2014-11-18 Accenture Global Services Limited Method, system and graphical user interface for configuring a simulator to simulate a plurality of devices
US8825462B2 (en) 2008-09-17 2014-09-02 Accenture Global Services Limited Method and system for simulating a plurality of devices

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4821220A (en) * 1986-07-25 1989-04-11 Tektronix, Inc. System for animating program operation and displaying time-based relationships
US4885717A (en) * 1986-09-25 1989-12-05 Tektronix, Inc. System for graphically representing operation of object-oriented programs
US4891630A (en) * 1988-04-22 1990-01-02 Friedman Mark B Computer vision system with improved object orientation technique
US4953080A (en) * 1988-04-25 1990-08-28 Hewlett-Packard Company Object management facility for maintaining data in a computer system
EP0347162A3 (en) * 1988-06-14 1990-09-12 Tektronix, Inc. Apparatus and methods for controlling data flow processes by generated instruction sequences
US5041992A (en) * 1988-10-24 1991-08-20 University Of Pittsburgh Interactive method of developing software interfaces
US5133075A (en) * 1988-12-19 1992-07-21 Hewlett-Packard Company Method of monitoring changes in attribute values of object in an object-oriented database
US5050090A (en) * 1989-03-30 1991-09-17 R. J. Reynolds Tobacco Company Object placement method and apparatus
US5060276A (en) * 1989-05-31 1991-10-22 At&T Bell Laboratories Technique for object orientation detection using a feed-forward neural network
US5125091A (en) * 1989-06-08 1992-06-23 Hazox Corporation Object oriented control of real-time processing
US5057996A (en) * 1989-06-29 1991-10-15 Digital Equipment Corporation Waitable object creation system and method in an object based computer operating system
US5129083A (en) * 1989-06-29 1992-07-07 Digital Equipment Corporation Conditional object creating system having different object pointers for accessing a set of data structure objects
US5181162A (en) * 1989-12-06 1993-01-19 Eastman Kodak Company Document management and production system
US5093914A (en) * 1989-12-15 1992-03-03 At&T Bell Laboratories Method of controlling the execution of object-oriented programs
US5075848A (en) * 1989-12-22 1991-12-24 Intel Corporation Object lifetime control in an object-oriented memory protection mechanism
US5151987A (en) * 1990-10-23 1992-09-29 International Business Machines Corporation Recovery objects in an object oriented computing environment
US5265248A (en) * 1990-11-30 1993-11-23 Gold Disk Inc. Synchronization of music and video generated by simultaneously executing processes within a computer
US5276816A (en) * 1990-12-31 1994-01-04 International Business Machines Corporation Icon object interface system and method
US5119475A (en) * 1991-03-13 1992-06-02 Schlumberger Technology Corporation Object-oriented framework for menu definition
US5286908A (en) * 1991-04-30 1994-02-15 Stanley Jungleib Multi-media system including bi-directional music-to-graphic display interface
US5333299A (en) * 1991-12-31 1994-07-26 International Business Machines Corporation Synchronization techniques for multimedia data streams
US5331111A (en) * 1992-10-27 1994-07-19 Korg, Inc. Sound model generator and synthesizer with graphical programming engine

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6757303B1 (en) 1998-03-27 2004-06-29 Yamaha Corporation Technique for communicating time information

Also Published As

Publication number Publication date
DE69403914D1 (de) 1997-07-24
AU6083294A (en) 1995-04-03
CA2153963C (en) 2001-12-25
WO1995008150A1 (en) 1995-03-23
EP0714530B1 (en) 1997-06-18
EP0714530A1 (en) 1996-06-05
CN1125489A (zh) 1996-06-26
US5388264A (en) 1995-02-07
DE69403914T2 (de) 1998-01-22
CA2153963A1 (en) 1995-03-23

Similar Documents

Publication Publication Date Title
JP3228340B2 (ja) マルチメディア・プレーヤ・コンポーネント・オブジェクト・システム及びマルチメディア・プレゼンテーション方法
JPH09503070A (ja) オブジェクト指向midiシステム
JPH09502821A (ja) オブジェクト指向オーディオ・システム
JP3770616B2 (ja) オブジェクト指向ビデオ・システム
JPH09503080A (ja) マルチメディア・データ・ルーチング・システム
US5544297A (en) Object-oriented audio record/playback system
US6598074B1 (en) System and method for enabling multimedia production collaboration over a network
Brinkmann Making musical apps
CA2167234A1 (en) Object-oriented audio record/playback system
Tice et al. The Broadway Audio System
Chin et al. Rich Media Integration

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040330

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040630

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20040824