JP3823466B2 - 時系列イベントデータを含むデータの処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体ならびに時系列イベントデータを含むデータが記録された記録媒体 - Google Patents
時系列イベントデータを含むデータの処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体ならびに時系列イベントデータを含むデータが記録された記録媒体 Download PDFInfo
- Publication number
- JP3823466B2 JP3823466B2 JP22299097A JP22299097A JP3823466B2 JP 3823466 B2 JP3823466 B2 JP 3823466B2 JP 22299097 A JP22299097 A JP 22299097A JP 22299097 A JP22299097 A JP 22299097A JP 3823466 B2 JP3823466 B2 JP 3823466B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- sequence
- format
- event data
- series event
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Electrophonic Musical Instruments (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
【発明の属する技術分野】
本発明は、時系列イベントデータと、該時系列イベントデータを書き換える書き換え手順を示すスクリプトとで構成されたシーケンスが少なくとも含まれるデータを処理する処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体ならびに時系列イベントデータを含むデータが記録された記録媒体に関するものである。
【0002】
【従来の技術】
従来、時系列イベントデータのフォーマットしてAIFFが知られている。例えば、音楽分野ではこれを応用したスタンダードMIDIファイル(以下、SMFと記す。)が知られている。MIDIとはMusical Instrument Digital Interfaceの略であり、異なる楽器間やシーケンサ、コンピュータ、ライティングコントロール、ミキサーなどを相互に結合し、情報の交換を可能にするために制定された規格である。そしてSMFとは、MIDI上で実時間で交換されるイベント情報を、タイムスタンプを付加してファイルに記録・保存するために考案されたフォーマットである。
【0003】
【発明が解決しようとする課題】
しかしながら、現在普及しているSMFでは、保存したりやりとりできるのは低レベルのMIDIイベント列だけであり、演奏データの音楽的な構造や時間的に変化する量などの情報をやりとりすることは困難であった。これらの情報は、シーケンサソフト固有の形式で保存されることしかできないものであった。
したがって、従来はイベントデータの時間的配置や時変データ等の高次の情報をやりとりすることができないという問題点があった。
これを解決するために高次の情報をやりとりすることのできる新規なフォーマットが考えられるが、従来のフォーマットとは異なるフォーマットになるため、データの互換性がなくなるという問題点が生じてしまうことになる。
【0004】
そこで、本発明は従来のフォーマットのデータと、高次の情報をやりとりすることのできる新規なフォーマットのデータとの間で互換性を実現した時系列イベントを含むデータを処理する処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体、ならびに、そのデータが記録されている記録媒体を提供することを目的としている。
【0005】
【課題を解決するための手段】
上記目的を達成するために、本発明の時系列イベントデータを含むデータの処理装置は、時系列イベントデータを含むデータの処理装置であって、前記時系列イベントデータを含むデータは、一本のトラックに、時系列イベントデータ列のみからなる第1のフォーマットのデータと、該第1のフォーマットのデータ中に第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で散在された第2のフォーマットのデータとが格納されたデータであり、前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、前記一本のトラックから前記識別情報に基づいて前記第2のフォーマットのデータのみを抽出する抽出手段と、抽出された前記第2のフォーマットのデータのシーケンスの内容が参照される際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスの時系列イベントデータ列を書き換えるスクリプト実行手段とを備えている。
【0006】
また、本発明の他の時系列イベントデータを含むデータの処理装置は、時系列イベントデータを含むデータの処理装置であって、前記時系列イベントデータを含むデータは、第1のトラックないし第Nのトラックに格納された時系列イベントデータ列のみからなる第1のフォーマットのデータと、第N+1のトラックに第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で格納された第2のフォーマットのデータとが一組のデータとされているものであり、前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、前記一組のデータから前記識別情報に基づいて前記第N+1トラックに格納された前記第2のフォーマットのデータのみを抽出する抽出手段と、抽出された前記第2のフォーマットのデータのシーケンスの内容が参照される際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスの時系列イベントデータ列を書き換えるスクリプト実行手段とを備えている。
【0007】
さらに、本発明の時系列イベントデータを含むデータの処理方法は、時系列イベントデータを含むデータを処理する方法であって、前記時系列イベントデータを含むデータは、一本のトラックに、時系列イベントデータ列のみからなる第1のフォーマットのデータと、該第1のフォーマットのデータ中に第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で散在された第2のフォーマットのデータとが格納されたデータであり、前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、前記一本のトラックから前記識別情報に基づいて前記第2のフォーマットのデータを抽出するステップと、抽出された前記第2のフォーマットのデータのシーケンスの内容が参照される際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスの時系列イベントデータ列を書き換えるステップとを備えている。
さらにまた、本発明の他の時系列イベントデータを含むデータの処理方法は、時系列イベントデータを含むデータを処理する方法であって、前記時系列イベントデータを含むデータは、第1のトラックないし第Nのトラックに格納された時系列イベントデータ列のみからなる第1のフォーマットのデータと、第N+1のトラックに第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で格納された第2のフォーマットのデータとが一組のデータとされているものであり、前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、前記一組のデータから前記識別情報に基づいて前記第N+1トラックに格納された前記第2のフォーマットのデータを抽出するステップと、抽出された前記第2のフォーマットのデータのシーケンスの内容が参照される際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスの時系列イベントデータ列を書き換えるステップとを備えている。
【0008】
さらにまた、本発明の時系列イベントデータ処理用プログラムを記録したコンピュータ読み取り可能な記録媒体は、処理装置に、上記本発明の時系列イベントデータの処理方法を実行させるためのプログラムが記録されているものである。
さらにまた、本発明の時系列イベントデータを含むデータが記録されたコンピュータ読み取り可能な記録媒体は、時系列イベントデータを含むデータが記録されたコンピュータ読み取り可能な記録媒体であって、前記時系列イベントデータを含むデータは、一本のトラックに、時系列イベントデータ列のみからなる第1のフォーマットのデータと、該第1のフォーマットのデータ中に第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で散在された第2のフォーマットのデータとが格納されたデータであり、前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、前記一本のトラックから前記識別情報に基づいて前記第2のフォーマットのデータが抽出され、該抽出された第2のフォーマットのデータのシーケンスの内容が参照されたときに、そのシーケンスに含まれる前記スクリプトが実行されることによりそのシーケンスの時系列イベントデータが書き換えられるものである。
さらにまた、本発明の他の時系列イベントデータを含むデータが記録されたコンピュータ読み取り可能な記録媒体は、時系列イベントデータを含むデータが記録されたコンピュータ読み取り可能な記録媒体であって、前記時系列イベントデータを含むデータは、第1のトラックないし第Nのトラックに格納された時系列イベントデータ列のみからなる第1のフォーマットのデータと、第N+1のトラックに第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で格納された第2のフォーマットのデータとが一組のデータとされているものであり、前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、前記一組のデータから前記識別情報に基づいて前記第N+1トラックに格納された前記第2のフォーマットのデータが抽出され、該抽出された第2のフォーマットのデータのシーケンスの内容が参照される際に、そのシーケンスに含まれる前記スクリプトが実行されることによりそのシーケンスの時系列イベントデータ列が書き換えられるものである。
【0009】
このような本発明によれば、第1のフォーマットのデータに第2のフォーマットのデータを異なるフォーマットで埋め込むようにしたので、第1のフォーマットのデータしか再生することのできない再生手段においては、第2のフォーマットのデータが無視されて第1のフォーマットのデータが再生される。また、第2のフォーマットのデータを再生することのできる再生手段においては、第2のフォーマットのデータのみを抽出して再生することができるようにしている。
従って、高次の情報をやりとりすることのできる新規な第2のフォーマットとしても、従来のフォーマット(第1のフォーマット)とのデータ互換性を実現することができる。
【0010】
【発明の実施の形態】
本発明の実施の形態例であるMIDIシーケンサ等の時系列データを含むデータの処理装置の構成の概略を図1に示す。ここで扱われているデータのデータフォーマットは本発明により新たに定義されるものである。
ここでは、この新規なデータフォーマットをHyper Media File(以下、HMFという。)と称呼するものとする。
HMFでは、高次の情報を記述できる一般的なデータモデルが与えられる。このデータモデルは、データの静的な構造および動的な機構の2つの側面から定義され、Hyper Media Data Model(以下、HMDMという。)と称呼するものとする。シーケンサソフトに、内部の固有データ構造とHMDMとの相互変換を実装させることにより、高次の情報を互いにやりとりすることができるようになる。
【0011】
すなわち、HMFは、HMDMをファイル形式で保存するフォーマットとして定義される。HMFは、例えば、MIDIイベントによる音楽記述を対象として、SMFをベースにして構成することができるが、MIDIイベントデータに限られるものではなく、音声や画像等の時系列イベントデータに適用することもできるものである。
【0012】
次に、HMFを音楽演奏に適用した場合の本発明の処理装置の実施の形態の一例を図1を参照しながら説明する。
図1において、符号1で示す処理装置Aは、音楽演奏データを生成しており、生成された演奏データはバッファメモリ1−1に格納される。そして、バッファメモリ1−1に格納されている演奏データの構造はHMDMとされており、HMDMの詳細は後述するが、HMDMには、たとえば図3(a)に示すように複数のパッケージ10〜13が納められている。HMFエンコーダ1−2は、HMDMのデータ構造とされた音楽演奏データを、パッケージ単位でHMF形式に変換して出力する。この場合の、HMF形式に変換されるパッケージの例がバッファメモリ1−1内に破線で図示されている。パッケージの詳細は後述するが、パッケージは、たとえば図3(b)に示すように複数のシーケンスが納められている。
【0013】
処理装置Aから出力されたパッケージ単位のHMF形式の音楽演奏データは伝送路7を介して処理装置Bあるいは記録媒体4に送られる。
記録媒体4には音楽演奏データがパッケージを単位としてHMF形式で記憶される。ここで、記録媒体4としては、ハードディスク、フロッピーディスク、磁気カード、CD−ROM、MO、DVD等、各種の記録媒体を使用することができる。また、1つのパッケージをエンコードしてファイルに格納することを、特に「セーブする」ともいう。
ここで、符号2で示す処理装置Bが記録媒体4から読み出した、あるいは、伝送路7を介して処理装置Aから送出されたHMF形式のデータを受け取るときは、処理装置BはHMF形式のデータをパッケージ単位ごとに受け取る。受け取ったパッケージはHMFデコーダ2−1においてHMDMのデータ構造のパッケージに変換されて、バッファメモリ2−2に保持される。ファイルに読み込んでデコードし、1つのパッケージとしてHMDMに格納することを、特に「ロードする」ともいう。
【0014】
また、図3(b)に示すようにパッケージには複数のシーケンスが納められており、シーケンスの詳細は後述するが、図3(c)に示すようにシーケンスは、それぞれイベントデータ30とスクリプト(script)31との組から構成されている。
スクリプトはHMFを特徴づけているものであって、データ変更の手順を示すプログラムであり、スクリプトつきのイベントデータは、このスクリプトを実行することで最終的なMIDIイベント列に変換される。
すなわち、処理装置Bで受け取った音楽演奏データを演奏しようとする場合は、バッファメモリ2−2内に格納されているHMDMが、データ展開部3により展開されるようになる。
【0015】
データ展開部3では、必要なシーケンスが順次送り込まれイベントデータ/スクリプト分離部2−3においてイベントデータとスクリプトとに分離される。分離されたスクリプトはスクリプト解釈部2−5において解釈され、この解釈に基づいてイベントデータ書き換え部2−4において、イベントデータを書き換える処理が実行される。これにより、最終的な時系列イベントデータが得られる。この時系列イベントデータは、MIDIイベントの出力部2−6を介してMIDI信号としてMIDI音源5に送られ、サウンドシステム6から放音される。あるいは、そのままSMF形式でファイルとすることもできる。
【0016】
なお、SMFを用いた場合、例えば処理装置Aと処理装置Bとがやりとりできる演奏データは、生のMIDIデータ(raw MIDI Data)の集まりであり、低レベルのデータしかやりとりすることができない。
本発明においては定義されたHMFを用いて処理装置Aと処理装置Bとの間で演奏データをやりとりすることができる。この場合、処理装置Aにおいて使用している音源に最適なように表情づけされている時系列演奏データから、それらの情報を含むHMDMを作成してHMF形式で処理装置Bに送ることができる。処理装置BはHMF形式のデータを受け取ってHMDMを復元し、自分の使用している音源に最適な演奏データとなるように、HMDMを展開して時系列イベントデータ列とされる演奏データを得るようにする。このときの展開は、予め処理装置Bに記憶させてある音源補正スクリプトを実行することにより行われる。
このように、高度な情報を含むシーケンス情報をHMFでは流通させることができる。
なお、図示されていないが処理装置Aと処理装置Bとは同様の構成とされており、上記説明では処理装置Aから処理装置Bにデータを送るようにしたが、処理装置Bから処理装置Aにデータを送ることも可能である。
【0017】
前記した図1においては処理装置Aおよび処理装置Bを機能ブロックにより表したが、処理装置Aおよび処理装置Bのハードの構成を示すブロック図を図2に示す。
この図において、CPU61は動作プログラムを実行して種々の処理を行う中央処理ユニット(CPU)であり、ROM62はCPU61の動作プログラム等が格納されているリード・オンリ・メモリ(ROM)であり、RAM63はCPU61がプログラム実行時にワークメモリとして使用するランダム・アクセス・メモリ(RAM)である。
【0018】
HDD(ハード・ディスク・ドライブ)65およびFDD(フロッピー・ディスク・ドライブ)66は動作プログラムや各種データを記憶しておく記憶装置であり、ROM62に動作プログラムが記憶されていない場合、このHDD65あるいはFDD66内のハード・ディスクあるいはフロッピー・ディスクに動作プログラムを記憶させておいて、記憶された動作プログラムをRAM63に読み込むようにする。CPU61はRAM63から動作プログラムを読み出して実行することにより、ROM62に動作プログラムが記憶されている場合と同様の動作をCPU61に実行させることができる。なお、HDD65は書き込み/読み出しを自由に行うことができるので、動作プログラムの追加や、バージョンアップ等を容易に行うことができる。
【0019】
また、スイッチ67は操作パネルに設けられている操作指示用のスイッチであり、スイッチ67の操作はスイッチ検出回路68により検出されてCPU61に知らされる。表示装置69にはメニューや操作情報等が表示され、この表示を参照しながらユーザはスイッチ67等を操作する。
CD−ROMドライブ70は、CD−ROMに記憶されている動作プログラムや各種データを読み出す装置である。CD−ROMドライブ70から読み出された動作プログラムや各種データは、HDD65内のハードディスクに書き込まれて記憶される。従って、動作プログラムの新規インストールやバージョンアップ等を容易に行うことができる。
【0020】
MIDIインタフェース(MIDI I/F)71はMIDIデータを送出あるいは受信するためのインタフェースであり、他のMIDI機器72が接続される。
通信インターフェース73は、LAN(Local Area Network)やインターネット、電話回線等の通信ネットワーク74に接続されており、この通信ネットワーク74を介して、サーバコンピュータ75と接続される。ここで、HDD65内に動作プログラムや各種データが記憶されていない場合は、通信インタフェース73を用いてサーバコンピュータ75から動作プログラムや各種データをHDD65にダウンロードする。
【0021】
具体的には、クライアントとなる本発明の処理装置は、通信インターフェース73および通信ネットワーク74を介してサーバコンピュータ75へ動作プログラムや各種データのダウンロードを要求するコマンドを送信する。サーバコンピュータ75は、このコマンドを受け、要求された動作プログラムや各種データを、通信ネットワーク74を介して、処理装置へ配信し、処理装置が通信インターフェース73を介して、これら動作プログラムや各種データを受信してHDD65に蓄積することにより、ダウンロードが完了する。
【0022】
本発明は、前記したHMFデータの処理装置および処理方法にかかるものであり、特に、従来のSMFのフォーマットとは異なる図3(a)(b)に示すようなHMF形式のパッケージを、従来のSMFデータに収めるようにして従来のSMFデータとの互換性を実現している。
すなわち、HMF形式のパッケージを、例えばテキスト形式で記述されたメタイベントとしてMIDIデータを格納するトラック内に散在させたり、SMFデータを格納するトラックとは別のトラックに格納したりしている。このように、一組のデータの中に従来のSMFデータと、HMF形式のパッケージとが格納されており、従来の再生手段ではメタイベントとされたHMF形式のパッケージは無視されるため、格納されているMIDIデータのみを再生するようになる。また、HMF形式のフォーマットのデータを再生することのできる再生手段では、メタイベントとされたHMF形式のフォーマットのデータのみを抽出して再生するようにする。これにより、HMF形式のフォーマットのデータとSMFデータとの互換性を実現することができる。
【0023】
次に、本発明の詳細な説明を行うが、本発明のHMFデータの処理装置はコンピュータに適用するソフトウェアで実現することも可能である。
まず、本発明の処理装置において処理が行われるHMDMの静的データ構造の典型的な全体像を図3(a)に示し、同図(b)にHMDMに納められている典型的なパッケージの構造を示し、同図(c)にパッケージに納められている典型的なシーケンスの構造を示す。
図3(a)に示すように、HMDMは複数のパッケージ11〜13から構成される。パッケージには、通常一曲の演奏データを格納しているパフォーマンスパッケージ(Performance Package)10と、利用頻度の高い便利なフレーズ断片やサブルーチン定義等を集めたプラグインパッケージ(Plug In Package)11,12と、基本的なデータ/サブルーチン定義を格納しているシステムパッケージ(System Package)13の種類がある。また、同図(b)に示すパッケージにはパッケージスクリプト32と、3つのシーケンス21,22,23が納められている。
なお、パッケージは、0または1つのパッケージスクリプトと、0以上のシーケンスからなる。すなわち、パッケージスクリプトや、シーケンスのいずれかが省略されたパッケージとすることもできる。
【0024】
また、シーケンス(Sequence)は同図(c)に示すようにイベントリスト(event list)30と、このイベントリスト30に対する変更を記述するスクリプト(Script)31とを対にした構造とされており、HMFにおいて重要なデータ構造とされている。
さらに、スクリプト31はイベントリスト30に対して、「このイベントはもっとこうである」というような変更を加える手順を示すプログラムである。そして、同図(c)に示すようにイベントリスト30と対をなしているスクリプト31がシーケンススクリプトと呼ばれ、同図(b)に示すようにパッケージ内に単独で存在するスクリプト32がパッケージスクリプトと呼ばれる。
【0025】
さらにまた、イベントリストは複数のMIDIイベントを時刻つきで保持するものである。HMFでは、ここに後述するリンクイベントというものを置くことができ、リンクイベントにより、複数の演奏パートを複数のトラックにより表しているSMFのトラックモデルに比べ、より柔軟な音楽演奏データ構造の記述を実現することができる。
なお、シーケンスに対して再生の指示やイベントに基づくデータ表示の指示など、その内容を要求すると、保持しているイベントリストに対してシーケンススクリプトを適用し、その結果を与えるようにしている。このように、イベントリスト部に演奏データの実体をおき、スクリプトで実体の内容の変更を記述するようにしている。
【0026】
次に、HMFからどのようにしてHMDM中の一つのパッケージが生成されるかについて述べる。
HMDMの処理では、約200の基本的な命令(命令セット)が定義されている。HMDMは、これらの命令や数値を一列に格納した「実行コード」を受け取って、命令を順次実行することができる。命令には、HMDMの内容を参照したり、変更するものなどがある。
この実行コードをテキストで記述する規則が定義されている。具体的には、命令・数値のテキスト表記やそれらの命令に引数を与える表記の規則などである。この規則で定義されるプログラミング言語を”Hyper Media Executable(HME)”と称呼するものとする。
【0027】
HMDMの処理を行うときは、HMEで書かれたテキストを読みとり、実行コードを生成してそれを実行する機能を持たせるようにする。このHMDMの内容を変更するプログラムは、HMEテキストを直接書く方法、あるいは、高級言語を使用してプログラムを書く方法により生成することができる。さらに、グラフィカルなインターフェースにより、ユーザに意識させずにシステムが自動的に生成してもよい。
いずれの方法で書かれたプログラムでもHMDMを処理する際は、テキストの内容を調べ、HMEであれば直接読みとって実行コードが実行される。あるいは、テキスト内で指定されているコンパイラを起動してそのテキストをHMEテキストに変換し、変換されたHMEを読みとって実行コードを実行する。なお、形式の判別のため、テキストの1行目にはコンパイラの名称をおくようにしているが、他の方法により形式を判別してもよい。
【0028】
HMEは、HMDMに対してあらゆる変更操作ができるように設計してあり、全く内容のない新規のパッケージから出発して、それに対して次々と変更操作を加えれば、どのような内容のパッケージでも作り上げることができる。そして、HMEはテキストで表記することができるので、容易にファイルに格納することができる。単純にテキストファイルとしてもよいし、あるいはSMF形式のファイルに、適当なSMFメタイベントを用いて格納してもよい。
従って、HMEを用いて保存しようとするパッケージに含まれるすべての要素を順次登録していくような変更操作の並びを作成し、それをテキスト形式でファイルに保存すれば、パッケージの内容をファイルに記録することができることになる。
【0029】
ところで、HMFはHMDM中の一つのパッケージの内容を記述したファイルであり、この記述の方法としてHMEを用い、パッケージの内容の記述を行うようにしている。以下、例を用いてテキスト記述からパッケージを復元できることを説明する。
テキスト記述は次のような構成となっているが、説明の都合上実際のHMEそのものではなく、大まかな内容を示している。また、左端の番号も、説明の都合上付したものであり実際にはこの番号はテキストには含まれない。
【0030】
”HME”language 1.00 Version
1.空のパッケージを作成し、それをpとする。
2.空のパートシーケンスを作成し、それをsとする。
3.イベントeを作る;eの時刻は100とする;eの内容は”91 40 40”とする;eをsに格納
4.イベントeを作る;eの時刻は150とする;eの内容は”81 40 00”とする;eをsに格納
5.sをpに”seq_A”という名前で格納する
6.空のパートシーケンスを作成しそれをsとする
7.イベントeを作る;eの時刻は300とする;eの内容は”91 51 40”とする;eをsに格納
8.イベントeを作る;eの時刻は450とする;eの内容は”81 51 00”とする;eをsに格納
9.sをpに”seq_B”という名前で格納する
10.pを出力する
【0031】
なお、イベントeの内容を表す3組の1バイトのデータにおいて、最初に位置するデータ”91”はノートオン、データ”81”はノートオフを表し、2番目に位置する1バイトのデータは16進数でノートナンバを表し、3番目に位置する1バイトのデータは16進数でベロシティを表している。
次に、HMDMの処理時にこのテキストを読み込み、実行コードに変換して実行する様子を以下に示す。
HMDMの処理時に、まず冒頭の”HME”を認識して、これはHMEのテキストであると判断し、実行コードに変換する。ここで、別の言語が指定されており、それをHMEテキストに変換する外部ソフトウェアが指定されていれば、その外部ソフトウェアを起動し、そのテキスト本体部分を処理させてその結果を受け取るようにする。
【0032】
実行コードに変換して実行する様子を述べると、上記1で、新規の空のパッケージが作成される。このパッケージはメモリには確保されることになるが、また、HMDM中のパッケージの一つとしては登録されない。変数pでそれを参照する。
上記2で、空のパートシーケンスをメモリ上に用意する。
上記3および4で、用意したイベントに、必要なパラメータを設定し、パートシーケンスに格納する。実際には、イベントの数だけこれを並べればよい。この結果、パートシーケンスには、イベントが並んだ状態が作り出される。
上記5で、作り上げたパートシーケンスsに名前を付けて、パッケージpに登録する。
上記6,7,8,9では同様のことを繰り返し、新たなパートシーケンスを作り上げてパッケージpに登録する。
【0033】
以上で、新規のパッケージに、二つのパートシーケンス”seq_A””seq_B”が、内容が復元された状態で登録されたことになる。以下同様にパートシーケンスやカーブシーケンスを作成しては登録するという手順を記述していけばよい。パッケージスクリプトを表現するテキストの登録も同様に記述することができる。最後に作り上げたパッケージをHMDMのパッケージ列の末尾に追加する。あるいは、どこに挿入するかをユーザの指定に任せてもよい。このようにしてパッケージを組み上げてパッケージ列に組み込んだ後、さらにパッケージスクリプトを実行することになる。
以上の例で示したように、HMEでの記述を「実行」することにより、任意の内容を持ったパッケージを、HMFからHMDMの中に復元することができる。逆に、HMDMのあるパッケージの内容を、HMEで記述し、テキスト形式でファイル化することが可能である。
【0034】
次に、パッケージの詳細を前記図3および図4を参照しながら説明する。図4には”song1”と名付けられたパッケージが示されており、その中には、1つのパッケージスクリプトと、”root”,”bass-trk”,”bass-intro”,”bass-1”,”bass-2”,・・・,”drums-A”,”melody-cresc”と名付けられたシーケンス群が収められている。
このように、1つのパッケージは、0または1つのパッケージスクリプトと0以上のシーケンスからなっている。ただし、シーケンスは、図示するように一列にならべて管理されるわけではない。
【0035】
パッケージは、以下に示すような役目をもっている。
まず、HMFのデータ流通の単位とされている。すなわち、ファイルのセーブ、ロードはパッケージ単位とされており、通常一曲の音楽演奏データを一つのパッケージとして流通させる。このようなパッケージをパフォーマンスパッケージ10と呼ぶ。
一方、便利なフレーズ断片やサブルーチン定義をパッケージスクリプト中に集めたパッケージもあり、これをプラグインパッケージ11,12と呼ぶ。なお、一つのシーケンスをやりとりする場合でも、パッケージに入れて行なう。ただし、スクリプトのソースだけをテキストファイルとして交換することも可能である。
また、パッケージには、HMFシステムにはじめから提供される基本的なデータ/サブルーチン定義を格納することができ、このためのパッケージがシステムパッケージ13である。
【0036】
また、パッケージにはロード時の初期化スクリプトをおくことができる。これが、パッケージスクリプト32であり、音楽演奏データごとの初期設定は、パッケージスクリプトを実行することにより行われる。
なお、パッケージ内の任意のシーケンスを指定するために、HMDMでは名前を用いている。パッケージの中のシーケンスは名前を一つ持つことができ、これをシーケンス名と呼ぶ。シーケンス名は、それを含むパッケージをファイルにセーブし、その後でロードされた場合も保存される。ただし、一つのパッケージ内に、同名のシーケンスが複数存在することはない。すでに存在するものと同名のシーケンスをパッケージに登録すると、古い内容は捨てられ、新しいものに置き換えられる。
【0037】
パフォーマンスパッケージの場合、パッケージ中のいずれかのシーケンスが「ルートシーケンス」となる。ルートシーケンスとは参照関係の起点となるシーケンスである。すなわち、外部からルートシーケンスの内容を要求すると、パッケージ内に含まれる他のシーケンスが参照され、その結果、例えば音楽演奏の全体のデータが得られる。パフォーマンスパッケージ中のあるシーケンスがルートシーケンスであることを示すには、シーケンス名を”root”とする。
ルートシーケンスも通常のシーケンスであるから、他のものと同様に作成される。なお、一般に、ルートシーケンスのスクリプトおよびイベントリストにはデータ全体に関する設定がおかれる。
【0038】
パフォーマンスパッケージにおけるパッケージスクリプトには、その音楽演奏データを構成するための共通サブルーチンをおくことができる。また、その曲のための初期設定もここにスクリプトとして置くことができる。
なお、シーケンススプリクトを作成して、イベントリストに対し任意の変更を加えることが可能とされる。
【0039】
プラグインパッケージは、便利なフレーズ断片やサブルーチン定義を集めたものである。一般のユーザは、完成品のプラグインパッケージをブラックボックスとしてHMDMにロードすることにより、あらかじめ仕上げられたシーケンスやサブルーチンを利用することができるようになる。ユーザがスクリプトの内容を変更、あるいは新規作成することも可能である。
プラグインパッケージには、ルートシーケンスは存在しない。パッケージスクリプト中に1つまたは複数のサブルーチン定義を格納しておくことにより、”サブルーチン集”とすることができる。たとえば、”slide”というサブルーチンが提供されていて、あるシーケンス内のイベントを2つ指定して、この”slide”というサブルーチンを呼ぶとそれらをギターのスライド奏法により演奏された状態のイベント書き換えることができるようになる。
【0040】
また、プラグインパッケージは、例えば、“伴奏スタイル集”とすることができる。すなわち、ある伴奏パターンのシーケンスが定義されており、引数としてコードを指定して内容を要求すると、そのコードに応じて音高が変換された伴奏パターンのイベントリストを得ることができるようになる。
また、シーケンスを用いて、フレーズ集やカーブデータ集等を提供することができる。この場合、シーケンススクリプトがそれらの修飾の方法を提供しており、例えばフレーズ集のシーケンスに対して引数をつけて、該シーケンスの内容を要求すると、いろいろに変化したフレーズを得ることができる。
【0041】
システムパッケージは、システム機能の付加的な部分を実現するためのパッケージであり、システムのプリミティブな機能の上に実装される。
システムパッケージには、ルートシーケンスは存在せず、パッケージスクリプトを用いて、基本的なサブルーチンが提供されたり、シーケンスを用いて、代表的な伴奏パターン等の基本的なデータなどが提供される。
【0042】
次に、シーケンスについて説明すると、シーケンスはHMFの核となるデータ構造の単位であり、イベントリストとスクリプトの組という形で構成され、パートシーケンスとカーブシーケンスとの2種類がある。このうちパートシーケンスには、シーケンスであって、保持するイベントが0-255の8ビットの並びであるバイト列、MIDIの音高,オンベロシティ,オフベロシティを有しているノートイベント、および、後述するリンクイベントが納められている。また、カーブシーケンスにはシーケンスであって、保持するイベントが数値であるものが納められている。
なお、カーブシーケンス中にはリンクイベントは含まれない。
【0043】
シーケンスは、内容を要求されると、保持しているイベントリストの写しを作り、スクリプトを実行してイベントリストを修飾する。そして、修飾されたイベントリストを出力する。すなわち、保持しているイベントリスト自体は書き換えられない。
例えば、図5に示すシーケンスに内容を要求(reference)すると、シーケンス中のスクリプトに記述された”melody notes harder ...”、および、”exaggerate tenuto”が実行されて、図示するようにメロディの各イベントのベロシティが増大(図ではイベントを示すバーの幅が太く表されている)されると共に、持続時間も長くされて、メロディが強めにされると共に、そのテヌートが強調されることになる。そして、このようにして書き換えられたイベントリストが返される(response)ことになる。また、必要に応じて引数を与えることもでき、たとえば「メロディノートを”10%強く”」というように指定することも可能である。
【0044】
また、シーケンスを構成するイベントリストとスクリプトは、静的にも動的にも独立した存在である。データ構造としても分離された形になっており、スクリプトの実行とイベントリストの演奏進行も全く別の過程となっている。すなわち、イベントリストの中にスクリプトがまじっていて演奏の進行と共にスクリプトが実行されるのではない。
このように、HMFでは元となる演奏の断片をMIDIイベントの形でイベントリストに保持しておき、スクリプトの引数を調節したりスクリプト自体を差し替えることにより、様々に変化させることができるのである。これにより、テンプレートの変更も容易に行うことができる。
なお、スクリプトはイベントリストに適用するコマンドを保持するものなので、スクリプトをみるとそのイベントリストの編集過程を知ることができる。すなわち、シーケンスは自己の編集過程を保持している演奏データともいえる。
【0045】
ここで、シーケンスの指定方法について説明すると、HMDM内の特定のシーケンスを指定するには、パッケージ名とそこでのシーケンス名を合わせて指定するようにする。これは、パッケージ名はHMDM内で一意的であると共に、シーケンス名はパッケージ内で一意的であるからである。
さらに、HMDMでは、シーケンスの識別法として、前記名前による方法に加え、ID番号による方法でもよい。
ID番号は、あるパッケージのロードでHMDMに新たなシーケンスが加わると、HMDM中で一意性が保証される「ID番号」をIDマネージャが各シーケンスに与える。以後HMDMでは、このID番号で任意のシーケンスを直接指定することができる。このように、ID番号は、パッケージではなくHMDMで一意的なものである。
【0046】
このID番号は整数値であるが、通し番号とは限らない。従って、シーケンスを一つ削除しても他のシーケンスのID番号が変化するということはない。また、いったんHMDMに登録されれば、HMDMから削除されるまでの間、シーケンスのID番号は不変とされる。
ただし、パッケージをHMF形式でエンコードする際にはID番号は記録されず、そのパッケージを後刻HMDMにロードしたときに、各シーケンスに新しいID番号が与えられる。すなわち、新シーケンスの登録として扱われる。
【0047】
つぎに、イベントリストの詳細を説明する。イベントリストは、イベントを時刻順に任意の数保持するようにしたデータ保持構造である。また、イベントは、開始時刻、持続時間、後述するラベルの3つの情報を次に示すいずれかのデータをあわせて保持するデータ単位である。
・バイト列・・・0-255の8ビットの並び
・ノートイベント・・・MIDIの音高、オンベロシティ、オフベロシティを有しているイベント
・リンクイベント・・・リンクを保持しており、パートリンクイベントとカーブリンクイベントがある
・数値
【0048】
このようなイベントを保持するイベントリストでは次のような特徴点がある。
1.各イベントに1つ以上のラベルをつけることができる。この時、各イベントにID番号がついていてもよい。
2.リンクイベントが用意されている。(これについては後述する。)
3.時変カーブ(折れ線)データの実体の保持にも用いることができる。(これについても後述する。)
【0049】
ラベルは、イベントリスト中のイベントの識別を行うために付与されるもので、ユーザが任意に付与することができる。また、イベントの識別をID番号によって識別するようにしてもよい。
ラベルのついたイベントリストの例を図6に示すが、イベントリスト中の各イベントは、任意の文字列からなるラベルを任意の数持つことができる。また、ラベルのないイベントがあってもよい。
例えば図6では、左上のイベントに、”melody”,”tenuto”,”first”,という3つのラベルがつけられている。HMDMにおいては、このラベルを用いてイベントを指定することができる。
【0050】
ラベルづけは、従来のシーケンサソフトの対象イベント選択操作に対応している。従来のシーケンサソフトでは、対象となるイベントをマウスなどで任意の数指定し、それに対して編集を行なうようにしていた。イベントにラベルをつけることは、その「選択」を記録することに相当する。したがって、ラベルを指定すればその選択パターンを再現することができ、それに対して何らかの処理を施すことを容易に行うことができるようになる。
例えば図6において、「”melody”というラベルのついたイベント」と指定すると、上の破線で囲ったイベントをマウス等で選択するのと同様の効果を持つようになる。また、「”chord”というラベルのついたイベント」を指定すると、下の破線で囲ったイベントを選択することになる。なお、”melody”or”tenuto”というように複数のラベルを指定することも可能である。
【0051】
また、ラベルは、HMF形式にエンコードし後刻デコードした場合にも保存される。
ここで、図6ではピアノの両手の演奏が1つのシーケンスに入っている。そして、各イベントには、”melody”、”chord”、”bass”といったラベルが、それぞれあてはまるノートオンイベントに付与されている。したがって、スクリプトにおいて「”melody”というラベルのついたイベントは強めに」「”bass”というラベルのついたイベントは強めに」などという記述が可能となる。
【0052】
次に、ラベルが付与されたイベントの選択的なイベント書き換え処理のフローチャートを図7(a)に示し、同図(b)に示すイベントリストを参照しながらその説明を行う。
ここでは、ラベル”xxxx”を持つイベントの書き換えにおいて、ラベル”xxxx”がラベル”melody”の場合を例に挙げて説明する。イベント書き換え処理がスタートされると、ステップS1においてイベントリストにイベントが残っているか否かが判断される。この場合、処理が開始された直後であるので図7(b)に示すイベントリストのすべてのイベントが残っており、YES(y)と判断されてステップS2に進む。ステップS2ではイベントが一つ選択される。この場合、EventA1が選択され、ステップS3にてイベントに指定されたラベル”melody”が付与されているか否かが判断される。この場合、EventA1にはラベル”melody”が図7(b)に示すように付与されているので、YES(y)と判断されてステップS4に進む。ステップS4では、イベントに対し、強めにする等の指定された処理を実行し、ステップS1に戻る。
【0053】
そして、ステップS1ないしステップS4の処理が再度行われるが、この場合は、EventC1が選択されるが、EventC1にはラベル”melody”が付与されていないのでステップS3にてNO(n)と判断されてステップS1に再度戻るようになる。
ついで、ステップS1ないしステップS4の処理が順次選択された図7(b)に示すイベントに対して実行され、図7(b)に示すイベントリストのすべてのイベントに対して処理が実行されると、ステップS1にてNO(n)と判断されてイベント書き換え処理は終了する。この結果、この場合はラベル”melody”が付与されているEventA1,EventA2に対してイベント書き換え処理が実行されることになる。
【0054】
また、HMFは、イベントリスト中のイベントを識別するため補助的にID番号も用いることがある。
この補助的な機構は、スクリプト言語との兼ね合いのためのものである。スクリプトの処理速度や複雑さとのトレードオフのため、ラベルによるイベント識別のための十分な機構(連想配列など)が言語に提供できない可能性もある。この場合、もっとも基本的なデータである整数でイベントを識別する必要が生じる。このため、ID番号が補助的に用いられるのである。
【0055】
図8に、ID番号をイベントに付与する機構の一例を示す。
ユーザ入力などでイベントリストに新たなイベントが加わる際、イベントリスト中で一意性が保証される「ID番号」が各イベントに与えられる。以後、このID番号で、任意のイベントを直接指定することができるようになる。
例えば、図8では、”NoteOn a3 64”というイベントを時刻0に印加している。このイベントの登録の際、ID manager40は、その時点でほかのどのイベントにも使われていない数値「1」をこのイベントに与える。以後、このイベントリストの中では、id=1とすれば必ずこの時刻0の”NoteOn a3 64”のイベントが指定されることになる。
【0056】
なお、ID番号は整数値であり、通し番号とする必要はない。従って、イベントを一つ削除しても、他のイベントのID番号が変化することはない。また、いったんイベントリストに登録されれば、削除されるまで、イベントのID番号は不変である。
例えば図8においてid=16のイベントを削除しても、他のどのイベントのID番号も変化しない。
ただし、あるイベントをイベントリストから削除し、ふたたび同一イベントを登録した場合、はじめのID番号は保存されず、新しいID番号が与えられる。すなわち、イベントリストへの新イベントの登録として扱われるようになる。
【0057】
次に、スクリプトの説明を行う。スクリプトは、前述したようにイベントリストを修飾する手順を記したプログラムである。
スクリプトの内容は、対象となるイベントを設定し、設定されたイベントに対して行う操作を示すことの繰り返しとされている。対象となるイベントの設定方法としては、前記したようにイベントに付与されているラベル、あるいはID番号を指定することにより設定する方法や、時刻範囲を指定してその時刻範囲に含まれるイベントを指定する方法がある。
図9にスクリプトの内容の一例をイベントリストと対応づけて示す。この図に示すスクリプトの一行目では、”melody”というラベルの付いたイベントについてベロシティを10増加する処理がプログラムされている。また、2行目では、IDが36であるイベントの音高をC3と設定している。さらに、3行目では、”slur”で始まるラベルの付いたイベントについてスラー処理をしている。
なお、3行目の”slur”に付された*印はワイルドカードであり、これには”slur1”、”slur2”、”slur3”等のラベルが該当する。
【0058】
なお、図9に示すスクリプトの表記は概念的なものであり、本発明における前述した実際のプログラミング言語とは異なるものである。
設定されたイベントに対するスクリプトの操作としては、イベント内容の読み出し、イベント種類の判別、値の変更、イベント自体の消去、新たなイベントの追加、ラベルの追加/削除/改名等の操作がある。
スクリプト言語としては、アセンブラ等の低水準の言語を用いることができる。この場合、直接この言語でスクリプトを記述してもよいし、高級言語を設計し、この言語へのコンパイラを用意するようにしてもよい。
【0059】
また、各シーケンスが内蔵するスクリプトを、シーケンススクリプトと呼ぶ。
シーケンススクリプトには、対応するイベントリストの内容と密接に関連した記述がなされている。
一般にシーケンススクリプトは、「このようなイベントに対して、このような変更を施す」というイベントリスト編集コマンドが、反復や条件分岐をまじえて多数書かれている。
なお、シーケンススクリプト中でサブルーチンを定義することは可能である。
【0060】
さらに、各パッケージ毎に登録されるスクリプトをパッケージスクリプトと呼ぶ。
パッケージスクリプトは、前記図4の最上段に示されているが、パッケージをロードする際にパッケージスクリプトは一度実行される。そこで、このパッケージスクリプトで汎用サブルーチンの定義を記述しておけば、パッケージをロードするだけで新たなサブルーチンを利用することが可能となる。
このことから、パッケージスクリプトは、そのパッケージを使う上で必要な初期設定と、汎用サブルーチンの定義とで占められている。ここでのサブルーチンの定義は、外部からも利用可能となる。
【0061】
次に、本発明の特徴点の一つであるカーブデータについて説明する。
ピッチベンドや音量等を変化させる変化カーブは、連続的に変化する量のデータとされており、SMFにおいて変化カーブのデータは、具体的なイベントの離散的な列で表現されている。例えば、図10(a)のAに示す離散的なイベントデータ列により本来連続的に変化する量が表されている。すると、このAに示すイベントデータ列と、図10(a)のBに示すイベントデータ列とを加算して新たな変化カーブの変化特性を作成しようとしたとき、単純に混合すると、図10(a)のA,Bmixに示すように個々の変化カーブを正しく加算した変化特性とはならない。
【0062】
そこで、HMFでは、カーブデータ(折れ線データ)を定義し、図10(b)に示すように操作する枠組みを与えるようにする。このように定義すると、図10(b)のAに示す折れ線のカーブデータと、同図のBに示す折れ線のカーブデータとを加算することにより、同図のA,Bmixに示すように新たなカーブデータを得ることができるようになる。
これにより、ボリュームやテンポ、その他あらゆる時変パラメータを抽象化することが可能となる。また、このカーブデータはそのままで処理装置間でやりとりすることができるようになる。
【0063】
このカーブデータは、例えば、前記図4に示すcurve”melody-cresc”に示すシーケンスに保持されているように、シーケンスの一種として管理され、これをカーブシーケンスと称呼する。すなわち、カーブシーケンスとはシーケンスを使用してカーブを実際に表したシーケンスである。このカーブシーケンスを図11に示す。パートシーケンスでは、図示するようにイベントリストにMIDIイベント列が時刻順で保持されるが、カーブシーケンスでは、イベントリストを使用してカーブの変化点の時刻と値の組を格納している。なお、イベントとイベントの間の任意の時刻のカーブデータの値は適切な内挿法、例えば直線補間法等を用いることにより得るようにしている。
カーブの内容の参照には、後述するリンクイベントを用いる。パートシーケンス中の任意の時刻に、シーケンスの一種であるカーブシーケンスの内容を要求するイベント(カーブリンクイベント)をおくようにする。このカーブリンクイベントでは、カーブの名前等のカーブの識別情報や、このカーブを音量あるいはピッチに適用する等の適用先の情報を含ませることができる。
【0064】
また、特定のイベントにカーブが固定されることがなく、例えばピッチベンド用のカーブデータをボリュームを変化させるカーブデータに書き換えて用いることができるようになる。
なお、カーブデータは時刻から値への変換関数となっている。これに基づき、「ある時刻での値を得る」、「カーブから適切な間隔のMIDIイベントを生成する」、「既存のMIDIイベント列からカーブシーケンスを逆生成する」といったことが可能となる。また、カーブどうしの加算なども定義されており、カーブによる表現を重ねていくことが可能となる。
カーブシーケンスの変形操作は、実際にはパートシーケンスにおけるイベントリストの編集と同様に行うことができる。
【0065】
次に、ピッチベンドの表現づけにカーブデータを利用する例を図12を参照しながら説明する。
図12は、ユーザが、”curve−a1”というカーブデータをピッチベンドのストリップチャートに取り込んだところを示しており、システムは、このカーブから適切な間隔のピッチベンドイベントを自動的に生成して発生すべきMIDIイベント列内に挿入する。この場合、ユーザがカーブデータ”curve−a1”の形状を変更すると、システムはピッチべンドのイベントを生成し直すようになる。
【0066】
なお、カーブシーケンスに対してスクリプトを付加するようにして、参照時にスクリプトを実行することにより、元の折れ線を書き換え、書き換え後のイベント間を内挿して最終的なカーブデータを得るようにしてもよい。また、カーブリンクイベントによってカーブを参照する際に、カーブリンクイベントを含むシーケンスのスクリプトを実行して、折れ線を書き換えてもよい。さらに、カーブデータの各点に対してラベルをつけることにより、各点のデータを選択的に書き換えるようにしてもよい。これにより、カーブの変化特性を容易に変更することができる。
なお、折れ線のカーブデータにおいて、任意の時刻の値は適切な内挿を行うことにより得るようにする。これにより、折れ線データから適切な間隔の離散的イベント列を生成することができる。
【0067】
次にシーケンスリンクイベントについて説明する。
シーケンスにおいては、パートシーケンスのイベントリスト中に「シーケンスリンクイベント」を置くことができる。シーケンスリンクイベントは、他のあるシーケンス(パートシーケンスやカーブシーケンス)を指定する。そして、該シーケンスリンクイベントの時刻以降にそのリンクイベントが指定するシーケンスを取り込むべきであるということを示す役目をもっている。
例えば図13(a)では、”melody”というパートシーケンスのイベントリストの時刻tの位置に“chord”というパートシーケンスへのシーケンスリンクイベントが置かれている。スクリプトを実行して最終的なパートシーケンス”melody”を得る時に、パートシーケンス”melody”のスクリプトが実行されてイベントリストが修飾される。スクリプトの実行が終了すると、シーケンスリンクイベントの解決が図られ、パートシーケンス”chord”の取り込みが起きる。こうして、図13(b)に示すように、パートシーケンス”chord”を取り込んだパートシーケンス”melody”が得られる。この処理は、演奏が進むにつれて実行されるのではなく、パートシーケンス”melody”の内容を得ようとしたときに実行される。
【0068】
本来イベントリストは時刻付きMIDIイベントの集合であり、イベントリスト中のMIDIイベントは必ずMIDI出力されるものである。シーケンスリンクイベントは、イベントリスト中に置かれながら、MIDI出力には送出されず、シーケンス間の関連を表示するだけのものである。
なお、前記したようにリンクは、再生時に解決されるものではない。リンクイベントで示されるリンクは、シーケンス間の関連を静的に示しているだけであり、リンク解決のプロセスは、演奏のプロセスとは無関係にパートシーケンスの内容が参照された時に進行するのである。
なお、シーケンスの内容を要求する際、引数を渡すことができる。
【0069】
このリンク機構により、現在の一般的なシーケンサソフトが採用しているトラックモデルの音楽演奏データ構造を表現することができる。従って、トラックモデルと同様の音楽演奏データ構造を表現しながらも、複数のシーケンサソフト間で音楽演奏データを、その階層構造の情報までも含めて交換することが可能となる。これはSMFによるトラックモデルを用いた従来ではできなかったことである。
例えば、図14(a)に示すtrack1ないしtrack5の5つのトラックからなるデータを、同図(b)に示すルートシーケンスの時刻0にseq1からseq5までの5つのシーケンスを取り込むというリンク構造で表現している。
【0070】
また、同図(a)に示すトラックモデルにおいて各トラック内にフレーズ断片が配置される構造は、同図(b)に示すように子シーケンスの適切な時刻にリンクイベントを置いて表現するようにする。例えば、図14(a)において、track1にpart a,part b,part cが置かれている状態は、同図(b)に示すようにseq1の適切な時刻にseq a,seq b,seq cへのリンクイベントを置くことで表現することができる。
さらに、一部のシーケンサソフトに見られるような、シーケンスが階層的になった構造も、同様にして表現することができる。
【0071】
ルートシーケンス以外のシーケンスは、リンクしない限りMIDI出力に寄与しない。したがって、典型的表現パターンを一つずつ入れたシーケンスを多数用意しておき、好きなものをリンクして利用することができる。このため、リンクの枠組は、典型的表現パターンの利用にも都合がよいものである。
また、一つのシーケンスが、任意数の他のシーケンスを参照することができ、さらに、複数のシーケンスが、システムのどこかに存在するある一つのシーケンスを参照することもできる。ただし、参照がループを構成することは禁止される。このループとは、シーケンスAがシーケンスBを、シーケンスBがシーケンスCを、そしてシーケンスCがシーケンスAを参照しているように、参照がループ状とされている状況をいう。
なお、リンクイベントにおいてシーケンスを指定するばあいは、リンクイベントも、ID番号でなくパッケージ名とシーケンス名で参照対象を保持するようにしている。
【0072】
次に、HMFの静的なデータ構造が、外からの要求に対してどのような動的な振る舞いをするのかについて説明する。
図15に示すように、例えば、ファイルシステムの記録媒体4に格納されているHMFファイルから一つのパッケージをロードすると、パッケージのロード時にパッケージスクリプトが実行されて、サブルーチンの定義があれば、パッケージディクショナリを用意してそこにサブルーチン定義が格納される。
ここでディクショナリについて説明すると、ディクショナリはスクリプトで出現する変数/サブルーチンを保持するものであり、パッケージごとにあるパッケージディクショナリと、スクリプト実行中だけ存在するデータ保持用のディクショナリスタックとの2種類がある。
【0073】
たとえば、図15に示すように、(1)HMF形式のパッケージ”GMbasicExpr2”をロードすると、ユーザが指定した位置にパッケージ”GMbasicExpr2”をロードした内容がおかれる。ついで、(2)パッケージスクリプトの実行が行われ、(3)パッケージ”GMbasicExpr2”内のサブルーチン定義”cresc1”が、パッケージ”GMbasicExpr2”に対応する位置に作成されたディクショナリ50に格納される。パッケージ内のシーケンススクリプトは実行形式にコンパイルしておくが、まだ実行はしない。
図15では、HMF形式のパッケージ”song1”をロードしたときに、そのパッケージスクリプトが実行されその中のサブルーチン定義”b72vol”が、パッケージ”song1”に対応する位置に作成されたディクショナリ51に格納されており、パッケージ”basicExpr1”をロードしたときに、そのパッケージスクリプトが実行され、サブルーチン定義”cresc1”が、パッケージ”basicExpr1”に対応する位置に作成されたディクショナリ52に格納されている。
ただし、ディクショナリスタック”dict. stack”はまだ作成されていない。
【0074】
つぎに、HMF形式のデータがロードされた状態において、ユーザが音楽演奏データを構成する一つのシーケンスの内容を参照したときの振る舞いを説明する。
ユーザが、音楽演奏データを構成する一つのシーケンスの内容を参照しようとしたときのシーケンス参照処理を図16ないし図18を参照しながら説明する。なお、図16はシーケンス参照処理を模式的に示す図であり、図17、図18はシーケンス参照処理のフローチャートを示す図である。
【0075】
図17(a)に示すシーケンス参照処理のフローチャートにおいて、シーケンス参照処理がスタートされると、ステップS10にて図16(a)に示すようにイベントリストLの複製イベントリストL’を作る処理が行われる。このステップS10の処理が図17(b)に示すフローチャートに示されており、イベントリストLの複製作成処理がスタートされると、ステップS20にて空の複製イベントリストL’が生成される。ついで、ステップS21にてイベントリストLにイベントが残っているか否かが判断され、残っている場合はYES(y)と判断されてステップS22に進みイベントを一つ複製しイベントリストL’へ登録する。ステップS20およびステップS21の処理はイベントがイベントリストLに残っている間循環して行われ、イベントが残っていないときにNO(n)と判断されてイベントリストLの複製作成処理が終了する。
【0076】
ステップS10の処理が終了すると、ステップS11にて複製されたイベントリストL’に対して図16(b)に示すようにシーケンススクリプトを適用する処理が行われる。このステップS11の処理が図17(c)に示すフローチャートに示されており、シーケンススクリプト適用処理がスタートされると、ステップS30にてスクリプトに命令が残っているか否かが判断される。この処理の開始直後には命令が残っているので、YES(y)と判断されてステップS31に進み、命令が一つ実行され、ステップS30に戻る。ステップS30とステップS31の処理はスクリプトに命令が残っている間循環して行われて、命令が1つづつ実行されていく。そして、スクリプト内の命令がすべて実行されると、ステップS30にてNO(n)と判断されてシーケンススクリプト適用処理が終了する。
【0077】
ステップS11の処理が終了すると、ステップS12にて複製されたイベントリストL’のパートリンクが図16(c)に示すように解決される処理が実行される。このパートリンク処理のフローチャートを図18(a)に示すが、パートリンク処理がスタートされると、ステップS40にてイベントリストL’にパートリンクが残っているか否かが判断される。イベントリストL’にパートリンクが残っている場合は、YES(y)と判断されてステップS41に進む。ステップS41ではリンクすべきパートが所定の順序で探索され、ステップS42にて対象パートが発見されたと判断(y)された場合には、ステップS43にてそのパートの内容が参照される。ついで、ステップS44にて得られたイベントリストの内容をイベントリストL’にマージし、さらにステップS45にて処理したリンクイベントを削除して、ステップS40に戻る。
【0078】
なお、ステップS42にて対象パートが発見されないと判断(n)された場合は、ステップS45にジャンプしてそのリンクイベントが削除される。また、ステップS40ないしステップS45の処理はイベントリストL’にパートリンクが残っている間循環して実行され、順次パートリンク処理が実行される。そして、イベントリストL’に残ったパートリンクがなくなると、ステップS40にてNO(n)と判断されてパートリンク処理が終了する。
【0079】
ステップS12の処理が終了すると、ステップS13にて複製されたイベントリストL’のカーブリンクを図16(d)に示すように解決する処理が実行される。このカーブリンク処理のフローチャートを図18(b)に示すが、カーブリンク処理がスタートされると、ステップS50にてイベントリストL’にカーブリンクが残っているか否かが判断される。イベントリストL’にカーブリンクが残っている場合は、YES(y)と判断されてステップS51に進む。ステップS51ではリンクすべきカーブが所定の順序で探索され、ステップS52にて対象カーブが発見されたと判断(y)された場合には、ステップS53にてそのリンクのパッケージ指定を確定して、ステップS50に戻る。
【0080】
なお、ステップS52にて対象カーブが発見されないと判断(n)された場合は、ステップS50にそのまま戻る。また、ステップS50ないしステップS53の処理はイベントリストL’にカーブリンクが残っている間循環して実行され、順次カーブリンク処理が実行される。そして、イベントリストL’に残ったカーブリンクがなくなると、ステップS50にてNO(n)と判断されてカーブリンク処理が終了する。
これにより、シーケンス参照処理は終了する。
【0081】
ここで、パートリンクおよびカーブリンクがどのように解決されていくかを、図28を参照して説明する。
図28は、パートシーケンス”synth_track”から他のパートシーケンス”synth_bridge”へとパートリンクがはられ、さらにそのパートシーケンス”synth_bridge”からさらに他のパートシーケンス”synth_1_measure”へとパートリンクがはられている状態を示している。また、パートシーケンス”synth_track”からはカーブシーケンス”synth_total_pb”へとカーブリンクがはられ、パートシーケンス”synth_bridge”からカーブシーケンス”synth_bridge_pb”へとカーブリンクがはられ、パートシーケンス”synth_1_measure”からカーブシーケンス”synth_pb_1”へとカーブリンクがはられている。
【0082】
このような状態において、パートシーケンス”synth_track”の内容を参照すると、そこにはパートリンクイベントが存在するので、図18(a)に示したフローチャートにしたがって、リンクすべきパートシーケンスが検索され、見つかったリンク先のパートシーケンス”synth_bridge”の内容が参照される。
なお、リンクすべきパートシーケンスの検索は、後述するサーチパスによって実行される。
そして、パートシーケンス”synth_bridge”の内容を参照すると、そこにもパートリンクイベントが存在するので、リンクすべきパートシーケンスが検索され、見つかったリンク先のパートシーケンス”synth_1_measure”の内容が参照される。
【0083】
パートシーケンス”synth_1_measure”からは、他のパートシーケンスへのリンクがはられていないので、この時点で、パートシーケンス”synth_1_measure”の内容が、パートシーケンス”synth_bridge”にマージされ、パートシーケンス”synth_bridge”内に存在していたパートリンクイベントは削除される。
なお、パートシーケンス”synth_1_measure”内にはカーブリンクイベントが存在しているので、パートシーケンス”synth_bridge”内には、このカーブリンクイベントもあわせてマージされ、その結果、パートシーケンス”synth_bridge”内には2つのカーブリンクイベントが存在するようになる。その後、パートシーケンス”synth_bridge”の内容がパートシーケンス”synth_track”へとマージされ、パートシーケンス”synth_track”内に存在していたパートリンクイベントは削除される。
【0084】
なお、パートシーケンス”synth_track”内には、パートシーケンス”synthbridge”内に存在していた2つのカーブリンクイベントもあわせてマージされる。その結果、パートシーケンス”synth_track”内には、3つのカーブリンクイベントが存在するようになる。そして、パートシーケンス”synth_track”内に存在していたパートリンクイベントは削除されたので、図18(a)に示すフローチャートの処理は終了する。
次いで、図18(b)に示したフローチャートに従って、パートシーケンス”synth_track”内に集められた3つのカーブリンクイベントが解決される。リンクすべきカーブシーケンスが1つづつ検索され、それぞれのカーブシーケンスが確定される。
【0085】
カーブシーケンスが確定された後、各カーブシーケンスの内容に基づいて実際のイベント、たとえばピッチベンドイベントに展開され、最終的にパートシーケンス”synth_track”内にイベントデータが取り込まれる。このとき、3つのカーブリンクイベントのうち、いずれか2つあるいは3つのカーブリンクイベントの存在する位置が近接していると、カーブシーケンス同士が部分的に重なることがある。このように、複数のカーブシーケンスが重なった部分については、後述するような手法によって合成処理が施され、1つのカーブシーケンスが形成される。
【0086】
また、カーブリンクイベント自体も、合成された複数のカーブシーケンスに対応するもののうちの最も前方に位置するもののみが残され、他のカーブリンクイベントは削除される。なお、はじめから1つのパートシーケンス内に複数のカーブリンクイベントが存在し、それらカーブリンクイベントによってパートシーケンス内に取り込まれるカーブシーケンス同士が重なる場合についても、上記と同様に合成される。
【0087】
このようなシーケンス参照処理を、図19に示すパフォーマンスパッケージ”song1”のシーケンス“root”の内容が参照されて実行される場合を例にあげて説明する。
まず、シーケンス参照処理に先立ち(a)パフォーマンスパッケージ”song1”のシーケンス“root”の内容の要求が入ってくる。ついで、(b)シーケンス“root”のシーケンススクリプトの実行が始まる。この実行中に、(c)シーケンススクリプト中にある一時サブルーチン定義“fz”を作成したディクショナリスタック”dict. stack”に置く。さらに、(d)シーケンススクリプトを実行することにより、シーケンス“root”のイベントリストの内容が修飾される。
【0088】
シーケンススクリプトの実行が終了すると、(e)イベントリスト中のシーケンスリンクイベントの解決が行なわれる。すなわち、参照先のシーケンスの内容を要求し、返ってきた結果のイベントリストを、リンクイベントのあった位置にマージする。図示する場合は、“basicExpr1”内のあるシーケンスの内容が要求されているとする。図示するように、(f)下位のシーケンスの内容参照が再帰的に深さ優先で進むようになる。
以上のプロセスで、(g)最終結果のイベントリストを得ることができる。一連の参照実行が終ると、デイクショナリスタックの”fz”という一時サブルーチン定義はクリアされる。
【0089】
このように再帰的に深さ優先で進むシーケンス内容参照処理のフローチャートを図20に示す。このフローチャートにおいて、シーケンス内容参照処理がスタートされると、ステップS60にてイベントリストの複製を書き換える。ついで、ステップS61にて書き換え結果をスタックに積み、さらにステップS62にて他パートシーケンスへのリンクがあるか否かが判断される。ここで、他パートシーケンスへのリンクがある場合は、YES(y)と判断されてステップS63に進み、対象パートシーケンスの内容が参照される。ついで、ステップS64にて参照結果(スタック上)を、自己の書き換え結果に取り込み、ステップS62に戻る。ステップS62ないしステップS64の処理は、他パートシーケンスへのリンクがある間循環して実行され、リンクがなくなるとNO(n)と判断されてシーケンス内容参照処理は終了する。
【0090】
このシーケンス内容参照処理が、図21(a)に示すように他パートシーケンスへのリンクを持つシーケンス群に実行される場合の、スタックの変化を同図(b)に示す。
図21(a)に示すようにシーケンスAはシーケンスBおよびシーケンスCへのリンクを持っており、シーケンスBはシーケンスDに、シーケンスDはシーケンスGおよびシーケンスHへのリンクを持っている。さらに、シーケンスCはシーケンスEおよびシーケンスFへのリンクを持っており、シーケンスFはシーケンスIへのリンクを持っている。
【0091】
この場合、図20に示すシーケンス内容参照処理が実行されると、図21(b)に示すように、シーケンスAの内容が参照され、シーケンスBがスタックされる。ついで、シーケンスBの内容が参照され、シーケンスDがスタックされ、さらに、シーケンスDの内容が参照され、シーケンスGがスタックされる。シーケンスGはリンクを持っていないので、書き換え結果を下矢印で示すようにシーケンスDに返す。シーケンスDはさらにシーケンスHへのリンクを持っているので、シーケンスHがスタックされる。シーケンスHはリンクを持っていないので、書き換え結果を下矢印で示すようにシーケンスDに返す。
シーケンスDはこれ以上のリンクを持っていないので、書き換え結果をシーケンスBに返す。さらにシーケンスBは書き換え結果をシーケンスAに返す。このような処理がシーケンスC,E,F,Iにも同様に行われて、スタックは図21(b)に示すように変化していく。
【0092】
ところで、スクリプト内では、シーケンスリンクを解決するサブルーチン(システムレベルで提供されている)を明示的に呼びだすことができる。この場合、その時点でイベントリスト内のシーケンスリンクが解決される。同様に、カーブリンクの解決サブルーチンも呼び出し可能である。これらのサブルーチン呼び出しを実行すると、スクリプトのその後の部分では、下位シーケンスの内容を処理対象に含めることが可能となる。
【0093】
また、スクリプト中でリンクイベントを書き換えたり削除してしまう記述も可能である。これを実行した場合、つづくリンク解決では、書き換えたあとのリンクイベントが処理される。
この仕様により、何もスクリプトを書かないと、上位シーケンスでの表情づけが下位シーケンスのイベントには及ばないという動作となる。したがって、スクリプトを書くことによって、上位シーケンスでの表情づけを下位シーケンスのイベントにも及ぼすという動作を実現することができるようになる。
【0094】
次に、パッケージおよびディクショナリのサーチパスについて説明する。
まず、サーチの必要性について説明すると、リンクイベントにより参照されるシーケンスは、該リンクイベントが含まれるパッケージ以外のパッケージ中に存在してもよい。また、スクリプトの中には、サブルーチンを呼び出すための命令が含まれることが普通であるが、そのサブルーチンの実体がそのスクリプトと同一のパッケージ中に含まれているとは限らない。そこで、パッケージやサブルーチンのサーチが必要となる。
HMDMのデータ構造では、概念上パッケージを一列に並べて保持している。また、各パッケージが定義するサブルーチンは、前記したようにパッケージごとに「ディクショナリ」が用意されてそこに格納される。このパッケージおよびディクショナリの並びをサーチパスとよび、この並び順にパッケージやディクショナリをサーチするようにしている。
【0095】
また、HMDMのデータ構造では、パッケージおよびディクショナリの順序すなわちサーチパスは次のように規定されている。
1番目は、ディクショナリについてはディクショナリスタックであり、つづいて、2番目はパフォーマンスパッケージに対応するディクショナリである。また、パッケージについては、1番目がパフォーマンスパッケージである。この場合、パフォーマンスパッケージおよびそれらに対応するディクショナリは複数存在してもよく、その順序はユーザが自由に変更することができる。
【0096】
ディクショナリの3番目は、プラグインパッケージに対応するディクショナリであり、パッケージの2番目はプラグインパッケージである。これらも複数存在してもよく、その順序はユーザが自由に変更することができる。サブルーチンをサーチする場合、サーチパスにより規定された順にディクショナリをチェックしていくので同名のサブルーチンが存在する場合、先に見つかったサブルーチンが優先される。これにより、サブルーチンのオーバライドが実現される。
ディクショナリの4番目は、システムパッケージに対応するディクショナリであり、パッケージの3番目はシステムパッケージである。これらは最初からサーチパスの端に組み込まれており、ユーザが位置を変更することはできない。
【0097】
図19に示す例では、ディクショナリスタック”dict. stack”、“song1”のパフォーマンスパッケージおよび対応するディクショナリ、”basicExpr1”のプラグインパッケージおよび対応するディクショナリ、”GMbasicExpr2”のプラグインパッケージおよび対応するディクショナリ、そして“sys1.00”のシステムパッケージおよび対応するディクショナリという順序でサーチパスが構成されることになり、リンクイベント解決時にこの順でシーケンス名がサーチされ、スクリプトの実行時にこの順でサブルーチン名がサーチされることになる。
【0098】
次に、このサーチパス探索機構について説明する。
シーケンス名の探索においては、シーケンス名が単独で現れる場合は、以下の手順で探索し、最初に該当したものを選択する。
1.属するパッケージの中で、そのシーケンス名を探す。
2.サーチパスの順序に従い、その次のパッケージに移ってシーケンス名を探す。
3.最後のパッケージ(システムパッケージ)にもシーケンスが見当たらなければ、「シーケンスが見当たらない」旨の表示を行う等のしかるべき処置に移る。
また、パッケージ名も組み合わせてシーケンスが指定される場合は、指定したパッケージの中で、そのシーケンス名を探しそこに見当たらなければ、「シーケンスが見当たらない」旨の表示を行う等のしかるべき処置に移る。
【0099】
次に、サブルーチン名の探索において、サブルーチン名が単独で現れる場合は、次のように探索する。
1.ディクショナリスタックの中で、そのサブルーチン名を探す。
2.属するパッケージに対応するテイクショナリの中で、そのサブルーチン名を探す。
3.サーチパスの順序に従い、次のデイクショナリに移ってサブルーチン名を探す。
4.最後のディクショナリ(システム)にも見当たらなければ、「サブルーチンが見当たらない」旨の表示を行う等のしかるべき処置に移る。
さらに、パッケージ名も組み合わせてサブルーチン名が指定される場合は、指定したパッケージの中で、そのサブルーチン名を探す。そこに見当たらなければ、「サブルーチンが見当たらない」旨の表示を行う等のしかるべき処置に移る。
【0100】
つぎに、パッケージの順序によるサブルーチンのオーバーライドの実現について説明する。
プラグインパッケージで定義したサブルーチンが、パッケージ名と組み合わせて指定された場合は、他のパッケージの同じ名前のサブルーチンと混同されることはない。この場合は、どのような順序でプラグインパッケージを置いても動作に影響はない。
そこで、パッケージを明示せずサブルーチン名だけで指定しておき、同名のサブルーチンを含む別のパッケージをサーチパスの前の方に置くようにすると、そのパッケージを差し込むことにより、別のサブルーチンを実行させることができる。これによりオーバーライドを実現することができる。この場合、サーチパス中のパッケージの順序が動作に影響を与えることになる。
【0101】
次に、カーブデータの加算について図22ないし図26を参照しながら説明する。
カーブデータの加算とは、シーケンスリンクを解決する過程で、下位シーケンス内のカーブデータを上位シーケンスにおいて一つに合成、集約する機能のことである。
例えば、階層をなす複数のシーケンスのそれぞれで、MIDIピッチベンドという同種のパラメータの時間変化が設定されていたとする。このとき、各シーケンスでカーブを多数のMIDIピッチベンドイベントに展開してそれを取り込む、という方法では離散イベント同士をミックスすることになり、前記図10の説明において説明したように個々の変化が正しく加算されないことになる。ここで述べるカーブ加算アルゴリズムは、これを正しく処理するためのものである。
【0102】
まず、図22を参照してカーブデータの構造を詳細に説明する。カーブAのイベントリストを図22(a)にカーブBのイベントリストを同図(c)に示す。このようにカーブデータは時刻とそのときの値との組で表され、この組が節点とされて、隣り合う節点の間は直線で結ばれる。すなわち、カーブAは同図(b)に示すように、カーブBは同図(d)に示すように折れ線で表されるようになる。なお、節点は、「時刻の値が同じか大きくなること」として順序づけられており、カーブをたどるときには、時間をさかのぼることはない。
【0103】
また、同じ時刻に複数個の点があってもよい。これは図22(b)に示すように折れ線の不連続点を表している。この場合においても点の順序は保存される。なお、同じ時刻の点のうち、図22(b)に示すように最初の点のことを「左値」、最後の点のことを「右値」と呼ぶ。さらに、同一の時刻に3つ以上の点がある場合は、最初と最後の点以外の値は無視される。
さらにまた、カーブのある時刻をとったとき、多くの場合値は唯一に定まる。すなわち、一つの節点が存在する時刻ならその節点の値となり、二つの節点の間の時刻ならば両者の値を内挿した値となる。また、複数の節点が存在する時刻についてだけ、異なりうる左値と右値とが存在するようになる。
【0104】
このようなカーブデータの加算を行う場合に、加算される場合の節点の相互関係は図23に示すように8通りに分類される。この図の(a)(b)に示す場合は、注目する時刻において一方のカーブだけが節点とされている場合であり、同図(c)は注目する時刻において両方のカーブが節点とされている場合であり、同図(d)(e)は注目する時刻において、一方のカーブだけが不連続点とされている場合であり、同図(f)(g)は注目する時刻において、一方のカーブが不連続点とされており、他方が節点とされている場合であり、同図(h)は注目する時刻において両方のカーブが不連続点とされている場合である。
なお、カーブの左端の数字は注目する時刻での節点数を表している。
【0105】
次に、カーブ加算のアルゴリズムを前記カーブAおよびカーブBとを加算することを例に挙げて図24ないし図26を参照しながら説明する。カーブ加算アルゴリズムは、図23に示すようないずれの節点の相互関係があっても、正しく加算が行えるものである。
まず、カーブAおよびカーブBのそれぞれについて端の節点の値が0でない場合は、値0の節点を図24(a)(c)に示すように付加する。これは、値が規定されていない時刻においては、カーブの値を0としているからである。
ついで、カーブAのオリジナルを複製し、複製したカーブを図25(a)に示すようにカーブA0とする。
【0106】
次に、カーブAの各節点について、その時刻のカーブBの値(不連続点の場合は左値をとる。)を求め、カーブAの節点の値に加算する。ただし、カーブAにおいて同一の時刻に複数の節点があり、さらにカーブBにも同一時刻に節点が存在する場合は、カーブAの最初の接点以外を削除し、最初の節点だけについて加算を行う。この加算演算が図24(b)のカーブAのイベントリストに示されており、加算量が同図(a)に破線で示されている。
このカーブAのイベントリストにおいて、たとえば、時刻70における元の値70に加算される値64は、カーブBにおける時刻60の右値60と時刻110における値80を直線補間して求めた値である。同様に、時刻140において加算されている値60、および時刻240で加算されている値120も直線補間により求めた値である。また、カーブBの時刻190においては不連続点とされているので、左値100がカーブAの時刻190の接点に加算されている。
【0107】
次に、カーブBの各接点について、カーブA0の、その時刻の値(不連続点の場合は右値をとる。)を求め、カーブBの節点の値に加算する。ただし、カーブBにおいて同一の時刻に複数の節点があり、さらにカーブA0にも同一時刻に節点が存在する場合は、カーブBの最後の節点以外を削除し、最後の節点だけについて加算を行う。この加算演算が図25(d)のカーブBのイベントリストに示されており、加算量が同図(c)に破線で示されている。
このカーブBのイベントリストにおいて、たとえば、時刻60における元の値70に加算される値73は、カーブA0における時刻10の右値40と時刻70における値80を直線補間して求めた値である。同様に、時刻130において加算されている値47、および時刻170で加算されている値108、時刻220で加算されている値80も直線補間により求めた値である。また、時刻190ではカーブBが不連続点とされていると共に、同一時刻にカーブA0に接点があるので、カーブBの左値が削除されると共に、右値140にカーブAの接点の値140の加算が行われている。
【0108】
次に、カーブBの処理のすんだ接点について時刻の順に、修正した図24(a)(b)に示すカーブAに追加する。この際、カーブAに同一時刻の接点がなければ単に追加するようにし、同一時刻に接点がすでにある場合は、値が異なる場合のみカーブAの接点の後に右値として挿入する。これにより、図26(a)に示すようなカーブAとカーブBとを加算した新たなカーブを得ることができる。このカーブのイベントリストが同図(b)に示されている。
たとえば、時点110では修正後のカーブAおよび修正後のカーブBに共に接点があるが、その値は同一なのでカーブBの値は挿入されていない。また、時点190でも修正後のカーブAおよび修正後のカーブBに共に接点があるが、その値が異なる値とされているので、カーブAの接点の値が左値とされ、カーブBの接点の値が右値とされている。
このようなカーブ加算のアルゴリズムが、カーブリンクの解決時に行われることにより、正しくカーブデータ同士を加算して新たなカーブデータを生成することができる。
【0109】
次に、本発明の特徴を説明するために、既存のSMF再生装置、SMF編集装置、HMF対応処理装置のそれぞれを用いて、HMF形式のデータを処理する場合について説明する。
従来のSMF形式の一つのファイルに、一つのHMF形式のパッケージを埋め込むことにより、SMFとHMFとの間でデータの互換性を有させるようにすることができる。HMFでは、SMFフォーマット0または1を使用するが、フォーマット0の場合は、一つのSMFのトラックの中に、HMFデータを後述するテキスト形式で記述したSMFメタイベントを散在させ、それらを用いてHMF記述を格納する。
また、フォーマット1の場合、図27(a)に示すように最初のN本のトラックに通常の表情つきSMFデータを格納し、N+1本目のトラックにHMFデータをテキスト形式で記述したSMFメタイベントだけをおくことによりHMF記述を格納する。
【0110】
このSMFメタイベントをデコードすることにより、HMDMのデータ構造の一つのパッケージを得ることができ、このパッケージには、たとえば図27(b)に示すようにパッケージスクリプト32と、複数のシーケンス21〜24が納められる。各シーケンス21〜24には、表情つきのイベントリスト21−1〜24−1、および、white化スクリプト21−2〜24−2と表情づけスクリプト21−3〜24−3の対が納められている。white化スクリプト21−2〜24−2は、それぞれ実行されることにより各々の表情付きイベントリスト21−1〜24−1につけられている表情を除去してホワイト化(無表情化)するものである。そして、表情づけスクリプト21−3〜24−3は、その実行により表情の除去されたイベントリスト21−1〜24−1に所望の表情をつけることができるものである。
【0111】
このようにすることで、一般に広く流通している表情つきMIDIデータをそのまま用いてHMF形式のデータとして利用することができる。
従って、新規に作曲する曲データであれば表情付きイベントリスト21−1〜24−1とwhite化スクリプト21−2〜24−2に替えて、無表情(ホワイト)イベントリストとしてもよい。
【0112】
各種処理装置で、このようなHMF形式のデータを内蔵したデータをロードする場合は、つぎのようになる。
従来のHMF未対応のSMFプレーヤでHMF形式のデータを読み込んだ場合、テキスト形式で記述されたHMFデータのSMFメタイべントはすべて無視されるので、格納された表情つきSMFデータはそのまま再生されるようになる。
ただし、HMF記述を読みとることはできないので、パラメータを与えて異なる展開結果を生成することはできない。しかし、HMFデータ作成の際、あらかじめHMFの展開結果の一例をSMF部分に格納しておけば、それを再生することはできる。
【0113】
HMF対応の処理装置でロードされる場合は、まず、SMFデータにHMFデータをテキストで記述したSMFメタイベントが含まれているかどうかを調べる。SMFメタイベントには該イベントが何のイベントであるかを識別するための識別情報が含まれている。この識別情報に基づいてHMFデータをテキストで記述したSMFメタイベントの有無を調べる。一つでもそのようなSMFメタイべントを検出するとHMF形式と判断し、逆に一つもなければSMF形式と判断する。
ロードされたデータがSMF形式と判断されたときは、従来方式でロードを行なう。すなわち、フォーマット0ならば1本のトラックに、フォーマット1ならばN本のトラックに、SMFデータを格納する。
また、ロードされたデータがHMF形式と判断された場合は、通常のSMFデータはすべて無視し、含まれているSMFメタイベントだけを集め、それらのデコードに入る。この結果、テキストで記述されたHMFデータが読み込まれるようになる。
【0114】
HMF未対応のSMF編集装置においては、イベントリスト画面でSMFメタイベントの内容を編集することで、原理的にはHMFデータを作成することができる。しかしながら、作業が繁雑となると共に、作成した結果をSMF部分へ反映することはできない。
また、SMF編集装置でSMFメタイべントを編集しセーブすることはできるが、その記述内容をSMF部分に反映させることはできない。反映させるには、いったんHMF対応処理装置に読み込んでセーブするか、ツールを使用する必要がある。
【0115】
HMF対応処理装置でセーブする場合は、まず、SMFとの互換をとるために、編集・作成されたHMF全体の内容を評価して、結果をSMF形式でトラックに格納する。
パフォーマンスパッケージの場合は、”root”シーケンスを評価し、一曲分全体がどう演奏されるかが計算され、SMFとして格納されることになる。プラグインパッケージの場合は、”root”シーケンスがないので、SMFとしては空のデータが格納されることになる。
【0116】
続いて、HMDMの一つのパッケージの内容をHMF記述形式に変換し、それを複数のSMFメタイベントに分割・格納する。なお、複数のメタイベントに分割するのは、SMFにおいてはメタイベントの最大長さが256バイトであるという制約があるからである。つまり、256バイトを越えることがないように分割する。格納するときは、「イベント間の時間+メタイベント」という通常のSMFと同じ形式になるが、「イベント間の時間」については意味を持たないため任意の値を与えてよい。
この場合、オプションによって、通常のSMF形式のデータだけをセーブするようにしてもよい。
なお、SMFメタイベントにテキストで記述したHMFデータを埋め込むのは一例であって、テキストで記述したHMFデータを別に独立してセーブするようにしてもよい。
【0117】
次に、スクリプトが変更された場合の動作を説明する。スクリプトはユーザが書き換えることができるが、ユーザがスクリプトを書き換えた場合、システムは新しいスクリプトソースを登録する。必要ならコンパイルも行なう。
そして、パッケージスクリプトが書き換えられたならばただちに新たなパッケージスクリプトを実行する。通常パッケージスクリプトにはサブルーチン定義が書かれているので、実行の結果、サブルーチンが定義し直されることになる。この新しい定義は、対応するディクショナリに格納される。
シーケンススクリプトの場合は、実行形式を記憶して終了される。実行形式はただちには実行されない。次にそのシーケンスの内容が要求されたとき、はじめて実行されることになる。
なお、コンパイルがエラーとなる場合、実行形式は更新されないが、ソーステキストは保存される。これは、書きかけのソースの状態でもセーブを可能にするためである。
【0118】
ところで、HMFは、あるシーケンスの内容を参照しようとすると、前記したようにリンク先のシーケンスの内容を再帰的に参照し、最終的な結果を出力する仕組みになっている。これには大量の計算が必要であって、その計算には時間がかかることになる。
そこで、必要のないシーケンス参照をなるべく行なわない効率的なシーケンス更新管理手法について説明する。まず、機構として、各シーケンスは「前回の参照の結果」を保持することにする。また、自分が最近変化したかどうかのフラグも保持するものとする。次に、シーケンス更新管理の手順を示す。
【0119】
1.あるシーケンスに内容を要求すると、そのシーケンスは、自分が前回の評価以後何も変わる要因がないかどうか調べ始める。
2.まず、自分からリンクをはっている全シーケンスに対し、最新の結果を要求する。すべての子シーケンスが「私は最近変化していません」という返事を返してきた場合は、自分のリンクやスクリプトの実行をやり直す必要はない。この場合は、「私は最近変化していません」と返事して、前回の結果を返せばよい。
3.一つでも「変化しました」という返事があった場合、あるいは自分自身が「最近変化した」とわかっている場合は、リンクとスクリプト実行をやり直す。この場合は、「私は最近変化しました」という返事とともに処理結果を返し、同時に「前回の結果」として記憶しておく。
4・シーケンスのイベントリストまたはスクリプトが変更された場合、「自分は最近変化した」というフラグを立てておく。
以上の手順により、不要な再計算をおさえることができる。
【0120】
HMFで特徴的な点は、スクリプトの実行およびリンクの解決は、演奏の進行とはまったく関係がないということである。それらは、データモデル内で時系列MIDIデータを記号的に組み立ててゆく過程で実行されるのである。すなわち、HMFデータの中のあるシーケンスの内容を参照しようとしたときに、瞬時に実行されて、結果のMIDIデータ列が得られるのである。
HMFデータに対応する処理装置(アプリケーションソフトであってもよい。)は、HMDM処理部(データ処理部)とシーケンサ部という2つのユニットを備えている。
また、このシーケンサ部に特徴を持たせ、oldとnewという2つのMIDIデータを持てるようにする。そして、一方を演奏しつつ、矛盾なく他方のMIDIデータへ移行することができるようにする。
【0121】
この機能にもとづき、HMF処理装置(アプリケーションソフト)は次のように動作する。
1.演奏中に音楽演奏データを変更すると、ただちにHMDM(データ部)で新しいMIDIデータの生成が始まる。
2.その間、シーケンサ部は、データ変更前の古いMIDIデータによる演奏を続けている。
3.HMDMの新データ生成が完了すると、それがシーケンサ部へ渡される。
4.シーケンサ部は、古いMIDIデータから、新しいMIDIデータヘと、演奏を巧妙に切替えていく。たとえば、クロスフェードする、あるいは、小節線の区切りにおいて切り替え、切り替えた後は、新しいMIDIデータの演奏を続ける。
このように、演奏しながらデータ変更を行なうと、しばらくするといつのまにか演奏も変化したものになる。
【0122】
HMDMを修正する場合、updateの計算量はかなり多く、全体の再計算時間が膨大になるおそれがある。そこで、負荷が軽い時にアプリケーションがバックグラウンドでHMDMのアップデートおよびシーケンサ部のMIDIデータの入れ換えを行なっておくようにしてもよい。
さらに加えて、例えば、音楽演奏データのエンディングの部分だけを修正した場合には、前半の部分のMIDIデータは、当分の間差し替える必要はないので、余裕のない場合は差し替えはすぐに行なわない。また、HMDMの変更の影響が、限られたMIDIデータにしか及ばない場合は、すべてのMIDIデータの再生成を行なうのでなく、前のMIDIデータに対する部分修正を施して、計算量を少なくするようにする。
【0123】
また、本発明では、HMFパッケージをテキスト形式で記述されたメタイベントとしてSMFデータを格納するトラック内に散在させたり、SMFデータを格納するトラックとは別のトラックに格納したりしている。
この場合、SMFデータのメタイベントやエクスクルーシブは256バイト以下という制約があるので、HMF記述の長大なテキストは適宜分割して格納するようにする。
【0124】
なお、以上の説明では時系列イベントデータ列を音楽演奏データとして説明したが、本発明はこれに限るものではなく、音声データや画像データの時系列イベントデータとしてもよいものである。この場合、音声データとすると音楽と同様に音声の音質や音量等を任意に変化および変更することができる。また、画像データの場合は、シャープネスやビューの変化および変更を任意に行うことができるようになる。
【0125】
【発明の効果】
本発明は以上のように、HMFパッケージをテキスト形式で記述されたメタイベントとしてSMFデータを格納するトラック内に散在させたり、SMFデータを格納するトラックとは別のトラックに格納したりしている。このように、一組のデータの中に従来のSMFデータとHMFパッケージとを格納すると、従来の再生手段ではメタイベントとされたHMFパッケージは無視されるため、格納されているSMFデータのみを再生するようになる。また、HMFフォーマットのデータを再生することのできる再生手段では、メタイベントとされたHMFフォーマットのデータのみを抽出して再生することができる。
これにより、HMFフォーマットのデータにSMFデータとの互換性を有させることができるようになる。
【図面の簡単な説明】
【図1】 本発明の時系列データを含むデータの処理装置の機能ブロック図の概略である。
【図2】 本発明の時系列データを含むデータの処理装置のハードの構成のブロック図である。
【図3】 本発明で定義されるHMDM、パッケージ、シーケンスのデータ構造を示す図である。
【図4】 本発明の時系列データを含むデータの処理装置におけるHMDMのパッケージのデータ構造を示す図である。
【図5】 本発明の時系列データを含むデータの処理装置におけるHMDMのイベントリストとスクリプトにより構成されるシーケンスを説明するための図である。
【図6】 本発明の時系列データを含むデータの処理装置におけるHMFのラベル付きイベントを有するイベントリストを説明するための図である。
【図7】 本発明の時系列データを含むデータの処理装置におけるイベント書き換え処理のフローチャートおよびイベントリストの例を示す図である。
【図8】 本発明の時系列データを含むデータの処理装置におけるHMFのイベントにID番号を付与する機構を説明するための図である。
【図9】 本発明の時系列データを含むデータの処理装置におけるHMFのスクリプトとイベントリストとの関係を説明するための図である。
【図10】 SMFと本発明の時系列データを含むデータの処理装置におけるHMFのカーブ情報の違いを説明するための図である。
【図11】 本発明の時系列データを含むデータの処理装置におけるHMFにおいてカーブデータを保持する構造を示す図である。
【図12】 本発明の時系列データを含むデータの処理装置におけるHMFのカーブデータのピッチベンドづけへの利用例を示す図である。
【図13】 本発明の時系列データを含むデータの処理装置におけるHMFのリンク機構を説明するための図である。
【図14】 SMFのトラックモデルと本発明の時系列データを含むデータの処理装置におけるHMFのリンクモデルとを対比させて説明するための図である。
【図15】 本発明の時系列データを含むデータの処理装置におけるHMFのパッケージロード時の振る舞いを説明するための図である。
【図16】 本発明の時系列データを含むデータの処理装置におけるシーケンス参照処理を説明するための図である。
【図17】 本発明の時系列データを含むデータの処理装置におけるシーケンス参照処理のフローチャートを示す図である。
【図18】 本発明の時系列データを含むデータの処理装置におけるシーケンス参照処理のフローチャートを示す図である。
【図19】 本発明の時系列データを含むデータの処理装置における再帰的なシーケンスの内容参照時の振る舞いを説明するための図である。
【図20】 本発明の時系列データを含むデータの処理装置における再帰的なシーケンスの内容参照処理のフローチャートを示す図である。
【図21】 本発明の時系列データを含むデータの処理装置における再帰的なシーケンスの内容参照処理を説明するための図である。
【図22】 本発明の時系列データを含むデータの処理装置におけるカーブデータの加算を説明するための図のその1である。
【図23】 本発明の時系列データを含むデータの処理装置におけるカーブデータの加算を説明するための図のその2である。
【図24】 本発明の時系列データを含むデータの処理装置におけるカーブデータの加算を説明するための図のその3である。
【図25】 本発明の時系列データを含むデータの処理装置におけるカーブデータの加算を説明するための図のその4である。
【図26】 本発明の時系列データを含むデータの処理装置におけるカーブデータの加算を説明するための図のその5である。
【図27】 本発明の時系列データを含む処理装置におけるHMF形式のデータとSMF形式のデータとの互換性の説明をするための図である。
【図28】 本発明の時系列データを含む処理装置におけるパートリンクおよびカーブリンクの解決態様を説明をするための図である。
【符号の説明】
1 処理装置A、1−1 バッファメモリ、1−2 エンコーダ、2 処理装置B、2−1 デコーダ、2−2 バッファメモリ、2−3 イベントデータ/スクリプト分離部、2−4 イベントデータ書き換え部、2−5 スクリプト解釈部、2−6 出力部、3 データ展開部、4 記録媒体、5 MIDI音源、6サウンドシステム、10 パフォーマンスパッケージ、11,12 プラグインパッケージ、13 システムパッケージ、15,15−1,16,17 カーブデータのシーケンス、20,21,22,23,24 シーケンス、21−1〜24−1 表情つきイベントリスト、21−2〜24−2 white化スクリプト、21−3〜24−3 表情づけスクリプト、30 イベントリスト、31 シーケンススクリプト、32 パッケージスクリプト、40 IDマネージャ、50,51,52 ディクショナリ、61 CPU、62 ROM、63 RAM、64 タイマ、65 HDD、66 FDD、67 スイッチ、68 スイッチ検出回路、69 表示回路、70 CD−ROM、71 MIDI I/F、72 他のMIDI機器、73 通信インターフェース、74 通信ネットワーク、75 サーバコンピュータ
Claims (8)
- 時系列イベントデータを含むデータの処理装置であって、
前記時系列イベントデータを含むデータは、一本のトラックに、時系列イベントデータ列のみからなる第1のフォーマットのデータと、該第1のフォーマットのデータ中に第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で散在された第2のフォーマットのデータとが格納されたデータであり、
前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、
前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記一本のトラックから前記識別情報に基づいて前記第2のフォーマットのデータのみを抽出する抽出手段と、
抽出された前記第2のフォーマットのデータのシーケンスの内容が参照される際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスの時系列イベントデータ列を書き換えるスクリプト実行手段と
を備えることを特徴とする時系列イベントデータを含むデータの処理装置。 - 時系列イベントデータを含むデータの処理装置であって、
前記時系列イベントデータを含むデータは、第1のトラックないし第Nのトラックに格納された時系列イベントデータ列のみからなる第1のフォーマットのデータと、第N+1のトラックに第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で格納された第2のフォーマットのデータとが一組のデータとされているものであり、
前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、
前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記一組のデータから前記識別情報に基づいて前記第N+1トラックに格納された前記第2のフォーマットのデータのみを抽出する抽出手段と、
抽出された前記第2のフォーマットのデータのシーケンスの内容が参照される際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスの時系列イベントデータ列を書き換えるスクリプト実行手段と
を備えることを特徴とする時系列イベントデータを含むデータの処理装置。 - 時系列イベントデータを含むデータを処理する方法であって、
前記時系列イベントデータを含むデータは、一本のトラックに、時系列イベントデータ列のみからなる第1のフォーマットのデータと、該第1のフォーマットのデータ中に第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で散在された第2のフォーマットのデータとが格納されたデータであり、
前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、
前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記一本のトラックから前記識別情報に基づいて前記第2のフォーマットのデータを抽出するステップと、
抽出された前記第2のフォーマットのデータのシーケンスの内容が参照される際に、そ のシーケンスに含まれる前記スクリプトを実行して、そのシーケンスの時系列イベントデータ列を書き換えるステップと
を備えることを特徴とする時系列イベントデータを含むデータの処理方法。 - 時系列イベントデータを含むデータを処理する方法であって、
前記時系列イベントデータを含むデータは、第1のトラックないし第Nのトラックに格納された時系列イベントデータ列のみからなる第1のフォーマットのデータと、第N+1のトラックに第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で格納された第2のフォーマットのデータとが一組のデータとされているものであり、
前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、
前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記一組のデータから前記識別情報に基づいて前記第N+1トラックに格納された前記第2のフォーマットのデータを抽出するステップと、
抽出された前記第2のフォーマットのデータのシーケンスの内容が参照される際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスの時系列イベントデータ列を書き換えるステップと
を備えることを特徴とする時系列イベントデータを含むデータの処理方法。 - 処理装置に時系列イベントデータを含むデータを処理させるためのプログラムが記録されたコンピュータ読み取り可能な記録媒体であって、
前記時系列イベントデータを含むデータは、一本のトラックに、時系列イベントデータ列のみからなる第1のフォーマットのデータと、該第1のフォーマットのデータ中に第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で散在された第2のフォーマットのデータとが格納されたデータであり、
前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、
前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記プログラムは、前記処理装置に、
前記一本のトラックから前記識別情報に基づいて前記第2のフォーマットのデータのみを抽出する機能と、
抽出された前記第2のフォーマットのデータのシーケンスの内容が参照される際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスの時系列イベントデータ列を書き換える機能と
を実行させるようになされているものであることを特徴とする時系列イベントデータ処理用プログラムが記録されたコンピュータ読み取り可能な記録媒体。 - 処理装置に時系列イベントデータを含むデータを処理させるためのプログラムが記録されたコンピュータ読み取り可能な記録媒体であって、
前記時系列イベントデータを含むデータは、第1のトラックないし第Nのトラックに格納された時系列イベントデータ列のみからなる第1のフォーマットのデータと、第N+1のトラックに第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で格納された第2のフォーマットのデータとが一組のデータとされているものであり、
前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるもの であり、
前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記プログラムは、前記処理装置に、
前記一組のデータから前記識別情報に基づいて前記第N+1トラックに格納された前記第2のフォーマットのデータのみを抽出する機能と、
抽出された前記第2のフォーマットのデータのシーケンスの内容が参照される際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスの時系列イベントデータ列を書き換える機能と
を実行させるようになされているものであることを特徴とする時系列イベントデータ処理用プログラムが記録されたコンピュータ読み取り可能な記録媒体。 - 時系列イベントデータを含むデータが記録されたコンピュータ読み取り可能な記録媒体であって、
前記時系列イベントデータを含むデータは、一本のトラックに、時系列イベントデータ列のみからなる第1のフォーマットのデータと、該第1のフォーマットのデータ中に第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で散在された第2のフォーマットのデータとが格納されたデータであり、
前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、
前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記一本のトラックから前記識別情報に基づいて前記第2のフォーマットのデータが抽出され、該抽出された第2のフォーマットのデータのシーケンスの内容が参照されたときに、そのシーケンスに含まれる前記スクリプトが実行されることによりそのシーケンスの時系列イベントデータが書き換えられるものである
ことを特徴とする時系列イベントデータを含むデータが記録されたコンピュータ読み取り可能な記録媒体。 - 時系列イベントデータを含むデータが記録されたコンピュータ読み取り可能な記録媒体であって、
前記時系列イベントデータを含むデータは、第1のトラックないし第Nのトラックに格納された時系列イベントデータ列のみからなる第1のフォーマットのデータと、第N+1のトラックに第2のフォーマットのデータであることを示す識別情報を付して第1のフォーマットの形式で格納された第2のフォーマットのデータとが一組のデータとされているものであり、
前記第2のフォーマットのデータは、時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスからなるものであり、
前記スクリプトは、そのシーケンスの時系列イベントデータ列中の書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記一組のデータから前記識別情報に基づいて前記第N+1トラックに格納された前記第2のフォーマットのデータが抽出され、該抽出された第2のフォーマットのデータのシーケンスの内容が参照される際に、そのシーケンスに含まれる前記スクリプトが実行されることによりそのシーケンスの時系列イベントデータ列が書き換えられるものである
ことを特徴とする時系列イベントデータを含むデータが記録されたコンピュータ読み取り可能な記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP22299097A JP3823466B2 (ja) | 1996-08-09 | 1997-08-06 | 時系列イベントデータを含むデータの処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体ならびに時系列イベントデータを含むデータが記録された記録媒体 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP8-226148 | 1996-08-09 | ||
JP22614896 | 1996-08-09 | ||
JP22299097A JP3823466B2 (ja) | 1996-08-09 | 1997-08-06 | 時系列イベントデータを含むデータの処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体ならびに時系列イベントデータを含むデータが記録された記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH10111686A JPH10111686A (ja) | 1998-04-28 |
JP3823466B2 true JP3823466B2 (ja) | 2006-09-20 |
Family
ID=26525205
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP22299097A Expired - Fee Related JP3823466B2 (ja) | 1996-08-09 | 1997-08-06 | 時系列イベントデータを含むデータの処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体ならびに時系列イベントデータを含むデータが記録された記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3823466B2 (ja) |
-
1997
- 1997-08-06 JP JP22299097A patent/JP3823466B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH10111686A (ja) | 1998-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6169242B1 (en) | Track-based music performance architecture | |
US7078607B2 (en) | Dynamically changing music | |
US6449661B1 (en) | Apparatus for processing hyper media data formed of events and script | |
US6034314A (en) | Automatic performance data conversion system | |
JP3582396B2 (ja) | 楽譜編集装置および記録媒体 | |
Laurson et al. | PWGLSynth: A visual synthesis language for virtual instrument design and control | |
JP2007310449A (ja) | ソフトウェア/ハードウェア協調設計のためのモデル生成プログラム、およびモデル生成方法 | |
JP3823464B2 (ja) | 時系列イベントデータを含むデータの処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体ならびに時系列イベントデータを含むデータが記録された記録媒体 | |
JP3823465B2 (ja) | 時系列イベントデータを含むデータの処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体ならびに時系列イベントデータを含むデータが記録された記録媒体 | |
JP3823466B2 (ja) | 時系列イベントデータを含むデータの処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体ならびに時系列イベントデータを含むデータが記録された記録媒体 | |
JP3823463B2 (ja) | 時系列イベントデータを含むデータの処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体ならびに時系列イベントデータを含むデータが記録された記録媒体 | |
EP3706113B1 (en) | Editing of midi files | |
JP4311327B2 (ja) | ソースコード自動生成装置、ソースコード自動生成方法、プログラムおよび記録媒体 | |
JP4304870B2 (ja) | 電子情報処理方法及び装置並びに記録媒体 | |
JP3685077B2 (ja) | 演奏データの自動編集装置および自動編集方法 | |
JP2006178013A (ja) | データベース作成装置及び方法 | |
JP4775546B2 (ja) | 電子音楽装置及びプログラム | |
JP3794299B2 (ja) | 演奏情報編集装置及び演奏情報編集プログラム | |
JP4776972B2 (ja) | キャッシュ生成方法、装置、プログラム及び記録媒体 | |
JP2000163064A (ja) | 楽曲生成装置および楽曲生成プログラムを記録した記録媒体 | |
JP5167878B2 (ja) | 電子音楽装置及びプログラム | |
JP2007058808A (ja) | Htmlデータ生成プログラムの開発支援方法及び支援装置 | |
JP4154164B2 (ja) | 知識再利用システム | |
JP2004062024A (ja) | 透かしデータ埋め込み装置およびコンピュータプログラム | |
JP4456469B2 (ja) | 演奏情報再生装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040402 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20051118 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060314 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060515 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060606 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060619 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313532 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090707 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100707 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100707 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110707 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110707 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120707 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |