(57)【要約】【課題】クロック制御のための複雑な構成を必要とせず、ストリームデータの入力・出力のタイミングの遅れを最小化する。【解決手段】楽器１からの楽音データをキャプチャ・フィルタ２１、イフェクタ・フィルタ２２、流量監視フィルタ２３、レンダラ・フィルタ２４を介してスピーカ３へ出力する。流量監視フィルタ２３は、レンダラ・フィルタ２４内の複数のバッファ２４ａのうちレンダリング中のバッファ数Ｃｒをカウントし、その結果をキャプチャ・フィルタ２１にフィードバックする。キャプチャ・フィルタ２１は、このフィードバック情報に基づきデータを補間により削除又は挿入する。【選択図】　図２
2004005520.tif 000002
【特許請求の範囲】
【請求項１】
相互接続ソフトウエア・フィルタにより構成されるストリームデータ処理システムにおいて、
前記相互接続ソフトウエア・フィルタは、
外部より入力されるストリームデータを保持するキャプチャ・フィルタと、
前記ストリームデータを外部に出力するレンダラ・フィルタと、
前記レンダラ・フィルタと前記キャプチャ・フィルタとの間に配置され前記キャプチャ・フィルタと前記レンダラ・フィルタとの間の前記ストリームデータの流量を監視する流量監視フィルタとを含み、この監視に関する情報に基づき前記流量を調整するように構成したことを特徴とするストリームデータ処理システム。
【請求項２】
前記流量監視フィルタは、その後段に配置されるフィルタのバッファ情報に基づいて前記流量を判断する請求項１に記載のストリームデータ処理システム。
【請求項３】
前記流量監視フィルタは、前記ストリームデータの流量に関する情報を前記キャプチャ・フィルタにフィードバックする請求項１に記載のストリームデータ処理システム。
【請求項４】
前記キャプチャ・フィルタは、前記フィードバックされた情報に基づき前記ストリームデータからデータを一部削除し又は前記ストリームデータにデータを挿入することにより前記ストリームデータの流量を調整する請求項３に記載のストリームデータ処理システム。
【請求項５】
前記キャプチャ・フィルタは、補間により前記データを挿入又は削除する請求項４に記載のストリームデータ処理システム。
【請求項６】
前記流量監視フィルタは、前記後段に配置されるフィルタへの前記ストリームデータの出力を停止させた状態で前記バッファ情報を取得する請求項２に記載のストリームデータ処理システム。
【請求項７】
前記流量監視フィルタは、ユーザ・モードで作成されるフィルタのバッファ情報に基づいて前記流量を判断する請求項１に記載のストリームデータ処理システム。
【請求項８】
前記流量監視フィルタは、前記ストリームデータの流量に関する情報を前記キャプチャ・フィルタにフィードバックするように構成され、
前記キャプチャ・フィルタは、前記フィードバックされた情報に基づき、前記流量が所定量より小さい場合には、前記ストリームデータからデータを一部削除し又は前記ストリームデータにデータを挿入することにより前記ストリームデータの流量を調整すると共に、
前記流量が所定量より大きい場合には、バッファを間引く処理を実行することにより前記ストリームデータの流量を調整することを特徴とする
請求項７に記載のストリームデータ処理システム。
【請求項９】
相互接続ソフトウエア・フィルタを生成してストリームデータを処理するストリームデータ処理方法において、
外部より入力されるストリームデータを保持するキャプチャ・フィルタを生成する工程と、
前記ストリームデータを外部に出力するレンダラ・フィルタを生成する工程と、
前記レンダラ・フィルタと前記キャプチャ・フィルタとの間に配置され前記キャプチャ・フィルタと前記レンダラ・フィルタとの間の前記ストリームデータの流量を監視する流量監視フィルタを生成する工程と、
この監視に関する情報に基づき前記流量を調整する工程とを備えたことを特徴とするストリームデータ処理方法。
【請求項１０】
相互接続ソフトウエア・フィルタを生成してストリームデータを処理するストリームデータ処理プログラムにおいて、
外部より入力されるストリームデータを保持するキャプチャ・フィルタを生成する工程と、
前記ストリームデータを外部に出力するレンダラ・フィルタを生成する工程と、
前記レンダラ・フィルタと前記キャプチャ・フィルタとの間に配置され前記キャプチャ・フィルタと前記レンダラ・フィルタとの間の前記ストリームデータの流量を監視する流量監視フィルタを生成する工程と、
この監視に関する情報に基づき前記流量を調整する工程とをコンピュータに実行させるように構成されたことを特徴とするストリームデータ処理プログラム。
【請求項１１】
請求項１０に記載のストリームデータ処理プログラムを格納したコンピュータで読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ストリームデータ（動画データ、楽音データ等）を入力デバイスから入力（キャプチャ）させ、何らかの処理を施した後、前記入力デバイスとは別個の出力デバイスから出力するストリームデータ処理システム、ストリームデータ処理方法、ストリームデータ処理プログラム、及びこのプログラムを格納したコンピュータで読み取り可能な記録媒体に関する。
【０００２】
【従来の技術】
マルチメディア・データなどのストリームデータの処理においては、データストリームは、何らかのタイミング情報に基づいて同期して入出力や処理がなされるようになっている。タイミング情報としては、物理クロックや、ストリームデータに含まれるタイムスタンプ情報等がある。
【０００３】
このようなストリームデータを処理する装置においては、ストリームデータが入力される入力デバイスと、入力されたストリームデータを外部へ向けて出力する出力デバイスとがそれぞれ異なるクロックにより動作していることが多い。例えば、入力デバイスも出力デバイスも共に４４．１ＫＨｚのクロックで動作していることになっていても、発振器が異なることにより、両者の動作クロックの周期が微妙にずれることがあり得る。これにより、デバイス間のデータのやり取りの際にデータがオーバーフローしたり逆に枯渇したりすることにより、ノイズの発生など出力データが望ましい形とならないことが生じ得るという問題がある。
また、各デバイスの処理能力が何らかの理由により変動することにより、データがオーバーフローしたり逆に枯渇したりすることが生じ得るという問題がある。
【０００４】
このような問題は、こうしたストリームデータをソフトウエア的に構成する場合にも生じ得る。近年、パーソナルコンピュータ（ＰＣ）でストリームデータをソフトウエア的に処理するため、例えばマイクロソフト社のＷＩＮＤＯＷＳ９８などにおいては、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ　Ｓｅｒｉａｌ　Ｂｕｓ）やＩＥＥＥ１３９４インターフェースを用いてＰＣと外部機器を接続するために、ＤｉｒｅｃｔＳｈｏｗ（登録商標）と呼ばれるストリームデータをＰＣ上で処理するのに適したＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ　Ｐｒｏｇｒａｍ　Ｉｎｔｅｒｆａｃｅ）が提供されている。ＤｉｒｅｃｔＳｈｏｗにおいては、データに対する何らかの処理を行うモジュール（これをフィルタという）を相互に接続して目的とするデータ処理を行っている。
【０００５】
こうした相互接続ソフトウエア・フィルタにより構成されるデータ処理システムにおいて、各フィルタの動作クロックが微妙にずれているような場合、これにより、データがオーバーフローしたり逆に枯渇したりすることにより、出力データが望ましい形とならないことが生じ得るという問題がある。
また、フィルタの一部がユーザ・モードで作成されたり、カーネル・モードであっても低いプライオリティで作成されるような場合には、データがオーバーフローしたり逆に枯渇したりすることにより、出力データが望ましい形とならないことが生じ得るという問題がある。例えば、オーディオ・データの処理システムに含まれるイフェクタ・フィルタは、イフェクトの設定をユーザが操作するためのユーザインタフェース機能を持つため、ユーザ・モードにより作成されることが多い。なお、ここで「カーネル・モード」とは、マイクロソフト社製のＷＩＮＤＯＷＳ（登録商標）などのＯＳにおいて、非常に高いプライオリティが与えられた動作モードであり、コードはすべてのハードウエアとすべてのメモリに直接アクセス可能なモードをいう。また、「ユーザ・モード」とは、同様にＷＩＮＤＯＷＳ（登録商標）などのＯＳにおいて、プライオリティが低く設定された動作モードであり、コードはハードウエアに直接アクセスすることができないようにされているモードをいう。
【０００６】
この場合、カーネル・モードのフィルタとユーザ・モードのフィルタとの間やユーザ・モードのフィルタの間でのデータの受け渡しにはカーネル・モードのフィルタ間のデータの受け渡しと比べて大きな処理負荷がかかるため、他のタスクの影響によりイフェクタ・フィルタの処理能力が変動して、イフェクタ・フィルタの前後においてデータのオーバーフロー又は枯渇が生じ、ストリームデータの理想的な出力ができなくなったり、ノイズが発生したりするという問題が生じる。
また、イフェクタ・フィルタがカーネル・モードで作成されていても、低いプライオリティで作成されている場合には、他のタスクの影響によりイフェクタ・フィルタの処理能力が変動し、データのオーバーフロー又は枯渇が生ずることが起こり得る。
【０００７】
この問題に鑑みた先行技術として、特許文献１に記載される同期化装置が知られている。この装置は、位置時間値（データストリームに関連する時間インターバル情報に基づく値であって、処理されるデータストリームの位置を反映するもの）、物理時間値（ハードウエア・オシレータまたはクロックに基づく値）、相関時間値（位置時間値などの指定時間値を参照時間値と共に提供するもの）という３つの異なる時間値を持ち、多数のデバイスで共通に利用することにより複数のストリームデータの入力及び出力タイミングのずれを最小化するようにしている。
【０００８】
【特許文献１】
特開平１０−２８３１９９号（７頁他）
【０００９】
【発明が解決しようとする課題】
しかし、この公報に開示の装置では、入力及び出力タイミングのずれを最小化することはできるが、３つの異なる時間値を利用するため、処理レートの整合等のために複雑な制御を必要とした。本発明は、以上のような問題点に鑑みてなされたものであり、クロック制御のための複雑な構成を必要とせず、入力及び出力タイミングのずれを最小化することを目的とする。
【００１０】
【課題を解決するための手段】
上記目的達成のため、本出願の第１の発明に係るストリームデータ処理システムは、相互接続ソフトウエア・フィルタにより構成されるストリームデータ処理システムにおいて、前記相互接続ソフトウエア・フィルタは、外部より入力されるストリームデータを保持するキャプチャ・フィルタと、前記ストリームデータを外部に出力するレンダラ・フィルタと、前記レンダラ・フィルタと前記キャプチャ・フィルタとの間に配置され前記キャプチャ・フィルタと前記レンダラ・フィルタとの間の前記ストリームデータの流量を監視する流量監視フィルタとを含み、この監視に関する情報に基づき前記流量を調整するように構成したことを特徴とする。
【００１１】
この第１の発明によれば、ストリームデータの流量が流量監視フィルタにより監視され、この監視結果に基づきデータ流量が調整される。
【００１２】
この第１の発明において、前記流量監視フィルタは、その後段に配置されるフィルタのバッファ情報に基づいて前記流量を判断するようにするのが好適である。　また、前記流量監視フィルタは、前記ストリームデータの流量に関する情報を前記キャプチャ・フィルタにフィードバックするようにすることもできる。この場合、前記キャプチャ・フィルタは、前記フィードバックされた情報に基づき前記ストリームデータからデータを一部削除し又は前記ストリームデータにデータを挿入するようにすることが好適である。さらに、前記キャプチャ・フィルタは、補間により前記データを挿入又は削除するのが好ましい。
また、前記流量監視フィルタは、前記後段に配置されるフィルタへの前記ストリームデータの出力を停止させた状態で前記バッファ情報を取得するようにすることができる。
また、前記流量監視フィルタは、ユーザ・モードで作成されるフィルタのバッファ情報に基づいて前記流量を判断するようにすることができる。この場合において、前記流量監視フィルタは、前記ストリームデータの流量に関する情報を前記キャプチャ・フィルタにフィードバックするように構成され、前記キャプチャ・フィルタは、前記フィードバックされた情報に基づき、前記流量が所定量より小さい場合には、前記ストリームデータからデータを一部削除し又は前記ストリームデータにデータを挿入することにより前記ストリームデータの流量を調整すると共に、前記流量が所定量より大きい場合には、バッファを間引く処理を実行することにより前記ストリームデータの流量を調整するように構成することができる。
【００１３】
上記目的達成のため、本出願の第２の発明に係るストリームデータ処理方法は、相互接続ソフトウエア・フィルタを生成してストリームデータを処理するストリームデータ処理方法において、外部より入力されるストリームデータを保持するキャプチャ・フィルタを生成する工程と、前記ストリームデータを外部に出力するレンダラ・フィルタを生成する工程と、前記レンダラ・フィルタと前記キャプチャ・フィルタとの間に配置され前記キャプチャ・フィルタと前記レンダラ・フィルタとの間の前記ストリームデータの流量を監視する流量監視フィルタを生成する工程と、この監視に関する情報に基づき前記流量を調整する工程とを備えたことを特徴とする。
【００１４】
上記目的達成のため、本出願の第３の発明に係るストリームデータ処理プログラムは、相互接続ソフトウエア・フィルタを生成してストリームデータを処理するストリームデータ処理プログラムにおいて、外部より入力されるストリームデータを保持するキャプチャ・フィルタを生成する工程と、前記ストリームデータを外部に出力するレンダラ・フィルタを生成する工程と、前記レンダラ・フィルタと前記キャプチャ・フィルタとの間に配置され前記キャプチャ・フィルタと前記レンダラ・フィルタとの間の前記ストリームデータの流量を監視する流量監視フィルタを生成する工程と、この監視に関する情報に基づき前記流量を調整する工程とをコンピュータに実行させるように構成されたことを特徴とする。また、このストリームデータ処理プログラムをコンピュータで読み取り可能な記録媒体に記録するようにしてもよい。
【００１５】
【発明の実施の形態】
次に、本発明の実施の形態を、図面に基づいて説明する。
［第１の実施の形態］
図１は、本発明の第１の実施の形態に係るストリームデータ処理システムのハードウエア構成を示すブロック図である。本実施の形態では、ストリームデータは、エレキギター、電子ピアノなどの楽器１より出力される楽音データであり、これをパーソナルコンピュータ（ＰＣ）２で処理し、スピーカ３より出力するものとする。ＰＣ２は、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、ハードディスクドライブ（ＨＤＤ）１４等を有している。ＣＰＵ１１は、オペレーティングシステム（ＯＳ）の制御の下、各種のプログラムを実行するようにされている。
【００１６】
ＲＯＭ１２は、電源投入時に起動するブート・プログラムその他を記憶している不揮発性メモリである。また、ＲＡＭ１３は、起動された各種のプログラムを一時記憶するとともに、各種データを処理するための作業領域を提供する。ＨＤＤ１４は、ＯＳ及び各種プログラムを記憶するための磁気ディスクを駆動するためのドライブ装置である。
【００１７】
インターフェース（Ｉ／Ｆ）１５は、楽器１よりの楽音データを所定の方式に基づいて変換しＣＰＵ１１に出力する。また、オーディオ・コントローラ１６は、楽音信号の出力処理を行うための制御装置である。また、各種入力装置（マウス、キーボード等）からの入力は、Ｉ／Ｆ１７を介してＣＰＵ１１に入力される。
【００１８】
次に、ＰＣ２で実行されるプログラムのソフトウエア構成について説明する。
図２は、ＰＣ２で実行されるプログラムのソフトウエア構造を、ハードウエア構成との対応関係を含めて図示したものである。
本実施の形態では、マイクロソフト社のＤｉｒｅｃｔＳｈｏｗ（登録商標）というＡＰＩによりストリームデータが処理されるものとする。
【００１９】
このＤｉｒｅｃｔＳｈｏｗの仕組みにおいて、ソフトウエアは、フィルタと呼ばれる複数のオブジェクトを生成することにより構成され、また、各フィルタは、図示を略すフィルタ・グラフと呼ばれるアーキテクチャにより接続される。具体的には、本実施の形態のソフトウエアは、図２に示すように、キャプチャ・フィルタ２１、イフェクタ・フィルタ２２、流量監視フィルタ２３、レンダラ・フィルタ２４から構成される。この例では、イフェクタ・フィルタ２２はユーザ・モードで、残余のフィルタはカーネル・モードで作成されているが、イフェクタ・フィルタ２２はカーネル・モードで作成してもよい。また、この実施の形態では、フィルタ２１〜２４は同一周波数の所定のクロックで動作するように設定されるが、様々な誤差要因により、実際のクロックの周期には、各フィルタ間で微妙なズレが存在しているものとする。
【００２０】
キャプチャ・フィルタ２１は、楽器１からの楽音データを取得するとともに、後段のイフェクタ・フィルタ２２等が認識できるようなフォーマットに変換して出力する機能を備えたものである。キャプチャ・フィルタ２１は、ＵＳＢバッファ２１ａと、リングバッファ２１ｂと、出力待ちバッファ２１ｃとを備えている。
楽器１からの楽音データは、最初にＵＳＢバッファ２１ａに保持され、順次リングバッファ２１ｂ、出力待ちバッファ２１ｃへと転送される。リングバッファ２１ｂは入力データのフォーマット変換の処理などに用いられる。出力待ちバッファ２１ｃの構成は様々に変更できるが、ここでは１０２４バイトのバッファが８個割り当てられるようにされたものとする。
【００２１】
イフェクタ・フィルタ２２は、キャプチャ・フィルタ２１から出力される楽音データに任意の変化を加えるためのものであり、入力バッファ２２ａと，リングバッファ２２ｂと、出力待ちバッファ２２ｃとを備えている。入力バッファ２２ａは、前段のキャプチャ・フィルタ２１内の出力待ちバッファ２１ｃと同様の構成とすることができる。入力バッファ２２ａは、出力待ちバッファ２１ｃとの間で所定のクロックに基づきバッファの受け渡しを行う。そして、入力バッファ２２ａ、リングバッファ２２ｂ、出力待ちバッファ２２ｃへと順次データの転送が行われる。リングバッファ２２ｂは楽音データのイフェクト付加の処理などに用いられる。出力待ちバッファ２２ｃも、出力待ちバッファ２１ｃや入力バッファ２２ａと同様の構成とすることができる。
このイフェクタ・フィルタ２２は、ユーザの多様な要請に応えるため様々なものが作られるとともに、ユーザが直接に操作の対象とする部分であるので、通常、ユーザ・モードで作られることが多い。
【００２２】
流量監視フィルタ２３は、イフェクタ・フィルタ２２とレンダラ・フィルタ２４との間に接続されており、入力バッファ２３ａ、リングバッファ２３ｂ、出力待ちバッファ２３ｃとを備えている。入力バッファ２３ａ，出力待ちバッファ２３ｃの構成は、前段の入力バッファ２２ａ，出力待ちバッファ２２ｃの構成と同じでよい。入力バッファ２３ａは、前段のイフェクタ・フィルタ２２内の出力待ちバッファ２２ｃとの間で所定のクロックに基づきバッファの受け渡しを行う。以下、順次入力バッファ２３ａ、リングバッファ２３ｂ、出力待ちバッファ２３ｃへとデータの転送が行われる。
また、この流量監視フィルタ２３は、フィルタ２１−２４により構成されるストリームデータ処理システムのデータストリーム中のデータの流量を監視するとともに、この監視の結果をキャプチャ・フィルタ２１やイフェクタ・フィルタ２２に向けて出力（フィードバック）する機能を有する。詳細は後述する。
【００２３】
レンダラ・フィルタ２４は、ストリームデータをオーディオ・コントローラ１６が認識できるフォーマットで出力するためのフィルタであり、レンダリングするデータを保持するためのバッファ２４ａを備えている。バッファ２４ａは、前段の出力待ちバッファ２３ｃ等と同様の構成でよい。バッファ２４ａは、出力待ちバッファ２３ｃとの間で所定のクロックに基づきバッファの受け渡しを行い、適宜オーディオ・コントローラ１６へデータを出力する。
なお、上記のフィルタ２１〜２４は、上述のように、基本的には同一の動作クロックにより駆動されているが、様々な誤差要因により微妙な周波数のズレが生じ得る。こうした周波数のズレがあり流量が多い場合には、上流のフィルタのバッファと下流のフィルタのバッファとの間でのデータの受け渡しにおいて、下流のフィルタの入力バッファにデータが溜まるのではなく、上流のフィルタの出力待ちバッファの方にデータが溜まることになる。
【００２４】
マネージャ２５は、流量監視フィルタ２３の監視タイミングを制御したり、この監視結果などの監視に関する情報に基づいてキャプチャ・フィルタ２１からの出力、及びレンダラ・フィルタ２４への入力、出力を制御したりするなど、各フィルタ間のデータ伝送の管理を担当する部分である。
【００２５】
次に、本実施の形態の作用を、図３に示すフローチャートに基づいて説明する。
ＨＤＤ１４よりストリームデータ処理プログラムが読み込まれ、キャプチャ・フィルタ２１、イフェクタ・フィルタ２２、流量監視フィルタ２３、レンダラ・フィルタ２４等のフィルタが生成される。そして、楽器１よりＰＣ２に楽音データが入力されると、このデータがキャプチャ・フィルタ２１、イフェクタ・フィルタ２２、流量監視フィルタ２３、レンダラ・フィルタ２４の順に転送され、スピーカ３に向けて出力される
【００２６】
この間、流量監視フィルタ２３は、データ流量を監視するため、レンダラ・フィルタ２４内の複数のバッファ２４ａのうちレンダリング中のバッファの数Ｃｒをカウントする（Ｓ１）。
入力バッファ２４ａのレンダリング中のバッファ数Ｃｒをカウントするようにしているのは、キャプチャ・フィルタ２１のクロックとレンダラ・フィルタ２４のクロックとの差が生じた場合に、その影響が反映され易いためである。すなわち、キャプチャ・フィルタ２１のクロックがレンダラ・フィルタ２４のクロックより速い状態においては、流量監視フィルタ２３の出力待ちバッファ２３ｃでデータが溜まり、レンダラ・フィルタ２４の入力バッファ２４ａでレンダリング中のバッファ数Ｃｒが少なくなる。この場合には、データ流量が多すぎると判断できる。一方、キャプチャ・フィルタ２１のクロックがレンダラ・フィルタ２４のクロックより遅い状態においては、流量監視フィルタ２３の出力待ちバッファ２３ｃに保持されるデータが減り、レンダラ・フィルタ２４の入力バッファ２４ａでレンダリング中のバッファ数Ｃｒが多くなる。この場合には、データ流量が少なすぎると判断できる。このレンダリング中のバッファ数Ｃｒのカウント結果に基づき、データ流量を制御する変数ｉｎｓｅｒｔｐｏｉｎｔ、ｒｅｊｅｃｔｐｏｉｎｔを変化させる。
【００２７】
バッファ２４ａにおいてレンダリング中のバッファ数Ｃｒのカウントは、流量監視フィルタ２３内の出力待ちバッファ２３ｃの数をカウントすることにより実行してもよい。しかし、レンダリング中のバッファの何割がレンダリングが完了しているものかまで推測することは困難である。そこで、流量監視フィルタ２３の出力待ちバッファ２３ｃのキューにバッファが入れられてからレンダラ・フィルタ２４に出力されるまでの時間Ｔｗにより、バッファ２４ａにおいてレンダリング中のバッファ数Ｃｒを演算（カウント）する。時間Ｔｗが大きければ流量監視フィルタ２３内の出力待ちバッファ２３ｃの数は大きく、つまりレンダリング中のバッファ数Ｃｒは小さくなる。逆に、時間Ｔｗが小さければ流量監視フィルタ２３内の出力待ちバッファ２３ｃの数は小さく、つまりレンダリング中のバッファ数Ｃｒは大きくなる。
【００２８】
なお、バッファ数Ｃｒを演算する場合には、流量監視フィルタ２３のストリームが起動されたときに、まず下流のレンダラ・フィルタ２４にはデータを送らないで、出力待ちバッファ２３ｃにキューイングされているバッファの数をカウントし、バッファが一定時間キューイングされなくなった時のカウント値を出力待ちバッファ２３ｃとレンダラ・フィルタ２４との間のデータのやり取りに使用されるバッファ総数Ｃｂとする。
レンダリング中のバッファ数Ｃｒは、
【００２９】
【数１】
Ｃｒ＝Ｃｂ−Ｔｗ×Ｒ／Ｌｂ
ただし、
Ｌｂ：バッファ２４ａの各バッファのデータ長
Ｒ　：ストリームデータのデータの周期に対応した単位時間当たりの転送データの代表値
【００３０】
として求められる。ここで、Ｔｗの値は、例えば１０回程度の移動平均を取ったものとすると、高い精度でＣｒを演算することができる。
【００３１】
Ｃｒが演算されたら、流量監視フィルタ２３は、この演算値Ｃｒに基づいて変数ｉｎｓｅｒｔｐｏｉｎｔ、ｒｅｊｅｃｔｐｏｉｎｔを決定する（Ｓ２）。変数ｉｎｓｅｒｔｐｏｉｎｔ、ｒｅｊｅｃｔｐｏｉｎｔは、Ｃｒが所定の範囲内にあり、データ流量が過不足なく適当である場合にはｉｎｓｅｒｔｐｏｉｎｔ＝０、ｒｅｊｅｃｔｐｏｉｎｔ＝０に設定される。Ｃｒが所定の範囲より大きく、データ流量が不足している場合には、ｉｎｓｅｒｔｐｏｉｎｔ＞０、ｒｅｊｅｃｔｐｏｉｎｔ＝０とされ、一方、Ｃｒが所定の範囲より小さく、データ流量が過剰である場合には、ｉｎｓｅｒｔｐｏｉｎｔ＝０、ｒｅｊｅｃｔｐｏｉｎｔ＞０とされる。
【００３２】
流量監視フィルタ２３は、この変数ｉｎｓｅｒｔｐｏｉｎｔ、ｒｅｊｅｃｔｐｏｉｎｔをキャプチャ・フィルタ２１に向けて出力する（Ｓ３）。
キャプチャ・フィルタ２１は、この変数ｉｎｓｅｒｔｐｏｉｎｔ、ｒｅｊｅｃｔｐｏｉｎｔが、０であるか又は０より大きいかを判定する（Ｓ４）。
キャプチャ・フィルタ２１は、ｉｎｓｅｒｔｐｏｉｎｔ＞０の場合には、データを挿入するデータ挿入処理を実行する（Ｓ５）。すなわち、キャプチャ・フィルタ２１のＵＳＢバッファ２１ａでキャプチャした一定区間のデータ配列Ｓのデータ数をＮとした場合、新しく生成するデータ配列Ｃのデータ数ＭをＭ＝Ｎ＋ｐとする。
一方、ｒｅｊｅｃｔｐｏｉｎｔ＞０の場合には、キャプチャ・フィルタ２１はデータを削除するデータ削除処理を実行する（Ｓ６）。すなわち、キャプチャ・フィルタ２１でキャプチャした一定区間のデータ配列Ｓの長さをＮとした場合、新しく生成するデータ配列Ｃの長さＭをＭ＝Ｎ−ｐとする。Ｓ４、Ｓ５が終了したら、Ｓ１に戻って再度Ｃｒのカウントを行う。
【００３３】
次に、キャプチャ・フィルタ２１におけるデータ補間によるデータの追加及び削除の方法を、図４を用いて説明する。
元のデータ列Ｓが図４に示すごとく１区間にＮサンプルのデータを含むものである場合に、ｐ個のデータを補間して１区間にＭサンプル（Ｍ＝Ｎ＋ｐ）のデータを含む新たなデータ列Ｃを生成する場合を考える。
このとき、新データ列Ｃでの新たなサンプリング点ｍ（ｉ）は元のサンプリング点ｎ（ｉ）との関係において、
【００３４】
【数２】
ｍ（ｉ）＝Ｎ／Ｍ×ｎ（ｉ）（ｉ＝１，２、・・・Ｎ）
【００３５】
と表される。
【００３６】
また、これらの新たなサンプリング点におけるデータ値を、元のサンプリング点のデータに基づき、直線補間法を用いて求める。すなわち、ｍ（ｉ）がデータ配列Ｓ中でデータｎ（ｋ）とｎ（ｋ＋１）との間にあるとした場合（ｋ＝１，２・・・、Ｎ）、　ｍ（ｉ）でのデータの値Ｃｖ（ｍ（ｉ））は、
【００３７】
【数３】
Ｃｖ（ｍ（ｉ））
＝（Ｓｖ（ｎ（ｋ））×（ｎ（ｋ＋１）−ｍ（ｉ））
＋Ｓｖ（ｎ（ｋ＋１））×（ｍ（ｉ）−ｎ（ｋ）））／（ｎ（ｋ＋１）−ｎ（ｋ））
【００３８】
と表され、
特に、ｎ（ｋ＋１）　＝ｎ（ｋ）＋１の場合、
【００３９】
【数４】
Ｃｖ（ｍ（ｉ））
＝Ｓｖ（ｎ（ｋ））×（１−（ｍ（ｉ）−ｎ（ｋ）））＋Ｓｖ（ｎ（ｋ＋１））×（ｍ（ｉ）−ｎ（ｋ））
【００４０】
となる。
このように、本実施の形態のストリームデータ処理システムでは、レンダラ・フィルタ２４でのバッファ２４ａでの状況を流量監視フィルタ２３で監視し、監視結果に基づいてキャプチャ・フィルタ２１でのデータを補間により削除又は挿入している。これにより、キャプチャ・フィルタ２１とレンダラ・フィルタ２４のクロック周期の差によりデータストリームがオーバーフローしたり枯渇したりすることが無くなる。なお、データの追加及び削除処理は流量監視フィルタ２３で行ってもよい。この場合、入力バッファ２３ａから受け取ったデータをリングバッファ２３ｂを用いてデータの削除、挿入の処理を行い、出力待ちバッファ２３ｃに渡す。
【００４１】
ＰＣ２での処理を容易にするため、整数演算により補間データを求めるようにしてもよい。すなわち、ｎ（ｋ）とｎ（ｋ＋１）の間を例えば４０９６ポイントに分割して、次のように演算を実行してもよい。
【００４２】
【数５】
Ｃｖ（ｍ（ｉ））＝（Ｓｖ（ｎ（ｋ））×（４０９６−Ｒ）＋Ｓｖ（ｎ（ｋ＋１））×Ｒ）／４０９６
ただし、Ｒ＝（Ｎ／Ｍ×ｎ（ｉ）×４０９６）ｍｏｄ　４０９６
【００４３】
［第２の実施の形態］
次に、本発明の第２の実施の形態を、図５に基づいて説明する。この実施の形態のフィルタ構成は、第１の実施の形態（図２）と同様である。ただし、流量監視フィルタ２３は、レンダラ・フィルタ２４の入力バッファ２４ａを監視する代わりに、ユーザ・モードで作成されているイフェクタ・フィルタ２２の入力バッファ２２ａのバッファ数Ｃｒ´を監視し、このバッファ数Ｃｒ´に基づいて、キャプチャ・フィルタ２１でのデータを補間により削除又は挿入する点において、第１の実施の形態と異なっている。
【００４４】
この第２の実施の形態の作用を、図５に示すフローチャートに基づいて説明する。
流量監視フィルタ２３は、イフェクタ・フィルタ２２内の複数の入力バッファ２２ａのバッファの数Ｃｒ´をカウントする（Ｓ１１）。
Ｃｒ´がカウントされたら、流量監視フィルタ２３は、この演算値Ｃｒ´に基づいて変数ｉｎｓｅｒｔｐｏｉｎｔ’、ｒｅｊｅｃｔｐｏｉｎｔ’を決定する（Ｓ１２）。変数ｉｎｓｅｒｔｐｏｉｎｔ’、ｒｅｊｅｃｔｐｏｉｎｔ’は、Ｃｒ´が所定の範囲内にあり、データ流量が過不足なく適当である場合にはｉｎｓｅｒｔｐｏｉｎｔ’＝０、ｒｅｊｅｃｔｐｏｉｎｔ’＝０に設定される。Ｃｒ´が所定の範囲より大きく、データ流量が不足している場合には、ｉｎｓｅｒｔｐｏｉｎｔ’＞０、ｒｅｊｅｃｔｐｏｉｎｔ’＝０とされ、一方、Ｃｒ´が所定の範囲より小さく、データ流量が過剰である場合には、ｉｎｓｅｒｔｐｏｉｎｔ’＝０、ｒｅｊｅｃｔｐｏｉｎｔ’＞０とされる。
【００４５】
流量監視フィルタ２３は、この変数ｉｎｓｅｒｔｐｏｉｎｔ’、ｒｅｊｅｃｔｐｏｉｎｔ’をキャキャプチャ・フィルタ２１に向けて出力する（Ｓ１３）。
キャプチャ・フィルタ２１は、この変数ｉｎｓｅｒｔｐｏｉｎｔ’、ｒｅｊｅｃｔｐｏｉｎｔ’が、０であるか又は０より大きいかを判定する（Ｓ１４）。キャプチャ・フィルタ２１は、ｉｎｓｅｒｔｐｏｉｎｔ’＞０、ｒｅｊｅｃｔｐｏｉｎｔ’＝０の場合には、データを挿入するデータ挿入処理を実行する（Ｓ１５）。すなわち、イフェクタ・フィルタ２２のＵＳＢバッファ２１ａの一定区間のデータ配列Ｓのデータ数をＮとした場合、新しく生成するデータ配列Ｃのデータ数ＭをＭ＝Ｎ＋ｐとする。
【００４６】
一方、ｉｎｓｅｒｔｐｏｉｎｔ’＝０、ｒｅｊｅｃｔｐｏｉｎｔ’＞０の場合には、キャプチャ・フィルタ２１はデータを削除するデータ削除処理を実行する（Ｓ１６）。すなわち、キャプチャ・フィルタ２１のＵＳＢバッファ２１ａの一定区間のデータ配列Ｓの長さをＮとした場合、新しく生成するデータ配列Ｃの長さＭをＭ＝Ｎ−ｐとする。Ｓ４、Ｓ５が終了したら、Ｓ１に戻って再度Ｃｒ´のカウントを行う。キャプチャ・フィルタ２１におけるデータ補間によるデータの追加及び削除の方法は、第１の実施の形態（図４）と同様である。
【００４７】
なお、イフェクタ・フィルタ２２は、他のタスクの影響によりその処理能力が変動するため、データのオーバーフロー又は枯渇が生じ易い。特に、イフェクタ・フィルタ２２がユーザ・モードで作成されたり、カーネル・モードであっても低いプライオリティで作成されたりしている場合には、その傾向が強くなる。このため、この実施の形態では、流量が所定値以下の場合には、上述のデータ挿入及び削除処理を行うと共に、流量が所定値以上となった場合には、データ補間によるデータの追加及び削除に加え、バッファ自体を間引く処理を実行する。その際、ノイズ除去のため、削除されたバッファに対応する区間の前後で周知のクロスフェード処理等を行うことが好ましい。なお、このバッファ自体を間引く処理は、イフェクタ・フィルタ２２で行ってもよい。
【００４８】
以上、ストリームデータの一例として楽音データを処理する場合について説明したが、本発明はこれに限られるものではなく、例えば映像データを処理する場合にも適用できるし、また効果音等の音響データ付の映像情報のような、楽音データと映像データの複合した信号を処理するのに適用できることはいうまでもない。
また、本実施の形態では、キャプチャ・フィルタ２１、イフェクタ・フィルタ２２、流量監視フィルタ２３、レンダラ・フィルタ２４を設け、流量監視フィルタ２３をレンダラ・フィルタ２４の一段前に配置しているが、一段前である必要は必ずしもなく、例えば、上記以外の他のフィルタを流量監視フィルタ２４とレンダラ・フィルタ２４との間に配置してもよい。ただし、流量監視フィルタ２３は、監視対象であるフィルタの前段で、かつできるだけ近い位置に設置するのが好ましい。
また、上記実施の形態ではデータ補間の方法として直線補間を利用したが、これ以外の補間方法、例えばラグランジュ補間やスプライン補間を利用してもよい。
また、上記実施の形態では、ＵＳＢバッファ２１ａを利用したが、ＩＥＥＥ１３９４インターフェースなどのバッファを用いても良い。
【００４９】
【発明の効果】
以上説明したように、本発明によれば、クロック制御のための複雑な構成を採用することなく、ストリームデータの入力・出力のタイミングの遅れを最小化することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係るストリームデータ処理システムの全体構成を示す。
【図２】図１に示すストリームデータ処理システムのソフトウエア構成を示す。
【図３】図１に示すストリームデータ処理システムの作用を示すフローチャートである。
【図４】データ列中のデータの挿入・削除の方法を示す。
【図５】本発明の第２の実施の形態に係るストリームデータ処理システムの作用を示すフローチャートである。
【符号の説明】
１・・・楽器、　３・・・出力装置（スピーカ）、　１１・・・ＣＰＵ、　１２・・・ＲＯＭ、　　１３・・・ＲＡＭ、　１４・・・ＨＤＤ、　１５・・・Ｉ／Ｆ、　１６・・・オーディオ・コントローラ、　２１・・・キャプチャ・フィルタ、　２２・・・イフェクタ・フィルタ、　２３・・・流量監視フィルタ、　２４・・・レンダラ・フィルタ。
【図１】
2004005520.tif 000003
【図２】
2004005520.tif 000004
【図３】
2004005520.tif 000005
【図４】
2004005520.tif 000006
【図５】
2004005520.tif 000007