JP3823463B2 - Data processing apparatus and method including time series event data, recording medium on which time series event data processing program is recorded, and recording medium on which data including time series event data is recorded - Google Patents

Data processing apparatus and method including time series event data, recording medium on which time series event data processing program is recorded, and recording medium on which data including time series event data is recorded Download PDF

Info

Publication number
JP3823463B2
JP3823463B2 JP22298797A JP22298797A JP3823463B2 JP 3823463 B2 JP3823463 B2 JP 3823463B2 JP 22298797 A JP22298797 A JP 22298797A JP 22298797 A JP22298797 A JP 22298797A JP 3823463 B2 JP3823463 B2 JP 3823463B2
Authority
JP
Japan
Prior art keywords
sequence
data
event
event data
script
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
Application number
JP22298797A
Other languages
Japanese (ja)
Other versions
JPH10111683A (en
Inventor
琢哉 藤島
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yamaha Corp
Original Assignee
Yamaha Corp
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 Yamaha Corp filed Critical Yamaha Corp
Priority to JP22298797A priority Critical patent/JP3823463B2/en
Publication of JPH10111683A publication Critical patent/JPH10111683A/en
Application granted granted Critical
Publication of JP3823463B2 publication Critical patent/JP3823463B2/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明は、時系列イベントデータと、該時系列イベントデータを書き換える書き換え手順を示すスクリプトとで構成されたシーケンスが少なくとも含まれるデータを処理する処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体ならびに時系列イベントデータを含むデータが記録された記録媒体に関するものである。
【0002】
【従来の技術】
従来、時系列イベントデータのフォーマットしてAIFFが知られている。例えば、音楽分野ではこれを応用したスタンダードMIDIファイル(以下、SMFと記す。)が知られている。MIDIとはMusical Instrument Digital Interfaceの略であり、異なる楽器間やシーケンサ、コンピュータ、ライティングコントロール、ミキサーなどを相互に結合し、情報の交換を可能にするために制定された規格である。そしてSMFとは、MIDI上で実時間で交換されるイベント情報を、タイムスタンプを付加してファイルに記録・保存するために考案されたフォーマットである。
【0003】
【発明が解決しようとする課題】
しかしながら、現在普及しているSMFでは、保存したりやりとりできるのは低レベルのMIDIイベント列だけであり、演奏データの音楽的な構造や時間的に変化する量などの情報をやりとりすることは困難であった。これらの情報は、シーケンサソフト固有の形式で保存されることしかできないものであった。
したがって、従来はイベントデータの時間的配置や時変データ等の高次の情報をやりとりすることができないという問題点があった。
また、演奏データに表情づけを施すことが一般に行なわれるが、SMFにおいて表情づけを行うには、手作業により一つ一つのイベントデータに作業を施す必要がある。このため、作業が繁雑で多大な時間を必要としていた。さらに、表情づけの作業には典型的な手順の繰り返しである場合が多いが、この場合でも逐一作業を行わなければならないという問題点があった。
【0004】
さらにまた、MIDIの演奏データを作成するときに、ユーザは自分の使用している音源において一番よい音がでるように種々のパラメータを設定するが、このようにして作成された演奏データを、異なる機種の音源に与えたときに不自然な音がでるおそれがあるという問題点があった。
さらにまた、典型的な演奏パターンであるテンプレートが用意されているものの、その内容を変えることができず、柔軟性に欠ける問題点があった。しかも、シーケンスがグルピーングできないので、テンプレートを保持するのが不便であり、テンプレートを発音しないトラックにおくしかなかった。
【0005】
そこで、本発明は時系列イベントデータと、該時系列イベントデータを書き換える書き換え手順を示すスクリプトとで構成されたデータ構造を定義し、演奏データの構造や時変カーブなど高次の情報をやりとりすることができる時系列イベントを含むデータを処理する処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体、ならびに、定義されたデータが記録されている記録媒体を提供することを目的としている。
また、本発明は表情づけ等が典型的な手順の繰り返しであった場合に、その手順を繰り返えさせるスクリプトと、時系列イベントデータとで構成された時系列イベントを含むデータを処理する処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体、ならびに、このようなデータが記録されている記録媒体を提供することを目的としている。
【0006】
さらに、本発明は音源別のその音源に適した時系列データに書き換えるスクリプトと、時系列イベントデータとで構成された時系列データを含むデータを処理する処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体、ならびに、そのようなデータが記録されている記録媒体を提供することを目的としている。
さらにまた、本発明はスクリプトの実行時に時系列イベントデータを識別して選択的に処理できるようにした時系列データを含むデータを処理する処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体、ならびに、そのようなデータが記録されている記録媒体を提供することを目的としている。
さらにまた、本発明は複数のシーケンスをグルーピングできるパッケージのデータを処理する処理装置を提供することを目的としている。
【0007】
さらにまた、時変連続データを離散的なデータに替えて折れ線により表現できるようにした時系列データを含むデータを処理する処理装置および方法、時系列イベントデータ処理用プログラムが記録された記録媒体、ならびに、そのようなデータが記録されている記録媒体を提供することを目的としている。
【0008】
【課題を解決するための手段】
上記目的を達成するために、本発明の時系列イベントデータを含むデータの処理装置は、時系列イベントデータと該時系列イベントデータを書き換える書き換え手順を示すスクリプトとで構成されたシーケンスが少なくとも含まれるデータの処理装置であって、前記時系列イベントデータ列を構成する各イベントデータには、少なくとも1つの識別情報を任意に付与することができるようになされており、前記スクリプトは、前記識別情報により書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、前記シーケンスの内容を参照する際に、そのシーケンスに含まれる前記スクリプト実行して、そのシーケンスに含まれる時系列イベントデータ列を書き換えるスクリプト実行手段を備えている。
【0010】
また、本発明の時系列イベントデータを含むデータの処理方法は、時系列イベントデータと該時系列イベントデータを書き換える書き換え手順を示すスクリプトとで構成されたシーケンスが少なくとも含まれるデータを処理する方法であって、前記時系列イベントデータ列を構成する各イベントデータには、少なくとも1つの識別情報を任意に付与することができるようになされており、前記スクリプトは、前記識別情報により書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、前記シーケンスの内容を参照する際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスに含まれる時系列イベントデータを書き換えるものである。
【0013】
さらに、本発明の時系列イベントデータ処理用プログラムが記録されたコンピュータ読み取り可能な記録媒体は、処理装置に、上記本発明の時系列イベントデータを含むデータの処理方法を実行させるためのプログラムが記録されているものである。
【0014】
さらにまた、本発明の時系列イベントデータを含むデータが記録されたコンピュータ読み取り可能な記録媒体は、上記本発明の時系列イベントデータを含むデータの処理装置において、あるいは、上記本発明の時系列イベントデータを含むデータの処理方法を用いて処理されるデータが記録されているものである。
【0015】
このような本発明によれば、スクリプトを実行することにより時系列イベントを書き換えて多様な時系列イベントデータを生成することができるため、時系列イベントに能動性および可変性を持たせることができるようになる。また、テンプレートもスクリプトの実行により書き換えることができるため、テンプレートに能動性および可変性を持たせることができる。
また、スクリプトの実行時に時系列の各イベントデータを識別することができるため、時系列イベントデータに選択的に操作を行うことができ、操作性を向上することができる。
【0016】
また、従来、時変データは離散的なMIDIイベントの列として表していたが、本発明では時変データを折れ線のカーブデータとして表すようにしたので、ボリュームやテンポ、その他のあらゆる時変パラメータの抽象化を可能とすることができる。さらに、このカーブデータはそのままやりとりすることができるものである。
さらにまた、本発明では音源の機種毎にデータを最適化することのできる手順のスクリプトを用意することができるので、どのような音源を使用しても最適な音を生成することができる。
さらにまた、本発明はパッケージによりシーケンスをグルーピングすることができるので、典型的テンプレートを保持することができ、データ作成を容易に行うことができる。
【0017】
【発明の実施の形態】
本発明の実施の形態例であるMIDIシーケンサ等の時系列データを含むデータの処理装置の構成の概略を図1に示す。ここで扱われているデータのデータフォーマットは本発明により新たに定義されるものである。
ここでは、この新規なデータフォーマットをHyper Media File(以下、HMFという。)と称呼するものとする。
HMFでは、高次の情報を記述できる一般的なデータモデルが与えられる。このデータモデルは、データの静的な構造および動的な機構の2つの側面から定義され、Hyper Media Data Model(以下、HMDMという。)と称呼するものとする。シーケンサソフトに、内部の固有データ構造とHMDMとの相互変換を実装させることにより、高次の情報を互いにやりとりすることができるようになる。
【0018】
すなわち、HMFは、HMDMをファイル形式で保存するフォーマットとして定義される。HMFは、例えば、MIDIイベントによる音楽記述を対象として、SMFをベースにして構成することができるが、MIDIイベントデータに限られるものではなく、音声や画像等の時系列イベントデータに適用することもできるものである。
【0019】
次に、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)に示すように複数のシーケンスが納められている。
【0020】
処理装置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に格納することを、特に「ロードする」ともいう。
【0021】
また、図3(b)に示すようにパッケージには複数のシーケンスが納められており、シーケンスの詳細は後述するが、図3(c)に示すようにシーケンスは、それぞれイベントデータ30とスクリプト(script)31との組から構成されている。
スクリプトはHMFを特徴づけているものであって、データ変更の手順を示すプログラムであり、スクリプトつきのイベントデータは、このスクリプトを実行することで最終的なMIDIイベント列に変換される。
すなわち、処理装置Bで受け取った音楽演奏データを演奏しようとする場合は、バッファメモリ2−2内に格納されているHMDMが、データ展開部3により展開されるようになる。
【0022】
データ展開部3では、必要なシーケンスが順次送り込まれイベントデータ/スクリプト分離部2−3においてイベントデータとスクリプトとに分離される。分離されたスクリプトはスクリプト解釈部2−5において解釈され、この解釈に基づいてイベントデータ書き換え部2−4において、イベントデータを書き換える処理が実行される。これにより、最終的な時系列イベントデータが得られる。この時系列イベントデータは、MIDIイベントの出力部2−6を介してMIDI信号としてMIDI音源5に送られ、サウンドシステム6から放音される。あるいは、そのままSMF形式でファイルとすることもできる。
【0023】
なお、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にデータを送ることも可能である。
【0024】
前記した図1においては処理装置Aおよび処理装置Bを機能ブロックにより表したが、処理装置Aおよび処理装置Bのハードの構成を示すブロック図を図2に示す。
この図において、CPU61は動作プログラムを実行して種々の処理を行う中央処理ユニット(CPU)であり、ROM62はCPU61の動作プログラム等が格納されているリード・オンリ・メモリ(ROM)であり、RAM63はCPU61がプログラム実行時にワークメモリとして使用するランダム・アクセス・メモリ(RAM)である。
【0025】
HDD(ハード・ディスク・ドライブ)65およびFDD(フロッピー・ディスク・ドライブ)66は動作プログラムや各種データを記憶しておく記憶装置であり、ROM62に動作プログラムが記憶されていない場合、このHDD65あるいはFDD66内のハード・ディスクあるいはフロッピー・ディスクに動作プログラムを記憶させておいて、記憶された動作プログラムをRAM63に読み込むようにする。CPU61はRAM63から動作プログラムを読み出して実行することにより、ROM62に動作プログラムが記憶されている場合と同様の動作をCPU61に実行させることができる。なお、HDD65は書き込み/読み出しを自由に行うことができるので、動作プログラムの追加や、バージョンアップ等を容易に行うことができる。
【0026】
また、スイッチ67は操作パネルに設けられている操作指示用のスイッチであり、スイッチ67の操作はスイッチ検出回路68により検出されてCPU61に知らされる。表示装置69にはメニューや操作情報等が表示され、この表示を参照しながらユーザはスイッチ67等を操作する。
CD−ROMドライブ70は、CD−ROMに記憶されている動作プログラムや各種データを読み出す装置である。CD−ROMドライブ70から読み出された動作プログラムや各種データは、HDD65内のハードディスクに書き込まれて記憶される。従って、動作プログラムの新規インストールやバージョンアップ等を容易に行うことができる。
【0027】
MIDIインタフェース(MIDI I/F)71はMIDIデータを送出あるいは受信するためのインタフェースであり、他のMIDI機器72が接続される。
通信インターフェース73は、LAN(Local Area Network)やインターネット、電話回線等の通信ネットワーク74に接続されており、この通信ネットワーク74を介して、サーバコンピュータ75と接続される。ここで、HDD65内に動作プログラムや各種データが記憶されていない場合は、通信インタフェース73を用いてサーバコンピュータ75から動作プログラムや各種データをHDD65にダウンロードする。
【0028】
具体的には、クライアントとなる本発明の処理装置は、通信インターフェース73および通信ネットワーク74を介してサーバコンピュータ75へ動作プログラムや各種データのダウンロードを要求するコマンドを送信する。サーバコンピュータ75は、このコマンドを受け、要求された動作プログラムや各種データを、通信ネットワーク74を介して、処理装置へ配信し、処理装置が通信インターフェース73を介して、これら動作プログラムや各種データを受信してHDD65に蓄積することにより、ダウンロードが完了する。
【0029】
本発明は、前記したHMFデータの処理装置および処理方法にかかるものであるが、特に、スクリプトの実行時に時系列の各イベントデータに対し選択的に操作を行うことができるようにしている。このため、各イベントデータにラベルやID等の識別情報を付加できるようにしている。
また、本発明においては折れ線のカーブデータを時系列イベントデータ列とスクリプトの対で表すようにしている。この場合、カーブデータの時系列イベントデータ列は時刻と値とで構成され、任意の時刻のカーブデータの値は適切な内挿法により得るようにしている。なお、スクリプトを実行することによりカーブデータの形状を変更することができる。
【0030】
次に、本発明の詳細な説明を行うが、本発明の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以上のシーケンスからなる。すなわち、パッケージスクリプトや、シーケンスのいずれかが省略されたパッケージとすることもできる。
【0031】
また、シーケンス(Sequence)は同図(c)に示すようにイベントリスト(event list)30と、このイベントリスト30に対する変更を記述するスクリプト(Script)31とを対にした構造とされており、HMFにおいて重要なデータ構造とされている。
さらに、スクリプト31はイベントリスト30に対して、「このイベントはもっとこうである」というような変更を加える手順を示すプログラムである。そして、同図(c)に示すようにイベントリスト30と対をなしているスクリプト31がシーケンススクリプトと呼ばれ、同図(b)に示すようにパッケージ内に単独で存在するスクリプト32がパッケージスクリプトと呼ばれる。
【0032】
さらにまた、イベントリストは複数のMIDIイベントを時刻つきで保持するものである。HMFでは、ここに後述するリンクイベントというものを置くことができ、リンクイベントにより、複数の演奏パートを複数のトラックにより表しているSMFのトラックモデルに比べ、より柔軟な音楽演奏データ構造の記述を実現することができる。
なお、シーケンスに対して再生の指示やイベントに基づくデータ表示の指示など、その内容を要求すると、保持しているイベントリストに対してシーケンススクリプトを適用し、その結果を与えるようにしている。このように、イベントリスト部に演奏データの実体をおき、スクリプトで実体の内容の変更を記述するようにしている。
【0033】
次に、HMFからどのようにしてHMDM中の一つのパッケージが生成されるかについて述べる。
HMDMの処理では、約200の基本的な命令(命令セット)が定義されている。HMDMは、これらの命令や数値を一列に格納した「実行コード」を受け取って、命令を順次実行することができる。命令には、HMDMの内容を参照したり、変更するものなどがある。
この実行コードをテキストで記述する規則が定義されている。具体的には、命令・数値のテキスト表記やそれらの命令に引数を与える表記の規則などである。この規則で定義されるプログラミング言語を”Hyper Media Executable(HME)”と称呼するものとする。
【0034】
HMDMの処理を行うときは、HMEで書かれたテキストを読みとり、実行コードを生成してそれを実行する機能を持たせるようにする。このHMDMの内容を変更するプログラムは、HMEテキストを直接書く方法、あるいは、高級言語を使用してプログラムを書く方法により生成することができる。さらに、グラフィカルなインターフェースにより、ユーザに意識させずにシステムが自動的に生成してもよい。
いずれの方法で書かれたプログラムでもHMDMを処理する際は、テキストの内容を調べ、HMEであれば直接読みとって実行コードが実行される。あるいは、テキスト内で指定されているコンパイラを起動してそのテキストをHMEテキストに変換し、変換されたHMEを読みとって実行コードを実行する。なお、形式の判別のため、テキストの1行目にはコンパイラの名称をおくようにしているが、他の方法により形式を判別してもよい。
【0035】
HMEは、HMDMに対してあらゆる変更操作ができるように設計してあり、全く内容のない新規のパッケージから出発して、それに対して次々と変更操作を加えれば、どのような内容のパッケージでも作り上げることができる。そして、HMEはテキストで表記することができるので、容易にファイルに格納することができる。単純にテキストファイルとしてもよいし、あるいはSMF形式のファイルに、適当なSMFメタイベントを用いて格納してもよい。
従って、HMEを用いて保存しようとするパッケージに含まれるすべての要素を順次登録していくような変更操作の並びを作成し、それをテキスト形式でファイルに保存すれば、パッケージの内容をファイルに記録することができることになる。
【0036】
ところで、HMFはHMDM中の一つのパッケージの内容を記述したファイルであり、この記述の方法としてHMEを用い、パッケージの内容の記述を行うようにしている。以下、例を用いてテキスト記述からパッケージを復元できることを説明する。
テキスト記述は次のような構成となっているが、説明の都合上実際のHMEそのものではなく、大まかな内容を示している。また、左端の番号も、説明の都合上付したものであり実際にはこの番号はテキストには含まれない。
【0037】
”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を出力する
【0038】
なお、イベントeの内容を表す3組の1バイトのデータにおいて、最初に位置するデータ”91”はノートオン、データ”81”はノートオフを表し、2番目に位置する1バイトのデータは16進数でノートナンバを表し、3番目に位置する1バイトのデータは16進数でベロシティを表している。
次に、HMDMの処理時にこのテキストを読み込み、実行コードに変換して実行する様子を以下に示す。
HMDMの処理時に、まず冒頭の”HME”を認識して、これはHMEのテキストであると判断し、実行コードに変換する。ここで、別の言語が指定されており、それをHMEテキストに変換する外部ソフトウェアが指定されていれば、その外部ソフトウェアを起動し、そのテキスト本体部分を処理させてその結果を受け取るようにする。
【0039】
実行コードに変換して実行する様子を述べると、上記1で、新規の空のパッケージが作成される。このパッケージはメモリには確保されることになるが、また、HMDM中のパッケージの一つとしては登録されない。変数pでそれを参照する。
上記2で、空のパートシーケンスをメモリ上に用意する。
上記3および4で、用意したイベントに、必要なパラメータを設定し、パートシーケンスに格納する。実際には、イベントの数だけこれを並べればよい。この結果、パートシーケンスには、イベントが並んだ状態が作り出される。
上記5で、作り上げたパートシーケンスsに名前を付けて、パッケージpに登録する。
上記6,7,8,9では同様のことを繰り返し、新たなパートシーケンスを作り上げてパッケージpに登録する。
【0040】
以上で、新規のパッケージに、二つのパートシーケンス”seq_A””seq_B”が、内容が復元された状態で登録されたことになる。以下同様にパートシーケンスやカーブシーケンスを作成しては登録するという手順を記述していけばよい。パッケージスクリプトを表現するテキストの登録も同様に記述することができる。
最後に作り上げたパッケージをHMDMのパッケージ列の末尾に追加する。あるいは、どこに挿入するかをユーザの指定に任せてもよい。このようにしてパッケージを組み上げてパッケージ列に組み込んだ後、さらにパッケージスクリプトを実行することになる。
以上の例で示したように、HMEでの記述を「実行」することにより、任意の内容を持ったパッケージを、HMFからHMDMの中に復元することができる。逆に、HMDMのあるパッケージの内容を、HMEで記述し、テキスト形式でファイル化することが可能である。
【0041】
次に、パッケージの詳細を前記図3および図4を参照しながら説明する。図4には”song1”と名付けられたパッケージが示されており、その中には、1つのパッケージスクリプトと、”root”,”bass-trk”,”bass-intro”,”bass-1”,”bass-2”,・・・,”drums-A”,”melody-cresc”と名付けられたシーケンス群が収められている。
このように、1つのパッケージは、0または1つのパッケージスクリプトと0以上のシーケンスからなっている。ただし、シーケンスは、図示するように一列にならべて管理されるわけではない。
【0042】
パッケージは、以下に示すような役目をもっている。
まず、HMFのデータ流通の単位とされている。すなわち、ファイルのセーブ、ロードはパッケージ単位とされており、通常一曲の音楽演奏データを一つのパッケージとして流通させる。このようなパッケージをパフォーマンスパッケージ10と呼ぶ。
一方、便利なフレーズ断片やサブルーチン定義をパッケージスクリプト中に集めたパッケージもあり、これをプラグインパッケージ11,12と呼ぶ。なお、一つのシーケンスをやりとりする場合でも、パッケージに入れて行なう。ただし、スクリプトのソースだけをテキストファイルとして交換することも可能である。
また、パッケージには、HMFシステムにはじめから提供される基本的なデータ/サブルーチン定義を格納することができ、このためのパッケージがシステムパッケージ13である。
【0043】
また、パッケージにはロード時の初期化スクリプトをおくことができる。これが、パッケージスクリプト32であり、音楽演奏データごとの初期設定は、パッケージスクリプトを実行することにより行われる。
なお、パッケージ内の任意のシーケンスを指定するために、HMDMでは名前を用いている。パッケージの中のシーケンスは名前を一つ持つことができ、これをシーケンス名と呼ぶ。シーケンス名は、それを含むパッケージをファイルにセーブし、その後でロードされた場合も保存される。ただし、一つのパッケージ内に、同名のシーケンスが複数存在することはない。すでに存在するものと同名のシーケンスをパッケージに登録すると、古い内容は捨てられ、新しいものに置き換えられる。
【0044】
パフォーマンスパッケージの場合、パッケージ中のいずれかのシーケンスが「ルートシーケンス」となる。ルートシーケンスとは参照関係の起点となるシーケンスである。すなわち、外部からルートシーケンスの内容を要求すると、パッケージ内に含まれる他のシーケンスが参照され、その結果、例えば音楽演奏の全体のデータが得られる。パフォーマンスパッケージ中のあるシーケンスがルートシーケンスであることを示すには、シーケンス名を”root”とする。
ルートシーケンスも通常のシーケンスであるから、他のものと同様に作成される。なお、一般に、ルートシーケンスのスクリプトおよびイベントリストにはデータ全体に関する設定がおかれる。
【0045】
パフォーマンスパッケージにおけるパッケージスクリプトには、その音楽演奏データを構成するための共通サブルーチンをおくことができる。また、その曲のための初期設定もここにスクリプトとして置くことができる。
なお、シーケンススプリクトを作成して、イベントリストに対し任意の変更を加えることが可能とされる。
【0046】
プラグインパッケージは、便利なフレーズ断片やサブルーチン定義を集めたものである。一般のユーザは、完成品のプラグインパッケージをブラックボックスとしてHMDMにロードすることにより、あらかじめ仕上げられたシーケンスやサブルーチンを利用することができるようになる。ユーザがスクリプトの内容を変更、あるいは新規作成することも可能である。
プラグインパッケージには、ルートシーケンスは存在しない。パッケージスクリプト中に1つまたは複数のサブルーチン定義を格納しておくことにより、”サブルーチン集”とすることができる。たとえば、”slide”というサブルーチンが提供されていて、あるシーケンス内のイベントを2つ指定して、この”slide”というサブルーチンを呼ぶとそれらをギターのスライド奏法により演奏された状態のイベント書き換えることができるようになる。
【0047】
また、プラグインパッケージは、例えば、“伴奏スタイル集”とすることができる。すなわち、ある伴奏パターンのシーケンスが定義されており、引数としてコードを指定して内容を要求すると、そのコードに応じて音高が変換された伴奏パターンのイベントリストを得ることができるようになる。
また、シーケンスを用いて、フレーズ集やカーブデータ集等を提供することができる。この場合、シーケンススクリプトがそれらの修飾の方法を提供しており、例えばフレーズ集のシーケンスに対して引数をつけて、該シーケンスの内容を要求すると、いろいろに変化したフレーズを得ることができる。
【0048】
システムパッケージは、システム機能の付加的な部分を実現するためのパッケージであり、システムのプリミティブな機能の上に実装される。
システムパッケージには、ルートシーケンスは存在せず、パッケージスクリプトを用いて、基本的なサブルーチンが提供されたり、シーケンスを用いて、代表的な伴奏パターン等の基本的なデータなどが提供される。
【0049】
次に、シーケンスについて説明すると、シーケンスはHMFの核となるデータ構造の単位であり、イベントリストとスクリプトの組という形で構成され、パートシーケンスとカーブシーケンスとの2種類がある。このうちパートシーケンスには、シーケンスであって、保持するイベントが0-255の8ビットの並びであるバイト列、MIDIの音高,オンベロシティ,オフベロシティを有しているノートイベント、および、後述するリンクイベントが納められている。また、カーブシーケンスにはシーケンスであって、保持するイベントが数値であるものが納められている。
なお、カーブシーケンス中にはリンクイベントは含まれない。
【0050】
シーケンスは、内容を要求されると、保持しているイベントリストの写しを作り、スクリプトを実行してイベントリストを修飾する。そして、修飾されたイベントリストを出力する。すなわち、保持しているイベントリスト自体は書き換えられない。
例えば、図5に示すシーケンスに内容を要求(reference)すると、シーケンス中のスクリプトに記述された”melody notes harder ...”、および、”exaggerate tenuto”が実行されて、図示するようにメロディの各イベントのベロシティが増大(図ではイベントを示すバーの幅が太く表されている)されると共に、持続時間も長くされて、メロディが強めにされると共に、そのテヌートが強調されることになる。そして、このようにして書き換えられたイベントリストが返される(response)ことになる。また、必要に応じて引数を与えることもでき、たとえば「メロディノートを”10%強く”」というように指定することも可能である。
【0051】
また、シーケンスを構成するイベントリストとスクリプトは、静的にも動的にも独立した存在である。データ構造としても分離された形になっており、スクリプトの実行とイベントリストの演奏進行も全く別の過程となっている。すなわち、イベントリストの中にスクリプトがまじっていて演奏の進行と共にスクリプトが実行されるのではない。
このように、HMFでは元となる演奏の断片をMIDIイベントの形でイベントリストに保持しておき、スクリプトの引数を調節したりスクリプト自体を差し替えることにより、様々に変化させることができるのである。これにより、テンプレートの変更も容易に行うことができる。
なお、スクリプトはイベントリストに適用するコマンドを保持するものなので、スクリプトをみるとそのイベントリストの編集過程を知ることができる。すなわち、シーケンスは自己の編集過程を保持している演奏データともいえる。
【0052】
ここで、シーケンスの指定方法について説明すると、HMDM内の特定のシーケンスを指定するには、パッケージ名とそこでのシーケンス名を合わせて指定するようにする。これは、パッケージ名はHMDM内で一意的であると共に、シーケンス名はパッケージ内で一意的であるからである。
さらに、HMDMでは、シーケンスの識別法として、前記名前による方法に加え、ID番号による方法でもよい。
ID番号は、あるパッケージのロードでHMDMに新たなシーケンスが加わると、HMDM中で一意性が保証される「ID番号」をIDマネージャが各シーケンスに与える。以後HMDMでは、このID番号で任意のシーケンスを直接指定することができる。このように、ID番号は、パッケージではなくHMDMで一意的なものである。
【0053】
このID番号は整数値であるが、通し番号とは限らない。従って、シーケンスを一つ削除しても他のシーケンスのID番号が変化するということはない。また、いったんHMDMに登録されれば、HMDMから削除されるまでの間、シーケンスのID番号は不変とされる。
ただし、パッケージをHMF形式でエンコードする際にはID番号は記録されず、そのパッケージを後刻HMDMにロードしたときに、各シーケンスに新しいID番号が与えられる。すなわち、新シーケンスの登録として扱われる。
【0054】
つぎに、イベントリストの詳細を説明する。イベントリストは、イベントを時刻順に任意の数保持するようにしたデータ保持構造である。また、イベントは、開始時刻、持続時間、後述するラベルの3つの情報を次に示すいずれかのデータをあわせて保持するデータ単位である。
・バイト列・・・0-255の8ビットの並び
・ノートイベント・・・MIDIの音高、オンベロシティ、オフベロシティを有しているイベント
・リンクイベント・・・リンクを保持しており、パートリンクイベントとカーブリンクイベントがある
・数値
【0055】
このようなイベントを保持するイベントリストでは次のような特徴点がある。
1.各イベントに1つ以上のラベルをつけることができる。この時、各イベントにID番号がついていてもよい。
2.リンクイベントが用意されている。(これについては後述する。)
3.時変カーブ(折れ線)データの実体の保持にも用いることができる。(これについても後述する。)
【0056】
ラベルは、イベントリスト中のイベントの識別を行うために付与されるもので、ユーザが任意に付与することができる。また、イベントの識別をID番号によって識別するようにしてもよい。
ラベルのついたイベントリストの例を図6に示すが、イベントリスト中の各イベントは、任意の文字列からなるラベルを任意の数持つことができる。また、ラベルのないイベントがあってもよい。
例えば図6では、左上のイベントに、”melody”,”tenuto”,”first”,という3つのラベルがつけられている。HMDMにおいては、このラベルを用いてイベントを指定することができる。
【0057】
ラベルづけは、従来のシーケンサソフトの対象イベント選択操作に対応している。従来のシーケンサソフトでは、対象となるイベントをマウスなどで任意の数指定し、それに対して編集を行なうようにしていた。イベントにラベルをつけることは、その「選択」を記録することに相当する。したがって、ラベルを指定すればその選択パターンを再現することができ、それに対して何らかの処理を施すことを容易に行うことができるようになる。
例えば図6において、「”melody”というラベルのついたイベント」と指定すると、上の破線で囲ったイベントをマウス等で選択するのと同様の効果を持つようになる。また、「”chord”というラベルのついたイベント」を指定すると、下の破線で囲ったイベントを選択することになる。なお、”melody”or”tenuto”というように複数のラベルを指定することも可能である。
【0058】
また、ラベルは、HMF形式にエンコードし後刻デコードした場合にも保存される。
ここで、図6ではピアノの両手の演奏が1つのシーケンスに入っている。そして、各イベントには、”melody”、”chord”、”bass”といったラベルが、それぞれあてはまるノートオンイベントに付与されている。したがって、スクリプトにおいて「”melody”というラベルのついたイベントは強めに」「”bass”というラベルのついたイベントは強めに」などという記述が可能となる。
【0059】
次に、ラベルが付与されたイベントの選択的なイベント書き換え処理のフローチャートを図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に戻る。
【0060】
そして、ステップS1ないしステップS4の処理が再度行われるが、この場合は、EventC1が選択されるが、EventC1にはラベル”melody”が付与されていないのでステップS3にてNO(n)と判断されてステップS1に再度戻るようになる。
ついで、ステップS1ないしステップS4の処理が順次選択された図7(b)に示すイベントに対して実行され、図7(b)に示すイベントリストのすべてのイベントに対して処理が実行されると、ステップS1にてNO(n)と判断されてイベント書き換え処理は終了する。この結果、この場合はラベル”melody”が付与されているEventA1,EventA2に対してイベント書き換え処理が実行されることになる。
【0061】
また、HMFは、イベントリスト中のイベントを識別するため補助的にID番号も用いることがある。
この補助的な機構は、スクリプト言語との兼ね合いのためのものである。スクリプトの処理速度や複雑さとのトレードオフのため、ラベルによるイベント識別のための十分な機構(連想配列など)が言語に提供できない可能性もある。この場合、もっとも基本的なデータである整数でイベントを識別する必要が生じる。このため、ID番号が補助的に用いられるのである。
【0062】
図8に、ID番号をイベントに付与する機構の一例を示す。
ユーザ入力などでイベントリストに新たなイベントが加わる際、イベントリスト中で一意性が保証される「ID番号」が各イベントに与えられる。以後、このID番号で、任意のイベントを直接指定することができるようになる。
例えば、図8では、”NoteOn a3 64”というイベントを時刻0に印加している。このイベントの登録の際、ID manager40は、その時点でほかのどのイベントにも使われていない数値「1」をこのイベントに与える。以後、このイベントリストの中では、id=1とすれば必ずこの時刻0の”NoteOn a3 64”のイベントが指定されることになる。
【0063】
なお、ID番号は整数値であり、通し番号とする必要はない。従って、イベントを一つ削除しても、他のイベントのID番号が変化することはない。また、いったんイベントリストに登録されれば、削除されるまで、イベントのID番号は不変である。
例えば図8においてid=16のイベントを削除しても、他のどのイベントのID番号も変化しない。
ただし、あるイベントをイベントリストから削除し、ふたたび同一イベントを登録した場合、はじめのID番号は保存されず、新しいID番号が与えられる。すなわち、イベントリストへの新イベントの登録として扱われるようになる。
【0064】
次に、スクリプトの説明を行う。スクリプトは、前述したようにイベントリストを修飾する手順を記したプログラムである。
スクリプトの内容は、対象となるイベントを設定し、設定されたイベントに対して行う操作を示すことの繰り返しとされている。対象となるイベントの設定方法としては、前記したようにイベントに付与されているラベル、あるいはID番号を指定することにより設定する方法や、時刻範囲を指定してその時刻範囲に含まれるイベントを指定する方法がある。
図9にスクリプトの内容の一例をイベントリストと対応づけて示す。この図に示すスクリプトの一行目では、”melody”というラベルの付いたイベントについてベロシティを10増加する処理がプログラムされている。また、2行目では、IDが36であるイベントの音高をC3と設定している。さらに、3行目では、”slur”で始まるラベルの付いたイベントについてスラー処理をしている。
なお、3行目の”slur”に付された*印はワイルドカードであり、これには”slur1”、”slur2”、”slur3”等のラベルが該当する。
【0065】
なお、図9に示すスクリプトの表記は概念的なものであり、本発明における前述した実際のプログラミング言語とは異なるものである。
設定されたイベントに対するスクリプトの操作としては、イベント内容の読み出し、イベント種類の判別、値の変更、イベント自体の消去、新たなイベントの追加、ラベルの追加/削除/改名等の操作がある。
スクリプト言語としては、アセンブラ等の低水準の言語を用いることができる。この場合、直接この言語でスクリプトを記述してもよいし、高級言語を設計し、この言語へのコンパイラを用意するようにしてもよい。
【0066】
また、各シーケンスが内蔵するスクリプトを、シーケンススクリプトと呼ぶ。
シーケンススクリプトには、対応するイベントリストの内容と密接に関連した記述がなされている。
一般にシーケンススクリプトは、「このようなイベントに対して、このような変更を施す」というイベントリスト編集コマンドが、反復や条件分岐をまじえて多数書かれている。
なお、シーケンススクリプト中でサブルーチンを定義することは可能である。
【0067】
さらに、各パッケージ毎に登録されるスクリプトをパッケージスクリプトと呼ぶ。
パッケージスクリプトは、前記図4の最上段に示されているが、パッケージをロードする際にパッケージスクリプトは一度実行される。そこで、このパッケージスクリプトで汎用サブルーチンの定義を記述しておけば、パッケージをロードするだけで新たなサブルーチンを利用することが可能となる。
このことから、パッケージスクリプトは、そのパッケージを使う上で必要な初期設定と、汎用サブルーチンの定義とで占められている。ここでのサブルーチンの定義は、外部からも利用可能となる。
【0068】
次に、本発明の特徴点の一つであるカーブデータについて説明する。
ピッチベンドや音量等を変化させる変化カーブは、連続的に変化する量のデータとされており、SMFにおいて変化カーブのデータは、具体的なイベントの離散的な列で表現されている。例えば、図10(a)のAに示す離散的なイベントデータ列により本来連続的に変化する量が表されている。すると、このAに示すイベントデータ列と、図10(a)のBに示すイベントデータ列とを加算して新たな変化カーブの変化特性を作成しようとしたとき、単純に混合すると、図10(a)のA,Bmixに示すように個々の変化カーブを正しく加算した変化特性とはならない。
【0069】
そこで、HMFでは、カーブデータ(折れ線データ)を定義し、図10(b)に示すように操作する枠組みを与えるようにする。このように定義すると、図10(b)のAに示す折れ線のカーブデータと、同図のBに示す折れ線のカーブデータとを加算することにより、同図のA,Bmixに示すように新たなカーブデータを得ることができるようになる。
これにより、ボリュームやテンポ、その他あらゆる時変パラメータを抽象化することが可能となる。また、このカーブデータはそのままで処理装置間でやりとりすることができるようになる。
【0070】
このカーブデータは、例えば、前記図4に示すcurve”melody-cresc”に示すシーケンスに保持されているように、シーケンスの一種として管理され、これをカーブシーケンスと称呼する。すなわち、カーブシーケンスとはシーケンスを使用してカーブを実際に表したシーケンスである。このカーブシーケンスを図11に示す。パートシーケンスでは、図示するようにイベントリストにMIDIイベント列が時刻順で保持されるが、カーブシーケンスでは、イベントリストを使用してカーブの変化点の時刻と値の組を格納している。なお、イベントとイベントの間の任意の時刻のカーブデータの値は適切な内挿法、例えば直線補間法等を用いることにより得るようにしている。
カーブの内容の参照には、後述するリンクイベントを用いる。パートシーケンス中の任意の時刻に、シーケンスの一種であるカーブシーケンスの内容を要求するイベント(カーブリンクイベント)をおくようにする。このカーブリンクイベントでは、カーブの名前等のカーブの識別情報や、このカーブを音量あるいはピッチに適用する等の適用先の情報を含ませることができる。
【0071】
また、特定のイベントにカーブが固定されることがなく、例えばピッチベンド用のカーブデータをボリュームを変化させるカーブデータに書き換えて用いることができるようになる。
なお、カーブデータは時刻から値への変換関数となっている。これに基づき、「ある時刻での値を得る」、「カーブから適切な間隔のMIDIイベントを生成する」、「既存のMIDIイベント列からカーブシーケンスを逆生成する」といったことが可能となる。また、カーブどうしの加算なども定義されており、カーブによる表現を重ねていくことが可能となる。
カーブシーケンスの変形操作は、実際にはパートシーケンスにおけるイベントリストの編集と同様に行うことができる。
【0072】
次に、ピッチベンドの表現づけにカーブデータを利用する例を図12を参照しながら説明する。
図12は、ユーザが、”curve−a1”というカーブデータをピッチベンドのストリップチャートに取り込んだところを示しており、システムは、このカーブから適切な間隔のピッチベンドイベントを自動的に生成して発生すべきMIDIイベント列内に挿入する。この場合、ユーザがカーブデータ”curve−a1”の形状を変更すると、システムはピッチべンドのイベントを生成し直すようになる。
【0073】
なお、カーブシーケンスに対してスクリプトを付加するようにして、参照時にスクリプトを実行することにより、元の折れ線を書き換え、書き換え後のイベント間を内挿して最終的なカーブデータを得るようにしてもよい。また、カーブリンクイベントによってカーブを参照する際に、カーブリンクイベントを含むシーケンスのスクリプトを実行して、折れ線を書き換えてもよい。さらに、カーブデータの各点に対してラベルをつけることにより、各点のデータを選択的に書き換えるようにしてもよい。これにより、カーブの変化特性を容易に変更することができる。
なお、折れ線のカーブデータにおいて、任意の時刻の値は適切な内挿を行うことにより得るようにする。これにより、折れ線データから適切な間隔の離散的イベント列を生成することができる。
【0074】
次にシーケンスリンクイベントについて説明する。
シーケンスにおいては、パートシーケンスのイベントリスト中に「シーケンスリンクイベント」を置くことができる。シーケンスリンクイベントは、他のあるシーケンス(パートシーケンスやカーブシーケンス)を指定する。そして、該シーケンスリンクイベントの時刻以降にそのリンクイベントが指定するシーケンスを取り込むべきであるということを示す役目をもっている。
例えば図13(a)では、”melody”というパートシーケンスのイベントリストの時刻tの位置に“chord”というパートシーケンスへのシーケンスリンクイベントが置かれている。スクリプトを実行して最終的なパートシーケンス”melody”を得る時に、パートシーケンス”melody”のスクリプトが実行されてイベントリストが修飾される。スクリプトの実行が終了すると、シーケンスリンクイベントの解決が図られ、パートシーケンス”chord”の取り込みが起きる。こうして、図13(b)に示すように、パートシーケンス”chord”を取り込んだパートシーケンス”melody”が得られる。この処理は、演奏が進むにつれて実行されるのではなく、パートシーケンス”melody”の内容を得ようとしたときに実行される。
【0075】
本来イベントリストは時刻付きMIDIイベントの集合であり、イベントリスト中のMIDIイベントは必ずMIDI出力されるものである。シーケンスリンクイベントは、イベントリスト中に置かれながら、MIDI出力には送出されず、シーケンス間の関連を表示するだけのものである。
なお、前記したようにリンクは、再生時に解決されるものではない。リンクイベントで示されるリンクは、シーケンス間の関連を静的に示しているだけであり、リンク解決のプロセスは、演奏のプロセスとは無関係にパートシーケンスの内容が参照された時に進行するのである。
なお、シーケンスの内容を要求する際、引数を渡すことができる。
【0076】
このリンク機構により、現在の一般的なシーケンサソフトが採用しているトラックモデルの音楽演奏データ構造を表現することができる。従って、トラックモデルと同様の音楽演奏データ構造を表現しながらも、複数のシーケンサソフト間で音楽演奏データを、その階層構造の情報までも含めて交換することが可能となる。これはSMFによるトラックモデルを用いた従来ではできなかったことである。
例えば、図14(a)に示すtrack1ないしtrack5の5つのトラックからなるデータを、同図(b)に示すルートシーケンスの時刻0にseq1からseq5までの5つのシーケンスを取り込むというリンク構造で表現している。
【0077】
また、同図(a)に示すトラックモデルにおいて各トラック内にフレーズ断片が配置される構造は、同図(b)に示すように子シーケンスの適切な時刻にリンクイベントを置いて表現するようにする。例えば、図14(a)において、track1にpart a,part b,part cが置かれている状態は、同図(b)に示すようにseq1の適切な時刻にseq a,seq b,seq cへのリンクイベントを置くことで表現することができる。
さらに、一部のシーケンサソフトに見られるような、シーケンスが階層的になった構造も、同様にして表現することができる。
【0078】
ルートシーケンス以外のシーケンスは、リンクしない限りMIDI出力に寄与しない。したがって、典型的表現パターンを一つずつ入れたシーケンスを多数用意しておき、好きなものをリンクして利用することができる。このため、リンクの枠組は、典型的表現パターンの利用にも都合がよいものである。
また、一つのシーケンスが、任意数の他のシーケンスを参照することができ、さらに、複数のシーケンスが、システムのどこかに存在するある一つのシーケンスを参照することもできる。ただし、参照がループを構成することは禁止される。このループとは、シーケンスAがシーケンスBを、シーケンスBがシーケンスCを、そしてシーケンスCがシーケンスAを参照しているように、参照がループ状とされている状況をいう。
なお、リンクイベントにおいてシーケンスを指定するばあいは、リンクイベントも、ID番号でなくパッケージ名とシーケンス名で参照対象を保持するようにしている。
【0079】
次に、HMFの静的なデータ構造が、外からの要求に対してどのような動的な振る舞いをするのかについて説明する。
図15に示すように、例えば、ファイルシステムの記録媒体4に格納されているHMFファイルから一つのパッケージをロードすると、パッケージのロード時にパッケージスクリプトが実行されて、サブルーチンの定義があれば、パッケージディクショナリを用意してそこにサブルーチン定義が格納される。
ここでディクショナリについて説明すると、ディクショナリはスクリプトで出現する変数/サブルーチンを保持するものであり、パッケージごとにあるパッケージディクショナリと、スクリプト実行中だけ存在するデータ保持用のディクショナリスタックとの2種類がある。
【0080】
たとえば、図15に示すように、(1)HMF形式のパッケージ”GMbasicExpr2”をロードすると、ユーザが指定した位置にパッケージ”GMbasicExpr2”をロードした内容がおかれる。ついで、(2)パッケージスクリプトの実行が行われ、(3)パッケージ”GMbasicExpr2”内のサブルーチン定義”cresc1”が、パッケージ”GMbasicExpr2”に対応する位置に作成されたディクショナリ50に格納される。パッケージ内のシーケンススクリプトは実行形式にコンパイルしておくが、まだ実行はしない。
図15では、HMF形式のパッケージ”song1”をロードしたときに、そのパッケージスクリプトが実行されその中のサブルーチン定義”b72vol”が、パッケージ”song1”に対応する位置に作成されたディクショナリ51に格納されており、パッケージ”basicExpr1”をロードしたときに、そのパッケージスクリプトが実行され、サブルーチン定義”cresc1”が、パッケージ”basicExpr1”に対応する位置に作成されたディクショナリ52に格納されている。
ただし、ディクショナリスタック”dict. stack”はまだ作成されていない。
【0081】
つぎに、HMF形式のデータがロードされた状態において、ユーザが音楽演奏データを構成する一つのシーケンスの内容を参照したときの振る舞いを説明する。
ユーザが、音楽演奏データを構成する一つのシーケンスの内容を参照しようとしたときのシーケンス参照処理を図16ないし図18を参照しながら説明する。なお、図16はシーケンス参照処理を模式的に示す図であり、図17、図18はシーケンス参照処理のフローチャートを示す図である。
【0082】
図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の複製作成処理が終了する。
【0083】
ステップS10の処理が終了すると、ステップS11にて複製されたイベントリストL’に対して図16(b)に示すようにシーケンススクリプトを適用する処理が行われる。このステップS11の処理が図17(c)に示すフローチャートに示されており、シーケンススクリプト適用処理がスタートされると、ステップS30にてスクリプトに命令が残っているか否かが判断される。この処理の開始直後には命令が残っているので、YES(y)と判断されてステップS31に進み、命令が一つ実行され、ステップS30に戻る。ステップS30とステップS31の処理はスクリプトに命令が残っている間循環して行われて、命令が1つづつ実行されていく。そして、スクリプト内の命令がすべて実行されると、ステップS30にてNO(n)と判断されてシーケンススクリプト適用処理が終了する。
【0084】
ステップS11の処理が終了すると、ステップS12にて複製されたイベントリストL’のパートリンクが図16(c)に示すように解決される処理が実行される。このパートリンク処理のフローチャートを図18(a)に示すが、パートリンク処理がスタートされると、ステップS40にてイベントリストL’にパートリンクが残っているか否かが判断される。イベントリストL’にパートリンクが残っている場合は、YES(y)と判断されてステップS41に進む。ステップS41ではリンクすべきパートが所定の順序で探索され、ステップS42にて対象パートが発見されたと判断(y)された場合には、ステップS43にてそのパートの内容が参照される。ついで、ステップS44にて得られたイベントリストの内容をイベントリストL’にマージし、さらにステップS45にて処理したリンクイベントを削除して、ステップS40に戻る。
【0085】
なお、ステップS42にて対象パートが発見されないと判断(n)された場合は、ステップS45にジャンプしてそのリンクイベントが削除される。また、ステップS40ないしステップS45の処理はイベントリストL’にパートリンクが残っている間循環して実行され、順次パートリンク処理が実行される。そして、イベントリストL’に残ったパートリンクがなくなると、ステップS40にてNO(n)と判断されてパートリンク処理が終了する。
【0086】
ステップS12の処理が終了すると、ステップS13にて複製されたイベントリストL’のカーブリンクを図16(d)に示すように解決する処理が実行される。このカーブリンク処理のフローチャートを図18(b)に示すが、カーブリンク処理がスタートされると、ステップS50にてイベントリストL’にカーブリンクが残っているか否かが判断される。イベントリストL’にカーブリンクが残っている場合は、YES(y)と判断されてステップS51に進む。ステップS51ではリンクすべきカーブが所定の順序で探索され、ステップS52にて対象カーブが発見されたと判断(y)された場合には、ステップS53にてそのリンクのパッケージ指定を確定して、ステップS50に戻る。
【0087】
なお、ステップS52にて対象カーブが発見されないと判断(n)された場合は、ステップS50にそのまま戻る。また、ステップS50ないしステップS53の処理はイベントリストL’にカーブリンクが残っている間循環して実行され、順次カーブリンク処理が実行される。そして、イベントリストL’に残ったカーブリンクがなくなると、ステップS50にてNO(n)と判断されてカーブリンク処理が終了する。
これにより、シーケンス参照処理は終了する。
【0088】
ここで、パートリンクおよびカーブリンクがどのように解決されていくかを、図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”へとカーブリンクがはられている。
【0089】
このような状態において、パートシーケンス”synth_track”の内容を参照すると、そこにはパートリンクイベントが存在するので、図18(a)に示したフローチャートにしたがって、リンクすべきパートシーケンスが検索され、見つかったリンク先のパートシーケンス”synth_bridge”の内容が参照される。
なお、リンクすべきパートシーケンスの検索は、後述するサーチパスによって実行される。
そして、パートシーケンス”synth_bridge”の内容を参照すると、そこにもパートリンクイベントが存在するので、リンクすべきパートシーケンスが検索され、見つかったリンク先のパートシーケンス”synth_1_measure”の内容が参照される。
【0090】
パートシーケンス”synth_1_measure”からは、他のパートシーケンスへのリンクがはられていないので、この時点で、パートシーケンス”synth_1_measure”の内容が、パートシーケンス”synth_bridge”にマージされ、パートシーケンス”synth_bridge”内に存在していたパートリンクイベントは削除される。
なお、パートシーケンス”synth_1_measure”内にはカーブリンクイベントが存在しているので、パートシーケンス”synth_bridge”内には、このカーブリンクイベントもあわせてマージされ、その結果、パートシーケンス”synth_bridge”内には2つのカーブリンクイベントが存在するようになる。その後、パートシーケンス”synth_bridge”の内容がパートシーケンス”synth_track”へとマージされ、パートシーケンス”synth_track”内に存在していたパートリンクイベントは削除される。
【0091】
なお、パートシーケンス”synth_track”内には、パートシーケンス”synthbridge”内に存在していた2つのカーブリンクイベントもあわせてマージされる。その結果、パートシーケンス”synth_track”内には、3つのカーブリンクイベントが存在するようになる。そして、パートシーケンス”synth_track”内に存在していたパートリンクイベントは削除されたので、図18(a)に示すフローチャートの処理は終了する。
次いで、図18(b)に示したフローチャートに従って、パートシーケンス”synth_track”内に集められた3つのカーブリンクイベントが解決される。リンクすべきカーブシーケンスが1つづつ検索され、それぞれのカーブシーケンスが確定される。
【0092】
カーブシーケンスが確定された後、各カーブシーケンスの内容に基づいて実際のイベント、たとえばピッチベンドイベントに展開され、最終的にパートシーケンス”synth_track”内にイベントデータが取り込まれる。このとき、3つのカーブリンクイベントのうち、いずれか2つあるいは3つのカーブリンクイベントの存在する位置が近接していると、カーブシーケンス同士が部分的に重なることがある。このように、複数のカーブシーケンスが重なった部分については、後述するような手法によって合成処理が施され、1つのカーブシーケンスが形成される。
【0093】
また、カーブリンクイベント自体も、合成された複数のカーブシーケンスに対応するもののうちの最も前方に位置するもののみが残され、他のカーブリンクイベントは削除される。なお、はじめから1つのパートシーケンス内に複数のカーブリンクイベントが存在し、それらカーブリンクイベントによってパートシーケンス内に取り込まれるカーブシーケンス同士が重なる場合についても、上記と同様に合成される。
【0094】
このようなシーケンス参照処理を、図19に示すパフォーマンスパッケージ”song1”のシーケンス“root”の内容が参照されて実行される場合を例にあげて、次に説明する。
まず、シーケンス参照処理に先立ち(a)パフォーマンスパッケージ”song1”のシーケンス“root”の内容の要求が入ってくる。ついで、(b)シーケンス“root”のシーケンススクリプトの実行が始まる。この実行中に、(c)シーケンススクリプト中にある一時サブルーチン定義“fz”を作成したディクショナリスタック”dict. stack”に置く。さらに、(d)シーケンススクリプトを実行することにより、シーケンス“root”のイベントリストの内容が修飾される。
【0095】
シーケンススクリプトの実行が終了すると、(e)イベントリスト中のシーケンスリンクイベントの解決が行なわれる。すなわち、参照先のシーケンスの内容を要求し、返ってきた結果のイベントリストを、リンクイベントのあった位置にマージする。図示する場合は、“basicExpr1”内のあるシーケンスの内容が要求されているとする。図示するように、(f)下位のシーケンスの内容参照が再帰的に深さ優先で進むようになる。
以上のプロセスで、(g)最終結果のイベントリストを得ることができる。一連の参照実行が終ると、デイクショナリスタックの”fz”という一時サブルーチン定義はクリアされる。
【0096】
このように再帰的に深さ優先で進むシーケンス内容参照処理のフローチャートを図20に示す。このフローチャートにおいて、シーケンス内容参照処理がスタートされると、ステップS60にてイベントリストの複製を書き換える。ついで、ステップS61にて書き換え結果をスタックに積み、さらにステップS62にて他パートシーケンスへのリンクがあるか否かが判断される。ここで、他パートシーケンスへのリンクがある場合は、YES(y)と判断されてステップS63に進み、対象パートシーケンスの内容が参照される。ついで、ステップS64にて参照結果(スタック上)を、自己の書き換え結果に取り込み、ステップS62に戻る。ステップS62ないしステップS64の処理は、他パートシーケンスへのリンクがある間循環して実行され、リンクがなくなるとNO(n)と判断されてシーケンス内容参照処理は終了する。
【0097】
このシーケンス内容参照処理が、図21(a)に示すように他パートシーケンスへのリンクを持つシーケンス群に実行される場合の、スタックの変化を同図(b)に示す。
図21(a)に示すようにシーケンスAはシーケンスBおよびシーケンスCへのリンクを持っており、シーケンスBはシーケンスDに、シーケンスDはシーケンスGおよびシーケンスHへのリンクを持っている。さらに、シーケンスCはシーケンスEおよびシーケンスFへのリンクを持っており、シーケンスFはシーケンスIへのリンクを持っている。
【0098】
この場合、図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)に示すように変化していく。
【0099】
ところで、スクリプト内では、シーケンスリンクを解決するサブルーチン(システムレベルで提供されている)を明示的に呼びだすことができる。この場合、その時点でイベントリスト内のシーケンスリンクが解決される。同様に、カーブリンクの解決サブルーチンも呼び出し可能である。これらのサブルーチン呼び出しを実行すると、スクリプトのその後の部分では、下位シーケンスの内容を処理対象に含めることが可能となる。
【0100】
また、スクリプト中でリンクイベントを書き換えたり削除してしまう記述も可能である。これを実行した場合、つづくリンク解決では、書き換えたあとのリンクイベントが処理される。
この仕様により、何もスクリプトを書かないと、上位シーケンスでの表情づけが下位シーケンスのイベントには及ばないという動作となる。したがって、スクリプトを書くことによって、上位シーケンスでの表情づけを下位シーケンスのイベントにも及ぼすという動作を実現することができるようになる。
【0101】
次に、パッケージおよびディクショナリのサーチパスについて説明する。
まず、サーチの必要性について説明すると、リンクイベントにより参照されるシーケンスは、該リンクイベントが含まれるパッケージ以外のパッケージ中に存在してもよい。また、スクリプトの中には、サブルーチンを呼び出すための命令が含まれることが普通であるが、そのサブルーチンの実体がそのスクリプトと同一のパッケージ中に含まれているとは限らない。そこで、パッケージやサブルーチンのサーチが必要となる。
HMDMのデータ構造では、概念上パッケージを一列に並べて保持している。
また、各パッケージが定義するサブルーチンは、前記したようにパッケージごとに「ディクショナリ」が用意されてそこに格納される。このパッケージおよびディクショナリの並びをサーチパスとよび、この並び順にパッケージやディクショナリをサーチするようにしている。
【0102】
また、HMDMのデータ構造では、パッケージおよびディクショナリの順序すなわちサーチパスは次のように規定されている。
1番目は、ディクショナリについてはディクショナリスタックであり、つづいて、2番目はパフォーマンスパッケージに対応するディクショナリである。また、パッケージについては、1番目がパフォーマンスパッケージである。この場合、パフォーマンスパッケージおよびそれらに対応するディクショナリは複数存在してもよく、その順序はユーザが自由に変更することができる。
【0103】
ディクショナリの3番目は、プラグインパッケージに対応するディクショナリであり、パッケージの2番目はプラグインパッケージである。これらも複数存在してもよく、その順序はユーザが自由に変更することができる。サブルーチンをサーチする場合、サーチパスにより規定された順にディクショナリをチェックしていくので同名のサブルーチンが存在する場合、先に見つかったサブルーチンが優先される。これにより、サブルーチンのオーバライドが実現される。
ディクショナリの4番目は、システムパッケージに対応するディクショナリであり、パッケージの3番目はシステムパッケージである。これらは最初からサーチパスの端に組み込まれており、ユーザが位置を変更することはできない。
【0104】
図19に示す例では、ディクショナリスタック”dict. stack”、“song1”のパフォーマンスパッケージおよび対応するディクショナリ、”basicExpr1”のプラグインパッケージおよび対応するディクショナリ、”GMbasicExpr2”のプラグインパッケージおよび対応するディクショナリ、そして“sys1.00”のシステムパッケージおよび対応するディクショナリという順序でサーチパスが構成されることになり、リンクイベント解決時にこの順でシーケンス名がサーチされ、スクリプトの実行時にこの順でサブルーチン名がサーチされることになる。
【0105】
次に、このサーチパス探索機構について説明する。
シーケンス名の探索においては、シーケンス名が単独で現れる場合は、以下の手順で探索し、最初に該当したものを選択する。
1.属するパッケージの中で、そのシーケンス名を探す。
2.サーチパスの順序に従い、その次のパッケージに移ってシーケンス名を探す。
3.最後のパッケージ(システムパッケージ)にもシーケンスが見当たらなければ、「シーケンスが見当たらない」旨の表示を行う等のしかるべき処置に移る。
また、パッケージ名も組み合わせてシーケンスが指定される場合は、指定したパッケージの中で、そのシーケンス名を探しそこに見当たらなければ、「シーケンスが見当たらない」旨の表示を行う等のしかるべき処置に移る。
【0106】
次に、サブルーチン名の探索において、サブルーチン名が単独で現れる場合は、次のように探索する。
1.ディクショナリスタックの中で、そのサブルーチン名を探す。
2.属するパッケージに対応するテイクショナリの中で、そのサブルーチン名を探す。
3.サーチパスの順序に従い、次のデイクショナリに移ってサブルーチン名を探す。
4.最後のディクショナリ(システム)にも見当たらなければ、「サブルーチンが見当たらない」旨の表示を行う等のしかるべき処置に移る。
さらに、パッケージ名も組み合わせてサブルーチン名が指定される場合は、指定したパッケージの中で、そのサブルーチン名を探す。そこに見当たらなければ、「サブルーチンが見当たらない」旨の表示を行う等のしかるべき処置に移る。
【0107】
つぎに、パッケージの順序によるサブルーチンのオーバーライドの実現について説明する。
プラグインパッケージで定義したサブルーチンが、パッケージ名と組み合わせて指定された場合は、他のパッケージの同じ名前のサブルーチンと混同されることはない。この場合は、どのような順序でプラグインパッケージを置いても動作に影響はない。
そこで、パッケージを明示せずサブルーチン名だけで指定しておき、同名のサブルーチンを含む別のパッケージをサーチパスの前の方に置くようにすると、そのパッケージを差し込むことにより、別のサブルーチンを実行させることができる。これによりオーバーライドを実現することができる。この場合、サーチパス中のパッケージの順序が動作に影響を与えることになる。
【0108】
次に、カーブデータの加算について図22ないし図26を参照しながら説明する。
カーブデータの加算とは、シーケンスリンクを解決する過程で、下位シーケンス内のカーブデータを上位シーケンスにおいて一つに合成、集約する機能のことである。
例えば、階層をなす複数のシーケンスのそれぞれで、MIDIピッチベンドという同種のパラメータの時間変化が設定されていたとする。このとき、各シーケンスでカーブを多数のMIDIピッチベンドイベントに展開してそれを取り込む、という方法では離散イベント同士をミックスすることになり、前記図10の説明において説明したように個々の変化が正しく加算されないことになる。ここで述べるカーブ加算アルゴリズムは、これを正しく処理するためのものである。
【0109】
まず、図22を参照してカーブデータの構造を詳細に説明する。カーブAのイベントリストを図22(a)にカーブBのイベントリストを同図(c)に示す。このようにカーブデータは時刻とそのときの値との組で表され、この組が節点とされて、隣り合う節点の間は直線で結ばれる。すなわち、カーブAは同図(b)に示すように、カーブBは同図(d)に示すように折れ線で表されるようになる。なお、節点は、「時刻の値が同じか大きくなること」として順序づけられており、カーブをたどるときには、時間をさかのぼることはない。
【0110】
また、同じ時刻に複数個の点があってもよい。これは図22(b)に示すように折れ線の不連続点を表している。この場合においても点の順序は保存される。なお、同じ時刻の点のうち、図22(b)に示すように最初の点のことを「左値」、最後の点のことを「右値」と呼ぶ。さらに、同一の時刻に3つ以上の点がある場合は、最初と最後の点以外の値は無視される。
さらにまた、カーブのある時刻をとったとき、多くの場合値は唯一に定まる。すなわち、一つの節点が存在する時刻ならその節点の値となり、二つの節点の間の時刻ならば両者の値を内挿した値となる。また、複数の節点が存在する時刻についてだけ、異なりうる左値と右値とが存在するようになる。
【0111】
このようなカーブデータの加算を行う場合に、加算される場合の節点の相互関係は図23に示すように8通りに分類される。この図の(a)(b)に示す場合は、注目する時刻において一方のカーブだけが節点とされている場合であり、同図(c)は注目する時刻において両方のカーブが節点とされている場合であり、同図(d)(e)は注目する時刻において、一方のカーブだけが不連続点とされている場合であり、同図(f)(g)は注目する時刻において、一方のカーブが不連続点とされており、他方が節点とされている場合であり、同図(h)は注目する時刻において両方のカーブが不連続点とされている場合である。
なお、カーブの左端の数字は注目する時刻での節点数を表している。
【0112】
次に、カーブ加算のアルゴリズムを前記カーブAおよびカーブBとを加算することを例に挙げて図24ないし図26を参照しながら説明する。カーブ加算アルゴリズムは、図23に示すようないずれの節点の相互関係があっても、正しく加算が行えるものである。
まず、カーブAおよびカーブBのそれぞれについて端の節点の値が0でない場合は、値0の節点を図24(a)(c)に示すように付加する。これは、値が規定されていない時刻においては、カーブの値を0としているからである。
ついで、カーブAのオリジナルを複製し、複製したカーブを図25(a)に示すようにカーブA0とする。
【0113】
次に、カーブ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の接点に加算されている。
【0114】
次に、カーブ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の加算が行われている。
【0115】
次に、カーブBの処理のすんだ接点について時刻の順に、修正した図24(a)(b)に示すカーブAに追加する。この際、カーブAに同一時刻の接点がなければ単に追加するようにし、同一時刻に接点がすでにある場合は、値が異なる場合のみカーブAの接点の後に右値として挿入する。これにより、図26(a)に示すようなカーブAとカーブBとを加算した新たなカーブを得ることができる。このカーブのイベントリストが同図(b)に示されている。
たとえば、時点110では修正後のカーブAおよび修正後のカーブBに共に接点があるが、その値は同一なのでカーブBの値は挿入されていない。また、時点190でも修正後のカーブAおよび修正後のカーブBに共に接点があるが、その値が異なる値とされているので、カーブAの接点の値が左値とされ、カーブBの接点の値が右値とされている。
このようなカーブ加算のアルゴリズムが、カーブリンクの解決時に行われることにより、正しくカーブデータ同士を加算して新たなカーブデータを生成することができる。
【0116】
次に、既存の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記述を格納する。
【0117】
この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に所望の表情をつけることができるものである。
【0118】
このようにすることで、一般に広く流通している表情つきMIDIデータをそのまま用いてHMF形式のデータとして利用することができる。
従って、新規に作曲する曲データであれば表情付きイベントリスト21−1〜24−1とwhite化スクリプト21−2〜24−2に替えて、無表情(ホワイト)イベントリストとしてもよい。
【0119】
各種処理装置で、このようなHMF形式のデータを内蔵したデータをロードする場合は、つぎのようになる。
従来のHMF未対応のSMFプレーヤでHMF形式のデータを読み込んだ場合、テキスト形式で記述されたHMFデータのSMFメタイべントはすべて無視されるので、格納された表情つきSMFデータはそのまま再生されるようになる。
ただし、HMF記述を読みとることはできないので、パラメータを与えて異なる展開結果を生成することはできない。しかし、HMFデータ作成の際、あらかじめHMFの展開結果の一例をSMF部分に格納しておけば、それを再生することはできる。
【0120】
HMF対応の処理装置でロードされる場合は、まず、SMFデータにHMFデータをテキストで記述したSMFメタイベントが含まれているかどうかを調べる。SMFメタイベントには該イベントが何のイベントであるかを識別するための識別情報が含まれている。この識別情報に基づいてHMFデータをテキストで記述したSMFメタイベントの有無を調べる。一つでもそのようなSMFメタイべントを検出するとHMF形式と判断し、逆に一つもなければSMF形式と判断する。
ロードされたデータがSMF形式と判断されたときは、従来方式でロードを行なう。すなわち、フォーマット0ならば1本のトラックに、フォーマット1ならばN本のトラックに、SMFデータを格納する。
また、ロードされたデータがHMF形式と判断された場合は、通常のSMFデータはすべて無視し、含まれているSMFメタイベントだけを集め、それらのデコードに入る。この結果、テキストで記述されたHMFデータが読み込まれるようになる。
【0121】
HMF未対応のSMF編集装置においては、イベントリスト画面でSMFメタイベントの内容を編集することで、原理的にはHMFデータを作成することができる。しかしながら、作業が繁雑となると共に、作成した結果をSMF部分へ反映することはできない。
また、SMF編集装置でSMFメタイべントを編集しセーブすることはできるが、その記述内容をSMF部分に反映させることはできない。反映させるには、いったんHMF対応処理装置に読み込んでセーブするか、ツールを使用する必要がある。
【0122】
HMF対応処理装置でセーブする場合は、まず、SMFとの互換をとるために、編集・作成されたHMF全体の内容を評価して、結果をSMF形式でトラックに格納する。
パフォーマンスパッケージの場合は、”root”シーケンスを評価し、一曲分全体がどう演奏されるかが計算され、SMFとして格納されることになる。プラグインパッケージの場合は、”root”シーケンスがないので、SMFとしては空のデータが格納されることになる。
【0123】
続いて、HMDMの一つのパッケージの内容をHMF記述形式に変換し、それを複数のSMFメタイベントに分割・格納する。なお、複数のメタイベントに分割するのは、SMFにおいてはメタイベントの最大長さが256バイトであるという制約があるからである。つまり、256バイトを越えることがないように分割する。格納するときは、「イベント間の時間+メタイベント」という通常のSMFと同じ形式になるが、「イベント間の時間」については意味を持たないため任意の値を与えてよい。
この場合、オプションによって、通常のSMF形式のデータだけをセーブするようにしてもよい。
なお、SMFメタイベントにテキストで記述したHMFデータを埋め込むのは一例であって、テキストで記述したHMFデータを別に独立してセーブするようにしてもよい。
【0124】
次に、スクリプトが変更された場合の動作を説明する。スクリプトはユーザが書き換えることができるが、ユーザがスクリプトを書き換えた場合、システムは新しいスクリプトソースを登録する。必要ならコンパイルも行なう。
そして、パッケージスクリプトが書き換えられたならばただちに新たなパッケージスクリプトを実行する。通常パッケージスクリプトにはサブルーチン定義が書かれているので、実行の結果、サブルーチンが定義し直されることになる。この新しい定義は、対応するディクショナリに格納される。
シーケンススクリプトの場合は、実行形式を記憶して終了される。実行形式はただちには実行されない。次にそのシーケンスの内容が要求されたとき、はじめて実行されることになる。
なお、コンパイルがエラーとなる場合、実行形式は更新されないが、ソーステキストは保存される。これは、書きかけのソースの状態でもセーブを可能にするためである。
【0125】
ところで、HMFは、あるシーケンスの内容を参照しようとすると、前記したようにリンク先のシーケンスの内容を再帰的に参照し、最終的な結果を出力する仕組みになっている。これには大量の計算が必要であって、その計算には時間がかかることになる。
そこで、必要のないシーケンス参照をなるべく行なわない効率的なシーケンス更新管理手法について説明する。まず、機構として、各シーケンスは「前回の参照の結果」を保持することにする。また、自分が最近変化したかどうかのフラグも保持するものとする。次に、シーケンス更新管理の手順を示す。
【0126】
1.あるシーケンスに内容を要求すると、そのシーケンスは、自分が前回の評価以後何も変わる要因がないかどうか調べ始める。
2.まず、自分からリンクをはっている全シーケンスに対し、最新の結果を要求する。すべての子シーケンスが「私は最近変化していません」という返事を返してきた場合は、自分のリンクやスクリプトの実行をやり直す必要はない。この場合は、「私は最近変化していません」と返事して、前回の結果を返せばよい。
3.一つでも「変化しました」という返事があった場合、あるいは自分自身が「最近変化した」とわかっている場合は、リンクとスクリプト実行をやり直す。この場合は、「私は最近変化しました」という返事とともに処理結果を返し、同時に「前回の結果」として記憶しておく。
4・シーケンスのイベントリストまたはスクリプトが変更された場合、「自分は最近変化した」というフラグを立てておく。
以上の手順により、不要な再計算をおさえることができる。
【0127】
HMFで特徴的な点は、スクリプトの実行およびリンクの解決は、演奏の進行とはまったく関係がないということである。それらは、データモデル内で時系列MIDIデータを記号的に組み立ててゆく過程で実行されるのである。すなわち、HMFデータの中のあるシーケンスの内容を参照しようとしたときに、瞬時に実行されて、結果のMIDIデータ列が得られるのである。
HMFデータに対応する処理装置(アプリケーションソフトであってもよい。)は、HMDM処理部(データ処理部)とシーケンサ部という2つのユニットを備えている。
また、このシーケンサ部に特徴を持たせ、oldとnewという2つのMIDIデータを持てるようにする。そして、一方を演奏しつつ、矛盾なく他方のMIDIデータへ移行することができるようにする。
【0128】
この機能にもとづき、HMF処理装置(アプリケーションソフト)は次のように動作する。
1.演奏中に音楽演奏データを変更すると、ただちにHMDM(データ部)で新しいMIDIデータの生成が始まる。
2.その間、シーケンサ部は、データ変更前の古いMIDIデータによる演奏を続けている。
3.HMDMの新データ生成が完了すると、それがシーケンサ部へ渡される。
4.シーケンサ部は、古いMIDIデータから、新しいMIDIデータヘと、演奏を巧妙に切替えていく。たとえば、クロスフェードする、あるいは、小節線の区切りにおいて切り替え、切り替えた後は、新しいMIDIデータの演奏を続ける。
このように、演奏しながらデータ変更を行なうと、しばらくするといつのまにか演奏も変化したものになる。
【0129】
HMDMを修正する場合、updateの計算量はかなり多く、全体の再計算時間が膨大になるおそれがある。そこで、負荷が軽い時にアプリケーションがバックグラウンドでHMDMのアップデートおよびシーケンサ部のMIDIデータの入れ換えを行なっておくようにしてもよい。
さらに加えて、例えば、音楽演奏データのエンディングの部分だけを修正した場合には、前半の部分のMIDIデータは、当分の間差し替える必要はないので、余裕のない場合は差し替えはすぐに行なわない。また、HMDMの変更の影響が、限られたMIDIデータにしか及ばない場合は、すべてのMIDIデータの再生成を行なうのでなく、前のMIDIデータに対する部分修正を施して、計算量を少なくするようにする。
【0130】
なお、記録媒体にはプラグインパッケージだけを納めるようにしてもよい。
また、以上の説明では時系列イベントデータ列を音楽演奏データとして説明したが、本発明はこれに限るものではなく、音声データや画像データの時系列イベントデータとしてもよいものである。この場合、音声データとすると音楽と同様に音声の音質や音量等を任意に変化および変更することができる。また、画像データの場合は、シャープネスやビューの変化および変更を任意に行うことができるようになる。
【0131】
【発明の効果】
本発明は以上のように構成されているので、スクリプトを実行することにより時系列イベントを書き換えて多様な時系列イベントデータを生成することができ、時系列イベントに能動性、可変性を持たせることができるようになる。
また、スクリプトの実行時に時系列イベントデータを識別することができるため、時系列イベントデータに選択的に操作を行うことができ、操作性を向上することができる。
さらに、パッケージによってシーケンスをグルーピングすることができるので、テンプレートを自由に保持することができ、操作性を向上させることができる。
【0132】
また、従来、時変データは離散的なMIDIイベントの列として表していたが、本発明では時変データを折れ線のカーブデータとして表すようにしたので、ボリュームやテンポ、その他のあらゆる時変パラメータの抽象化を可能とすることができる。さらに、このカーブデータはそのままやりとりすることができるものである。
さらにまた、本発明では音源の機種毎にデータを最適化することのできる手順のスクリプトを用意することができるので、どのような音源を使用しても最適な音を生成することができる。
【図面の簡単な説明】
【図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 サーバコンピュータ
[0001]
BACKGROUND OF THE INVENTION
The present invention relates to a processing device and method for processing data including at least a sequence composed of time-series event data and a script indicating a rewriting procedure for rewriting the time-series event data, and a time-series event data processing program is recorded. And a recording medium on which data including time-series event data is recorded.
[0002]
[Prior art]
Conventionally, AIFF is known as a format of time series event data. For example, in the music field, a standard MIDI file (hereinafter referred to as SMF) to which this is applied is known. MIDI is an abbreviation of Musical Instrument Digital Interface, and is a standard established to enable exchange of information by connecting different instruments, sequencers, computers, writing controls, mixers, and the like. SMF is a format designed to record and save event information exchanged in real time on MIDI with a time stamp.
[0003]
[Problems to be solved by the invention]
However, in the currently popular SMF, only low-level MIDI event sequences can be stored and exchanged, and it is difficult to exchange information such as the musical structure of performance data and the amount of time change. Met. Such information can only be stored in a format unique to the sequencer software.
Therefore, conventionally, there is a problem that high-order information such as temporal arrangement of event data and time-varying data cannot be exchanged.
Further, expression of performance data is generally performed. However, in order to perform expression in SMF, it is necessary to manually operate each event data. For this reason, the work is complicated and requires a lot of time. Furthermore, there are many cases in which a typical procedure is repeated for the facial expression work. However, even in this case, there is a problem that the work must be performed one by one.
[0004]
Furthermore, when creating MIDI performance data, the user sets various parameters so that the best sound can be produced with the sound source used by the user. There was a problem that an unnatural sound might occur when applied to a sound source of a different model.
Furthermore, although a template which is a typical performance pattern is prepared, the contents cannot be changed, and there is a problem that lacks flexibility. Moreover, since the sequence cannot be grouped, it is inconvenient to hold the template, and the template must be placed on a track that does not sound.
[0005]
Therefore, the present invention defines a data structure composed of time series event data and a script indicating a rewriting procedure for rewriting the time series event data, and exchanges higher order information such as the structure of performance data and time-varying curves. PROBLEM TO BE SOLVED: To provide a processing device and method for processing data including time series events, a recording medium on which a program for processing time series event data is recorded, and a recording medium on which defined data is recorded It is said.
Further, the present invention is a process for processing data including a time series event composed of a script for repeating the procedure and time series event data when facial expression is a typical procedure repetition. It is an object of the present invention to provide an apparatus and method, a recording medium on which a time series event data processing program is recorded, and a recording medium on which such data is recorded.
[0006]
Furthermore, the present invention provides a processing apparatus and method for processing data including time series data composed of a script for rewriting time series data suitable for the sound source for each sound source and time series event data, and for time series event data processing It is an object of the present invention to provide a recording medium on which a program is recorded and a recording medium on which such data is recorded.
Furthermore, the present invention records a processing device and method for processing data including time-series data that can be selectively processed by identifying time-series event data during execution of a script, and a program for processing time-series event data. It is an object of the present invention to provide a recording medium and a recording medium on which such data is recorded.
Furthermore, an object of the present invention is to provide a processing apparatus for processing data of a package that can group a plurality of sequences.
[0007]
Furthermore, a processing device and method for processing data including time-series data that can be represented by a polygonal line by replacing time-varying continuous data with discrete data, a recording medium on which a program for processing time-series event data is recorded, An object of the present invention is to provide a recording medium in which such data is recorded.
[0008]
[Means for Solving the Problems]
In order to achieve the above object, a data processing apparatus including time-series event data according to the present invention provides time-series event data. Column And the time series event data Column A data processing device including at least a sequence including a script indicating a rewriting procedure for rewriting, At least one piece of identification information can be arbitrarily given to each event data constituting the time series event data string, and the script specifies event data to be rewritten by the identification information. And describes the contents of the processing to be performed on the event data to be rewritten, When referring to the contents of the sequence, Included in the sequence The script The Execution And included in the sequence Script execution means for rewriting the time series event data string is provided.
[0010]
Further, the processing method of data including time series event data of the present invention provides time series event data. Column And the time series event data Column A method for processing data including at least a sequence composed of a script indicating a rewriting procedure for rewriting, At least one piece of identification information can be arbitrarily given to each event data constituting the time series event data string, and the script specifies event data to be rewritten by the identification information. And describes the contents of the processing to be performed on the event data to be rewritten, When referring to the contents of the sequence, Included in the sequence Run the script , Included in the sequence Time series event data Column Rewrite Stuff The
[0013]
Furthermore, the time series event data processing program of the present invention was recorded. Computer readable The recording medium stores a program for causing a processing device to execute the data processing method including time-series event data of the present invention.
[0014]
Furthermore, data including time series event data of the present invention was recorded. Computer readable The recording medium records data to be processed in the data processing apparatus including the time series event data of the present invention or using the data processing method including the time series event data of the present invention. is there.
[0015]
According to the present invention as described above, various time-series event data can be generated by rewriting a time-series event by executing a script, so that the time-series event can be active and variable. become. Further, since the template can be rewritten by executing the script, the template can be active and variable.
In addition, since each time series event data can be identified at the time of execution of the script, the time series event data can be selectively operated, and the operability can be improved.
[0016]
Conventionally, the time-varying data is represented as a sequence of discrete MIDI events. However, in the present invention, the time-varying data is represented as a polygonal curve data. Abstraction can be possible. Furthermore, this curve data can be exchanged as it is.
Furthermore, in the present invention, it is possible to prepare a script of a procedure that can optimize data for each sound source model, so that an optimal sound can be generated regardless of the sound source used.
Furthermore, since the present invention can group sequences by packages, a typical template can be held, and data can be easily created.
[0017]
DETAILED DESCRIPTION OF THE INVENTION
FIG. 1 shows an outline of the configuration of a data processing apparatus including time series data such as a MIDI sequencer which is an embodiment of the present invention. The data format of the data handled here is newly defined by the present invention.
Here, this new data format is referred to as a Hyper Media File (hereinafter referred to as HMF).
The HMF provides a general data model that can describe higher-order information. This data model is defined from two aspects of data static structure and dynamic mechanism, and is referred to as Hyper Media Data Model (hereinafter referred to as HMDM). By causing the sequencer software to implement mutual conversion between the internal unique data structure and the HMDM, it becomes possible to exchange high-order information with each other.
[0018]
That is, the HMF is defined as a format for storing the HMDM in a file format. The HMF can be configured on the basis of SMF, for example, for music description by MIDI events, but is not limited to MIDI event data, and may be applied to time-series event data such as voice and images. It can be done.
[0019]
Next, an example of an embodiment of the processing apparatus of the present invention when HMF is applied to music performance will be described with reference to FIG.
In FIG. 1, a processing device A denoted by reference numeral 1 generates music performance data, and the generated performance data is stored in the buffer memory 1-1. The structure of the performance data stored in the buffer memory 1-1 is HMDM, and details of the HMDM will be described later. The HMDM includes, for example, a plurality of packages 10 to 10 as shown in FIG. 13 is stored. The HMF encoder 1-2 converts music performance data having an HMDM data structure into an HMF format for each package and outputs the converted data. An example of the package converted into the HMF format in this case is shown by a broken line in the buffer memory 1-1. Although details of the package will be described later, the package includes a plurality of sequences as shown in FIG. 3B, for example.
[0020]
The HMF music performance data in units of packages output from the processing device A is sent to the processing device B or the recording medium 4 via the transmission path 7.
Music performance data is stored in the recording medium 4 in HMF format in units of packages. Here, as the recording medium 4, various recording media such as a hard disk, floppy disk, magnetic card, CD-ROM, MO, and DVD can be used. Encoding one package and storing it in a file is also called “save”.
Here, when the processing device B indicated by reference numeral 2 reads data from the recording medium 4 or receives HMF format data sent from the processing device A via the transmission path 7, the processing device B receives the HMF format data. For each package unit. The received package is converted into a package having a data structure of HMDM in the HMF decoder 2-1, and held in the buffer memory 2-2. Reading a file, decoding it, and storing it in the HMDM as one package is also called “loading”.
[0021]
As shown in FIG. 3B, the package contains a plurality of sequences. Details of the sequence will be described later. As shown in FIG. script) 31.
The script characterizes the HMF and is a program indicating a data change procedure. Event data with a script is converted into a final MIDI event sequence by executing this script.
That is, when the music performance data received by the processor B is to be played, the HMDM stored in the buffer memory 2-2 is expanded by the data expansion unit 3.
[0022]
In the data expansion unit 3, necessary sequences are sequentially sent, and the event data / script separation unit 2-3 separates the data into event data and scripts. The separated script is interpreted by the script interpretation unit 2-5, and the event data rewriting unit 2-4 executes processing for rewriting event data based on this interpretation. Thereby, final time-series event data is obtained. This time-series event data is sent to the MIDI sound source 5 as a MIDI signal via the MIDI event output unit 2-6 and emitted from the sound system 6. Alternatively, the file can be directly in the SMF format.
[0023]
When SMF is used, for example, performance data that can be exchanged between the processor A and the processor B is a collection of raw MIDI data, and only low-level data can be exchanged.
In the present invention, performance data can be exchanged between the processor A and the processor B using the defined HMF. In this case, it is possible to create an HMDM including such information from the time-series performance data expressed in an optimum manner for the sound source used in the processing apparatus A and send it to the processing apparatus B in the HMF format. The processing device B receives the data in the HMF format, restores the HMDM, and expands the HMDM to obtain performance data that is a time-series event data string so that the performance data is optimal for the sound source used by the processor B. Like that. The expansion at this time is performed by executing a sound source correction script stored in the processing apparatus B in advance.
In this way, sequence information including advanced information can be distributed in the HMF.
Although not shown, the processing device A and the processing device B have the same configuration, and in the above description, data is sent from the processing device A to the processing device B. It is also possible to send data to.
[0024]
In FIG. 1 described above, the processing device A and the processing device B are represented by functional blocks, but FIG. 2 is a block diagram showing the hardware configuration of the processing device A and the processing device B.
In this figure, a CPU 61 is a central processing unit (CPU) that executes an operation program and performs various processes, and a ROM 62 is a read-only memory (ROM) in which an operation program of the CPU 61 is stored. Is a random access memory (RAM) that the CPU 61 uses as a work memory when executing a program.
[0025]
An HDD (hard disk drive) 65 and an FDD (floppy disk drive) 66 are storage devices for storing operation programs and various data. When no operation program is stored in the ROM 62, the HDD 65 or the FDD 66 is stored. An operation program is stored in the internal hard disk or floppy disk, and the stored operation program is read into the RAM 63. The CPU 61 reads the operation program from the RAM 63 and executes it, so that the CPU 61 can execute the same operation as when the operation program is stored in the ROM 62. Since the HDD 65 can freely perform writing / reading, it is possible to easily add an operation program or upgrade the version.
[0026]
The switch 67 is an operation instruction switch provided on the operation panel. The operation of the switch 67 is detected by the switch detection circuit 68 and notified to the CPU 61. A menu, operation information, and the like are displayed on the display device 69, and the user operates the switch 67 and the like while referring to the display.
The CD-ROM drive 70 is a device that reads an operation program and various data stored in the CD-ROM. The operation program and various data read from the CD-ROM drive 70 are written and stored in the hard disk in the HDD 65. Therefore, it is possible to easily perform new installation or version upgrade of the operation program.
[0027]
A MIDI interface (MIDI I / F) 71 is an interface for sending or receiving MIDI data, and is connected to another MIDI device 72.
The communication interface 73 is connected to a communication network 74 such as a LAN (Local Area Network), the Internet, or a telephone line, and is connected to the server computer 75 via the communication network 74. Here, when the operation program and various data are not stored in the HDD 65, the operation program and various data are downloaded from the server computer 75 to the HDD 65 using the communication interface 73.
[0028]
Specifically, the processing apparatus of the present invention as a client transmits a command requesting download of an operation program and various data to the server computer 75 via the communication interface 73 and the communication network 74. Upon receiving this command, the server computer 75 distributes the requested operation program and various data to the processing device via the communication network 74, and the processing device transmits these operation program and various data via the communication interface 73. Downloading is completed by receiving and storing in the HDD 65.
[0029]
The present invention relates to the above-described HMF data processing apparatus and processing method. In particular, it is possible to selectively operate time-series event data during script execution. For this reason, identification information such as a label and an ID can be added to each event data.
Further, in the present invention, the polygonal curve data is represented by a pair of a time series event data string and a script. In this case, the time series event data string of curve data is composed of time and value, and the value of curve data at an arbitrary time is obtained by an appropriate interpolation method. Note that the shape of the curve data can be changed by executing a script.
[0030]
Next, although the present invention will be described in detail, the HMF data processing apparatus of the present invention can be realized by software applied to a computer.
First, a typical overview of the HMDM static data structure that is processed in the processing apparatus of the present invention is shown in FIG. 3 (a), and FIG. 3 (b) shows a typical package stored in the HMDM. The structure is shown, and the structure of a typical sequence contained in the package is shown in FIG.
As shown in FIG. 3A, the HMDM is composed of a plurality of packages 11-13. The package usually includes a performance package 10 that stores performance data of one piece of music, and plug-in packages 11 and 12 that collect useful phrase fragments and subroutine definitions that are frequently used. There are types of system packages 13 that store basic data / subroutine definitions. Further, a package script 32 and three sequences 21, 22, and 23 are stored in the package shown in FIG.
A package is composed of zero or one package script and zero or more sequences. That is, a package in which either a package script or a sequence is omitted can be used.
[0031]
In addition, the sequence (Sequence) has a structure in which an event list 30 and a script 31 that describes a change to the event list 30 are paired as shown in FIG. It is an important data structure in HMF.
Further, the script 31 is a program showing a procedure for making a change such as “This event is more like this” to the event list 30. A script 31 that is paired with the event list 30 as shown in FIG. 5C is called a sequence script, and a script 32 that exists alone in the package is a package script as shown in FIG. Called.
[0032]
Furthermore, the event list holds a plurality of MIDI events with time. In the HMF, a link event, which will be described later, can be placed. By the link event, a description of a music performance data structure that is more flexible than the SMF track model in which a plurality of performance parts are represented by a plurality of tracks can be described. Can be realized.
When requesting the contents of a sequence, such as a playback instruction or a data display instruction based on an event, the sequence script is applied to the held event list and the result is given. In this way, the performance data entity is placed in the event list portion, and the modification of the entity content is described in the script.
[0033]
Next, how one package in HMDM is generated from HMF will be described.
In the HMDM processing, about 200 basic instructions (instruction sets) are defined. The HMDM can receive the “execution code” in which these instructions and numerical values are stored in a line and execute the instructions sequentially. Some commands refer to or change the contents of the HMDM.
A rule that describes the execution code in text is defined. Specifically, it includes the textual notation of instructions and numerical values, and the notation rules for giving arguments to those instructions. The programming language defined by this rule is called “Hyper Media Executable (HME)”.
[0034]
When HMDM processing is performed, a text written in HME is read, an execution code is generated, and a function for executing the code is provided. The program for changing the contents of the HMDM can be generated by directly writing the HME text or by writing a program using a high-level language. Further, the system may automatically generate the system without making the user aware of the graphical interface.
When the HMDM is processed by a program written by any method, the contents of the text are examined, and if it is an HME, the execution code is executed by directly reading it. Alternatively, the compiler specified in the text is activated to convert the text into HME text, and the converted HME is read to execute the execution code. In order to determine the format, the name of the compiler is placed on the first line of the text, but the format may be determined by other methods.
[0035]
HME is designed to be able to perform any change operation on HMDM. Starting from a new package that has no content at all, you can create a package with any content if you change it one after another. be able to. And since HME can be described with a text, it can be easily stored in a file. It may be simply a text file, or may be stored in an SMF format file using an appropriate SMF meta event.
Therefore, if a sequence of change operations is created that sequentially registers all elements included in the package to be saved using the HME, and saved in a file in text format, the contents of the package are converted into a file. It will be possible to record.
[0036]
Incidentally, the HMF is a file describing the contents of one package in the HMDM, and the contents of the package are described using HME as the description method. Hereinafter, it will be described using an example that a package can be restored from a text description.
Although the text description has the following configuration, it is not an actual HME itself but a rough content for convenience of explanation. The number at the left end is also given for convenience of explanation, and this number is not actually included in the text.
[0037]
"HME" language 1.00 Version
1. Create an empty package and let it be p.
2. Create an empty part sequence and let it be s.
3. Event e is created; time of e is 100; content of e is “91 40 40”; e is stored in s
4). Create event e; e is 150; e is “81 40 00”; e is stored in s
5). Store s in p with the name “seq_A”
6). Create an empty part sequence and let it be s
7). Event e is created; e time is 300; e content is “91 51 40”; e is stored in s
8). Event e is created; time of e is 450; content of e is “81 51 00”; e is stored in s
9. Store s in p with the name "seq_B"
10. output p
[0038]
In the three sets of 1-byte data representing the contents of event e, the first data “91” indicates note-on and the data “81” indicates note-off, and the second 1-byte data is 16 The note number is represented by a hexadecimal number, and the 1-byte data located at the third position represents the velocity by a hexadecimal number.
Next, a state in which this text is read during HMDM processing, converted into an execution code, and executed is shown below.
At the time of HMDM processing, first, “HME” at the beginning is recognized, and it is determined that this is an HME text, and is converted into an execution code. Here, if another language is specified and external software for converting it into HME text is specified, the external software is started, the text body portion is processed, and the result is received. .
[0039]
When the state is converted into an execution code and executed, a new empty package is created in 1 above. This package is secured in the memory, but is not registered as one of the packages in the HMDM. Reference it with the variable p.
In step 2, an empty part sequence is prepared on the memory.
In 3 and 4 above, necessary parameters are set for the prepared event and stored in the part sequence. In practice, this may be arranged as many as the number of events. As a result, a state in which events are arranged is created in the part sequence.
In part 5 above, the created part sequence s is named and registered in the package p.
In the above 6, 7, 8, and 9, the same process is repeated to create a new part sequence and register it in the package p.
[0040]
As described above, two part sequences “seq_A” and “seq_B” are registered in the new package with the contents restored. In the same way, a procedure for creating and registering a part sequence or curve sequence may be described. Registration of text representing a package script can be described in the same way.
The last created package is added to the end of the package column of HMDM. Or you may leave it to a user's designation | designated where to insert. After assembling the package and incorporating it into the package row in this way, the package script is further executed.
As shown in the above example, a package having an arbitrary content can be restored from the HMF into the HMDM by “executing” the description in the HME. Conversely, the contents of a package with HMDM can be described in HME and filed in text format.
[0041]
Next, the details of the package will be described with reference to FIGS. FIG. 4 shows a package named “song1”, which includes one package script and “root”, “bass-trk”, “bass-intro”, “bass-1”. , “Bass-2”,..., “Drums-A”, “melody-cresc”.
Thus, one package consists of zero or one package script and zero or more sequences. However, the sequence is not managed in a line as shown in the figure.
[0042]
The package has the following roles.
First, it is a unit of HMF data distribution. In other words, saving and loading of files is done in units of packages, and usually music performance data of one song is distributed as one package. Such a package is called a performance package 10.
On the other hand, there is also a package in which convenient phrase fragments and subroutine definitions are collected in a package script, which are called plug-in packages 11 and 12. Even if one sequence is exchanged, it is done in a package. However, it is also possible to exchange only the script source as a text file.
The package can store basic data / subroutine definitions provided from the beginning to the HMF system. The package for this purpose is the system package 13.
[0043]
In addition, the initialization script at the time of loading can be put in the package. This is the package script 32, and the initial setting for each music performance data is performed by executing the package script.
Note that a name is used in the HMDM to specify an arbitrary sequence in the package. A sequence in a package can have a name, which is called a sequence name. The sequence name is also saved if the package containing it is saved to a file and then loaded. However, multiple sequences with the same name do not exist in one package. If you register a sequence with the same name as an existing one, the old contents are discarded and replaced with the new one.
[0044]
In the case of a performance package, one of the sequences in the package is a “root sequence”. A root sequence is a sequence that is a starting point of a reference relationship. That is, when the content of the root sequence is requested from the outside, another sequence included in the package is referred to, and as a result, for example, the entire data of the music performance is obtained. To indicate that a sequence in the performance package is a root sequence, the sequence name is “root”.
Since the root sequence is also a normal sequence, it is created in the same way as the others. In general, the root sequence script and the event list are set for the entire data.
[0045]
A common subroutine for configuring the music performance data can be placed in the package script in the performance package. You can also place the initial settings for the song here as a script.
Note that it is possible to create a sequence script and make arbitrary changes to the event list.
[0046]
A plug-in package is a collection of useful phrase fragments and subroutine definitions. A general user can use a finished sequence or subroutine by loading a finished product plug-in package into the HMDM as a black box. The user can change the contents of the script or create a new one.
There is no root sequence in plug-in packages. By storing one or more subroutine definitions in the package script, a “subroutine collection” can be obtained. For example, if a subroutine “slide” is provided, and two events in a sequence are specified, and this subroutine “slide” is called, they can be rewritten as if they were played by a guitar slide technique. become able to.
[0047]
The plug-in package can be, for example, “accompaniment style collection”. That is, a sequence of accompaniment patterns is defined, and when a content is requested by specifying a chord as an argument, an event list of accompaniment patterns in which the pitch is converted according to the chord can be obtained.
Moreover, a phrase collection, a curve data collection, etc. can be provided using a sequence. In this case, the sequence script provides a method of modifying them. For example, when a phrase collection sequence is given an argument and the content of the sequence is requested, variously changed phrases can be obtained.
[0048]
The system package is a package for realizing an additional part of the system function, and is mounted on the primitive function of the system.
The system package does not have a root sequence, and a basic subroutine is provided using a package script, or basic data such as a typical accompaniment pattern is provided using the sequence.
[0049]
Next, the sequence will be described. The sequence is a unit of the data structure that is the core of the HMF, and is configured in the form of a set of an event list and a script, and there are two types of part sequence and curve sequence. Among these, the part sequence is a sequence, and the event to be held is a byte sequence in which an 8-bit sequence of 0 to 255, a note event having MIDI pitch, on velocity, and off velocity, and will be described later. Link event to be stored. In addition, the curve sequence contains a sequence whose event is a numerical value.
Note that the link event is not included in the curve sequence.
[0050]
When a sequence is requested, the sequence makes a copy of the event list it holds and executes a script to qualify the event list. Then, the modified event list is output. That is, the held event list itself cannot be rewritten.
For example, when the contents are requested (reference) in the sequence shown in FIG. 5, “melody notes harder ...” and “exaggerate tenuto” described in the script in the sequence are executed, and the melody as shown in FIG. Each event's velocity is increased (the event bar is shown thicker), the duration is increased, the melody is strengthened, and its tenuto is emphasized . The event list rewritten in this way is returned (response). Also, an argument can be given as necessary, and for example, it is possible to specify “melody note is“ 10% stronger ””.
[0051]
In addition, the event list and the script constituting the sequence are independent from each other both statically and dynamically. The data structure is also separated, and script execution and event list performance progress are completely different processes. In other words, the script is not included in the event list and is not executed as the performance progresses.
In this way, the HMF can be changed in various ways by holding a fragment of the original performance in the event list in the form of a MIDI event and adjusting the arguments of the script or replacing the script itself. Thereby, the template can be easily changed.
Since the script holds commands to be applied to the event list, the editing process of the event list can be known by looking at the script. In other words, the sequence can be said to be performance data that holds its editing process.
[0052]
Here, the sequence designation method will be described. To designate a specific sequence in the HMDM, the package name and the sequence name there are designated together. This is because the package name is unique within the HMDM and the sequence name is unique within the package.
Further, in HMDM, as a sequence identification method, a method based on an ID number may be used in addition to the method based on the name.
When a new sequence is added to the HMDM by loading a certain package, the ID manager gives each sequence an “ID number” that guarantees uniqueness in the HMDM. Thereafter, in the HMDM, an arbitrary sequence can be directly designated by this ID number. Thus, the ID number is unique in the HMDM, not in the package.
[0053]
This ID number is an integer value, but is not necessarily a serial number. Therefore, even if one sequence is deleted, the ID number of another sequence does not change. Also, once registered in the HMDM, the sequence ID number remains unchanged until it is deleted from the HMDM.
However, the ID number is not recorded when the package is encoded in the HMF format, and a new ID number is given to each sequence when the package is loaded into the HMDM at a later time. That is, it is treated as registration of a new sequence.
[0054]
Next, details of the event list will be described. The event list is a data holding structure that holds an arbitrary number of events in time order. An event is a data unit that holds three pieces of data including the start time, the duration, and a label to be described later, together with any of the following data.
・ Byte sequence: 8-bit sequence of 0-255
・ Note event: Event with MIDI pitch, on velocity, off velocity
・ Link event: Holds a link, and there are a part link event and a curve link event.
・ Numerical values
[0055]
The event list holding such events has the following characteristics.
1. Each event can have one or more labels. At this time, each event may have an ID number.
2. A link event is provided. (This will be described later.)
3. It can also be used to hold the substance of time-varying curve (polygonal line) data. (This will also be described later.)
[0056]
The label is given to identify an event in the event list, and can be arbitrarily given by the user. Further, the event may be identified by an ID number.
FIG. 6 shows an example of an event list with a label. Each event in the event list can have an arbitrary number of labels made up of arbitrary character strings. There may also be unlabeled events.
For example, in FIG. 6, three labels “melody”, “tenuto”, and “first” are attached to the upper left event. In HMDM, an event can be specified using this label.
[0057]
The labeling corresponds to the target event selection operation of the conventional sequencer software. In the conventional sequencer software, an arbitrary number of target events are designated with a mouse or the like, and editing is performed on the specified event. Labeling an event is equivalent to recording the “selection”. Therefore, if a label is designated, the selected pattern can be reproduced, and some processing can be easily performed on the selected pattern.
For example, in FIG. 6, when “event labeled“ melody ”” is designated, the same effect as selecting the event surrounded by the above broken line with a mouse or the like is obtained. If “event labeled“ chord ”” is specified, an event enclosed by a broken line below is selected. It is possible to specify a plurality of labels such as “melody” or “tenuto”.
[0058]
The label is also saved when it is encoded in the HMF format and decoded later.
Here, in FIG. 6, the performances of both hands of the piano are included in one sequence. Each event has a label such as “melody”, “chord”, or “bass” attached to the corresponding note-on event. Therefore, it is possible to describe in the script that “events labeled“ melody ”are stronger” and “events labeled“ bass ”are stronger”.
[0059]
Next, FIG. 7A shows a flowchart of selective event rewriting processing for an event to which a label is attached, and the explanation will be given with reference to the event list shown in FIG. 7B.
Here, a case where the label “xxxx” is the label “melody” in the rewriting of the event having the label “xxxx” will be described as an example. When the event rewriting process is started, it is determined in step S1 whether or not an event remains in the event list. In this case, since it is immediately after the process is started, all the events in the event list shown in FIG. 7B remain, and it is determined as YES (y), and the process proceeds to step S2. In step S2, one event is selected. In this case, EventA1 is selected, and it is determined in step S3 whether or not the label “melody” designated for the event is given. In this case, since the label “melody” is assigned to EventA1 as shown in FIG. 7B, it is determined as YES (y) and the process proceeds to step S4. In step S4, designated processing such as making the event stronger is executed, and the process returns to step S1.
[0060]
Then, the processing from step S1 to step S4 is performed again. In this case, EventC1 is selected, but since label “melody” is not assigned to EventC1, NO (n) is determined in step S3. Then, the process returns to step S1 again.
Next, when the processes in steps S1 to S4 are sequentially executed for the events shown in FIG. 7B, and the processes are executed for all the events in the event list shown in FIG. 7B. In step S1, NO (n) is determined, and the event rewriting process ends. As a result, in this case, the event rewriting process is executed for EventA1 and EventA2 to which the label “melody” is assigned.
[0061]
The HMF may also use an ID number as an auxiliary to identify an event in the event list.
This auxiliary mechanism is for trade-off with scripting languages. Because of the trade-off between script processing speed and complexity, it may not be possible to provide a language with a sufficient mechanism (such as an associative array) for event identification by labels. In this case, it is necessary to identify the event with an integer which is the most basic data. For this reason, the ID number is used supplementarily.
[0062]
FIG. 8 shows an example of a mechanism for assigning an ID number to an event.
When a new event is added to the event list by user input or the like, an “ID number” that guarantees uniqueness in the event list is given to each event. Thereafter, an arbitrary event can be directly designated by this ID number.
For example, in FIG. 8, the event “NoteOn a3 64” is applied at time 0. When registering this event, the ID manager 40 gives the event a numerical value “1” that is not used for any other event at that time. Thereafter, in the event list, if id = 1, the “NoteOn a3 64” event at time 0 is always specified.
[0063]
The ID number is an integer value and need not be a serial number. Therefore, even if one event is deleted, the ID number of another event does not change. Once registered in the event list, the event ID number remains unchanged until it is deleted.
For example, even if the event with id = 16 in FIG. 8 is deleted, the ID number of any other event does not change.
However, when an event is deleted from the event list and the same event is registered again, the first ID number is not saved and a new ID number is given. That is, it is handled as registration of a new event in the event list.
[0064]
Next, the script will be described. The script is a program that describes the procedure for modifying the event list as described above.
The content of the script is a repetition of setting a target event and indicating an operation to be performed on the set event. The target event can be set by specifying the label or ID number assigned to the event as described above, or by specifying the time range and specifying the events included in the time range There is a way to do it.
FIG. 9 shows an example of the script contents in association with the event list. In the first line of the script shown in this figure, a process for increasing the velocity by 10 is programmed for an event labeled “melody”. In the second line, the pitch of the event whose ID is 36 is set as C3. Furthermore, in the third line, slur processing is performed for an event with a label starting with “slur”.
Note that the * mark attached to “slur” on the third line is a wild card, and labels such as “slur1,” “slur2,” and “slur3” correspond to this.
[0065]
The script notation shown in FIG. 9 is conceptual and is different from the actual programming language described above in the present invention.
Script operations for set events include operations such as reading event contents, determining event types, changing values, deleting events themselves, adding new events, adding / deleting / renaming labels, and the like.
As the script language, a low-level language such as an assembler can be used. In this case, a script may be written directly in this language, or a high-level language may be designed and a compiler for this language may be prepared.
[0066]
A script built in each sequence is called a sequence script.
In the sequence script, a description closely related to the contents of the corresponding event list is made.
In general, a sequence script has a large number of event list editing commands such as “it makes such a change for such an event”, including iteration and conditional branching.
It is possible to define a subroutine in a sequence script.
[0067]
Furthermore, a script registered for each package is called a package script.
The package script is shown at the top of FIG. 4, but the package script is executed once when the package is loaded. Therefore, if a general subroutine definition is described in this package script, a new subroutine can be used simply by loading the package.
For this reason, the package script is occupied by the initial settings necessary for using the package and the definition of general-purpose subroutines. The definition of the subroutine here can also be used from outside.
[0068]
Next, curve data which is one of the feature points of the present invention will be described.
The change curve that changes the pitch bend, the volume, and the like is data of a continuously changing amount, and the data of the change curve in the SMF is expressed by a discrete sequence of specific events. For example, the amount of continuous change inherently is represented by the discrete event data sequence shown in A of FIG. Then, when the event data string shown in A and the event data string shown in B of FIG. 10A are added to create a change characteristic of a new change curve, if simply mixed, As shown in A and Bmix in a), the change characteristics are not obtained by correctly adding the individual change curves.
[0069]
Therefore, in the HMF, curve data (polygonal line data) is defined to provide a framework for operation as shown in FIG. When defined in this way, a new curve as shown in A and Bmix of FIG. 10B is added by adding the curve data of the broken line shown in A of FIG. 10B and the curve data of the broken line shown in B of FIG. Curve data can be obtained.
This makes it possible to abstract volume, tempo, and other time-varying parameters. In addition, the curve data can be exchanged between the processing apparatuses as it is.
[0070]
This curve data is managed as a kind of sequence, for example, as held in the sequence shown in curve “melody-cresc” shown in FIG. 4, and is called a curve sequence. That is, a curve sequence is a sequence that actually represents a curve using a sequence. This curve sequence is shown in FIG. In the part sequence, as shown in the figure, the MIDI event sequence is held in the event list in the order of time. In the curve sequence, the event list is used to store a set of time and value at the curve change point. Note that the value of curve data at an arbitrary time between events is obtained by using an appropriate interpolation method such as a linear interpolation method.
A link event, which will be described later, is used to refer to the curve contents. An event (curve link event) for requesting the contents of a curve sequence, which is a kind of sequence, is placed at an arbitrary time in the part sequence. In this curve link event, it is possible to include curve identification information such as a curve name and application destination information such as applying this curve to volume or pitch.
[0071]
Further, the curve is not fixed to a specific event, and for example, the curve data for pitch bend can be rewritten and used as curve data for changing the volume.
The curve data is a conversion function from time to value. Based on this, it is possible to “obtain a value at a certain time”, “generate a MIDI event at an appropriate interval from a curve”, “reversely generate a curve sequence from an existing MIDI event sequence”, and the like. In addition, addition of curves and the like are also defined, and it is possible to repeat expressions by curves.
The curve sequence deformation operation can actually be performed in the same manner as the event list editing in the part sequence.
[0072]
Next, an example in which curve data is used to express pitch bend will be described with reference to FIG.
FIG. 12 shows that the user has captured the curve data “curve-a1” into the strip chart of the pitch bend, and the system automatically generates and generates pitch bend events at appropriate intervals from this curve. Insert into the MIDI event sequence that should be. In this case, when the user changes the shape of the curve data “curve-a1”, the system regenerates a pitch bend event.
[0073]
Note that by adding a script to the curve sequence and executing the script at the time of reference, the original broken line is rewritten, and the final curve data is obtained by interpolating between the rewritten events. Good. Further, when a curve is referred to by a curve link event, a broken line may be rewritten by executing a sequence script including the curve link event. Furthermore, the data of each point may be selectively rewritten by attaching a label to each point of the curve data. Thereby, the change characteristic of a curve can be changed easily.
In addition, in the curve data of the broken line, the value at an arbitrary time is obtained by performing appropriate interpolation. Thereby, it is possible to generate a discrete event sequence with appropriate intervals from the polygonal line data.
[0074]
Next, the sequence link event will be described.
In a sequence, a “sequence link event” can be placed in the event list of the part sequence. The sequence link event designates some other sequence (part sequence or curve sequence). And it has the role which shows that the sequence which the link event designates should be taken after the time of this sequence link event.
For example, in FIG. 13A, the sequence link event to the part sequence “chord” is placed at the position of time t in the event list of the part sequence “melody”. When the script is executed to obtain the final part sequence “melody”, the script of the part sequence “melody” is executed to modify the event list. When the execution of the script ends, the sequence link event is resolved, and the part sequence “chord” is captured. Thus, as shown in FIG. 13B, a part sequence “melody” incorporating the part sequence “chord” is obtained. This process is not executed as the performance progresses, but is executed when the content of the part sequence “melody” is to be obtained.
[0075]
Originally, the event list is a set of MIDI events with time, and MIDI events in the event list are always output as MIDI. Sequence link events are placed in the event list but are not sent to the MIDI output, but only display the association between sequences.
As described above, the link is not solved at the time of reproduction. The link indicated by the link event only statically indicates an association between sequences, and the link resolution process proceeds when the contents of the part sequence are referenced regardless of the performance process.
When requesting the contents of a sequence, an argument can be passed.
[0076]
By this link mechanism, the music performance data structure of the track model adopted by current general sequencer software can be expressed. Therefore, it is possible to exchange music performance data including a hierarchical structure information among a plurality of sequencer software while expressing a music performance data structure similar to that of a track model. This is something that could not be done in the past using the track model by SMF.
For example, data consisting of five tracks 1 to 5 shown in FIG. 14A is expressed by a link structure in which five sequences from seq1 to seq5 are captured at time 0 of the root sequence shown in FIG. 14B. ing.
[0077]
Also, the structure in which phrase fragments are arranged in each track in the track model shown in FIG. 10A is expressed by placing a link event at an appropriate time of the child sequence as shown in FIG. To do. For example, in FIG. 14 (a), the state where part a, part b, and part c are placed on track 1 is as shown in FIG. 14 (b) at the appropriate time of seq1, seq a, seq b, seq c. It can be expressed by placing a link event to.
Furthermore, a structure in which the sequence is hierarchical as seen in some sequencer software can be expressed in the same manner.
[0078]
Sequences other than the root sequence do not contribute to the MIDI output unless linked. Therefore, it is possible to prepare a large number of sequences each including typical expression patterns and link and use them as desired. For this reason, the link framework is convenient for the use of typical expression patterns.
In addition, one sequence can refer to any number of other sequences, and a plurality of sequences can refer to one sequence existing somewhere in the system. However, it is prohibited for the reference to form a loop. This loop refers to a situation where the reference is looped, such that sequence A refers to sequence B, sequence B refers to sequence C, and sequence C refers to sequence A.
When a sequence is specified in a link event, the link event also holds a reference target not by an ID number but by a package name and a sequence name.
[0079]
Next, how the HMF static data structure behaves dynamically in response to an external request will be described.
As shown in FIG. 15, for example, when one package is loaded from an HMF file stored in the recording medium 4 of the file system, a package script is executed when the package is loaded. Is prepared and the subroutine definition is stored there.
The dictionary will be described here. The dictionary holds variables / subroutines that appear in the script, and there are two types: a package dictionary for each package and a dictionary stack for holding data that exists only during script execution.
[0080]
For example, as shown in FIG. 15, (1) when the package “GMbasicExpr2” in the HMF format is loaded, the contents of loading the package “GMbasicExpr2” are placed at the position specified by the user. Next, (2) the package script is executed, and (3) the subroutine definition “cresc1” in the package “GMbasicExpr2” is stored in the dictionary 50 created at a position corresponding to the package “GMbasicExpr2”. The sequence script in the package is compiled into an executable format, but not yet executed.
In FIG. 15, when the package “song1” in the HMF format is loaded, the package script is executed, and the subroutine definition “b72vol” therein is stored in the dictionary 51 created at the position corresponding to the package “song1”. When the package “basicExpr1” is loaded, the package script is executed, and the subroutine definition “cresc1” is stored in the dictionary 52 created at a position corresponding to the package “basicExpr1”.
However, the dictionary stack “dict. Stack” has not yet been created.
[0081]
Next, the behavior when the user refers to the contents of one sequence constituting the music performance data in a state where HMF format data is loaded will be described.
A sequence reference process when the user tries to refer to the contents of one sequence constituting the music performance data will be described with reference to FIGS. FIG. 16 is a diagram schematically showing the sequence reference process, and FIGS. 17 and 18 are flowcharts showing the sequence reference process.
[0082]
In the flowchart of the sequence reference process shown in FIG. 17A, when the sequence reference process is started, a process of creating a duplicate event list L ′ of the event list L is performed as shown in FIG. Is called. The process in step S10 is shown in the flowchart of FIG. 17B. When the event list L replication creation process is started, an empty replication event list L ′ is generated in step S20. Next, in step S21, it is determined whether or not there is an event remaining in the event list L. If it remains, it is determined YES (y), the process proceeds to step S22, and one event is copied and registered in the event list L ′. To do. The processes in step S20 and step S21 are repeated while the event remains in the event list L. When no event remains, NO (n) is determined and the copy creation process of the event list L ends.
[0083]
When the process of step S10 is completed, a process of applying a sequence script is performed as shown in FIG. 16B on the event list L ′ copied in step S11. The process in step S11 is shown in the flowchart of FIG. 17C. When the sequence script application process is started, it is determined in step S30 whether or not instructions remain in the script. Since an instruction remains immediately after the start of this process, it is determined as YES (y), the process proceeds to step S31, one instruction is executed, and the process returns to step S30. The processes in step S30 and step S31 are performed while the instructions remain in the script, and the instructions are executed one by one. When all the instructions in the script are executed, NO (n) is determined in step S30, and the sequence script application process ends.
[0084]
When the process of step S11 is completed, a process for resolving the part link of the event list L ′ copied in step S12 as shown in FIG. 16C is executed. FIG. 18A shows a flowchart of this part link process. When the part link process is started, it is determined in step S40 whether or not a part link remains in the event list L ′. If a part link remains in the event list L ′, the determination is YES (y), and the process proceeds to step S41. In step S41, the parts to be linked are searched in a predetermined order. When it is determined in step S42 that the target part has been found (y), the contents of the parts are referred to in step S43. Next, the contents of the event list obtained in step S44 are merged into the event list L ′, and the link event processed in step S45 is deleted, and the process returns to step S40.
[0085]
If it is determined in step S42 that the target part is not found (n), the process jumps to step S45 and the link event is deleted. Further, the processing from step S40 to step S45 is executed in a circulating manner while the part link remains in the event list L ′, and the part link processing is sequentially executed. When there is no part link remaining in the event list L ′, NO (n) is determined in step S40, and the part link processing is terminated.
[0086]
When the process of step S12 ends, a process of resolving the curve link of the event list L ′ copied in step S13 as shown in FIG. 16D is executed. FIG. 18B shows a flowchart of the curve link process. When the curve link process is started, it is determined in step S50 whether or not a curve link remains in the event list L ′. If a curve link remains in the event list L ′, the determination is YES (y), and the process proceeds to step S51. In step S51, the curves to be linked are searched in a predetermined order. If it is determined in step S52 that the target curve has been found (y), the package designation of the link is confirmed in step S53. Return to S50.
[0087]
If it is determined in step S52 that the target curve is not found (n), the process directly returns to step S50. Further, the processing from step S50 to step S53 is circulated and executed while curve links remain in the event list L ′, and the curve link processing is sequentially executed. When there is no curve link remaining in the event list L ′, NO (n) is determined in step S50, and the curve link process is terminated.
Thereby, the sequence reference process ends.
[0088]
Here, how part links and curve links are solved will be described with reference to FIG.
In FIG. 28, a part link is made from the part sequence “synth_track” to another part sequence “synth_bridge”, and a part link is made from the part sequence “synth_bridge” to another part sequence “synth_1_measure”. Indicates the state. In addition, a curve link is made from the part sequence “synth_track” to the curve sequence “synth_total_pb”, a curve link is made from the part sequence “synth_bridge” to the curve sequence “synth_bridge_pb”, and a curve sequence “from the part sequence“ synth_1_measure ”to the curve sequence“ A curve link is made to “synth_pb_1”.
[0089]
In such a state, referring to the contents of the part sequence “synth_track”, there is a part link event. Therefore, according to the flowchart shown in FIG. The contents of the linked part sequence “synth_bridge” are referred to.
The search for the part sequence to be linked is executed by a search path described later.
When the contents of the part sequence “synth_bridge” are referred to, there is also a part link event, so the part sequence to be linked is searched, and the contents of the found link destination part sequence “synth_1_measure” are referred to.
[0090]
Since the part sequence “synth_1_measure” is not linked to any other part sequence, the contents of the part sequence “synth_1_measure” are merged with the part sequence “synth_bridge” at this point in the part sequence “synth_bridge”. The part link event that existed in is deleted.
Since there is a curve link event in the part sequence “synth_1_measure”, this curve link event is also merged in the part sequence “synth_bridge”. As a result, in the part sequence “synth_bridge” There are now two curve link events. Thereafter, the contents of the part sequence “synth_track” are merged into the part sequence “synth_track”, and the part link event existing in the part sequence “synth_track” is deleted.
[0091]
In the part sequence “synth_track”, two curve link events existing in the part sequence “synthbridge” are also merged. As a result, there are three curve link events in the part sequence “synth_track”. Since the part link event existing in the part sequence “synth_track” has been deleted, the process of the flowchart shown in FIG.
Then, according to the flowchart shown in FIG. 18B, the three curve link events collected in the part sequence “synth_track” are resolved. The curve sequences to be linked are searched one by one, and each curve sequence is determined.
[0092]
After the curve sequence is determined, an actual event, for example, a pitch bend event is developed based on the contents of each curve sequence, and event data is finally captured in the part sequence “synth_track”. At this time, if any two or three of the three curve link events are close to each other, the curve sequences may partially overlap each other. As described above, a portion where the plurality of curve sequences overlap is subjected to a synthesis process by a method as described later to form one curve sequence.
[0093]
Also, only the curve link event itself that is positioned at the forefront among those corresponding to a plurality of synthesized curve sequences remains, and other curve link events are deleted. Note that, when there are a plurality of curve link events in one part sequence from the beginning and the curve sequences captured in the part sequences are overlapped by these curve link events, they are synthesized in the same manner as described above.
[0094]
Such sequence reference processing will be described below, taking as an example a case where the contents of the sequence “root” of the performance package “song1” shown in FIG. 19 are referred to and executed.
First, prior to the sequence reference process, (a) a request for the content of the sequence “root” of the performance package “song 1” is entered. Next, (b) execution of the sequence script of the sequence “root” starts. During this execution, (c) the temporary subroutine definition “fz” in the sequence script is placed in the created dictionary stack “dict. Stack”. Further, (d) by executing the sequence script, the contents of the event list of the sequence “root” are modified.
[0095]
When the execution of the sequence script ends, (e) the sequence link event in the event list is resolved. That is, the content of the sequence of the reference destination is requested, and the returned event list is merged with the position where the link event has occurred. In the illustrated case, it is assumed that the contents of a certain sequence in “basicExpr1” are requested. As shown in the figure, (f) reference to the contents of the lower sequence proceeds recursively with depth priority.
With the above process, (g) the event list of the final result can be obtained. After a series of reference executions, the temporary subroutine definition “fz” in the dictionary stack is cleared.
[0096]
FIG. 20 shows a flowchart of the sequence content reference process that recursively proceeds with depth priority in this way. In this flowchart, when the sequence content reference process is started, the copy of the event list is rewritten in step S60. Next, in step S61, the rewrite result is stacked on the stack, and further in step S62, it is determined whether there is a link to another part sequence. Here, if there is a link to another part sequence, it is determined as YES (y), the process proceeds to step S63, and the contents of the target part sequence are referred to. Next, in step S64, the reference result (on the stack) is taken into its own rewriting result, and the process returns to step S62. The processing from step S62 to step S64 is circulated while there is a link to another part sequence. When there is no link, NO (n) is determined and the sequence content reference processing ends.
[0097]
FIG. 21B shows the stack change when this sequence content reference process is executed for a sequence group having a link to another part sequence as shown in FIG.
As shown in FIG. 21A, sequence A has links to sequence B and sequence C, sequence B has links to sequence D, and sequence D has links to sequence G and sequence H. Further, sequence C has links to sequence E and sequence F, and sequence F has a link to sequence I.
[0098]
In this case, when the sequence content reference process shown in FIG. 20 is executed, the content of the sequence A is referred to and the sequence B is stacked as shown in FIG. Next, the content of the sequence B is referred to, the sequence D is stacked, the content of the sequence D is further referred to, and the sequence G is stacked. Since the sequence G does not have a link, the rewrite result is returned to the sequence D as indicated by the down arrow. Since sequence D also has a link to sequence H, sequence H is stacked. Since the sequence H does not have a link, the rewrite result is returned to the sequence D as indicated by the down arrow.
Since sequence D has no more links, the rewrite result is returned to sequence B. Further, sequence B returns the rewrite result to sequence A. Such processing is similarly performed for the sequences C, E, F, and I, and the stack changes as shown in FIG.
[0099]
By the way, in the script, a subroutine (provided at the system level) for resolving the sequence link can be explicitly called. In this case, the sequence link in the event list is resolved at that time. Similarly, a curve link resolution subroutine can be called. When these subroutine calls are executed, the contents of the lower sequence can be included in the processing target in the subsequent part of the script.
[0100]
It is also possible to write a description that rewrites or deletes a link event in a script. When this is executed, the link event after rewriting is processed in the subsequent link resolution.
According to this specification, if no script is written, the expression in the upper sequence does not reach the event in the lower sequence. Therefore, by writing a script, it is possible to realize an operation in which expression in the upper sequence is also applied to events in the lower sequence.
[0101]
Next, a search path for packages and dictionaries will be described.
First, the necessity of search will be described. A sequence referred to by a link event may exist in a package other than the package in which the link event is included. In addition, an instruction for calling a subroutine is usually included in the script, but the substance of the subroutine is not necessarily included in the same package as the script. Therefore, it is necessary to search for packages and subroutines.
In the HMDM data structure, packages are conceptually held in a line.
Further, as described above, a “dictionary” is prepared for each package and stored in the subroutine defined by each package. This list of packages and dictionaries is called a search path, and packages and dictionaries are searched in this order.
[0102]
In the HMDM data structure, the order of packages and dictionaries, that is, the search path is defined as follows.
The first is a dictionary stack for dictionaries, and the second is a dictionary corresponding to performance packages. Regarding the package, the first is the performance package. In this case, there may be a plurality of performance packages and corresponding dictionaries, and the order can be freely changed by the user.
[0103]
The third of the dictionaries is a dictionary corresponding to the plug-in package, and the second of the packages is the plug-in package. A plurality of these may exist, and the order can be freely changed by the user. When searching for a subroutine, the dictionary is checked in the order defined by the search path. Therefore, if a subroutine with the same name exists, the subroutine found first is given priority. Thereby, the override of the subroutine is realized.
The fourth of the dictionaries is a dictionary corresponding to the system package, and the third of the packages is the system package. These are built into the end of the search path from the beginning and cannot be changed by the user.
[0104]
In the example shown in FIG. 19, the dictionary stack “dict. Stack”, the performance package of “song1” and the corresponding dictionary, the plug-in package of “basicExpr1” and the corresponding dictionary, the plug-in package of “GMbasicExpr2” and the corresponding dictionary, The search path is configured in the order of the system package of “sys1.00” and the corresponding dictionary. Sequence names are searched in this order when the link event is resolved, and subroutine names are searched in this order when the script is executed. Will be.
[0105]
Next, the search path search mechanism will be described.
In the search for the sequence name, if the sequence name appears alone, the sequence name is searched in the following procedure, and the first corresponding one is selected.
1. Look for the sequence name in the package to which it belongs.
2. Follow the search path order and go to the next package to find the sequence name.
3. If the sequence is not found in the last package (system package), the process proceeds to an appropriate procedure such as displaying “sequence not found”.
In addition, when a sequence is specified by combining package names, if the sequence name is searched for in the specified package and is not found there, an appropriate action such as displaying “No sequence found” is displayed. Move.
[0106]
Next, in the subroutine name search, if the subroutine name appears alone, the search is performed as follows.
1. Look for the subroutine name in the dictionary stack.
2. The subroutine name is searched for in the take corresponding to the package to which it belongs.
3. In the search path order, go to the next dictionary and search for the subroutine name.
4). If it is not found in the last dictionary (system), the process proceeds to an appropriate action such as displaying “no subroutine found”.
Further, when a subroutine name is specified by combining package names, the subroutine name is searched for in the specified package. If it is not found there, the process proceeds to an appropriate measure such as displaying “no subroutine found”.
[0107]
Next, the implementation of subroutine override by the package order will be described.
If a subroutine defined in a plug-in package is specified in combination with a package name, it will not be confused with a subroutine of the same name in another package. In this case, placing plug-in packages in any order will not affect the operation.
Therefore, if the package is not specified and only the subroutine name is specified and another package including the subroutine with the same name is placed in front of the search path, another subroutine is executed by inserting the package. be able to. Thereby, an override can be realized. In this case, the order of the packages in the search path affects the operation.
[0108]
Next, the addition of curve data will be described with reference to FIGS.
The addition of curve data is a function that combines and aggregates the curve data in the lower sequence into one in the upper sequence in the process of solving the sequence link.
For example, it is assumed that the same time parameter change called MIDI pitch bend is set in each of a plurality of sequences forming a hierarchy. At this time, in a method in which the curve is developed into a large number of MIDI pitch bend events in each sequence and captured, the discrete events are mixed with each other, and each change is correctly added as described in the explanation of FIG. Will not be. The curve addition algorithm described here is for processing this correctly.
[0109]
First, the structure of the curve data will be described in detail with reference to FIG. The event list for curve A is shown in FIG. 22A, and the event list for curve B is shown in FIG. In this way, the curve data is represented by a set of time and a value at that time, and this set is set as a node, and adjacent nodes are connected by a straight line. That is, the curve A is represented by a broken line as shown in FIG. 5B, and the curve B is represented by a broken line as shown in FIG. Note that the nodes are ordered as “time values are the same or larger”, and when tracing a curve, the time is not traced back.
[0110]
There may be a plurality of points at the same time. This represents a discontinuous point of a broken line as shown in FIG. Even in this case, the order of the points is preserved. Of the points at the same time, the first point is called “left value” and the last point is called “right value” as shown in FIG. Further, when there are three or more points at the same time, values other than the first and last points are ignored.
Furthermore, when taking a time with a curve, the value is often determined uniquely. That is, if the time when one node exists, the value of that node is used, and if the time is between two nodes, the value of both is interpolated. In addition, a left value and a right value that can be different exist only at times when a plurality of nodes exist.
[0111]
When such curve data is added, the interrelationship of nodes when added is classified into eight ways as shown in FIG. The cases shown in (a) and (b) of this figure are cases where only one of the curves is a node at the time of interest, and FIG. (D) and (e) are cases where only one of the curves is a discontinuous point at the time of interest, and (f) and (g) of FIG. The curve (2) is a discontinuous point and the other is a node. FIG. 2 (h) shows a case where both curves are discontinuous at the time of interest.
The number on the left end of the curve represents the number of nodes at the time of interest.
[0112]
Next, a curve addition algorithm will be described with reference to FIGS. 24 to 26 by taking as an example the addition of the curve A and the curve B. FIG. The curve addition algorithm can be added correctly regardless of the mutual relationship between any nodes as shown in FIG.
First, when the value of the end node is not 0 for each of curve A and curve B, a node having a value of 0 is added as shown in FIGS. This is because the value of the curve is 0 at the time when the value is not specified.
Next, the original curve A is duplicated, and the duplicated curve is designated as curve A0 as shown in FIG.
[0113]
Next, for each node of curve A, the value of curve B at that time (left value is taken in the case of discontinuous points) is obtained and added to the value of the node of curve A. However, if there are a plurality of nodes at the same time in curve A and there are also nodes at the same time in curve B, all but the first contact point of curve A are deleted, and only the first node is added. This addition operation is shown in the event list of curve A in FIG. 24B, and the addition amount is shown by a broken line in FIG.
In the event list of curve A, for example, the value 64 added to the original value 70 at time 70 is a value obtained by linear interpolation of the right value 60 at time 60 and the value 80 at time 110 in curve B. . Similarly, the value 60 added at time 140 and the value 120 added at time 240 are values obtained by linear interpolation. In addition, since it is a discontinuous point at time 190 of curve B, the left value 100 is added to the contact point at time 190 of curve A.
[0114]
Next, for each contact point of curve B, the value of curve A0 at that time (takes the right value in the case of discontinuous points) is obtained and added to the value of the node of curve B. However, if there are a plurality of nodes at the same time in curve B, and there are also nodes at the same time in curve A0, all but the last node of curve B are deleted, and only the last node is added. This addition operation is shown in the event list of curve B in FIG. 25 (d), and the addition amount is shown by a broken line in FIG. 25 (c).
In the event list of curve B, for example, the value 73 added to the original value 70 at time 60 is a value obtained by linear interpolation of the right value 40 at time 10 and the value 80 at time 70 in the curve A0. . Similarly, the value 47 added at time 130, the value 108 added at time 170, and the value 80 added at time 220 are also values obtained by linear interpolation. At time 190, curve B is a discontinuous point, and since there is a contact point with curve A0 at the same time, the left value of curve B is deleted and the right value 140 is the contact value 140 of curve A. Is added.
[0115]
Next, the points of contact processed in curve B are added to curve A shown in FIGS. 24A and 24B in the order of time. At this time, if there is no contact at the same time on the curve A, it is simply added. If there is a contact at the same time, it is inserted as a right value after the contact of the curve A only when the values are different. As a result, a new curve obtained by adding the curve A and the curve B as shown in FIG. The event list of this curve is shown in FIG.
For example, at time 110, the corrected curve A and the corrected curve B both have a contact point, but since the values are the same, the value of curve B is not inserted. At time 190, both the corrected curve A and the corrected curve B have contacts, but since the values are different, the value of the contact of curve A is the left value, and the contact of curve B The value of is the right value.
Such a curve addition algorithm is performed at the time of solving the curve link, so that new curve data can be generated by correctly adding the curve data.
[0116]
Next, a case where HMF format data is processed using each of the existing SMF playback device, SMF editing device, and HMF compatible processing device will be described.
By embedding one HMF format package in one conventional SMF format file, data compatibility can be achieved between the SMF and the HMF. In HMF, SMF format 0 or 1 is used. However, in the case of format 0, SMF meta-events in which the HMF data is described in a text format described later are scattered in one SMF track, and the HMF is used by using them. Store the description.
In the case of format 1, as shown in FIG. 27A, only the SMF meta-event in which normal SMF data with a facial expression is stored in the first N tracks and the HMF data is described in text format in the (N + 1) th track. To store the HMF description.
[0117]
By decoding this SMF meta-event, one package of the HMDM data structure can be obtained. In this package, for example, a package script 32 and a plurality of sequences 21 to 24 as shown in FIG. Is paid. Each sequence 21 to 24 stores an event list 21-1 to 24-1 with facial expressions, and a pair of whitening scripts 21-2 to 24-2 and facial expression scripts 21-3 to 24-3. . The whitening scripts 21-2 to 24-2 are executed to remove facial expressions attached to each of the event list with facial expressions 21-1 to 24-1 so as to be whitened (no facial expression). is there. The facial expression scripts 21-3 to 24-3 can add desired facial expressions to the event lists 21-1 to 24-1 from which facial expressions have been removed by the execution.
[0118]
By doing so, it is possible to use the MIDI data with a facial expression that is generally widely distributed as it is and use it as data in the HMF format.
Therefore, if the music data is newly composed, the expression list with expressions 21-1 to 24-1 and the whitening scripts 21-2 to 24-2 may be replaced with an expressionless (white) event list.
[0119]
When various types of processing devices load data containing such HMF format data, the processing is as follows.
When HMF format data is read by a conventional SMF player that does not support HMF, all SMF meta-events in HMF data described in text format are ignored, so the stored SMF data with a facial expression is reproduced as it is. It becomes like this.
However, since the HMF description cannot be read, different development results cannot be generated by giving parameters. However, if an example of the HMF expansion result is stored in advance in the SMF portion when creating the HMF data, it can be reproduced.
[0120]
When loaded by a processing device that supports HMF, first, it is checked whether the SMF data includes an SMF meta event in which the HMF data is described in text. The SMF meta event includes identification information for identifying what event the event is. Based on this identification information, the presence / absence of an SMF meta event in which HMF data is described in text is checked. If even one such SMF meta event is detected, it is determined to be in the HMF format, and conversely, if none is detected, it is determined to be in the SMF format.
When it is determined that the loaded data is in the SMF format, loading is performed in a conventional manner. That is, if the format is 0, the SMF data is stored in one track, and if the format is 1, the SMF data is stored in N tracks.
If it is determined that the loaded data is in the HMF format, all normal SMF data is ignored, only the contained SMF meta-events are collected, and they are decoded. As a result, the HMF data described in the text is read.
[0121]
In an SMF editing apparatus that does not support HMF, HMF data can be created in principle by editing the contents of the SMF meta-event on the event list screen. However, the work becomes complicated and the created result cannot be reflected in the SMF part.
Further, although the SMF meta event can be edited and saved by the SMF editing apparatus, the description content cannot be reflected in the SMF portion. In order to reflect this, it is necessary to read the data into an HMF compatible processing apparatus and save it or use a tool.
[0122]
When saving with an HMF compatible processing device, first, in order to be compatible with the SMF, the contents of the entire edited and created HMF are evaluated, and the result is stored in a track in the SMF format.
In the case of a performance package, the “root” sequence is evaluated and how the entire song is played is calculated and stored as SMF. In the case of a plug-in package, since there is no “root” sequence, empty data is stored as the SMF.
[0123]
Subsequently, the contents of one package of HMDM are converted into an HMF description format, and the contents are divided and stored into a plurality of SMF meta events. The reason for dividing into a plurality of meta events is that there is a restriction that the maximum length of meta events is 256 bytes in SMF. That is, it is divided so as not to exceed 256 bytes. When storing, the format is the same as a normal SMF of “time between events + meta event”, but “time between events” has no meaning and may be given an arbitrary value.
In this case, only normal SMF format data may be saved as an option.
The embedding of the HMF data described in text in the SMF meta-event is an example, and the HMF data described in text may be saved separately.
[0124]
Next, the operation when the script is changed will be described. The script can be rewritten by the user, but when the user rewrites the script, the system registers a new script source. Compile if necessary.
When the package script is rewritten, a new package script is executed immediately. Usually, since a subroutine definition is written in a package script, the subroutine is redefined as a result of execution. This new definition is stored in the corresponding dictionary.
In the case of a sequence script, the execution format is stored and the process ends. The executable will not be executed immediately. The next time the contents of the sequence are requested, it will be executed for the first time.
If the compilation results in an error, the execution format is not updated, but the source text is saved. This is to enable saving even in the state of an overwritten source.
[0125]
By the way, when the HMF tries to refer to the contents of a certain sequence, as described above, it recursively refers to the contents of the linked sequence and outputs the final result. This requires a large amount of computation, which takes time.
Therefore, an efficient sequence update management method that avoids unnecessary sequence reference as much as possible will be described. First, as a mechanism, each sequence holds “the result of the previous reference”. Also, a flag indicating whether or not the user has recently changed is also held. Next, a sequence update management procedure will be described.
[0126]
1. When requesting content from a sequence, the sequence begins to check if there are any factors that change it since the previous evaluation.
2. First, request the latest results for all sequences linked from you. If all the child sequences return "I haven't changed recently", you don't need to redo your link or script execution. In this case, just answer “I have not changed recently” and return the previous result.
3. If there is even one “changed” response, or if you know that you have changed recently, re-link and run the script. In this case, the processing result is returned together with the reply “I have changed recently”, and at the same time, stored as the “previous result”.
4. When a sequence event list or script is changed, a flag “I have changed recently” is set.
By the above procedure, unnecessary recalculation can be suppressed.
[0127]
Characteristic of HMF is that script execution and link resolution have nothing to do with the progress of the performance. They are executed in the process of symbolically assembling time series MIDI data in the data model. That is, when an attempt is made to refer to the contents of a certain sequence in the HMF data, it is executed instantaneously and a resulting MIDI data string is obtained.
A processing device (which may be application software) corresponding to HMF data includes two units, an HMDM processing unit (data processing unit) and a sequencer unit.
In addition, this sequencer section is characterized so that it can have two MIDI data, old and new. Then, while playing one, it is possible to shift to the other MIDI data without contradiction.
[0128]
Based on this function, the HMF processing device (application software) operates as follows.
1. When the music performance data is changed during the performance, generation of new MIDI data starts immediately in the HMDM (data section).
2. In the meantime, the sequencer section continues to perform with the old MIDI data before the data change.
3. When new data generation of HMDM is completed, it is passed to the sequencer unit.
4). The sequencer section skillfully switches the performance from old MIDI data to new MIDI data. For example, after cross-fading or switching at bar line breaks, the new MIDI data continues to be played.
In this way, if the data is changed while playing, the performance will change soon after a while.
[0129]
When the HMDM is corrected, the amount of update calculation is considerably large, and the total recalculation time may become enormous. Therefore, when the load is light, the application may update the HMDM and replace the MIDI data in the sequencer unit in the background.
In addition, for example, when only the ending portion of the music performance data is corrected, the MIDI data of the first half portion does not need to be replaced for the time being, so that the replacement is not immediately performed if there is no room. In addition, when the influence of the HMDM change is limited to limited MIDI data, it is not necessary to regenerate all the MIDI data, but to partially correct the previous MIDI data so as to reduce the calculation amount. To.
[0130]
Note that only the plug-in package may be stored in the recording medium.
In the above description, the time series event data string is described as music performance data. However, the present invention is not limited to this, and may be time series event data of audio data or image data. In this case, if it is audio data, the sound quality, volume, etc. of the audio can be arbitrarily changed and changed in the same way as music. In the case of image data, the sharpness and view can be changed and changed arbitrarily.
[0131]
【The invention's effect】
Since the present invention is configured as described above, various time-series event data can be generated by rewriting time-series events by executing a script, and the time-series events have activity and variability. Will be able to.
Further, since the time series event data can be identified at the time of execution of the script, the time series event data can be selectively operated, and the operability can be improved.
Furthermore, since a sequence can be grouped by a package, a template can be freely held and operability can be improved.
[0132]
Conventionally, the time-varying data is represented as a sequence of discrete MIDI events. However, in the present invention, the time-varying data is represented as a polygonal curve data. Abstraction can be possible. Furthermore, this curve data can be exchanged as it is.
Furthermore, in the present invention, it is possible to prepare a script of a procedure that can optimize data for each sound source model, so that an optimal sound can be generated regardless of the sound source used.
[Brief description of the drawings]
FIG. 1 is a schematic functional block diagram of a data processing apparatus including time-series data according to the present invention.
FIG. 2 is a block diagram of a hardware configuration of a data processing apparatus including time-series data according to the present invention.
FIG. 3 is a diagram showing a data structure of HMDM, package, and sequence defined in the present invention.
FIG. 4 is a diagram showing a data structure of an HMDM package in a data processing apparatus including time-series data according to the present invention.
FIG. 5 is a diagram for explaining a sequence including an HMDM event list and a script in a data processing apparatus including time-series data according to the present invention.
FIG. 6 is a diagram for explaining an event list having an event with an HMF label in the data processing apparatus including time-series data according to the present invention.
FIG. 7 is a diagram illustrating an event rewrite process flowchart and an example of an event list in a data processing apparatus including time-series data according to the present invention.
FIG. 8 is a diagram for explaining a mechanism for assigning an ID number to an HMF event in a data processing apparatus including time-series data according to the present invention.
FIG. 9 is a diagram for explaining a relationship between an HMF script and an event list in a data processing apparatus including time-series data according to the present invention.
FIG. 10 is a diagram for explaining a difference in curve information of HMF in an SMF and a data processing apparatus including time-series data according to the present invention.
FIG. 11 is a diagram showing a structure for holding curve data in the HMF in the data processing apparatus including time-series data according to the present invention.
FIG. 12 is a diagram showing an example of use for pitch bending of HMF curve data in a data processing apparatus including time-series data according to the present invention.
FIG. 13 is a diagram for explaining an HMF link mechanism in a data processing apparatus including time-series data according to the present invention.
FIG. 14 is a diagram for comparing an SMF track model with an HMF link model in a data processing apparatus including time-series data according to the present invention.
FIG. 15 is a diagram for explaining the behavior when loading an HMF package in a data processing apparatus including time-series data according to the present invention;
FIG. 16 is a diagram for explaining sequence reference processing in the data processing apparatus including time-series data according to the present invention.
FIG. 17 is a diagram showing a flowchart of sequence reference processing in the data processing apparatus including time-series data according to the present invention.
FIG. 18 is a diagram showing a flowchart of sequence reference processing in the data processing apparatus including time-series data according to the present invention.
FIG. 19 is a diagram for explaining the behavior when referring to the contents of a recursive sequence in the data processing apparatus including time-series data according to the present invention.
FIG. 20 is a flowchart of recursive sequence content reference processing in the data processing apparatus including time-series data according to the present invention.
FIG. 21 is a diagram for explaining recursive sequence content reference processing in a data processing apparatus including time-series data according to the present invention;
FIG. 22 is a first diagram illustrating the addition of curve data in the data processing apparatus including time-series data according to the present invention;
FIG. 23 is a second diagram for explaining the addition of curve data in the data processing apparatus including time-series data according to the present invention;
FIG. 24 is a third diagram for explaining the addition of curve data in the data processing apparatus including time-series data according to the present invention;
FIG. 25 is a fourth diagram for explaining the addition of curve data in the data processing apparatus including time-series data according to the present invention;
FIG. 26 is a fifth diagram illustrating the addition of curve data in the data processing apparatus including time-series data according to the present invention;
FIG. 27 is a diagram for explaining compatibility between HMF format data and SMF format data in a processing apparatus including time-series data according to the present invention;
FIG. 28 is a diagram for explaining a solution mode of part links and curve links in a processing apparatus including time-series data according to the present invention.
[Explanation of symbols]
DESCRIPTION OF SYMBOLS 1 Processing apparatus A, 1-1 Buffer memory, 1-2 Encoder, 2 Processing apparatus B, 2-1 Decoder, 2-2 Buffer memory, 2-3 Event data / script separation part, 2-4 Event data rewriting part, 2-5 Script interpretation unit, 2-6 output unit, 3 data development unit, 4 recording medium, 5 MIDI sound source, 6 sound system, 10 performance package, 11,12 plug-in package, 13 system package, 15, 15-1 , 16, 17 Sequence of curve data, 20, 21, 22, 23, 24 sequence, 21-1 to 24-1 Event list with facial expressions, 21-2 to 24-2 Whitening script, 21-3 to 24-3 Facial expression script, 30 event list, 31 sequence script, 32 package script, 40 I Manager, 50, 51, 52 Dictionary, 61 CPU, 62 ROM, 63 RAM, 64 timer, 65 HDD, 66 FDD, 67 switch, 68 switch detection circuit, 69 display circuit, 70 CD-ROM, 71 MIDI I / F, 72 Other MIDI equipment, 73 Communication interface, 74 Communication network, 75 Server computer

Claims (4)

時系列イベントデータと該時系列イベントデータを書き換える書き換え手順を示すスクリプトとで構成されたシーケンスが少なくとも含まれるデータの処理装置であって、
前記時系列イベントデータ列を構成する各イベントデータには、少なくとも1つの識別情報を任意に付与することができるようになされており、
前記スクリプトは、前記識別情報により書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記シーケンスの内容を参照する際に、そのシーケンスに含まれる前記スクリプト実行して、そのシーケンスに含まれる時系列イベントデータを書き換えるスクリプト実行手段を備えることを特徴とする時系列イベントデータを含むデータの処理装置。
A processor of the data sequence made up of a script showing the rewriting procedure for rewriting the time-series event data string and time series event data sequence is contained at least,
Each event data constituting the time series event data string can be arbitrarily given at least one identification information,
The script specifies event data to be rewritten based on the identification information, and describes the contents of processing performed on the event data to be rewritten,
Including time series event data, comprising script execution means for rewriting the time series event data string included in the sequence by executing the script included in the sequence when referring to the contents of the sequence Data processing device.
時系列イベントデータと該時系列イベントデータを書き換える書き換え手順を示すスクリプトとで構成されたシーケンスが少なくとも含まれるデータを処理する方法であって、
前記時系列イベントデータ列を構成する各イベントデータには、少なくとも1つの識別情報を任意に付与することができるようになされており、
前記スクリプトは、前記識別情報により書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記シーケンスの内容を参照する際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスに含まれる時系列イベントデータを書き換えることを特徴とする時系列イベントデータを含むデータの処理方法。
When sequence is composed of a script showing the rewriting procedure for rewriting the sequence event data string and time series event data sequence A method of processing data contained at least,
Each event data constituting the time series event data string can be arbitrarily given at least one identification information,
The script specifies event data to be rewritten based on the identification information, and describes the contents of processing performed on the event data to be rewritten,
A method for processing data including time-series event data, wherein when referring to the contents of the sequence, the script included in the sequence is executed to rewrite the time-series event data string included in the sequence .
時系列イベントデータと該時系列イベントデータを書き換える書き換え手順を示すスクリプトとで構成されたシーケンスが少なくとも含まれるデータを処理装置に処理させるためのプログラムが記録されたコンピュータ読み取り可能な記録媒体であって、
前記時系列イベントデータ列を構成する各イベントデータには、少なくとも1つの識別情報を任意に付与することができるようになされており、
前記スクリプトは、前記識別情報により書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記プログラムは、前記処理装置に、前記シーケンスの内容を参照する際に、そのシーケンスに含まれる前記スクリプトを実行して、そのシーケンスに含まれる時系列イベントデータを書き換える機能を実行させるようになされていることを特徴とする時系列イベントデータ処理用プログラムが記録されたコンピュータ読み取り可能な記録媒体。
In chronological event data string and time series events program recorded computer-readable recording medium for the sequence that is composed of a script showing the rewriting procedure is to be processed by the processing device the data contained at least rewrite the data sequence There,
Each event data constituting the time series event data string can be arbitrarily given at least one identification information,
The script specifies event data to be rewritten based on the identification information, and describes the contents of processing performed on the event data to be rewritten,
The program causes the processing device to execute a function of rewriting a time series event data string included in the sequence by executing the script included in the sequence when referring to the contents of the sequence. A computer-readable recording medium on which a program for processing time-series event data is recorded.
時系列イベントデータ列と該時系列イベントデータ列を書き換える書き換え手順を示すスクリプトとで構成されたシーケンスが少なくとも含まれるデータが記録されたコンピュータ読み取り可能な記録媒体であって、
前記時系列イベントデータ列を構成する各イベントデータには、少なくとも1つの識別情報を任意に付与することができるようになされており、
前記スクリプトは、前記識別情報により書き換え対象となるイベントデータを特定し、該書き換え対象となるイベントデータに対して施す処理の内容を記述したものであり、
前記シーケンスの内容を参照する際に、処理装置によりそのシーケンスに含まれる前記スクリプトが実行されてそのシーケンスに含まれる時系列イベントデータが書き換えられるようになされていることを特徴とする時系列イベントデータを含むデータが記録されたコンピュータ読み取り可能な記録媒体。
A computer-readable recording medium on which data including at least a sequence composed of a time series event data string and a script indicating a rewriting procedure for rewriting the time series event data string is recorded,
Each event data constituting the time series event data string can be arbitrarily given at least one identification information,
The script specifies event data to be rewritten based on the identification information, and describes the contents of processing performed on the event data to be rewritten,
When referring to the content of said sequence, time-series events, characterized by being adapted to be rewritten chronological event data string the script contained by the processing unit in the sequence included in the sequence being executed A computer-readable recording medium on which data including data is recorded.
JP22298797A 1996-08-09 1997-08-06 Data processing apparatus and method including time series event data, recording medium on which time series event data processing program is recorded, and recording medium on which data including time series event data is recorded Expired - Fee Related JP3823463B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP22298797A JP3823463B2 (en) 1996-08-09 1997-08-06 Data processing apparatus and method including time series event data, recording medium on which time series event data processing program is recorded, and recording medium on which data including time series event data is recorded

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP8-226145 1996-08-09
JP22614596 1996-08-09
JP22298797A JP3823463B2 (en) 1996-08-09 1997-08-06 Data processing apparatus and method including time series event data, recording medium on which time series event data processing program is recorded, and recording medium on which data including time series event data is recorded

Publications (2)

Publication Number Publication Date
JPH10111683A JPH10111683A (en) 1998-04-28
JP3823463B2 true JP3823463B2 (en) 2006-09-20

Family

ID=26525201

Family Applications (1)

Application Number Title Priority Date Filing Date
JP22298797A Expired - Fee Related JP3823463B2 (en) 1996-08-09 1997-08-06 Data processing apparatus and method including time series event data, recording medium on which time series event data processing program is recorded, and recording medium on which data including time series event data is recorded

Country Status (1)

Country Link
JP (1) JP3823463B2 (en)

Also Published As

Publication number Publication date
JPH10111683A (en) 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 (en) Score editing device and recording medium
JP3867529B2 (en) Electronic music apparatus and program
Laurson et al. PWGLSynth: A visual synthesis language for virtual instrument design and control
JP3823464B2 (en) Data processing apparatus and method including time series event data, recording medium on which time series event data processing program is recorded, and recording medium on which data including time series event data is recorded
JP3823465B2 (en) Data processing apparatus and method including time series event data, recording medium on which time series event data processing program is recorded, and recording medium on which data including time series event data is recorded
JP3823463B2 (en) Data processing apparatus and method including time series event data, recording medium on which time series event data processing program is recorded, and recording medium on which data including time series event data is recorded
JP3823466B2 (en) Data processing apparatus and method including time series event data, recording medium on which time series event data processing program is recorded, and recording medium on which data including time series event data is recorded
JP3610841B2 (en) Automatic performance apparatus and method
US6956161B2 (en) Musical performance data search system
JP3508494B2 (en) Automatic performance data conversion system and medium recording program
JP3531507B2 (en) Music generating apparatus and computer-readable recording medium storing music generating program
JP4311327B2 (en) Source code automatic generation device, source code automatic generation method, program, and recording medium
JP3685077B2 (en) Performance data automatic editing device and automatic editing method
JP3843688B2 (en) Music data editing device
JP4304870B2 (en) Electronic information processing method and apparatus, and recording medium
JP4134870B2 (en) Effect setting device and effect setting program
JP2006178013A (en) Device and method for creating database
JP4775546B2 (en) Electronic music apparatus and program
JP3794299B2 (en) Performance information editing apparatus and performance information editing program
JP5167878B2 (en) Electronic music apparatus and program
JP3757664B2 (en) Performance information reproducing apparatus and computer-readable recording medium recording performance information reproducing program

Legal Events

Date Code Title Description
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

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130707

Year of fee payment: 7

LAPS Cancellation because of no payment of annual fees