(57)【要約】【課題】復号後においても各演奏情報の順番を回復させ、復号された演奏情報が元の演奏情報と一致しない等といった事態が生じるのを防止し、一部の演奏情報の記録を省略する等して１次符号のサイズを小さくすること。【解決手段】本発明の演奏情報圧縮装置等は、ＳＭＦ等をチャネル毎に少なくともイベント間の相対時間の情報と、発音開始音程の情報と、音の強さの情報と、発音終了音程の情報と、その他の情報とに分離し、チャネルに関係なく上記各情報毎にまとめ、当該まとめられた上記各情報をそれぞれ独立した領域に配置した１次符号を生成する１次符号生成部２と、この１次符号生成部２により生成された１次符号の各領域の情報をＬＺ符号化法及びハフマン符号化法の復号方式により圧縮する２次符号生成部３と、を有する。【選択図】　　図１
2004004155.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮装置において、
上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成する１次符号生成手段と、
上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮する２次符号生成手段と、
を有することを特徴とする演奏情報圧縮装置。
【請求項２】
少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮装置において、
上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成する１次符号生成手段と、
上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮する２次符号生成手段と、
を有することを特徴とする演奏情報圧縮装置。
【請求項３】
上記１次符号生成手段は、上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置。
【請求項４】
上記１次符号生成手段は、出現頻度の高低により異なるイベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置。
【請求項５】
上記１次符号生成手段は、演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置。
【請求項６】
上記１次符号生成手段は、各イベント間の相対時間の最大公約数を算出し、各イベント間の相対時間を上記最大公約数で除算した数値を符号化することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置。
【請求項７】
上記１次符号生成手段は、上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録することを更なる特徴とする請求項２に記載の演奏情報圧縮装置。
【請求項８】
少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号装置において、
上記２次符号を１次符号に復号する２次符号復号手段と、
上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号する１次符号復号手段と、を有することを特徴とする演奏情報復号装置。
【請求項９】
少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号装置において、
上記２次符号を１次符号に復号する２次符号復号手段と、
上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号する１次符号復号手段と、を有することを特徴とする演奏情報復号装置。
【請求項１０】
上記１次符号復号手段は、上記復号のときには、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられた、出現頻度の高低により異なるイベント種別識別符号に基づいて識別する、ことを更なる特徴とする請求項８又は９に記載の演奏情報復号装置。
【請求項１１】
上記１次符号復号手段は、上記復号のときには、符号化された数値に、予め記憶している各イベント間の相対時間の最大公約数を乗算し、各イベント間の相対時間を算出する、ことを更なる特徴とする請求項８又は９に記載の演奏情報復号装置。
【請求項１２】
上記１次符号復号手段は、チャネルに属しないイベントについては、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成する、ことを更なる特徴とする請求項９に記載の演奏情報復号装置。
【請求項１３】
少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮方法において、
１次符号生成手段により、上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成するステップと、２次符号生成手段により、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、
を有することを特徴とする演奏情報圧縮方法。
【請求項１４】
少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮方法において、
１次符号生成手段により、上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成するステップと、
２次符号生成手段により、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、
を有することを特徴とする演奏情報圧縮方法。
【請求項１５】
上記１次符号生成手段により、
上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外するステップ、
を更に有することを特徴とする請求項１３又は１４に記載の演奏情報圧縮方法。
【請求項１６】
上記１次符号生成手段により、
出現頻度の高低により異なるイベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置するステップ、
を更に有することを特徴とする請求項１３又は１４に記載の演奏情報圧縮方法。
【請求項１７】
上記１次符号生成手段により、
演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することステップ、
を更に有することを特徴とする請求項１３又は１４に記載の演奏情報圧縮方法。
【請求項１８】
上記１次符号生成手段により、
各イベント間の相対時間の最大公約数を算出し、各イベント間の相対時間を上記最大公約数で除算した数値を符号化するステップ、
を更に有することを特徴とする請求項１３又は１４に記載の演奏情報圧縮方法。
【請求項１９】
上記１次符号生成手段により、
上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録するステップ、
を更に有することを特徴とする請求項１４に記載の演奏情報圧縮方法。
【請求項２０】
少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号方法において、
２次符号復号手段により、上記２次符号を１次符号に復号するステップと、
１次符号復号手段により、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、
を有することを特徴とする演奏情報復号方法。
【請求項２１】
少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号方法において、
２次符号復号手段により、上記２次符号を１次符号に復号するステップと、
１次符号復号手段により、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、
を有することを特徴とする演奏情報復号方法。
【請求項２２】
上記１次符号復号手段により、上記復号のときには、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられた、出現頻度の高低により異なるイベント種別識別符号に基づいて識別するステップを更に有することを特徴とする請求項２０又は２１に記載の演奏情報復号方法。
【請求項２３】
上記１次符号復号手段により、上記復号のときには、符号化された数値に、予め記憶している各イベント間の相対時間の最大公約数を乗算し、各イベント間の相対時間を算出するステップを更に有することを特徴とする請求項２０又は２１に記載の演奏情報復号方法。
【請求項２４】
上記１次符号復号手段により、チャネルに属しないイベントについては、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成するステップを更に有することを特徴とする請求項２１に記載の演奏情報復号方法。
【請求項２５】
少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮プログラムにおいて、
コンピュータに、
上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成するステップと、
この生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、
を実行させるための演奏情報圧縮プログラム。
【請求項２６】
少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮プログラムにおいて、
コンピュータに、
上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成するステップと、
この生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、
を実行させるための演奏情報圧縮プログラム。
【請求項２７】
上記コンピュータに、
上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外するステップを更に実行させる、
こと特徴とする請求項２５又は２６に記載の演奏情報圧縮プログラム。
【請求項２８】
上記コンピュータに、
出現頻度の高低により異なるイベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置するステップを更に実行させる、
ことを特徴とする請求項２５又は２６に記載の演奏情報圧縮プログラム。
【請求項２９】
上記コンピュータに、
上記演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録させる、
ことを特徴とする請求項２５又は２６に記載の演奏情報圧縮プログラム。
【請求項３０】
上記コンピュータに、
各イベント間の相対時間の最大公約数を算出し、各イベント間の相対時間を上記最大公約数で除算した数値を符号化するステップを更に実行させる、
ことを特徴とする請求項２５又は２６に記載の演奏情報圧縮プログラム。
【請求項３１】
上記コンピュータに、
上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録するステップを更に実行させる、
ことを特徴とする請求項２６に記載の演奏情報圧縮プログラム。
【請求項３２】
少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号プログラムにおいて、
コンピュータに、
上記２次符号を１次符号に復号するステップと、
上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、
を実行させるための演奏情報復号プログラム。
【請求項３３】
少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号プログラムにおいて、
コンピュータに、
上記２次符号を１次符号に復号するステップと、
上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、
を実行させるための演奏情報復号プログラム。
【請求項３４】
上記コンピュータに、
上記復号のときに、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられた、出現頻度の高低により異なるイベント種別識別符号に基づいて識別するステップを更に実行させる、
ことを特徴とする請求項３２又は３３に記載の演奏情報復号プログラム。
【請求項３５】
上記コンピュータに、
上記復号のときに、符号化された数値に、予め記憶している各イベント間の相対時間の最大公約数を乗算し、各イベント間の相対時間を算出するステップを更に実行させる、
ことを特徴とする請求項３２又は３３に記載の演奏情報復号プログラム。
【請求項３６】
上記コンピュータに、
上記復号のときに、チャネルに属しないイベントについては、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成するステップを更に実行させる、
ことを特徴とする請求項３３に記載の演奏情報復号プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば演奏情報等を圧縮し又は復号する技術に係り、特に演奏情報のデータ量を効率的に圧縮する演奏情報圧縮装置、演奏情報復号装置、演奏情報圧縮方法、演奏情報復号方法、演奏情報圧縮プログラム、演奏情報復号プログラムに関する。
【０００２】
【従来の技術】
従来、例えば楽器等からの演奏情報をデジタルで通信する為のインターフェースに関する規格として、ＭＩＤＩ（Ｍｕｓｉｃａｌ　Ｉｎｓｔｒｕｍｅｎｔ　Ｄｉｇｉｔａｌ　Ｉｎｔｅｒｆａｃｅ）規格が一般に知られている。そして、このＭＩＤＩ規格で定義されたデータを保存するファイルとしては、例えばスタンダードＭＩＤＩファイル（以下、ＳＭＦと称する）が一般に知られており、既に種々の分野で汎用されている。
【０００３】
このＳＭＦでは、各演奏情報は、１バイトのキャラクタをいくつか組み合わせたＭＩＤＩメッセージにより表現されており、当該ＭＩＤＩメッセージは、ＭＩＤＩ規格により１バイトのステータスが定義され、これにより演奏情報が区別されている。更にステータスバイトにはデータバイトが続き、各データバイト数は演奏情報の種別により異なっている。尚、ステータスバイトには、上記の他、ステータスの種類、チャネル番号に係る情報が含まれている。
【０００４】
しかるに、今日では、このＳＭＦのファイルサイズが比較的大きくなってしまうことに鑑みて、当該ＳＭＦを例えば多数の楽曲データを記録して伝送するシステム等に適用する場合に、このＳＭＦに含まれる各演奏情報のデータ量を効率的に圧縮することが嘱望され、その為の技術開発が進められている。
【０００５】
ここで、符号化された情報を復号して完全に元の情報と一致させる符号化法である可逆的符号化法としては、例えば、ＬＺ（Ｌｅｍｐｅｌ−Ｚｉｆ）符号化法やハフマン符号化法、ランレングス符号化法、更には、これらを複合した方式（例えばＬＨＡやＺＩＰ等）が一般に知られており、汎用されている。
【０００６】
これらのうち、先ず、ＬＺ方式は、データパターンが繰り返すことを利用して繰り返し分を圧縮するものであることから、入力されたデータの中の所定範囲内に出現する同一のデータパターンの数が多い場合には、その圧縮率が低くなるといった特質がある。ここで、圧縮率とは、圧縮前のデータサイズに対する圧縮後のデータサイズの割合をいうものとする。そして、圧縮率が低くなるということは、圧縮効率が高くなる（良くなる）ことを意味するものとする。
【０００７】
更に、ハフマン符号化方式は、データパターンには拠らず、バイト毎の符号の出現頻度によって重み付けした所定のツリーを構成して、より重みのある符号に関して少ないビット数で記録できるように符号化するものであることから、バイト毎の符号の出現頻度に偏りがあるデータに有効である。
【０００８】
また、これらＬＺ方式やハフマン符号化方式を複合したＬＨＡ符号化法は、上記ＬＺ方式やハフマン符号化方式の利点のいずれをも備える。
【０００９】
ここで、上記ＳＭＦでは、各演奏情報がデルタタイム（以下、Δタイムと称する）とイベントとにより構成されており、更に、各イベントにはノートオン又はノートオフのステータスや音程、音の強さ等の情報が含まれている。
【００１０】
一般に、楽曲は同様のフレーズの繰り返しで構成される事が多いが、楽曲製作者は、楽曲が単調になるのを避けるべく、例えば音の強さや音の長さを微妙に変化させる場合がある。また、仮に異なるチャネルに同じパターンのフレーズが存在していたとしても、ＳＭＦの各演奏情報のイベントがチャネル番号に係る情報を含んでいれば、記録データは異なるパターンとなってしまう。
【００１１】
このように、ＳＭＦでは、データ記録の最小単位であるイベントに複数の情報が含まれている事により生じる上記事情から、汎用圧縮方式によって圧縮する場合においては、その圧縮効率を高めるべく更なる工夫が必要とされる。
【００１２】
かかる点に鑑みて、例えば特開平９−１６１６８号公報では、１次符号生成手段により、演奏情報を、音程の情報と音の強さの情報、音の長さの情報、その他の情報に分離し、各情報をそれぞれ独立した領域に配置することで、その後のＬＺ方式による圧縮効率を高めることを特徴とした演奏情報圧縮装置及び演奏情報復号装置に関する技術が開示されている。
【００１３】
【発明が解決しようとする課題】
しなしながら、上述した特開平９−１６１６８号公報により開示された技術では、１次符号化時に各演奏情報を時間的に独立させているにも関わらず当該各演奏情報の順番に係る情報を保存していないことから、符号化された演奏情報を復号した場合に上記各演奏情報の順番が入れ替わることがある。即ち、復号された演奏情報が完全に元の演奏情報と一致しない場合が生じ得る。
【００１４】
本発明は、上記問題に鑑みてなされたもので、その目的とするところは、復号後においても各演奏情報の順番を回復させ、復号された演奏情報が元の演奏情報と一致しない等といった事態が生じるのを防止し、一部の演奏情報の記録を省略する等して１次符号のサイズを小さくし、更には、汎用圧縮方式との組み合わせにより演奏情報のデータ量を効率的に圧縮又は伸長することが可能な、演奏情報圧縮装置、演奏情報復号装置、演奏情報圧縮方法、演奏情報復号方法、演奏情報圧縮プログラム、演奏情報復号プログラムを提供することにある。
【００１５】
【課題を解決するための手段】
上記目的を達成するために、請求項１の発明は、少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮装置において、上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成する１次符号生成手段と、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮する２次符号生成手段と、を有することを特徴とする演奏情報圧縮装置としたものである。
【００１６】
請求項２の発明は、少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮装置において、上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成する１次符号生成手段と、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮する２次符号生成手段と、を有することを特徴とする演奏情報圧縮装置としたものである。
【００１７】
請求項３の発明は、上記１次符号生成手段は、上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置としたものである。
【００１８】
請求項４の発明は、上記１次符号生成手段は、出現頻度の高低により異なるイベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置としたものである。
【００１９】
請求項５の発明は、上記１次符号生成手段は、演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置としたものである。
【００２０】
請求項６の発明は、上記１次符号生成手段は、各イベント間の相対時間の最大公約数を算出し、各イベント間の相対時間を上記最大公約数で除算した数値を符号化することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置としたものである。
【００２１】
請求項７の発明は、上記１次符号生成手段は、上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録することを更なる特徴とする請求項２に記載の演奏情報圧縮装置としたものである。
【００２２】
請求項８の発明は、少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号装置において、上記２次符号を１次符号に復号する２次符号復号手段と、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号する１次符号復号手段と、を有することを特徴とする演奏情報復号装置としたものである。
【００２３】
請求項９の発明は、少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号装置において、上記２次符号を１次符号に復号する２次符号復号手段と、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号する１次符号復号手段と、を有することを特徴とする演奏情報復号装置としたものである。
【００２４】
請求項１０の発明は、上記１次符号復号手段は、上記復号のときには、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられた、出現頻度の高低により異なるイベント種別識別符号に基づいて識別する、ことを更なる特徴とする請求項８又は９に記載の演奏情報復号装置としたものである。
【００２５】
請求項１１の発明は、上記１次符号復号手段は、上記復号のときには、符号化された数値に、予め記憶している各イベント間の相対時間の最大公約数を乗算し、各イベント間の相対時間を算出する、ことを更なる特徴とする請求項８又は９に記載の演奏情報復号装置としたものである。
【００２６】
請求項１２の発明は、上記１次符号復号手段は、チャネルに属しないイベントについては、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成する、ことを更なる特徴とする請求項９に記載の演奏情報復号装置としたものである。
【００２７】
請求項１３の発明は、少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮方法において、１次符号生成手段により、上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成するステップと、２次符号生成手段により、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、を有することを特徴とする演奏情報圧縮方法としたものである。
【００２８】
請求項１４の発明は、少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮方法において、１次符号生成手段により、上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成するステップと、２次符号生成手段により、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、を有することを特徴とする演奏情報圧縮方法としたものである。
【００２９】
請求項１５の発明は、上記１次符号生成手段により、上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外するステップ、を更に有することを特徴とする請求項１３又は１４に記載の演奏情報圧縮方法としたものである。
【００３０】
請求項１６の発明は、上記１次符号生成手段により、出現頻度の高低により異なるイベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置するステップ、を更に有することを特徴とする請求項１３又は１４に記載の演奏情報圧縮方法としたものである。
【００３１】
請求項１７の発明は、上記１次符号生成手段により、演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することステップ、を更に有することを特徴とする請求項１３又は１４に記載の演奏情報圧縮方法としたものである。
【００３２】
請求項１８の発明は、上記１次符号生成手段により、各イベント間の相対時間の最大公約数を算出し、各イベント間の相対時間を上記最大公約数で除算した数値を符号化するステップ、を更に有することを特徴とする請求項１３又は１４に記載の演奏情報圧縮方法としたものである。
【００３３】
請求項１９の発明は、上記１次符号生成手段により、上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録するステップ、を更に有することを特徴とする請求項１４に記載の演奏情報圧縮方法としたものである。
【００３４】
請求項２０の発明は、少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号方法において、２次符号復号手段により、上記２次符号を１次符号に復号するステップと、１次符号復号手段により、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、を有することを特徴とする演奏情報復号方法としたものである。
【００３５】
請求項２１の発明は、少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号方法において、２次符号復号手段により、上記２次符号を１次符号に復号するステップと、１次符号復号手段により、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、を有することを特徴とする演奏情報復号方法としたものである。
【００３６】
請求項２２の発明は、上記１次符号復号手段により、上記復号のときには、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられた、出現頻度の高低により異なるイベント種別識別符号に基づいて識別するステップを更に有することを特徴とする請求項２０又は２１に記載の演奏情報復号方法としたものである。
【００３７】
請求項２３の発明は、上記１次符号復号手段により、上記復号のときには、符号化された数値に、予め記憶している各イベント間の相対時間の最大公約数を乗算し、各イベント間の相対時間を算出するステップを更に有することを特徴とする請求項２０又は２１に記載の演奏情報復号方法としたものである。
【００３８】
請求項２４の発明は、上記１次符号復号手段により、チャネルに属しないイベントについては、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成するステップを更に有することを特徴とする請求項２１に記載の演奏情報復号方法としたものである。
【００３９】
請求項２５の発明は、少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮プログラムにおいて、コンピュータに、上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成するステップと、この生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、を実行させるための演奏情報圧縮プログラムとしたものである。
【００４０】
請求項２６の発明は、少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮プログラムにおいて、コンピュータに、上記ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成するステップと、この生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、を実行させるための演奏情報圧縮プログラムとしたものである。
【００４１】
請求項２７の発明は、上記コンピュータに、上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外するステップを更に実行させる、こと特徴とする請求項２５又は２６に記載の演奏情報圧縮プログラムとしたものである。
【００４２】
請求項２８の発明は、上記コンピュータに、出現頻度の高低により異なるイベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置するステップを更に実行させる、ことを特徴とする請求項２５又は２６に記載の演奏情報圧縮プログラムとしたものである。
【００４３】
請求項２９の発明は、上記コンピュータに、上記演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録させる、ことを特徴とする請求項２５又は２６に記載の演奏情報圧縮プログラムとしたものである。
【００４４】
請求項３０の発明は、上記コンピュータに、各イベント間の相対時間の最大公約数を算出し、各イベント間の相対時間を上記最大公約数で除算した数値を符号化するステップを更に実行させる、ことを特徴とする請求項２５又は２６に記載の演奏情報圧縮プログラムとしたものである。
【００４５】
請求項３１の発明は、上記コンピュータに、上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録するステップを更に実行させる、ことを特徴とする請求項２６に記載の演奏情報圧縮プログラムとしたものである。
【００４６】
請求項３２の発明は、少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号プログラムにおいて、コンピュータに、上記２次符号を１次符号に復号するステップと、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、を実行させるための演奏情報復号プログラムとしたものである。
【００４７】
請求項３３の発明は、少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有するファイルが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号プログラムにおいて、コンピュータに、上記２次符号を１次符号に復号するステップと、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、を実行させるための演奏情報復号プログラムとしたものである。
【００４８】
請求項３４の発明は、上記コンピュータに、上記復号のときに、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられた、出現頻度の高低により異なるイベント種別識別符号に基づいて識別するステップを更に実行させる、ことを特徴とする請求項３２又は３３に記載の演奏情報復号プログラムとしたものである。
【００４９】
請求項３５の発明は、上記コンピュータに、上記復号のときに、符号化された数値に、予め記憶している各イベント間の相対時間の最大公約数を乗算し、各イベント間の相対時間を算出するステップを更に実行させる、ことを特徴とする請求項３２又は３３に記載の演奏情報復号プログラムとしたものである。
【００５０】
請求項３６の発明は、上記コンピュータに、上記復号のときに、チャネルに属しないイベントについては、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成するステップを更に実行させる、ことを特徴とする請求項３３に記載の演奏情報復号プログラムとしたものである。
【００５１】
【発明の実施の形態】
以下、図面を参照して、本発明の実施の形態について説明する。
【００５２】
（第１の実施の形態）
先ず、第１の実施の形態に係る演奏情報圧縮装置、演奏情報復号装置、演奏情報圧縮方法、演奏情報復号方法、演奏情報圧縮プログラム、及び演奏情報復号プログラムにおいて、前提とされる入力データ（楽曲ファイル）のフォーマットについて、詳細に説明する。この第１の実施の形態においては、楽曲ファイルのフォーマットとしてＳＭＦのフォーマットを想定している。このＳＭＦは、ヘッダ・チャンクとトラック・チャンクに大別され、各ヘッダ・チャンクには、ＭＩＤＩファイル全体に直接関係する最小限の情報、例えばトラックデータの数等の情報が含まれている。更に、各トラック・チャンクには、最大１６チャネルに係るＭＩＤＩデータ（トラックデータ）を含めることができる。そして、各トラックデータは、Δタイムとイベントといった２つの要素で構成されている。より詳細には、このΔタイムは、可変長表記でストアされており、後続のイベントまでの時間間隔を示している。即ち、あるトラックの最初のイベントがトラックの開始と同時に起る場合、または２つのイベントが同じタイミングで起る場合には、Δタイムは０となる。更に、イベントには、ノートオン又はノートオフのステータスや音程（ノートナンバ）、音の強さ（ベロシティ）等といった種々の演奏情報が含まれている。即ち、このイベントは、ＭＩＤＩチャネル・メッセージであり、詳細には、ステータスバイトとデータバイトで構成されている。先行しているイベントとステータスが同じである場合、当該ステータスバイトは省略されることもある。但し、最初のイベントは、ステータスを指定しなければならない。
【００５３】
以上は、ＳＭＦのフォーマットの概要であるが、この第１の実施の形態に係る演奏情報圧縮装置等が採用するフォーマットでは、上記演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することを更なる特徴としている。より詳細には、１次符号のΔタイムをイベント種別識別可能に変換して記録することで、最もしよう頻度の高いイベントと使用頻度次点のイベントの符号化時にイベント種別識別符号の符号化を省略して１次符号のデータ量を減らしている。これは、第１の実施の形態に係る特徴部分の一つであることは勿論である。
【００５４】
（演奏情報圧縮装置等）
以下、図１乃至図２５を参照して、楽曲ファイルより１次符号、更には２次符号を生成する第１の実施の形態に係る演奏情報圧縮装置、演奏情報圧縮方法、演奏情報圧縮プログラムについて、その構成及び作用を詳細に説明する。
【００５５】
尚、この演奏情報圧縮装置による作用は、第１の実施の形態に係る演奏情報圧縮方法、演奏情報圧縮プログラムに相当するものである。当該演奏情報圧縮プログラムは、汎用のコンピュータ等により実行可能なものである。
【００５６】
先ず、図１には、本発明の第１の実施の形態に係る演奏情報圧縮装置の構成を示し説明する。図１に示されるように、この演奏情報圧縮装置１は、１次符号生成部２と２次符号生成部３からなる。尚、請求項記載の１次符号生成手段とはこの１次符号生成部２等に相当し、請求項記載の２次符号生成手段とはこの２次符号生成部３等に相当するものである。但し、これには限定されない。
【００５７】
この１次符号生成部２は、２次符号生成部３での圧縮効率を高めるべく、上述したフォーマットの楽曲ファイル４に含まれる演奏情報を並び替えて、１次符号５を生成するものである。そして、２次符号生成部３は、上記１次符号５を汎用圧縮方式により圧縮して、２次符号６を生成するものである。
【００５８】
即ち、１次符号生成部２は、上記ファイルのトラックデータを各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめて、その種別毎に独立した領域に配置することで１次符号５を生成する。２次符号生成部３は、この１次符号５の各領域に配置された各情報を所定の圧縮方法により圧縮することで２次符号６を生成することになる。
【００５９】
この第１の実施の形態では、２次符号生成部３において採用する汎用圧縮方式として、例えばＬＺ符号化法やハフマン符号化法、ランレングス符号化法、更には、これらを複合した方式（例えばＬＨＡやＺＩＰ等）を採用することを想定しているが、これらに限定されないことは勿論である。
【００６０】
ここで、１次符号生成部２の詳細な構成は、図２に示される通りである。
【００６１】
即ち、この１次符号生成部２は、トラック分離部７とチャネル分離及びチャネル番号符号生成部８、チャネル番号以外の符号生成部９、符号配置部１０を有している。以下、これら各部７乃至１０の構成及び作用を詳述する。
【００６２】
先ず、トラック分離部７の詳細な構成は、図３に示される通りである。
【００６３】
即ち、このトラック分離部７は、ファイル解析部７ａを有している。
【００６４】
このファイル解析部７ａは、楽曲ファイル４のヘッダ・チャンクに含まれるトラックデータの数の情報に基づき、楽曲ファイル４のトラック・チャンクに複数のトラックデータが含まれているか否かを判断する。そして、複数のトラックデータが含まれていると判断した場合には、トラック・チャンクを、それぞれのトラックデータに分離する。この図３では、楽曲ファイル４のトラック・チャンクを、ｍ＋１個のトラックデータ、即ち、トラック０データ１１−０、トラック１データ１１−１、…、トラックｍデータ１１−ｍに分離する例を示している。
【００６５】
以下、図４のフローチャートを参照して、このトラック分離部７（ファイル解析部７ａを含む）によるトラック分離の処理の流れを更に詳細に説明する。
【００６６】
即ち、このトラック分離の処理を開始すると、先ず、トラック分離部７は、入力された楽曲ファイル４のヘッダ・チャンクの情報を読み込み、当該ヘッダ・チャンクの一部に記録されているトラック数（図３ではｍ＋１個）を変数Ｍに代入する（ステップＳ１）。続いて、トラック分離部７は、入力された楽曲ファイル４のトラック・チャンクから上記トラック数のトラック０データ１１−０、トラック１データ１１−１、…、トラックｍデータ１１−ｍを順次読み込み、各々を配列Ｔｒａｃｋ［０］、Ｔｒａｃｋ［１］、…、Ｔｒａｃｋ［ｍ］に順次格納し（ステップＳ２乃至Ｓ５）、こうして、トラック分離部７はトラック分離の処理を終了することになる。
【００６７】
次に、チャネル分離及びチャネル番号符号生成部８の詳細な構成は、図５に示される通りであり、当該チャネル分離及びチャネル番号符号生成部８は、トラック解析部８ａとチャネル番号符号生成部８ｂとを有している。
【００６８】
このトラック解析分離部８ａは、先にトラック分離部７によって分割されたトラック０データ１１−０、トラック１データ１１−１、…、トラックｍデータ１１−ｍの各々について、複数のチャネルに係るトラックデータが含まれているか否かを解析し、含まれていると解析した場合には、それぞれを単一のチャネルからなるトラックデータに分離する。この第１の実施の形態では、トラック解析分離部８ａは、入力されたトラックｘデータ１１−ｘを、チャネル０のみのトラックｘデータ１２−０、チャネル１のみのトラックｘデータ１２−１、…、チャネルｎのみのトラックｘデータ１２−ｎに分離する。このとき、チャネル番号符号生成部８ｂは、各データのチャネル番号符号Ｘ１３を生成する。このチャネル番号符号Ｘ１３は、請求項記載のチャネルへの帰属を示す情報に相当する。
【００６９】
ここで、ＳＭＦには１つのトラックデータに最大１６チャネルを含めることができることは前述した通りであるが、ＳＭＦフォーマットでは、チャネルに属するイベントとチャネルに属しないイベント（全体に影響が及ぶイベント等）を記述することができるようになっている。これに鑑みて、この第１の実施の形態では、チャネルに属しないイベントについては、チャネル０として処理するようにしている。即ち、チャネルに属しないイベントについては、チャネル０のみのトラックｘデータに含められる。但し、これには限定されない。
【００７０】
また、第１の実施の形態では、イベントが存在しないトラックの全てを符号化すると膨大なトラック数になるので、イベントが存在しないトラックは削除し、１次符号には記録しないこととしている。
【００７１】
以下、図６のフローチャートを参照して、このチャネル分離及びチャネル番号符号生成部８（トラック解析分離部８ａ、チャネル番号符号生成部８ｂ）によるチャネル分離及びチャネル番号符号生成に係る処理の流れを詳細に説明する。
【００７２】
即ち、この処理を開始すると、先ず、チャネル分離及びチャネル番号符号生成部８は、トラック番号に係る変数Ｉに０を代入した後（ステップＳ１１）、この変数Ｉと最大トラック数Ｍとを比較する（ステップＳ１２）。このステップＳ１２において、チャネル分離及びチャネル番号符号生成部８は、Ｉ＜Ｍの関係が成立すると判断した場合には、このステップＳ１２よりＹｅｓ側に進み、続いてチャネル番号に係る変数Ｊに０を代入し（ステップＳ１３）、このチャネル番号に係る変数Ｊと最大チャネル数ＭＡＸ＿ＣＨとを比較する（ステップＳ１４）。
【００７３】
続いて、ステップＳ１４において、チャネル分離及びチャネル番号符号生成部８は、Ｊ＜ＭＡＸ＿ＣＨの関係が成立すると判断した場合には、Ｔｉｃｋ［Ｊ］を０とした後に（ステップＳ１５）、チャネル番号に係る変数Ｊを１つインクリメントして（ステップＳ１６）、上記ステップＳ１４に戻る。ここで、上記Ｔｉｃｋ［Ｊ］は符号化中であるトラックデータＪの現在符号化位置における経過時間を意味する。各トラックは、それぞれ独立した時間軸を有していることから、このような配列Ｔｉｃｋ［Ｊ］に関する処理が必要となる。チャネル分離及びチャネル番号符号生成部８は、上記ステップＳ１４乃至Ｓ１６の処理を、１つのトラックデータから分離される全ての単一チャネルトラックデータについて実行する。
【００７４】
例えば、図５との関係では、トラックｘデータ１１−ｘには、チャネル０〜ｎに属するイベント群が含まれていることを想定しているので、チャネル分離及びチャネル番号符号生成部８は、上記ステップＳ１４乃至Ｓ１６の処理を繰り返すことにより、Ｔｉｃｋ［０］、Ｔｉｃｋ［１］、…、Ｔｉｃｋ［ｎ］を０とする。
【００７５】
上記処理の後、ステップＳ１４をＮｏ側に進むと、チャネル分離及びチャネル番号符号生成部８は、変数ＭａｓｔｅｒＴｉｃｋに０を代入し、変数Ｂｃｈに−１を代入する（ステップＳ１７）。このＢｃｈは、処理中のイベントの直前（１つ手前）のイベントのチャネル番号を示す変数である。また、Ｂｃｈに代入される−１は、処理中のイベントが先頭につき直前のイベントが存在しないことを示す値である。
【００７６】
続いて、Ｔｒａｃｋ［Ｉ］にストアされているトラックＩデータにイベントがまだ有るか否かを判断する（ステップＳ１８）。尚、上記ＭａｓｔｅｒＴｉｃｋは、分離元となる複数チャネルに属するイベント群が格納されたトラックデータの現在パース位置における経過時間に係る変数を意味している。
【００７７】
そして、上記ステップＳ１８において、チャネル分離及びチャネル番号符号生成部８が、Ｔｒａｃｋ［Ｉ］のトラックＩデータにイベントがまだ有ると判断した場合には、当該トラックＩデータからΔタイムやイベントを読み出し、変数ＤｅｌｔａにΔタイム、変数Ｅｖｅｎｔにイベントを順次ストアし（ステップＳ２０）、更に、変数Ｅｖｅｎｔにストアされているイベントに含まれているチャネル番号を変数Ｃｈにストアする（ステップＳ２１）。続いて、チャネル分離及びチャネル番号符号生成部８は、変数ＤｅｌｔａにストアされているΔタイムが０であるか、即ち直前のイベントが同時刻に記録されているか否かを判断する（ステップＳ２２）。そして、このステップＳ２２において、チャネル分離及びチャネル番号符号生成部８は、Δタイムが０であると判断した場合には、変数Ｂｃｈが−１であるか、即ち直前のイベントが存在するか否かを判断することとしている（ステップＳ２３）。
【００７８】
そして、ステップＳ２３において、チャネル分離及びチャネル番号符号生成部８は、変数Ｂｃｈが−１、即ち直前のイベントが存在しない（処理中のイベントが先頭にある）と判断した場合には、ステップＳ２４以降の処理に進む。一方、上記ステップＳ２３において、チャネル分離及びチャネル番号符号生成部８は、変数Ｂｃｈが−１でない、即ち処理中のイベントが先頭でないと判断した場合には、チャネル番号符号［Ｉ］の末尾に変数Ｂｃｈに代入されているチャネル番号を符号化して、ステップＳ２４以降の処理に進むことになる（ステップＳ２７）。
【００７９】
続いて、チャネル分離及びチャネル番号符号生成部８は、図示の３つの処理を実行し（ステップＳ２４）、Ｔｒａｃｋ［Ｉ］［Ｃｈ］の末尾に変数Ｃｄｅｌｔａにストアされた値と変数Ｅｖｅｎｔにストアされているイベントとを追記し（ステップＳ２５）、さらに処理中のイベントの直前のイベントのチャネル番号符号に係る変数Ｂｃｈに、現在処理中のチャネル番号に係る変数Ｃｈに代入されているチャネル番号を代入した後に（ステップＳ２６）、上記ステップＳ１８に戻ることになる。
【００８０】
チャネル分離及びチャネル番号符号生成部８は、以上の処理を、Ｔｒａｃｋ［Ｉ］のトラックＩデータにイベントが存在する限りにおいて繰り返す（ステップＳ１８乃至Ｓ２６）。そして、上記ステップＳ１８において、Ｔｒａｃｋ［Ｉ］にストアされているトラックＩデータには他のイベントがないと判断した場合には、トラック番号に係る変数Ｉを１つインクリメントした後（ステップＳ１９）、上記ステップＳ１２に戻り、上記同様の処理を次のトラックデータについて実行する。
【００８１】
そして、チャネル分離及びチャネル番号符号生成部８は、先に示した図３との関係では、Ｔｒａｃｋ［ｍ］に格納されているトラックｍデータ１１−ｍまで上記した処理を繰り返すと、本処理を終了する。このような一連の処理により、図５との関係では、チャネル分離及びチャネル番号符号生成部８は、入力されたトラックｘデータ１１−ｘを、チャネル０のみのトラックｘデータ１２−０、チャネル１のみのトラックｘデータ１２−１、…、チャネルｎのみのトラックｘデータ１２−ｎに分離すると共に、各データのチャネル番号符号Ｘを生成する。
【００８２】
尚、上記処理では、処理中のイベントのチャネル番号ではなく、直前のイベントのチャネル番号を符号化することで、同時刻のイベントグループの末尾のチャネル番号符号を符号化しないように工夫をしている。
【００８３】
ここで、図７を参照して、上述したチャネル分離及びチャネル番号符号生成部８（トラック解析分離部８ａ、チャネル番号符号生成部８ｂ）によるチャネル分離及びチャネル番号符号生成に係る処理による効果を説明する。
【００８４】
いま、あるトラックｘのトラックｘデータが、図７（ａ）のように構成されているものとする。この例に挙げたトラックｘデータには、図示のようにチャネル４，０，２に係るトラックｘデータが混在していることから、上述した処理により各チャネルのみのトラックｘデータに分離されることになるが、分離後の様子は、図７（ｂ）に示される。即ち、図７（ｂ）の上段は、単一チャネル０からなるトラックｘデータ、中段は単一チャネル２からなるトラックｘデータ、下段は単一チャネル４からなるトラックｘデータをそれぞれ示している。
【００８５】
これを元の情報に戻すべく復号化する場合、図７（ｂ）に示される情報のみであると、イベントＡ乃至Ｃがどのような順番で並んでいたのか認識することができないことが判る。例えば、チャネル番号の順で並べると、イベントＢ，Ｃ，Ａの順番となり、トラック分割前とは異なってしまうことになる。
【００８６】
かかる点に鑑みて、第１の実施の形態では、イベントＡ，Ｂ，Ｃの順番を復号時に認識可能とする為に、チャネル番号符号Ｘを採用している。このチャネル番号符号Ｘは、同時刻に発生するイベントが複数ある場合に限り、図７（ｃ）に示されるような態様で符号化される。即ち、イベントの並びの順番で、イベントＡに関するチャネル番号、イベントＢに関するチャネル番号が符号化される。
【００８７】
例えば、図７（ａ）の例では、イベントＢ、イベントＣのΔタイムが０であることから、これらイベントＡ，Ｂ，Ｃは同時刻であることが判るが、３つのイベントＡ，Ｂ，Ｃのうち、先頭から２つの順番が定まれば、残り１つの順番は不要であることが分る。そこで、第１の実施の形態では、同時刻にｎ個のイベントが存在する場合おいては、ｎ−１個のチャネル番号符号を符号化する。
【００８８】
即ち、この図７（ｃ）の例では、イベントＣに係るチャネル番号は符号化しない。より詳細には、上記１次符号生成部２は、イベント間の相対時間の情報（Δタイムの先頭バイト）に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には、上記同時刻のイベントグループの末尾に記録されているイベントについては、チャネルへの帰属を示す情報を保持する対象から除外する。かかる工夫によっても、データ量の削減を実現している。
【００８９】
尚、イベントが存在しないトラック全てを符号化すると、膨大なトラック数になることから、第１の実施の形態では、イベントが存在しないトラックは１次符号生成時に削除し、１次符号５には含めないこととしている。
【００９０】
次に、チャネル番号以外の符号生成部９の詳細な構成は図８に示される通りである。即ち、このチャネル番号以外の符号生成部９は、図示の如くイベント種別解析識別部２１と、Δタイム符号生成部２２、Ｎｏｔｅ　Ｏｎ音程符号生成部２３、Ｎｏｔｅ　Ｏｆｆ音程符号生成部２４、ベロシティ値符号生成部２５、差分ベンド値符号生成部２６、差分エクスプレッション値符号生成部２７、イベント種別識別符号生成部２８、その他情報符号生成部２９を有している。
【００９１】
以下、図９のフローチャートを参照して、このチャネル番号以外の符号生成部９（各部２１乃至２９を含む）による処理の流れを詳細に説明する。
【００９２】
この処理を開始すると、先ずチャネル番号以外の符号生成部９は、トラック番号に係る変数Ｉに０をセットし（ステップＳ３１）、この変数Ｉと最大トラック数Ｍ（図３の例では、ｍ＋１）とを比較する（ステップＳ３２）。
【００９３】
そして、チャネル番号以外の符号生成部９は、Ｉ＜Ｍの関係が成立すると判断した場合には、チャネル番号に係る変数Ｊに０を代入し（ステップＳ３３）、当該チャネル番号に係る変数Ｊと予め定められた最大チャネル数ＭＡＸ＿ＣＨとを比較する（ステップＳ３４）。このループの１巡目では、先にステップＳ３３４においてＪ＝０とされているので、チャネル番号以外の符号生成部９は、Ｊ＜ＭＡＸ＿ＣＨの関係を満たすものと判断し、Ｔｒａｃｋ［０］［０］に格納されているチャネル０のみのトラック０データについて符号化を行う（ステップＳ３６）。
【００９４】
そして、チャネル番号以外の符号生成部９は、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とした後、上記ステップＳ３４乃至３６の処理を繰り返す（ステップＳ３７）。ここで、この第１の実施の形態では、最大チャネル数ＭＡＸ＿ＣＨは１６と定められているので、チャネル番号以外の符号生成部９は、上記Ｔｒａｃｋ［０］［０］、Ｔｒａｃｋ［０］［１］、…、Ｔｒａｃｋ［０］［１５］に格納されている、チャネル０のみのトラック０データ、チャネル１のみのトラック０データ、…、チャネル１５のみのトラック０データについて順次符号化を行うことになる。
【００９５】
そして、チャネル番号以外の符号生成部９は、このトラック０データに関する処理の後は、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後（ステップＳ３５）、Ｔｒａｃｋ［１］［０］、Ｔｒａｃｋ［１］［１］、…、Ｔｒａｃｋ［１］［１５］に格納されている、チャネル０のみのトラック１データ、チャネル１のみのトラック１データ、…、チャネル１５のみのトラック１データについて順次符号化を行うこととしている（ステップＳ３２乃至Ｓ３７）。こうして、チャネル番号以外の符号生成部９は、Ｔｒａｃｋ［ｍ］［０］、Ｔｒａｃｋ［ｍ］［１］、…、Ｔｒａｃｋ［ｍ］［１５］に格納されている、チャネル０のみのトラックｍデータ、チャネル１のみのトラックｍデータ、…、チャネル１５のみのトラックｍデータについてまで上記同様の処理により符号化を行うと（ステップＳ３２乃至Ｓ３７）、この処理を終了する。
【００９６】
ここで、図１０のフローチャートを参照して、図９の上記ステップＳ３６で実行されるＴｒａｃｋ［Ｉ］［Ｊ］の符号化の処理について更に詳細に説明する。
【００９７】
このＴｒａｃｋ［Ｉ］［Ｊ］の符号化の処理を開始すると、チャネル番号以外の符号生成部９は、Ｔｒａｃｋ［Ｉ］［Ｊ］にストアされているＪチャネルのみのトラックＩデータにイベントが存在するか否かを判断する（ステップＳ４０）。このステップＳ４０において、チャネル番号以外の符号生成部９は、ＪチャネルのみのトラックＩデータにイベントが存在すると判断した場合には、Ｔｒａｃｋ［Ｉ］［Ｊ］のデータからΔタイムとイベントを読み込み、変数ＤｅｌｔａにΔタイム、変数Ｅｖｅｎｔにイベントをストアする（ステップＳ４１）。そして、チャネル番号以外の符号生成部９は、このＥｖｅｎｔにストアされたイベントの種別を判別する（ステップＳ４２）。
【００９８】
このイベント種別の判別は、Ｅｖｅｎｔに含まれるデータ列をＳＭＦのフォーマット（後述する第２の実施の形態ではＳＭＦの改良フォーマット）仕様に基づいて判別する。即ち、上記ステップＳ４２において、チャネル番号以外の符号生成部９は、変数Ｅｖｅｎｔにストアされているイベントが図７９におけるタイプ１に該当するイベントであると判断した場合には、Δタイム符号［Ｉ］［Ｊ］の末尾にタイプ１で変数デルタにストアされているΔタイムを符号化する（ステップＳ４３）。これに対して、上記ステップＳ４２において、チャネル番号以外の符号生成部９は、変数Ｅｖｅｎｔにストアされているイベントが図７９におけるタイプ２に該当するイベントであると判断した場合には、Δタイム符号［Ｉ］［Ｊ］の末尾にタイプ２で変数デルタにストアされているデルタタイムを符号化する（ステップＳ４４）。
【００９９】
一方、上記ステップＳ４２において、チャネル番号以外の符号生成部９は、変数Ｅｖｅｎｔにストアされているイベントが図７９におけるタイプ３に該当するイベントであると判断した場合には、Δタイム符号［Ｉ］［Ｊ］の末尾にタイプ３で変数デルタにストアされているデルタタイムを符号化し（ステップＳ４５）、更にイベント種別識別符号［Ｉ］［Ｊ］の末尾に変数Ｅｖｅｎｔの種別に応じた符号を符号化することとしている（ステップＳ４６）。このように、イベント種別を識別できる独自のΔタイムを定義して符号化を行うことで、ステップＳ４２においてタイプ１とタイプ２のイベントであると判別した場合にはステップＳ４６で記録するようなイベント種別識別符号を省略することができるので、データ量の削減につながる。
【０１００】
こうして、詳細は後述するが、チャネル番号以外の符号生成部９は、イベント種別毎の符号化を行ない（ステップＳ４７）、以上の処理（ステップＳ４０乃至Ｓ４７）をＴｒａｃｋ［Ｉ］［Ｊ］にイベントが存在する限りにおいて繰り返し、全てのイベントについて上記処理を行うと（ステップＳ４０）、このＴｒａｃｋ［Ｉ］［Ｊ］の符号化の処理を終了し、図９の上記ステップＳ３６にリターンする。
【０１０１】
ここで、上記１次符号生成部２は、各イベント間の相対時間の情報、即ちΔタイムの最大公約数を算出し、当該Δタイムを上記最大公約数で除算した数値を符号化することとしている。即ち、上記１次符号生成部２は、Δタイムを可変長符号にするときに、Δタイムを上記最大公約数で除算した値を符号化する。これにより、楽曲全体で容量を削減することを実現している。
【０１０２】
次に、図１１のフローチャートを参照して、図１０の上記ステップＳ４７で実行されるイベント種別毎の符号化の処理について更に詳細に説明する。
【０１０３】
さて、このイベント種別毎の符号化を開始すると、チャネル番号以外の符号生成部９は、変数Ｅｖｅｎｔにストアされているイベントの種別を識別し（ステップＳ５０）、これ以降、チャネル番号以外の符号生成部９は、識別したイベント毎に異なった符号化処理を行う（ステップＳ５１乃至Ｓ５８）。
【０１０４】
即ち、チャネル番号以外の符号生成部９は、イベントの種別がＮｏｔｅ　Ｏｎであると判断した場合には、Ｎｏｔｅ　Ｏｎ音程符号［Ｉ］［Ｊ］の末尾に音程値を符号化し（ステップＳ５１）、ベロシティ値符号［Ｉ］［Ｊ］の末尾にベロシティ値を符号化する（ステップＳ５２）。一方、チャネル番号以外の符号生成部９は、イベントの種別がＮｏｔｅ　Ｏｆｆであると判断した場合には、Ｎｏｔｅ　Ｏｆｆ音程符号［Ｉ］［Ｊ］の末尾に音程値を符号化する（ステップＳ５３）。チャネル番号以外の符号生成部９は、イベントの種別がピッチベンドであると判断した場合には、差分ベンド値符号［Ｉ］［Ｊ］の末尾に直前のベンド値からの差分ベンド値を符号化する（ステップＳ５４）。
【０１０５】
また、チャネル番号以外の符号生成部９は、イベントの種別がエクスプレッションであると判断した場合には、差分エクスプレッション値符号［Ｉ］［Ｊ］の末尾に直前のエクスプレッション値からの差分エクスプレッション値を符号化する（ステップＳ５５）。そして、チャネル番号以外の符号生成部９は、イベントの種別がその他であると判断した場合には、続いて、イベントの種別識別符号が０ｘ０８（図２１参照）以上であるか否かを判断する（ステップＳ５６）。
【０１０６】
そして、ステップＳ５６において、チャネル番号以外の符号生成部９は、当該符号が０ｘ０８（図２１参照）以上であると判断した場合には、その他情報符号［Ｉ］［Ｊ］の末尾に変数Ｅｖｅｎｔにストアされているイベントの３バイト目以降の情報を符号化する（ステップＳ５７）。一方、上記ステップＳ５６において、チャネル番号以外の符号生成部９は、当該符号（１６進数）が０ｘ０８（図２１参照）未満であると判断した場合には、その他情報符号［Ｉ］［Ｊ］の末尾に変数Ｅｖｅｎｔにストアされているイベントの２バイト目以降の情報を符号化する（ステップＳ５７）。
【０１０７】
こうして、チャネル番号以外の符号生成部９は、イベント種別毎の符号化の処理を終了する。尚、この第１の実施の形態では、上述したイベント種別毎の符号化処理では、Ｎｏｔｅ　Ｏｆｆのベロシティは一般には使用されないことから、Ｎｏｔｅ　Ｏｆｆのベロシティは符号化せずに切り捨て、データ量の削減を図っている。
【０１０８】
以上説明したように、チャネル番号以外の符号生成部９（各生成部２２乃至２９を含む）は、上記一連の処理により、Δタイム符号、Ｎｏｔｅ　Ｏｎ音程符号、Ｎｏｔｅ　Ｏｆｆ音程符号、ベロシティ値符号、差分ベンド値符号、差分エクスプレッション値符号、イベント種別識別符号、その他情報符号を生成する。そして、これら全ての符号は、図１２に示されるように、符号配置部１０に入力される。そして、符号配置部１０は、各符号種別毎に配置し、１次符号５を生成する。
【０１０９】
以下、図１３乃至図２３を参照して、第１の実施の形態に係る演奏情報圧縮装置１の符号配置部１０による符号配置の処理の流れを更に詳細に説明する。
【０１１０】
さて、本処理を開始すると、符号配置部１０は、先ずヘッダ・チャンクの符号を配置する（ステップＳ６０）。以降、各符号の配置を実行する。
【０１１１】
先ず、符号配置部１０は、Δタイム符号を配置する（ステップＳ６１）。
【０１１２】
即ち、図１４のフローチャートに詳細に示されるように、この符号配置部１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ７０）、このＩがトラック数Ｍより小さいか否かを判断する（ステップＳ７１）。
【０１１３】
１巡面では、上記ステップＳ７０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ７１よりＹｅｓ側に進む。そして、符号配置部１０は、次いでチャネル番号に係るＪに０を代入する（ステップＳ７２）。
【０１１４】
続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ７３）。
【０１１５】
そして、１巡面では、上記ステップＳ７２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ７３よりＹｅｓ側に進む。そして、符号配置部１０は、Δタイム符号［０］［０］を配置した後（ステップＳ７４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とする（ステップＳ７５）。
【０１１６】
この第１の実施の形態では、最大チャネル数ＭＡＸ＿ＣＨが１６と設定されているので、符号配置部１０は、上記ステップＳ７３乃至Ｓ７５の処理を繰り返し、Δタイム符号［０］［１］、Δタイム符号［０］［２］、…、Δタイム符号［０］［１５］を順次配置することになる。そして、Δタイム符号［０］［１５］を配置した後、符号配置部１０は、ステップＳ７３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ７１乃至Ｓ７５の処理を繰り返し、続いてΔタイム符号［１］［１］、Δタイム符号［１］［２］、…、Δタイム符号［１］［１５］を順次配置することとしている。ところで、この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。
【０１１７】
よって、符号配置部１０は、上記したステップＳ７１乃至Ｓ７５の処理を繰り返して、最終的にトラックｍデータに係るΔタイム符号［ｍ］［１］、Δタイム符号［ｍ］［２］、…、Δタイム符号［ｍ］［１５］を順次配置すると、このデルタタイム符号配置処理を終了し、図１３のステップＳ６１にリターンする。
【０１１８】
続いて、符号配置部１０は、Ｎｏｔｅ　Ｏｎ音程符号を配置する（ステップＳ６２）。
【０１１９】
即ち、図１５のフローチャートに詳細に示されるように、この符号配置部１０は、トラック番号に係る変数Ｉに０を代入した後（ステップＳ８０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ８１）。
【０１２０】
１巡面では、上記ステップＳ８０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ８１よりＹｅｓ側に進む。そして、符号配置部１０は、チャネル番号に係る変数Ｊに０を代入する（ステップＳ８２）。
【０１２１】
続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ８３）。
【０１２２】
そして、１巡面では、上記ステップＳ８２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ８３よりＹｅｓ側に進み、続いて、Ｎｏｔｅ　Ｏｎ音程符号［０］［０］を配置した後（ステップＳ８４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とする（ステップＳ８５）。この第１の実施の形態では、最大チャネル数ＭＡＸ＿ＣＨは１６に設定されているので、符号配置部１０は、上記ステップＳ８３乃至Ｓ８５の処理を繰り返し、Ｎｏｔｅ　Ｏｎ音程符号［０］［１］、Ｎｏｔｅ　Ｏｎ音程符号［０］［２］、…、Ｎｏｔｅ　Ｏｎ音程符号［０］［１５］を順次配置する。
【０１２３】
次いで、符号配置部１０は、Ｎｏｔｅ　Ｏｎ音程符号［０］［１５］を配置した後は、ステップＳ８３よりＮｏ側に進むことになる。そして、符号配置部１０は、トラック番号に係るＩを１つインクリメントしてＩ＝１とした後に、上記ステップＳ８１乃至Ｓ８５の処理を繰り返し、続いてＮｏｔｅ　Ｏｎ音程符号［１］［１］、Ｎｏｔｅ　Ｏｎ音程符号［１］［２］、…、Ｎｏｔｅ　Ｏｎ音程符号［１］［１５］を順次配置することとしている。
【０１２４】
ところで、この例では、先に図３で示したようにトラック数Ｍにｍ＋１が設定されている。よって、符号配置部１０は、上記ステップＳ７１乃至Ｓ７５の処理を繰り返し、最終的にトラックｍデータに係るＮｏｔｅ　Ｏｎ音程符号［ｍ］［１］、Ｎｏｔｅ　Ｏｎ音程符号［ｍ］［２］、…、Ｎｏｔｅ　Ｏｎ音程符号［ｍ］［１５］を順次配置すると、このＮｏｔｅ　Ｏｎ音程符号配置処理を終了し、図１３のステップＳ６２にリターンする。
【０１２５】
続いて、符号配置部１０は、Ｎｏｔｅ　Ｏｆｆ音程符号を配置する（ステップＳ６３）。
【０１２６】
即ち、図１６のフローチャートに詳細に示されるように、この符号配置部１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ９０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ９１）。
【０１２７】
先ず、１巡面では、上記ステップＳ９０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ９１よりＹｅｓ側に進み、符号配置部１０は、チャネル番号に係る変数Ｊに０を代入する（ステップＳ９２）。
【０１２８】
続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ９３）。
【０１２９】
そして、１巡面では、上記ステップＳ９２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ９３よりＹｅｓ側に進み、Ｎｏｔｅ　Ｏｆｆ音程符号［０］［０］を配置した後（ステップＳ９４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とする（ステップＳ９５）。ここで、この第１の実施の形態では、最大チャネル数ＭＡＸ＿ＣＨに１６が予め設定されているので、以降、符号配置部１０は、ステップＳ９３乃至Ｓ９５の処理を繰り返し、Ｎｏｔｅ　Ｏｆｆ音程符号［０］［１］、Ｎｏｔｅ
Ｏｆｆ音程符号［０］［２］、…、Ｎｏｔｅ　Ｏｆｆ音程符号［０］［１５］を順次配置する。
【０１３０】
そして、符号配置部１０は、Ｎｏｔｅ　Ｏｆｆ音程符号［０］［１５］を配置した後は、ステップＳ９３よりＮｏ側に分岐し、トラック番号に係るＩを１つインクリメントしてＩ＝１とした後、再びステップＳ９１乃至Ｓ９５の処理を繰り返し、Ｎｏｔｅ　Ｏｆｆ音程符号［１］［１］、Ｎｏｔｅ　Ｏｆｆ音程符号［１］［２］、…、Ｎｏｔｅ　Ｏｆｆ音程符号［１］［１５］を順次配置することとしている。ところで、この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。
【０１３１】
よって、符号配置部１０は、上記ステップＳ９１乃至Ｓ９５の処理を繰り返して、最終的にトラックｍデータに係るＮｏｔｅ　Ｏｆｆ音程符号［ｍ］［１］、Ｎｏｔｅ　Ｏｆｆ音程符号［ｍ］［２］、…、Ｎｏｔｅ　Ｏｆｆ音程符号［ｍ］［１５］を順次配置すると、このＮｏｔｅ　Ｏｆｆ音程符号配置処理を終了し、図１３のステップＳ６３にリターンする。
【０１３２】
続いて、符号配置部１０は、ベロシティ値符号を配置する（ステップＳ６４）。
【０１３３】
即ち、図１７のフローチャートに詳細に示されるように、この符号配置部１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ１００）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ１０１）。
【０１３４】
１巡面では、上記ステップＳ１００でＩ＝０と設定されているので、符号配置部１０は、ステップＳ１０１よりＹｅｓ側に進み、次いでチャネル番号に係るＪに０を代入する（ステップＳ１０２）。続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ１０３）。１巡面では、上記ステップＳ１０２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ１０３よりＹｅｓ側に進み、ベロシティ値符号［０］［０］を配置した後（ステップＳ１０４）、チャネル番号に係るＪを１つインクリメントする（ステップＳ１０５）。この第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、以降、符号配置部１０は、上記ステップＳ１０３乃至Ｓ１０５の処理を繰り返し、ベロシティ値符号［０］［１］、ベロシティ値符号［０］［２］、…、ベロシティ値符号［０］［１５］を順次配置する。
【０１３５】
そして、符号配置部１０は、このベロシティ値符号［０］［１５］を配置した後は、上記ステップＳ１０３よりＮｏ側に進み、トラック番号に係るＩを１つインクリメントしてＩ＝１とした後に、再びステップＳ１０１乃至Ｓ１０５の処理を繰り返し、続いてベロシティ値符号［１］［１］、ベロシティ値符号［１］［２］、…、ベロシティ値符号［１］［１５］を順次配置することとしている。この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。
【０１３６】
よって、符号配置部１０は、上記ステップＳ１０１乃至Ｓ１０５の処理を繰り返し、最終的にトラックｍデータに係るベロシティ値符号［ｍ］［１］、ベロシティ値符号［ｍ］［２］、…、ベロシティ値符号［ｍ］［１５］を順次配置すると、このベロシティ値符号配置処理を終了し、図１３のステップＳ６４にリターンする。
【０１３７】
続いて、符号配置部１０は差分ベンド値符号を配置する（ステップＳ６５）。
【０１３８】
即ち、図１８のフローチャートに詳細に示されるように、この符号配置部１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ１１０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ１１１）。
【０１３９】
１巡面では、上記ステップＳ１１０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ１１１よりＹｅｓに進む。そして、符号配置部１０は、チャネル番号に係る変数Ｊに０を代入する（ステップＳ１１２）。
【０１４０】
続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ１１３）。
【０１４１】
１巡面では、上記ステップＳ１１２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ１１３よりＹｅｓに進み、差分ベンド値符号［０］［０］を配置した後（ステップＳ１１４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とする（ステップＳ１１５）。この第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、符号配置部１０は、ステップＳ１１３乃至Ｓ１１５の処理を繰り返し、差分ベンド値符号［０］［１］、差分ベンド値符号［０］［２］、…、差分ベンド値符号［０］［１５］を順次配置する。
【０１４２】
そして、符号配置部１０は、差分ベンド値符号［０］［１５］を配置した後は、ステップＳ１１３をＮｏ側に進み、トラック番号Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ１１１乃至Ｓ１１５の処理を繰り返し、続いて差分ベンド値符号［１］［１］、差分ベンド値符号［１］［２］、…、差分ベンド値符号［１］［１５］を順次配置することとしている。ところで、この例では、先に図３で示したようにトラック数Ｍにｍ＋１が設定されていることを想定している。
【０１４３】
よって、符号配置部１０は、上記ステップＳ１１１乃至Ｓ１１５の処理を繰り返し、最終的にトラックｍデータに係る差分ベンド値符号［ｍ］［１］、差分ベンド値符号［ｍ］［２］、…、差分ベンド値符号［ｍ］［１５］を順次配置すると、この差分ベンド値符号配置処理を終了し、図１３のステップＳ６５にリターンする。
【０１４４】
続いて、符号配置部１０は、差分エクスプレッション値符号を配置する（ステップＳ６６）。即ち、図１９のフローチャートに詳細に示されるように、符号配置部１０は、トラック番号に係る変数Ｉに０を代入した後（ステップＳ１２０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ１２１）。
【０１４５】
１巡面では、上記ステップＳ１２０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ１２１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ１２２）。続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ１２３）。１巡面では、上記ステップＳ１２２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ１２３よりＹｅｓ側に進む。
【０１４６】
そして、符号配置部１０は、差分エクスプレッション値符号［０］［０］を配置した後（ステップＳ１２４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とする（ステップＳ１２５）。なお、第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、符号配置部１０は、これ以降、ステップＳ１２３乃至Ｓ１２５の処理を繰り返し、差分エクスプレッション値符号［０］［１］、差分エクスプレッション値符号［０］［２］、…、差分エクスプレッション値符号［０］［１５］を順次配置する。そして、符号配置部１０は、差分エクスプレッション値符号［０］［１５］を配置した後は、ステップＳ１２３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ１２１乃至Ｓ１２５の処理を繰り返し、続いて差分エクスプレッション値符号［１］［１］、差分エクスプレッション値符号［１］［２］、…、差分エクスプレッション値符号［１］［１５］を順次配置する。ところで、この例では、先に図３で示したようにトラック数Ｍにｍ＋１が設定されていることを想定している。
【０１４７】
よって、符号配置部１０は、上記ステップＳ１２１乃至Ｓ１２５の処理を繰り返し、最終的にトラックｍデータに係る差分エクスプレッション値符号［ｍ］［１］、差分エクスプレッション値符号［ｍ］［２］、…、差分エクスプレッション値符号［ｍ］［１５］を順次配置すると、差分エクスプレッション値符号配置処理を終了し、図１３のステップＳ６６にリターンする。
【０１４８】
続いて、符号配置部１０は、イベント種別識別符号を配置する（ステップＳ６７）。即ち、図２０のフローチャートに詳細に示されるように、この符号配置部１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ１３０）、変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ１３１）。
【０１４９】
１巡面では、上記ステップＳ１３０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ１３１よりＹｅｓに進み、チャネル番号に係る変数Ｊに０を代入する（ステップＳ１３２）。続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ１３３）。先ず、１巡面では、上記ステップＳ１３２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ１３３よりＹｅｓ側に進み、イベント種別識別符号［０］［０］を配置した後（ステップＳ１３４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とする（ステップＳ１３５）。
【０１５０】
この第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、符号配置部１０は、以降、ステップＳ１３３乃至Ｓ１３５の処理を繰り返して、これ以降、イベント種別識別符号［０］［１］、イベント種別識別符号［０］［２］、…、イベント種別識別符号［０］［１５］を順次配置する。
【０１５１】
そして、符号配置部１０は、イベント種別識別符号［０］［１５］を配置した後、ステップＳ１３３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再び上記ステップＳ１３１乃至Ｓ１３５の処理を繰り返し、続いてイベント種別識別符号［１］［１］、イベント種別識別符号［１］［２］、…、イベント種別識別符号［１］［１５］を順次配置する。ところで、この例では、先に図３で示したようにトラック数Ｍにｍ＋１が設定されていることを想定している。
【０１５２】
よって、符号配置部１０は、上記ステップＳ１３１〜Ｓ１３５の処理を繰り返し、最終的にトラックｍデータに係るイベント種別識別符号［ｍ］［１］、イベント種別識別符号［ｍ］［２］、…、イベント種別識別符号［ｍ］［１５］を順次配置すると、イベント種別識別符号配置処理を終了し、図１３のステップＳ６７にリターンする。
【０１５３】
尚、イベント種別識別符号は、図２１に示されるようなイベント種別識別符号符号化表により、そのイベント種別に応じて適宜割り当てられる。この例では０ｘ０８以上はコントロールチェンジに係るイベントに割り当てている。
【０１５４】
また、符号化時にイベント種別出現頻度に応じて動的に割り当てることも可能である。即ち、この場合、上記１次符号生成部２は、出現頻度の高低により異なるイベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置する。このような１次符号化時における工夫によっても、後続の２次符号化時のハフマン符号化による圧縮効率は高められることは勿論である。
【０１５５】
続いて、符号配置部１０は、チャネル番号符号を配置する（ステップＳ６８）。
【０１５６】
即ち、図２２のフローチャートに詳細に示されるように、この符号配置部１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ１４０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ１４１）。
【０１５７】
先ず、１巡面では、上記ステップＳ１４０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ１４１よりＹｅｓ側に進み、チャネル番号符号［０］を配置した後（ステップＳ１４２）、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とする（ステップＳ１４３）。そして、符号配置部１０は、再びステップＳ１４１乃至Ｓ１４３の処理を繰り返し、続いてチャネル番号符号符号［１］を配置する。ところで、この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、この符号配置部１０は、上記ステップＳ１４１乃至Ｓ１４３の処理を繰り返し、最終的にトラックｍデータに係るチャネル番号符号符号［ｍ］を配置すると、チャネル番号符号配置処理を終了し、図１３のステップＳ６８にリターンする。
【０１５８】
続いて、符号配置部１０は、その他情報符号を配置する（ステップＳ６９）。
【０１５９】
即ち、図２３のフローチャートに詳細に示されるように、この符号配置部１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ１５０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ１５１）。
【０１６０】
１巡面では、上記ステップＳ１５０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ１５１よりＹｅｓ側に進み、次いでチャネル番号に係るＪに０を代入する（ステップＳ１５２）。続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ１５３）。そして、１巡面では、上記ステップＳ１５２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ１５３よりＹｅｓに進み、その他情報符号［０］［０］を配置した後に（ステップＳ１５４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とする（ステップＳ１５５）。
【０１６１】
この第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、符号配置部１０は、以降、ステップＳ１５３乃至Ｓ１５５の処理を繰り返し、その他情報符号［０］［１］、その他情報符号［０］［２］、…、その他情報符号［０］［１５］を順次配置する。そして、符号配置部１０は、その他情報符号［０］［１５］を配置した後は、ステップＳ１５３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ１５１乃至Ｓ１５５の処理を繰り返し、その他情報符号［１］［１］、その他情報符号［１］［２］、…、その他情報符号［１］［１５］を順次配置することになる。
【０１６２】
ところで、この例では、先に図３で示したようにトラック数Ｍにｍ＋１が設定されていることを想定している。よって、符号配置部１０は、上記ステップＳ１５１乃至Ｓ１５５の処理を繰り返し、最終的にトラックｍデータに係るその他情報符号［ｍ］［１］、その他情報符号［ｍ］［２］、…、その他情報符号［ｍ］［１５］を順次配置すると、その他情報符号配置処理を終了する。こうして、符号配置部１０は、符号配置に係る全ての処理を終了することになる。
【０１６３】
以上の処理により、図２４に示されるような基本配置順序で各符号が配列され１次符号５が生成される。即ち、図２４の例では、より詳細には、１次符号５の基本配列順序は、Δタイム符号、Ｎｏｔｅ　Ｏｎ音程符号、Ｎｏｔｅ　Ｏｆｆ音程符号、ベロシティ値符号、差分ベンド値符号、差分エクスプレッション値符号、イベント種別識別符号、その他情報符号の順となっている。更に、各符号の内部配列は、図２５（ａ）に示されるように、トラック０データ（チャネル番号順、以下同じ）、トラック１データ、…、トラックｍデータに係る符号の順となっている。また、チャネル番号符号の内部配置順序は図２５（ｂ）に示される通りである。
【０１６４】
この１次符号５自体、上述した処理により無駄が省かれ、しかもＳＭＦの音楽的な特性は全く損なわれることなく、かなり圧縮されたデータ量となる。
【０１６５】
そして、このように配置された１次符号５は、ＳＭＦに比して同一データパターンの出現頻度が高く、同一データパターンが隣接され、更に同じ種別の符号内で同じデータパターンが出現する確率が高くなることから、詳細は後述するような２次符号生成部３による圧縮の効率も高まることになる。
【０１６６】
この１次符号５は２次符号生成部３に入力され、２次符号生成部３は汎用圧縮方式による圧縮を行う。この例では、汎用圧縮技術として、ＬＺ符号化法やハフマン符号化法、ランレングス符号化法、更には、これらを複合した方法（例えばＬＨＡやＺＩＰ等）を採用することができる。
【０１６７】
より詳細には、例えばＬＺ符号化法を採用する場合を想定すると、先ず、１次符号５の先頭から処理を開始し、処理対象位置のデータパターンと先に処理された所定範囲内のデータパターンとを比較する。そして、両者が一致する場合には処理対象位置から当該データパターンまでの距離や一致したデータパターンの長さ等の情報を２次符号６として出力する。これに対して、両者が一致しない場合には、１次符号５を２次符号６としてそのまま出力する。
【０１６８】
このような一連の処理を１次符号５の先頭から最後まで繰り返す。
【０１６９】
第１の実施の形態では、前述したように各情報を情報種別毎かつチャネル毎に時間的に独立した領域に配置した１次符号５を生成していることから、データパターンが繰り返すことを利用して繰り返し分を圧縮するＬＺ符号化法にも好適であり、圧縮率を低くすることができる。さらに、例えばイベント種別識別符号については、イベント種別の出現頻度に応じて符号を動的に割り当てることも可能としていることから、バイト毎の符号の出現頻度によって重み付けして重みのある符号に関して少ないビット数で記録できるように符号化するハフマン符号化法にも好適であって、圧縮率を低くすることができる。また、この他、ベロシティ情報は、ＳＭＦフォーマットの下では値の分布に偏りが出ることが多いことから、ベロシティ情報を独立して纏めて記録したことで、ハフマン符号化法による符号化の効率に好影響を及ぼしている。
【０１７０】
尚、第１の実施の形態では、ＬＺ法及びハフマン符号化の複合方式（ＬＨＡ）を採用することを想定しているが、その場合には、上述した双方の効果が奏されることは勿論である。
【０１７１】
（演奏情報復号装置等）
次に、図２６乃至図４７を参照して、１次符号又は２次符号を復号する第１の実施の形態に係る演奏情報復号装置、演奏情報復号方法、演奏情報復号プログラムについて詳細に説明する。尚、演奏情報復号装置による作用は、第１の実施の形態に係る演奏情報復号方法、演奏情報復号プログラムに相当する。
【０１７２】
先ず、図２６には本発明の第１の実施の形態に係る演奏情報復号装置の構成を示し説明する。この図２６に示されるように、この演奏情報復号装置５０は、２次符号復号部５１と１次符号復号部５２からなる。尚、請求項記載の１次符号復号手段とはこの１次符号復号部５２等に相当し、請求項記載の２次符号復号手段とはこの２次符号復号部５１等に相当する。但し、これには限定されない。
【０１７３】
この２次符号復号部５１は、上述した汎用圧縮方式により圧縮された上記２次符号６を１次符号５に復号するものである。即ち、より詳細には、１次符号復号部５２は、２次符号復号部５１で復号された１次符号５を上述したフォーマットの楽曲ファイル４に復号するものである。即ち、２次符号復号部５１により２次符号６が１次符号５に復号されると、１次符号復号部５２により、上記１次符号５について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することで楽曲ファイル４に復号されることになる。
【０１７４】
ここで、１次符号復号部５１の詳細な構成は、図２７に示される。
【０１７５】
即ち、この１次符号復号部５１は、チャネル別符号抽出部５３、トラック復号部５４、トラックマージ及びチャネル番号符号復号部５５、トラック配置部５６を有している。以下、これら各部５３乃至５６の構成及び作用を詳述する。
【０１７６】
先ず、チャネル別符号抽出部５３の詳細な構成は、図２８に示される通りであり、チャネル別符号抽出部５３は、１次符号５に含まれる各符号をチャネル別に抽出するものである。つまり、チャネル別符号抽出部５３は、１次符号５よりトラック０，チャネル０の符号群、トラック０，チャネル１の符号群、…、トラックｍ，チャネルｎの符号群をチャネル別に順次抽出する。尚、各符号群には、Δタイム符号、Ｎｏｔｅ　Ｏｎ音程符号、Ｎｏｔｅ　Ｏｆｆ音程符号、ベロシティ値符号、差分ベンド値符号、差分エクスプレッション値符号、イベント種別識別符号、その他情報符号がそれぞれ含まれていることは勿論である。
【０１７７】
以下、図２９のフローチャートを参照して、このチャネル別符号抽出部５３によるチャネル別符号の抽出に係る処理の流れを詳細に説明する。
【０１７８】
さて、本処理に入ると、先ずチャネル別符号抽出部５３はヘッダ・チャンクの符号を抽出する（ステップＳ１６０）。以降、各符号を抽出する。
【０１７９】
先ず、チャネル別符号抽出部５３は、Δタイム符号を抽出する（ステップＳ１６１）。即ち、図３０のフローチャートに詳細に示されるように、先ずチャネル別符号抽出部５３は、トラック番号に係る変数Ｉに０を代入した後（ステップＳ１７０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ１７１）。１巡面では、上記ステップＳ１７０でＩ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ１７１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ１７２）。
【０１８０】
続いて、チャネル別符号抽出部５３は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ１７３）。
【０１８１】
１巡面では、上記ステップＳ１７２でＪ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ１７３よりＹｅｓ側に進み、Δタイム符号［０］［０］を抽出した後（ステップＳ１７４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とする（ステップＳ１７５）。この第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、以降、チャネル別符号抽出部５３は、上記ステップＳ１７３乃至Ｓ１７５の処理を繰り返し、Δタイム符号［０］［１］、Δタイム符号［０］［２］、…、Δタイム符号［０］［１５］を順次抽出する。
【０１８２】
そして、チャネル別符号抽出部５３は、Δタイム符号［０］［１５］を抽出した後、ステップＳ１７３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントした後、上記ステップＳ１７１乃至Ｓ１７５の処理を繰り返し、Δタイム符号［１］［１］、Δタイム符号［１］［２］、…、Δタイム符号［１］［１５］を順次抽出する。
【０１８３】
ところで、この第１の実施の形態では、先に図３で示したようにトラック数Ｍにｍ＋１が設定されていることを想定している。
【０１８４】
よって、チャネル別符号抽出部５３は、上記ステップＳ１７１乃至Ｓ１７５の処理を繰り返し、最終的にトラックｍデータに係るΔタイム符号［ｍ］［１］、Δタイム符号［ｍ］［２］、…、Δタイム符号［ｍ］［１５］を順次抽出すると、このΔタイム符号抽出処理を終了し、図２９のステップＳ１６１にリターンする。
【０１８５】
続いて、チャネル別符号抽出部５３はＮｏｔｅ　Ｏｎ音程符号を抽出する（ステップＳ１６２）。即ち、図３１のフローチャートに詳細に示されるように、チャネル別符号抽出部５３は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ１８０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ１８１）。先ず、１巡面では、上記ステップＳ１８０でＩ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ１８１よりＹｅｓ側に進み、次いでチャネル番号に係るＪに０を代入する（ステップＳ１８２）。
【０１８６】
続いて、チャネル別符号抽出部５３は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ１８３）。
【０１８７】
１巡面では、上記ステップＳ１８２でＪ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ１８３よりＹｅｓ側に進み、Ｎｏｔｅ　Ｏｎ音程符号［０］［０］を抽出した後（ステップＳ１８４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とすることとしている（ステップＳ１８５）。
【０１８８】
この第１の実施の形態では、最大チャネル数ＭＡＸ＿ＣＨに１６が予め設定されているので、以降、チャネル別符号抽出部５３は、ステップＳ１８３乃至Ｓ１８５の処理を繰り返し、Ｎｏｔｅ　Ｏｎ音程符号［０］［１］、Ｎｏｔｅ　Ｏｎ音程符号［０］［２］、…、Ｎｏｔｅ　Ｏｎ音程符号［０］［１５］を順次抽出する。チャネル別符号抽出部５３は、このＮｏｔｅ　Ｏｎ音程符号［０］［１５］を抽出した後は、ステップＳ１８３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ１８１乃至Ｓ１８５の処理を繰り返し、続いてＮｏｔｅ　Ｏｎ音程符号［１］［１］、Ｎｏｔｅ　Ｏｎ音程符号［１］［２］、…、Ｎｏｔｅ　Ｏｎ音程符号［１］［１５］を順次抽出する。
【０１８９】
ところで、この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、このチャネル別符号抽出部５３は、上記ステップＳ１８１乃至Ｓ１８５の処理を繰り返し、最終的にトラックｍデータに係るＮｏｔｅ　Ｏｎ音程符号［ｍ］［１］、Ｎｏｔｅ　Ｏｎ音程符号［ｍ］［２］、…、Ｎｏｔｅ　Ｏｎ音程符号［ｍ］［１５］を順次抽出すると、このＮｏｔｅ　Ｏｎ音程符号抽出処理を終了し、図２９のステップＳ１６２にリターンする。
【０１９０】
続いて、チャネル別符号抽出部５３は、Ｎｏｔｅ　Ｏｆｆ音程符号を抽出する（ステップＳ１６３）。即ち、図３２のフローチャートに詳細に示されるように、チャネル別符号抽出部５３は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ１９０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ１９１）。１巡面では、ステップＳ１９０でＩ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ１９１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ１９２）。
【０１９１】
続いて、チャネル別符号抽出部５３は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ１９３）。
【０１９２】
１巡面では、上記ステップＳ１９２でＪ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ１９３よりＹｅｓ側に進み、Ｎｏｔｅ　Ｏｆｆ音程符号［０］［０］を抽出した後（ステップＳ１９４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とすることになる（ステップＳ１９５）。
【０１９３】
この第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、チャネル別符号抽出部５３は、これ以降、上記ステップＳ１９３乃至Ｓ１９５の処理を繰り返し、Ｎｏｔｅ　Ｏｆｆ音程符号［０］［１］、Ｎｏｔｅ　Ｏｆｆ音程符号［０］［２］、…、Ｎｏｔｅ　Ｏｆｆ音程符号［０］［１５］を順次抽出する。
【０１９４】
そして、チャネル別符号抽出部５３は、このＮｏｔｅ　Ｏｆｆ音程符号［０］［１５］を抽出した後は、ステップＳ１９３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ１９１乃至Ｓ１９５の処理を繰り返し、続いてＮｏｔｅ　Ｏｆｆ音程符号［１］［１］、Ｎｏｔｅ　Ｏｆｆ音程符号［１］［２］、…、Ｎｏｔｅ　Ｏｆｆ音程符号［１］［１５］を順次抽出する。
【０１９５】
ところで、この第１の実施の形態では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、このチャネル別符号抽出部５３は、上記ステップＳ１９１乃至Ｓ１９５の処理を繰り返し、最終的にトラックｍデータに係るＮｏｔｅ　Ｏｆｆ音程符号［ｍ］［１］、Ｎｏｔｅ　Ｏｆｆ音程符号［ｍ］［２］、…、Ｎｏｔｅ　Ｏｆｆ音程符号［ｍ］［１５］を順次抽出すると、このＮｏｔｅ　Ｏｆｆ音程符号抽出処理を終了し、図２９のステップＳ１６３にリターンする。
【０１９６】
続いて、チャネル別符号抽出部５３は、ベロシティ値符号を抽出する（ステップＳ１６４）。即ち、図３３のフローチャートに詳細に示されるように、チャネル別符号抽出部５３は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ２００）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ２０１）。先ず、１巡面では、上記ステップＳ２００でＩ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ２０１よりＹｅｓに進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ２０２）。
【０１９７】
続いて、チャネル別符号抽出部５３は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ２０３）。
【０１９８】
そして、１巡面では、ステップＳ２０２でＪ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ２０３よりＹｅｓ側に進み、ベロシティ値符号［０］［０］を抽出した後（ステップＳ２０４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とすることになる（ステップＳ２０５）。
【０１９９】
この第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、チャネル別符号抽出部５３は、これ以降、上記ステップＳ２０３乃至Ｓ２０５の処理を繰り返し、ベロシティ値符号［０］［１］、ベロシティ値符号［０］［２］、…、ベロシティ値符号［０］［１５］を順次抽出する。
【０２００】
そして、チャネル別符号抽出部５３は、ベロシティ値符号［０］［１５］を抽出した後は、ステップＳ２０３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ２０１乃至Ｓ２０５の処理を繰り返し、続いてベロシティ値符号［１］［１］、ベロシティ値符号［１］［２］、…、ベロシティ値符号［１］［１５］を順次抽出することになる。
【０２０１】
ところで、この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、このチャネル別符号抽出部５３は、上記ステップＳ２０１乃至Ｓ２０５の処理を繰り返し、最終的にトラックｍデータに係るベロシティ値符号［ｍ］［１］、ベロシティ値符号［ｍ］［２］、…、ベロシティ値符号［ｍ］［１５］を順次抽出すると、このベロシティ値符号抽出処理を終了し、図２９のステップＳ１６４にリターンする。
【０２０２】
そして、続いて差分ベンド値符号の抽出がなされる（ステップＳ１６５）。
【０２０３】
即ち、図３４のフローチャートに詳細に示されるように、チャネル別符号抽出部５３は、トラック番号に係る変数Ｉに０を代入した後（ステップＳ２１０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ２１１）。
【０２０４】
１巡面では、上記ステップＳ２１０でＩ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ２１１よりＹｅｓ側に進み、次いでチャネル番号に係るＪに０を代入する（ステップＳ２１２）。続いて、チャネル別符号抽出部５３は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ２１３）。１巡面では、上記ステップＳ２１２でＪ＝０と設定されているので、チャネル別符号抽出部５３はステップＳ２１３よりＹｅｓ側に進み、差分ベンド値符号［０］［０］を抽出した後（ステップＳ２１４）、チャネル番号に係る変数Ｊを１つインクリメントする（ステップＳ２１５）。
【０２０５】
この第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、チャネル別符号抽出部５３は、これ以降、上記ステップＳ２１３乃至Ｓ２１５の処理を繰り返して、差分ベンド値符号［０］［１］、差分ベンド値符号［０］［２］、…、差分ベンド値符号［０］［１５］を順次抽出する。
【０２０６】
そして、チャネル別符号抽出部５３は、差分ベンド値符号［０］［１５］を抽出した後は、ステップＳ２１３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ２１１乃至Ｓ２１５の処理を繰り返し、続いて差分ベンド値符号［１］［１］、差分ベンド値符号［１］［２］、…、差分ベンド値符号［１］［１５］を順次抽出することになる。
【０２０７】
ところで、この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、このチャネル別符号抽出部５３は、上記ステップＳ２１１乃至Ｓ２１５の処理を繰り返し、最終的にトラックｍデータに係る差分ベンド値符号［ｍ］［１］、差分ベンド値符号［ｍ］［２］、…、差分ベンド値符号［ｍ］［１５］を順次抽出すると、この差分ベンド値符号抽出処理を終了し、図２９のステップＳ１６５にリターンする。
【０２０８】
続いて、チャネル別符号抽出部５３は、差分エクスプレッション値符号を抽出する（ステップＳ１６６）。即ち、図３５のフローチャートに詳細に示されるように、このチャネル別符号抽出部５３は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ２２０）、このＩがトラック数Ｍよりも小さいか否かを判断する（ステップＳ２２１）。１巡面では、上記ステップＳ２２０でＩ＝０と設定されているので、チャネル別符号抽出部５３はステップＳ２２１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ２２２）。
【０２０９】
続いて、チャネル別符号抽出部５３は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ２２３）。
【０２１０】
１巡面では、上記ステップＳ２２２でＪ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ２２３よりＹｅｓ側に進み、差分エクスプレッション値符号［０］［０］を抽出した後（ステップＳ２２４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とする（ステップＳ２２５）。
【０２１１】
この第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、チャネル別符号抽出部５３は、これ以降、上記ステップＳ２２３乃至Ｓ２２５の処理を繰り返し、差分エクスプレッション値符号［０］［１］、差分エクスプレッション値符号［０］［２］、…、差分エクスプレッション値符号［０］［１５］を順次抽出することになる。そして、チャネル別符号抽出部５３は、差分エクスプレッション値符号［０］［１５］を抽出した後は、ステップＳ１２３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ２２１乃至Ｓ２２５の処理を繰り返して、続いて差分エクスプレッション値符号［１］［１］、差分エクスプレッション値符号［１］［２］、…、差分エクスプレッション値符号［１］［１５］を順次抽出することになる。この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。
【０２１２】
よって、チャネル別符号抽出部５３は、上記ステップＳ２２１乃至Ｓ２２５の処理を繰り返し、最終的にトラックｍデータに係る差分エクスプレッション値符号［ｍ］［１］、差分エクスプレッション値符号［ｍ］［２］、…、差分エクスプレッション値符号［ｍ］［１５］が順次抽出すると、差分エクスプレッション値符号抽出処理を終了し、図２９のステップＳ１６６にリターンする。
【０２１３】
続いて、チャネル別符号抽出部５３は、イベント種別識別符号を抽出する（ステップＳ１６７）。即ち、図３６のフローチャートに詳細に示されるように、チャネル別符号抽出部５３は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ２３０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ２３１）。先ず、１巡面では、上記ステップＳ２３０でＩ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ２３１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ２３２）。
【０２１４】
続いて、チャネル別符号抽出部５３は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ２３３）。
【０２１５】
そして、１巡面では、ステップＳ２３２でＪ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ２３３よりＹｅｓ側に進み、イベント種別識別符号［０］［０］を抽出した後（ステップＳ２２４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とする（ステップＳ２３５）。
【０２１６】
この第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、チャネル別符号抽出部５３は、以降、ステップＳ２３３乃至Ｓ２３５の処理を繰り返し、イベント種別識別符号［０］［１］、イベント種別識別符号［０］［２］、…、イベント種別識別符号［０］［１５］を順次抽出する。
【０２１７】
そして、チャネル別符号抽出部５３は、このイベント種別識別符号［０］［１５］を抽出した後は、ステップＳ２３３よりＮｏ側に進み、トラック番号に係るＩを１つインクリメントしてＩ＝１とした後に、再びステップＳ２３１乃至Ｓ２３５の処理を繰り返し、続いてイベント種別識別符号［１］［１］、イベント種別識別符号［１］［２］、…、イベント種別識別符号［１］［１５］を順次抽出する。
【０２１８】
ところで、この第１の実施の形態では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、このチャネル別符号抽出部５３は、上記ステップＳ２３１乃至Ｓ２３５の処理を繰り返し、最終的にトラックｍデータに係るイベント種別識別符号［ｍ］［１］、イベント種別識別符号［ｍ］［２］、…、イベント種別識別符号［ｍ］［１５］を順次抽出すると、イベント種別識別符号抽出処理を終了し、図２９のステップＳ１６７にリターンする。
【０２１９】
続いて、チャネル別符号抽出部５３は、チャネル番号符号を抽出する（ステップＳ１６８）。即ち、図３７のフローチャートに詳細に示されるように、チャネル別符号抽出部５３は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ２４０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ２４１）。そして、１巡面では、上記ステップＳ２４０でＩ＝０と設定されているので、このチャネル別符号抽出部５３は、ステップＳ２４１よりＹｅｓに分岐し、チャネル番号符号［０］を抽出した後（ステップＳ２４２）、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とする（ステップＳ２４３）。
【０２２０】
そして、チャネル別符号抽出部５３は、再びステップＳ２４１乃至Ｓ２４３の処理を繰り返し、続いてチャネル番号符号符号［１］を抽出する。
【０２２１】
この例では、先に図３で示したようにトラック数Ｍにｍ＋１が設定されていることを想定している。よって、チャネル別符号抽出部５３は、上記ステップＳ２４１乃至Ｓ２４３の処理を繰り返し、最終的にトラックｍデータに係るチャネル番号符号符号［ｍ］を抽出すると、このチャネル番号符号抽出処理を終了し、図２９のステップＳ１６８にリターンすることになる。
【０２２２】
続いて、チャネル別符号抽出部５３は、その他情報符号を抽出する（ステップＳ１６９）。即ち、図３８のフローチャートに詳細に示されるように、チャネル別符号抽出部５３は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ２５０）、このＩがトラック数Ｍよりも小さいか否かを判断する（ステップＳ２５１）。１巡面では、上記ステップＳ２５０でＩ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ２５１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ２５２）。
【０２２３】
続いて、チャネル別符号抽出部５３は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ２５３）。
【０２２４】
そして、１巡面では、ステップＳ２５２でＪ＝０と設定されているので、チャネル別符号抽出部５３は、ステップＳ２５３よりＹｅｓ側に進み、その他情報符号［０］［０］を抽出した後（ステップＳ２５４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とする（ステップＳ２５５）。
【０２２５】
この第１の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに１６が予め設定されているので、チャネル別符号抽出部５３は、以降、ステップＳ２５３乃至Ｓ２５５の処理を繰り返し、その他情報符号［０］［１］、その他情報符号［０］［２］、…、その他情報符号［０］［１５］を順次配置することになる。
【０２２６】
そして、このチャネル別符号抽出部５３は、その他情報符号［０］［１５］を抽出した後は、ステップＳ２５３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントした後、再びステップＳ２５１乃至Ｓ２５５の処理を繰り返し、続いてその他情報符号［１］［１］、その他情報符号［１］［２］、…、その他情報符号［１］［１５］を順次抽出することになる。ところで、この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。
【０２２７】
よって、チャネル別符号抽出部５３は、上記ステップＳ２５１乃至Ｓ２５５の処理を繰り返し、最終的にトラックｍデータに係るその他情報符号［ｍ］［１］、その他情報符号［ｍ］［２］、…、その他情報符号［ｍ］［１５］を順次抽出すると、その他情報符号抽出処理を終了し、こうして、チャネル別符号抽出部５３によるチャネル別の符号抽出に係る一連の処理を終了する。以上の処理により、単一チャネルからなる符号群（各符号群は、Δタイム符号、Ｎｏｔｅ　Ｏｎ音程符号、Ｎｏｔｅ　Ｏｆｆ音程符号、ベロシティ値符号、差分ベンド値符号、差分エクスプレッション値符号、イベント種別識別符号、その他情報符号をそれぞれ含む）が抽出される。
【０２２８】
次に、トラック復号部５４の詳細な構成は、図３９に示される通りである。
【０２２９】
このトラック符号部５４は、Δタイム符号復号部６０、Ｎｏｔｅ　Ｏｎ音程符号復号部６１、Ｎｏｔｅ　Ｏｆｆ音程符号復号部６２、ベロシティ値符号復号部６３、差分ベンド値符号復号部６４、差分エクスプレッション値符号復号部６５、イベント種別識別符号復号部６６、その他情報符号復号部６７、そしてイベント書き出し部６８を有している。これら各部６０乃至６７は、各符号を復号し、イベント書き出し部６８により当該各符号についてイベントの書き出しを実行し、こうして単一のチャネルからなるトラックデータ６９を生成する。
【０２３０】
以下、図４０のフローチャートを参照して、このトラック復号部５４によるトラック復号に係る処理の流れを詳細に説明する。
【０２３１】
この処理を開始すると、トラック復号部５４は、先ずトラック番号に係る変数Ｉに０を代入し（ステップＳ２６０）、このトラック番号に係る変数Ｉとトラック数Ｍとを比較する（ステップＳ２６１）。そして、トラック復号部５４は、Ｉ＜Ｍの関係が成立するものと判断すると、チャネル番号に係る変数Ｊに０を代入した後（ステップＳ２６２）、当該チャネル番号に係るＪが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ２６３）。
【０２３２】
そして、一巡目では、先にステップＳ２６２において、Ｊ＝０とされているので、トラック復号部５４は、Ｊ＜ＭＡＸ＿ＣＨの関係を満たすものと判断し、Ｔｒａｃｋ［０］［０］にストアされているチャネル０のみのトラック０データについて、復号を実行する（ステップＳ２６５）。そして、トラック復号部５４は、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とした後、上記ステップＳ２６３乃至２６６の処理を繰り返すことになる（ステップＳ２６６）。
【０２３３】
この第１の実施の形態では、ＭＡＸ＿ＣＨ＝１６と予め定められているので、このトラック復号部５４は、Ｔｒａｃｋ［０］［０］、Ｔｒａｃｋ［０］［１］、…、Ｔｒａｃｋ［０］［１５］に格納されている、チャネル０のみのトラック０データ、チャネル１のみのトラック０データ、…、チャネル１５のみのトラック０データの夫々を復号する。次いで、トラック復号部５４は、トラック番号Ｉを１つインクリメントした後、Ｔｒａｃｋ［１］［０］、Ｔｒａｃｋ［１］［１］、…、Ｔｒａｃｋ［１］［１５］に格納されている、チャネル０のみのトラック１データ、チャネル１のみのトラック１データ、…、チャネル１５のみのトラック１データを順次復号することになる（ステップＳ２６１乃至Ｓ２６６）。
【０２３４】
これ以降、トラック復号部５４は、Ｔｒａｃｋ［ｍ］［０］、Ｔｒａｃｋ［ｍ］［１］、…、Ｔｒａｃｋ［ｍ］［１５］に格納されている、チャネル０のみのトラックｍデータ、チャネル１のみのトラックｍデータ、…、チャネル１５のみのトラックｍデータについてまで復号すると（ステップＳ２６１乃至Ｓ２６６）、本処理を終了する。
【０２３５】
ここで、図４１のフローチャートを参照して、図４０のステップＳ２６５においてトラック復号部５４がなすＴｒａｃｋ［Ｉ］［Ｊ］の復号に係る処理について更に詳述する。即ち、この処理を開始すると、トラック復号部５４は、先ずΔタイム符号［Ｉ］［Ｊ］に符号が存在するか否かを判断する（ステップＳ２７０）。
【０２３６】
このステップＳ２７０において、トラック復号部５４は、Δタイム符号［Ｉ］［Ｊ］に符号が存在すると判断した場合には、Δタイム符号［Ｉ］［Ｊ］からΔタイムを読み出し、変数Ｄｅｌｔａにストアし（ステップＳ２７１）、変数Ｅｖｅｎｔをクリアした後（ステップＳ２７２）、詳細は後述するイベント種別毎の復号を実行する（ステップＳ２７３）。こうして、トラック復号部５４は、Ｔｒａｃｋ［Ｉ］［Ｊ］の末尾に変数Ｄｅｌｔａに係るΔタイム、変数Ｅｖｅｎｔに係るイベントを、この順に付加し、上記ステップＳ２７０に戻ることになる（ステップＳ２７４）。
【０２３７】
トラック復号部５４は、以上の処理を、デルタタイム符号［Ｉ］［Ｊ］に符号が存在している限りにおいて繰り返し、全ての符号について復号すると、ステップＳ２７０よりＮｏ側に進み、この処理を終了する。
【０２３８】
次に、図４２のフローチャートを参照して、図４１のステップＳ２７３においてトラック復号部５４がなすイベント種別毎の復号に係る処理について更に詳述する。即ち、この処理を開始すると、トラック復号部５４は、変数ＤｅｌｔａにストアされているΔタイムよりイベントの種別を判断する（ステップＳ２８０）。
【０２３９】
前述したように、第１の実施の形態では、Δタイムの先頭バイトの情報によって、イベントの種別を識別することができる。より詳細には、この例では、イベントタイプを３種類、即ちノートオン（タイプ１）、ノートオフ（タイプ２）、その他（タイプ３）のイベントとして識別することができる。
【０２４０】
上記ステップＳ２８０において、トラック復号部５４は、イベントがタイプ１即ちＮｏｔｅ　Ｏｎであると判断した場合には、Ｎｏｔｅ　Ｏｎステータスバイト（この例では、下位４ビットにはＪが代入される）を生成して変数Ｅｖｅｎｔの末尾に付加し（ステップＳ２８１）、Ｎｏｔｅ　Ｏｎ音程符号［Ｉ］［Ｊ］から１バイトの符号を読み出して変数Ｅｖｅｎｔの末尾に付加し（ステップＳ２８２）、ベロシティ値符号［Ｉ］［Ｊ］から１バイトの符号を読み出して変数Ｅｖｅｎｔの末尾に付加する（ステップＳ２８３）。
【０２４１】
一方、上記ステップＳ２８０において、トラック復号部５４は、イベントがタイプ２、即ちＮｏｔｅ　Ｏｆｆであると判断した場合には、Ｎｏｔｅ　Ｏｆｆステータスバイト（この例では、下位４ビットにはＪが代入される）を生成して変数Ｅｖｅｎｔの末尾に付加し（ステップＳ２８４）、更にＮｏｔｅ　Ｏｎ音程符号［Ｉ］［Ｊ］から１バイトの符号を読み出して変数Ｅｖｅｎｔの末尾に付加し（ステップＳ２８５）、一般的なＮｏｔｅ　Ｏｆｆベロシティ値の符号を変数Ｅｖｅｎｔの末尾に付加する（ステップＳ２８６）。
【０２４２】
一方、上記ステップＳ２８０において、トラック復号部５４は、イベントがタイプ３、即ちその他のイベントであると判断した場合には、イベント種別識別符号［Ｉ］［Ｊ］から１符号を順次読み込み（ステップＳ２８７）、続いて、イベントがチャネルに属するものであるか否かを判断する（ステップＳ２８８）。
【０２４３】
ここで、イベントがチャネルに属するものであると判断した場合には、トラック復号部５４は、イベントに応じてステータスバイト（下位４ビットにはＪが代入される）を生成して変数Ｅｖｅｎｔの末尾に付加する（ステップＳ２８９）。
【０２４４】
続いて、トラック復号部５４は、イベント種別識別符号が０ｘ０４（図２１参照）であるか否かを判断する（ステップＳ２９０）。このステップＳ２９０にて、トラック復号部５４は、イベント種別識別符号が０ｘ０４であると判断した場合、図２１のテーブルより、イベントがピッチベンドチェンジであることが判るので、差分ベンド値符号［Ｉ］［Ｊ］より２バイトの符号を読み出し、直前のベンド値に加えたベンド値を変数Ｅｖｅｎｔの末尾に付加する（ステップＳ２９１）。
【０２４５】
一方、上記ステップＳ２９０において、トラック復号部５４は、イベント種別識別符号が０ｘ０４（図２１参照）でないと判断した場合には、次いで０ｘ０８（図２１参照）以上であるか否かを判断する（ステップＳ２９２）。
【０２４６】
そして、このステップＳ２９２において、トラック復号部５４は、イベント種別識別符号が０ｘ０８以上であると判断した場合には、コントロールチェンジ番号が省略されたコントロールチェンジに係るイベントであることが図２１のテーブルより認識されるので、コントロールチェンジ番号を生成し、変数Ｅｖｅｎｔの末尾に付加する（ステップＳ２９３）。
【０２４７】
次いで、トラック復号部５４は、イベント種別識別符号が０ｘ０８（図２１参照）であるか否かを判断することとしている（ステップＳ２９４）。
【０２４８】
このステップＳ２９４において、０ｘ０８であると判断した場合には、図２１のテーブルより当該イベントがエクスプレッションであることが判るので、差分エクスプレッション値符号［Ｉ］［Ｊ］から１バイトの符号を読み出し、直前のエクスプレッション値に加えたエクスプレッション値を変数Ｅｖｅｎｔの末尾に付加する（ステップＳ２９５）。一方、上記ステップＳ２９２でイベント種別識別符号が０ｘ０８以上でないと判断した場合、及び上記ステップＳ２９４で０ｘ０８でないと判断した場合には、トラック復号部５４は、冒頭で説明したようなＳＭＦのフォーマットに従って、イベントが完成するまで、その他情報符号［Ｉ］［Ｊ］から符号を順次読み出し、変数Ｅｖｅｎｔの末尾に付加する（ステップＳ２９７）。
【０２４９】
一方、上記ステップＳ２８８において、トラック復号部５４は、イベントがチャネルに属しないものであると判断した場合には、イベントに応じたステータスバイトを生成してＥｖｅｎｔの末尾に付加し（ステップ２９６）、上記ステップＳ２９７に移行することになる。こうして、トラック復号部５４は、イベント種別毎の復号に係る一連の処理を終了することになる。
【０２５０】
次に、トラックマージ及びチャネル番号符号復号部５５の詳細な構成は、図４３に示される通りである。同図に示されるように、トラックマージ部５５ａとチャネル番号符号復号部５５ｂからなる。そして、かかる構成の下、トラックマージ及びチャネル番号符号復号部５５に、チャネル０のみのトラックｘデータ、チャネル１のみのトラックｘデータ、…、チャネルｎのみのトラックｘデータ、及びチャネル番号符号Ｘが入力されると、チャネル番号符号復号部５５ｂはチャネル番号符号１３を復号する。そして、トラックマージ部５５ａは当該チャネル番号符号を加味しつつ、トラックｘデータ１１−ｘを復号する。このとき、チャネルに属しないイベントについては、符号化の説明にあるように所定のチャネル（ＳＭＦはチャネル０、後述する第２の実施の形態に係るＳＭＦの改良フォーマットはイベントクラスによりチャネル０〜３）に属するイベントとして格納されているので、通常のチャネルに属するイベントと同様に復号する。
【０２５１】
以下、図４４のフローチャートを参照しつつ、トラックマージ及びチャネル番号符号復号部５５による復号に係る処理の流れを説明する。
【０２５２】
本処理を開始すると、トラックマージ及びチャネル番号符号復号部５５は、先ずトラック番号に係るＩに０を代入し（ステップＳ３００）、このトラック番号に係る変数Ｉとトラック数Ｍとを比較する（ステップＳ３０１）。
【０２５３】
そして、トラックマージ及びチャネル番号符号復号部５５は、Ｉ＜Ｍの関係が成立すると判断すると、変数ＭａｓｔｅｒＴｉｃｋとチャネル番号に係る変数Ｊに０が代入される（ステップＳ３０２）。この変数ＭａｓｔｅｒＴｉｃｋは、複合化時のトラック復元においては復元後の複数チャネルに属するイベント群が格納されるトラックの現在複合化位置における経過時間（ティック）を意味するものである。
【０２５４】
続いて、トラックマージ及びチャネル番号符号復号部５５は、当該チャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断することとしている（ステップＳ３０３）。１巡目では、ステップＳ３０２においてＪ＝０とされているので、トラックマージ及びチャネル番号符号復号部５５は、Ｊ＜ＭＡＸ＿ＣＨの関係を満たすものと判断し、Ｔｉｃｋ［０］を０とし、更にチャネル番号に係る変数ＪをインクリメントしてＪ＝１とした後に（ステップＳ３０４）、上記ステップＳ３０３に戻る。このＴｉｃｋ［ｘ］は、チャネルＪに属するイベントが格納されるトラックの現在パース位置における経過時間を意味する。各トラックは、それぞれ独立した時間軸を持っているので、このような配列が必要となる。
【０２５５】
この例では、ＭＡＸ＿ＣＨ＝１６と予め定められているので、トラックマージ及びチャネル番号符号復号部５５は、Ｔｉｃｋ［０］、Ｔｉｃｋ［１］、…、Ｔｉｃｋ［１５］について上記処理を実行する。この処理の後、トラックマージ及びチャネル番号符号復号部５５は、詳細は後述するトラックマージの処理をなし（ステップＳ３０５）、変数Ｉを１つインクリメントしてＩ＝１とし（ステップＳ３０６）、上記ステップＳ３０１乃至Ｓ３０６の処理を繰り返し、こうして、トラック１データ、トラック２データ、…、トラックｘ、…、トラックｍデータを復号する。
【０２５６】
ここで、図４５のフローチャートを参照しつつ、図４４のステップＳ３０５でトラックマージ及びチャネル番号符号復号部５５（トラックマージ部５５ａ，チャネル番号符号復号部５５ｂを含む）によるトラックマージに係る処理について更に詳述する。この処理を開始すると、トラックマージ及びチャネル番号符号復号部５５は、この処理で使用される各変数ＮｅｘｔＴｉｃｋ、ＥｘｉｓｔＳａｍｅＴｉｍｅＥｖｅｎｔ、変数Ｊを初期化した後（ステップＳ３１０）、この変数Ｊを最大チャネル数ＭＡＸ＿ＣＨと比較する（ステップＳ３１１）。１巡目では、ステップＳ３１０において変数Ｊに０が設定されているので、このトラックマージ及びチャネル番号符号復号部５５は、このステップＳ３１１よりＹｅｓ側に進み、続いて、Ｔｒａｃｋ［Ｉ］［０］の読み込みが終了しているか否かを判断することになる（ステップＳ３１２）。
【０２５７】
ここでは、Ｔｒａｃｋ［Ｉ］［０］の読み込みは終了していないので、トラックマージ及びチャネル番号符号復号部５５は、ステップＳ３１２よりＮｏ側に進み、読出位置を進めずにＴｒａｃｋ［Ｉ］［０］のトラックデータからΔタイムを読み出し、変数Ｄｅｌｔａに格納する（ステップＳ３１３）。続いて、トラックマージ及びチャネル番号符号復号部５５は、ＮｅｘｔＴｉｃｋ＝Ｔｉｃｋ［Ｊ］＋Ｄｅｌｔａであるか否かを判断し（ステップＳ３１４）、ＮｅｘｔＴｉｃｋ＝Ｔｉｃｋ［Ｊ］＋Ｄｅｌｔａである場合にはＥｘｉｓｔＳａｍｅＴｉｍｅＥｖｅｎｔ＝１に設定し（ステップＳ３１５）、ＮｅｘｔＴｉｃｋ＝Ｔｉｃｋ［Ｊ］＋Ｄｅｌｔａでない場合には、ＮｅｘｔＴｉｃｋ＞Ｔｉｃｋ［Ｊ］＋Ｄｅｌｔａであるか否かを判断する（ステップＳ３１６）。
【０２５８】
この関係が成立する場合には、トラックマージ及びチャネル番号符号復号部５５は、ＮｅｘｔＴｉｃｋ＝Ｔｉｃｋ［Ｊ］＋Ｄｅｌｔａ、ＥｘｉｓｔＳａｍｅＴｉｍｅＥｖｅｎｔ＝０、Ｃｈ＝Ｊに設定した後（ステップＳ３１７）、変数Ｊを１つインクリメントしてＪ＝１とする（ステップＳ３１８）。そして、トラックマージ及びチャネル番号符号復号部５５は、上記ステップＳ３１１乃至Ｓ３１８の処理を、Ｔｒａｃｋ［Ｉ］［０］、Ｔｒａｃｋ［Ｉ］［１］、…、Ｔｒａｃｋ［Ｉ］［１５］について繰り返すこととなる。
【０２５９】
上記ステップＳ３１１をＮｏ側に進むと、トラックマージ及びチャネル番号符号復号部５５は、ＮｅｘｔＴｉｃｋ＝０ｘｆｆｆｆｆｆｆｆであるか否かを判断し（ステップＳ３１９）、ＮｅｘｔＴｉｃｋ＝０ｘｆｆｆｆｆｆｆｆの関係が成立しないものと判断した場合には、ＥｘｉｓｔＳａｍｅＴｉｍｅＥｖｅｎｔ＝１であるか否かを判断する（ステップＳ３２０）。
【０２６０】
そして、上記ステップＳ３２０において、トラックマージ及びチャネル番号符号復号部５５は、ＥｘｉｓｔＳａｍｅＴｉｍｅＥｖｅｎｔ＝１であると判断した場合には、チャネル番号符号［Ｉ］から１符号を読み出し、Ｃｈに代入し（ステップＳ３２１）、更にＴｒａｃｋ［Ｉ］［Ｃｈ］からＤｅｌｔａにΔタイム、Ｅｖｅｎｔにイベントを読み込む（ステップＳ３２２）。一方、ステップＳ３２０において、トラックマージ及びチャネル番号符号復号部５５は、ＥｘｉｓｔＳａｍｅＴｉｍｅＥｖｅｎｔ＝０であると判断した場合、Ｔｒａｃｋ［Ｉ］［Ｃｈ］からＤｅｌｔａにΔタイム、Ｅｖｅｎｔにイベントを読み込み（ステップＳ３２３）、読出位置を進めずにＴｒａｃｋ［Ｉ］［Ｃｈ］からＭｄｅｌｔａに次のΔタイムを読み込み（ステップＳ３２４）、Ｍｄｅｌｔａ＝０であるか否かを判断する（ステップＳ３２５）。
【０２６１】
そして、ここで、Ｍｄｅｌｔａ＝０である場合には、トラックマージ及びチャネル番号符号復号部５５は、チャネル番号符号［Ｉ］［Ｊ］から１符号を空読みする（ステップＳ３２６）。次いで、トラックマージ及びチャネル番号符号復号部５５は、イベントを読み込んだチャネルのトラックデータに係るＴｉｃｋを更新し、符号化するΔタイムを算出してＭｄｅｌｔａに代入し、更にＭａｓｔｅｒＴｉｃｋを更新する（ステップＳ３２７）。そして、Ｔｒａｃｋ［Ｉ］の末尾にＭｄｅｌｔａに代入したΔタイム及びＥｖｅｎｔに代入したイベントを付加し（ステップＳ３２８）、上記ステップＳ３１０に戻り、上記処理を繰り返すことになる。そして、上記ステップＳ３１９において、トラックマージ及びチャネル番号符号復号部５５は、ＮｅｘｔＴｉｃｋ＝０ｘｆｆｆｆｆｆｆｆの関係が成立するものと判断すると、この処理を終了する。こうして、トラック毎のトラック０データ、トラック１データ、・・・、トラックｍデータが生成される。
【０２６２】
これらは、トラック配置部５６に入力され、当該トラック配置部５６にてトラック配置され、こうして楽曲ファイル４に復号されることになる。
【０２６３】
以下、図４７のフローチャートを参照して、トラック配置部５６によるトラック配置に係る処理を詳細に説明する。即ち、この処理を開始すると、トラック配置部５６は、先ずヘッダ・チャンクを配置し（ステップＳ３５０）、続いてトラック番号に係るＩが０を初期化し（ステップＳ３５１）、このトラック番号に係る変数Ｉとトラック数Ｍとを比較する（ステップＳ３５２）。そして、トラック配置部５６は、Ｉ＜Ｍの関係が成立する場合には、Ｔｒａｃｋ［０］に格納されているトラック０データを配置し（ステップＳ３５３）、トラック番号に係るＩをインクリメントしてＩ＝１とした後、上記ステップＳ３５２乃至３５４の処理を繰り返す。
【０２６４】
この第１の実施の形態では、図４６との関係では、Ｍ＝ｍ＋１であるので、トラック配置部５６は、Ｔｒａｃｋ［０］、Ｔｒａｃｋ［１］、…、Ｔｒａｃｋ［ｍ］に格納されている、トラック０データ、トラック１データ、…、トラックｍデータについてまで配置を行うと（ステップＳ３５２乃至Ｓ３５４）、こうして本処理を終了する。
【０２６５】
以上説明したような一連の処理により、２次符号６から２次符号復号部５１により１次符号５が復号され、当該１次符号５から１次符号復号部５２により楽曲ファイル４が復号される。こうして復号された楽曲ファイル４は、各演奏情報の順番が入れ替わることもなく、完全に元の演奏情報と一致する。
【０２６６】
以上説明したように、本発明の第１の実施の形態に係る演奏情報圧縮装置、演奏情報圧縮方法、演奏情報圧縮プログラム、演奏情報復号装置、演奏情報復号方法、演奏情報復号プログラムでは、以下の効果が奏される。
【０２６７】
即ち、演奏情報圧縮装置等では、１次符号生成部２による処理により，楽曲ファイル４（ＳＭＦ）の無駄が省かれ、しかも楽曲ファイル４（ＳＭＦ）の演奏情報を損なうことなく、圧縮されたデータ量とした１次符号５を生成することを実現している。更に、この１次符号５を、ＳＭＦに比して同一データパターンの出現頻度が高く、同一データパターンがより近い距離に記録され、更に同一の符号バイトがより近い位置にまとめられるようにすることで、２次符号生成部３における汎用圧縮方式による圧縮効率を向上させている。
【０２６８】
この効果は、演奏情報復号装置等においても、１次符号復号部５２、２次符号復号部５１にて、同様に奏される。しかも、１次符号化時に各演奏情報を時間的に独立させつつ、当該各演奏情報の順番に係る情報を保存することで、符号化された演奏情報を復号した場合に上記各演奏情報の順番が入れ替わることもない。即ち、復号された演奏情報が完全に元の演奏情報と一致することになる。
【０２６９】
（第２の実施の形態）
先ず、第２の実施の形態に係る演奏情報圧縮装置、演奏情報復号装置、演奏情報圧縮方法、演奏情報復号方法、演奏情報圧縮プログラム、及び演奏情報復号プログラムにおいて、前提とされる入力データ（楽曲ファイル）のフォーマットについて、詳細に説明する。この第２の実施の形態においては、楽曲ファイルのフォーマットとしてＳＭＦの改良フォーマットを想定している。この改良フォーマットは、ヘッダ・チャンクとトラック・チャンクに大別され、各ヘッダ・チャンク部には、楽曲ファイル全体に直接関係する最小限の情報、例えばトラックデータの数等の情報が含まれている。そして、各トラック・チャンクには、最大４チャネルに係るイベントデータ群（トラックデータ）を含めることができる。
【０２７０】
更に、各トラックデータは、Δタイムとイベントといった２つの要素で構成されている。Δタイムには、少なくとも隣接するイベント間の相対時間等の情報が含まれている。そして、前述したＳＭＦでは、イベントにノートオン又はノートオフのステータスや音程（ノートナンバ）、音の強さ（ベロシティ）の演奏情報が含まれていたが、この改良フォーマットでは、ノートオフが省略されるのとノートオンに相当するノートメッセージに「音の長さ」に関する情報も含まれている点でＳＭＦと相違している。
【０２７１】
尚、この第２の実施の形態でも、Δタイムの先頭バイトの情報によって、イベントの種別を識別することができるようになっている。また、このフォーマットでは、ステータスにイベントクラスの情報が含まれることもある。
【０２７２】
このようなフォーマットの相違から、楽曲ファイル、１次符号、２次符号は第１の実施の形態に係るものと相違することになるが、以下では説明の便宜上、これらを第１の実施の形態と同一符号をもって示し、説明に用いる。
【０２７３】
（演奏情報圧縮装置等）
以下、図４８乃至図６１を参照して、楽曲ファイルより１次符号、更には２次符号を生成する第２の実施の形態に係る演奏情報圧縮装置、演奏情報圧縮方法、演奏情報圧縮プログラムについて、その構成及び作用を詳細に説明する。
【０２７４】
尚、この演奏情報圧縮装置による作用は、第２の実施の形態に係る演奏情報圧縮方法、演奏情報圧縮プログラムに相当するものである。この演奏情報圧縮プログラム、演奏情報復号プログラムは、コンピュータにより実行可能である。
【０２７５】
また、ここでは重複した説明を避けるべく、第１の実施の形態に係る装置等と同一の構成については同一の図面をもって、説明を進めることにする。
【０２７６】
この第２の実施の形態に係る演奏情報圧縮装置７０の構成は、先に示した図１の構成と略同じであり、１次符号生成部２と２次符号生成部３とからなる。
【０２７７】
即ち、１次符号生成部２は、２次符号生成部３での圧縮効率を高めるべく、上述したフォーマットの楽曲ファイル４に含まれる演奏情報を並び替えて、１次符号５を生成するものである。そして、２次符号生成部３は、上記１次符号５を汎用圧縮方式により圧縮して、２次符号６を生成するものである。
【０２７８】
この第２の実施の形態でも、２次符号生成部２において採用する汎用圧縮方式として、例えばＬＺ符号化法やハフマン符号化法、ランレングス符号化法、更には、これらを複合した方式（例えばＬＨＡやＺＩＰ等）を採用することを想定しているが、これらに限定されないことは勿論である。
【０２７９】
１次符号生成部２の詳細な構成は、先に示した図２の構成と略同様であり、トラック分離部７とチャネル分離及びチャネル番号符号生成部８、チャネル番号以外の符号生成部１００（図４８で後述）、符号配置部１０を有している。
【０２８０】
以下、これら各部の構成及び作用について詳細に説明する。
【０２８１】
先ず、トラック分離部７の詳細な構成は、先に図３に示した構成と略同様であり、ファイル解析部７ａを有している。このファイル解析部７ａは、楽曲ファイル４のヘッダ・チャンクに含まれるトラックデータの数の情報に基づき、楽曲ファイル４のトラック・チャンクに複数のトラックデータが含まれているか否かを判断する。そして、トラック分離部７は、複数のトラックデータが含まれていると判断された場合には、それぞれのトラックデータに分離する。
【０２８２】
この例では、トラック・チャンクは、トラック０データ１１−０、トラック１データ１１−１、…、トラックｍデータ１１−ｍに分離されている。このトラック分離部７によるトラック分離の処理は、先に図４のフローチャートに示したものと略同様である為、ここでは、重複した説明を省略する。
【０２８３】
尚、前述したように、この第２の実施の形態では、第１の実施の形態とは異なる改良フォーマットの入力データ（楽曲ファイル）を想定していることから、分離されたトラックデータは、前述した第１の実施の形態とは若干異なる部分があるが、ここでは説明を簡略化するために、トラック・チャンクは、トラック０データ１１−０、トラック１データ１１−１、…、トラックｍデータ１１−ｍと、同様の符号をもって説明を進めることとする。
【０２８４】
次に、チャネル分離及びチャネル番号符号生成部８の詳細な構成は、先に図５に示した構成と略同様であり、トラック解析部８ａとチャネル番号符号生成部８ｂとを有している。上述の如くトラック分離部７で分割されたトラック０データ１１−０、トラック１データ１１−１、…、トラックｍデータ１１−ｍの各々について、複数のチャネルに係るトラックデータが含まれている場合には、チャネル分離及びチャネル番号符号生成部８のトラック解析分離部８ａにより、それぞれが単一のチャネルからなるトラックデータに分離される。
【０２８５】
より詳細には、この第２の実施の形態に係る演奏情報圧縮装置等では、トラック解析分離部８ａは、例えばトラックｘデータ１１−ｘを、チャネル０のみのトラックｘデータ１２−０、チャネル１のみのトラックｘデータ１２−１、…、チャネルｎのみのトラックｘデータ１２−ｎに分離する。このとき、チャネル番号符号生成部８ｂは、これらのチャネル番号符号Ｘ１３を生成する。
【０２８６】
ここで、改良フォーマットには１つのトラックデータに最大４チャネルを含めることができることは前述した通りであるが、改良フォーマットでは、チャネルに属するイベントとチャネルに属しないイベント（全体に影響が及ぶイベント等）を記述することができるようになっている。これに鑑みて、この第２の実施の形態では、チャネルに属しないイベントについては、イベントクラスに応じて各チャネルに属するものとして扱うようにしている。この例では、イベントのクラスによって以下のように格納するチャネルが定められる。
【０２８７】
即ち、ノーマルクラスの場合には格納するチャネルはチャネル０、クラスＡの場合には格納するチャネルはチャネル１、クラスＢの場合には格納するチャネルはチャネル２、クラスＣの場合には格納するチャネルはチャネル２、と定められることになる。そして、上記イベントクラス情報に基づき各チャネルのみのトラックｘデータに含められることになる。但し、これには限定されない。また、第２の実施の形態でも、上記第１の実施の形態と同様に、イベントが存在しないトラックの全てを符号化すると膨大なトラック数になるので、イベントが存在しないトラックは削除し、１次符号には記録しないこととしている。
【０２８８】
尚、前述したように、この第２の実施の形態では、第１の実施の形態とは異なる改良フォーマットの入力データ（楽曲ファイル）を想定していることから、分離されたトラックデータは、第１の実施の形態とは若干異なる部分があるが、ここでは説明を簡略化するために、トラックｘデータ１２−ｘ、チャネル０のみのトラックｘデータ１２−０、チャネル１のみのトラックｘデータ１２−１、…、チャネルｎのみのトラックｘデータ１２−ｎトラック１データ１１−１、…、トラックｍデータ１１−ｍと、同様の符号をもって説明を進める。
【０２８９】
このトラック解析分離部８ａ、チャネル番号符号生成部８ｂによるチャネル分離及びチャネル番号符号生成に係る処理の流れは、ＭＡＸ＿ＣＨ＝４と設定される以外は、先に図６のフローチャートに示したものと略同様である為、ここでは、重複した説明を省略する。また、トラック解析分離部８ａ、チャネル番号符号生成部８ｂによるチャネル分離及びチャネル番号符号生成に係る処理による効果についても、先に図７を参照しつつ説明した内容と同様であるので、省略する。
【０２９０】
次に、チャネル番号以外の符号生成部１００の詳細な構成は、図４８に示される通りである。即ち、このチャネル番号以外の符号生成部１００は、イベント種別解析識別部１０１と、Δタイム符号生成部１０２、音程符号生成部１０３、ゲートタイム符号生成部１０４、ベロシティ値符号生成部１０５、差分ベンド値符号生成部１０６、差分ボリューム値符号生成部１０７、イベント種別識別符号生成部１０８、その他情報符号生成部１０９からなっている。
【０２９１】
尚、このチャネル番号以外の符号生成部９による処理の流れは、ＭＡＸ＿ＣＨ＝４となる以外は、先に図９のフローチャートを参照して説明した内容と略同様であることから、重複した説明は省略する。更に、図９のステップＳ３６で実行されるＴｒａｃｋ［Ｉ］［Ｊ］の符号化の処理についても先に図１０のフローチャートを参照して説明した内容と略同様であることから、重複した説明は省略する。
【０２９２】
但し、図１０の上記ステップＳ４７でチャネル番号以外の符号生成部９により実行されるイベント種別毎の符号化の処理については、第１の実施の形態とは異なるので、以下、図４９のフローチャートを参照して、前述した第１の実施の形態との相違点を意識しつつ、より詳細に説明することにする。
【０２９３】
この処理が開始されると、チャネル番号以外の符号生成部９は、先ず変数Ｅｖｅｎｔにストアされているイベントの種別を判断する（ステップＳ３６０）。
【０２９４】
チャネル番号以外の符号生成部９は、イベントの種別がノートメッセージであると判断した場合には、ベロシティ値符号［Ｉ］［Ｊ］の末尾にベロシティの下位６ビットの情報を符号化し（ステップＳ３６１）、ゲートタイム符号［Ｉ］［Ｊ］の末尾にゲートタイムを符号化し（ステップＳ３６２）、音程符号［Ｉ］［Ｊ］の末尾に音程値（上位２ビットにキーシフト、下位６ビットにキーナンバ）を符号化し（ステップＳ３６３）、その他情報符号［Ｉ］［Ｊ］の末尾に変数Ｅｖｅｎｔにストアされているイベントの４バイト目以降の情報を符号化し（ステップＳ３７０）、処理を終了する。
【０２９５】
そして、チャネル番号以外の符号生成部９は、イベントの種別がゲートタイムエクステンションであると判断した場合には、上記ステップＳ３６２乃至Ｓ３７０と同様の処理をなし、この処理を終了する。さらに、チャネル番号以外の符号生成部９は、イベントがチャネルピッチベンドであると判断した場合には、差分ベンド値符号［Ｉ］［Ｊ］の末尾に直前のピッチベンドからの差分ピッチベンドを符号化し（ステップＳ３６４）、この処理を終了する。また、チャネル番号以外の符号生成部９は、イベントがチャネルボリュームであると判断した場合には、差分ボリューム値符号［Ｉ］［Ｊ］の末尾に直前のボリュームからの差分ボリュームを符号化し（ステップＳ３６４）、この処理を終了することとしている。
【０２９６】
一方、チャネル番号以外の符号生成部９は、イベントがその他の種別であると判断した場合には（ステップＳ３６０）、先ずイベント種別識別符号が０ｘ０８（図５８参照）以上であるか否かを判断する（ステップＳ３６６）。
【０２９７】
このステップＳ３６６において、チャネル番号以外の符号生成部９は、イベント種別識別符号が０ｘ０８（図５８参照）以上であると判断した場合には、その他情報符号［Ｉ］［Ｊ］の末尾に変数Ｅｖｅｎｔにストアされているイベントの３バイト目の情報を（このとき、チャネルインデックスは０クリアされる）符号化し（ステップＳ３７１）、この処理を終了する。一方、上記ステップＳ３６６において、イベント種別識別符号が０ｘ０８未満であると判断した場合、更にイベント種別識別符号が０ｘ０２（図５８参照）以下であるか否かを判断する（ステップＳ３６７）。
【０２９８】
このステップＳ３６７において、チャネル番号以外の符号生成部９は、イベント種別識別符号が０ｘ０２（図５８参照）以下であると判断した場合には、その他情報符号［Ｉ］［Ｊ］の末尾に変数Ｅｖｅｎｔにストアされているイベントの２バイト目の情報を符号化し、その他情報符号［Ｉ］［Ｊ］の末尾に変数Ｅｖｅｎｔにストアされているイベントの３バイト目の情報を符号化し（ステップＳ３６９）、更に、その他情報符号［Ｉ］［Ｊ］の末尾にイベントの４バイト目以降の情報を符号化し（ステップＳ３６９）、この処理を終了することとしている。
【０２９９】
これに対して、上記ステップＳ３６７において、チャネル番号以外の符号生成部９は、イベント種別識別符号が０ｘ０２（図５８参照）以下ではないと判断した場合には、その他情報符号［Ｉ］［Ｊ］の末尾に変数Ｅｖｅｎｔにストアされているイベントの３バイト目の情報を符号化し（ステップＳ３６９）、その他情報符号［Ｉ］［Ｊ］の末尾に変数Ｅｖｅｎｔにストアされているイベントの４バイト目以降の情報を符号化して（ステップＳ３６９）、この処理を終了することになる。
【０３００】
以上説明したような各生成部１０２乃至１０９による一連の処理によって、Δタイム符号、音程符号、ゲートタイム符号、ベロシティ値符号、差分ベンド値符号、差分ボリューム値符号、イベント種別識別符号、その他情報符号が生成されることになる。そして、これら全ての符号は、先に示した図１２と略同様の符号配置部１０に入力される。符号配置部１０は、各符号種別毎に配置し、１次符号５を生成する。尚、この符号配置部１０についても、前述した第１の実施の形態とは構成が若干異なるが、ここでは説明を簡略化するために、同一符号をもってその処理上の相違を中心に詳細に説明する。
【０３０１】
以下、図５０乃至図６０を参照して、実施の形態に係る演奏情報圧縮装置７０の符号配置部１０による符号配置の処理の流れをより詳細に説明する。
【０３０２】
さて、本処理に入ると、符号配置部１０は、先ずヘッダ・チャンクの符号を配置する（ステップＳ３８０）。以降、後述するように各符号を配置する。
【０３０３】
先ず、符号配置部１０は、Δタイム符号を配置する（ステップＳ３８０）。
【０３０４】
即ち、図５１のフローチャートに詳細に示されるように、この符号配置部１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ３９０）、このＩがトラック数Ｍよりも小さいか否かを判断する（ステップＳ３９１）。
【０３０５】
１巡面では、上記ステップＳ３９０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ３９１よりＹｅｓ側に進み、次いでチャネル番号に係るＪに０を代入する（ステップＳ３９２）。続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ３９３）。そして、１巡面では、上記ステップＳ３９２でＪ＝０と設定されているので、符号配置部１０はステップＳ３９３よりＹｅｓ側に進み、Δタイム符号［０］［０］を配置した後（ステップＳ３９４）、チャネル番号に係る変数Ｊを１つインクリメントしＪ＝１とする（ステップＳ３９５）。
【０３０６】
この第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、符号配置部１０は、ステップＳ３９３乃至Ｓ３９５の処理が繰り返されて、Δタイム符号［０］［１］、Δタイム符号［０］［２］、Δタイム符号［０］［３］、Δタイム符号［０］［４］を順次配置する。符号配置部１０は、このΔタイム符号［０］［４］を配置した後は、上記ステップＳ３９３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ３９１乃至Ｓ３９５の処理を繰り返し、続いてΔタイム符号［１］［１］、Δタイム符号［１］［２］、Δタイム符号［１］［３］、Δタイム符号［１］［４］を順次配置する。
【０３０７】
この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、符号配置部１０は、上記ステップＳ３９１乃至Ｓ３９５の処理を繰り返し、最終的にトラックｍデータに係るΔタイム符号［ｍ］［１］、Δタイム符号［ｍ］［２］、Δタイム符号［ｍ］［３］、Δタイム符号［ｍ］［４］を順次配置すると、このデルタタイム符号配置処理を終了し、図５０のステップＳ３８１にリターンする。
【０３０８】
続いて、符号配置部１０は音程符号を配置する（ステップＳ３８２）。
【０３０９】
即ち、図５２のフローチャートに詳細に示されるように、符号配置部１０は先ずトラック番号に係る変数Ｉに０を設定した後（ステップＳ４００）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ４０１）。
【０３１０】
１巡面では、上記ステップＳ４００でＩ＝０と設定されているので、符号配置部１０は、ステップＳ４０１よりＹｅｓ側に進み、チャネル番号に係る変数Ｊに０を代入する（ステップＳ４０２）。続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ４０３）。そして、１巡面では、上記ステップＳ４０２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ４０３よりＹｅｓ側に進み、音程符号［０］［０］を配置した後（ステップＳ４０４）、チャネル番号に係る変数Ｊを１つインクリメントすることとしている（ステップＳ４０５）。
【０３１１】
この第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、符号配置部１０は、以降、上記ステップＳ４０３乃至Ｓ４０５の処理を繰り返し、音程符号［０］［１］、音程符号［０］［２］、音程符号［０］［３］、音程符号［０］［４］を順次配置する。こうして、符号配置部１０は、音程符号［０］［４］が配置された後は、ステップＳ４０３よりＮｏ側に進み、トラック番号に係るＩを１つインクリメントしてＩ＝１とした後、再びステップＳ４０１乃至Ｓ４０５の処理を繰り返し、続いて音程符号［１］［１］、音程符号［１］［２］、音程符号［１］［３］、音程符号［１］［４］を順次配置することになる。この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。
【０３１２】
よって、符号配置部１０は、上記ステップＳ４０１乃至Ｓ４０５の処理を繰り返し、最終的にトラックｍデータに係る音程符号［ｍ］［１］、音程符号［ｍ］［２］、音程符号［ｍ］［３］、Ｎｏｔｅ　Ｏｎ音程符号［ｍ］［４］が順次配置すると、この音程符号配置処理を終了し、図５０のステップＳ３８２にリターンする。
【０３１３】
続いて、符号配置部１０はゲートタイム符号を配置する（ステップＳ３８３）。
【０３１４】
即ち、図５３のフローチャートに詳細に示されるように、符号配置部１０は先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ４１０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ４１１）。
【０３１５】
１巡面では、上記ステップＳ４１０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ４１１よりＹｅｓ側に進み、チャネル番号に係る変数Ｊに０を設定する（ステップＳ４１２）。続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断することになる（ステップＳ４１３）。１巡面では、上記ステップＳ４１２でＪ＝０と設定されているので、符号配置部１０は、上記ステップＳ４１３よりＹｅｓ側に進み、ゲートタイム符号［０］［０］を配置した後（ステップＳ４１４）、チャネル番号に係るＪを１つインクリメントする（ステップＳ４１５）。
【０３１６】
この第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、符号配置部１０は、以降、ステップＳ４１３乃至Ｓ４１５の処理を繰り返し、ゲートタイム符号［０］［１］、ゲートタイム符号［０］［２］、ゲートタイム符号［０］［３］、ゲートタイム符号［０］［４］を順次配置する。
【０３１７】
このゲートタイム符号［０］［４］が配置された後は、符号配置部１０は、ステップＳ４１３をＮｏ側に進み、トラック番号に係るＩを１つインクリメントしてＩ＝１とした後、再びステップＳ４１１乃至Ｓ４１５の処理を繰り返し、続いてゲートタイム符号　［１］［１］、ゲートタイム符号［１］［２］、ゲートタイム符号［１］［３］、ゲートタイム符号［１］［４］を順次配置する。この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、符号配置部１０は、上記ステップＳ４１１乃至Ｓ４１５の処理を繰り返し、最終的にトラックｍデータに係るゲートタイム符号［ｍ］［１］、ゲートタイム符号［ｍ］［２］、ゲートタイム符号［ｍ］［３］、ゲートタイム符号［ｍ］［４］を順次配置すると、このゲートタイム符号配置処理を終了し、図５０のステップＳ３８３にリターンする。
【０３１８】
続いて、符号配置部１０はベロシティ値符号を配置する（ステップＳ３８４）。
【０３１９】
即ち、図５４のフローチャートに詳細に示されるように、符号配置部１０は先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ４２０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ４２１）。
【０３２０】
１巡面では、上記ステップＳ４２０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ４２１よりＹｅｓ側に進み、次いでチャネル番号に係るＪに０を代入する（ステップＳ４２２）。これに続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ４２３）。１巡面では、上記ステップＳ４２２でＪ＝０と設定されているので、符号配置部１０は、上記ステップＳ４２３よりＹｅｓ側に進み、ベロシティ値符号［０］［０］を配置した後（ステップＳ４２４）、チャネル番号に係るＪを１つインクリメントする（ステップＳ４２５）。
【０３２１】
この第２の実施の形態でも、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、符号配置部１０は、これ以降、上記ステップＳ４２３乃至Ｓ４２５の処理を繰り返し、ベロシティ値符号［０］［１］、ベロシティ値符号［０］［２］、ベロシティ値符号［０］［３］、ベロシティ値符号［０］［４］を順次配置する。
【０３２２】
そして、符号配置部１０は、ベロシティ値符号［０］［４］が配置した後は、ステップＳ４２３よりＮｏ側に進み、トラック番号に係るＩを１つインクリメントしてＩ＝１とした後、再びステップＳ４２１乃至Ｓ４２５の処理を繰り返し、これに続いてベロシティ値符号［１］［１］、ベロシティ値符号［１］［２］、ベロシティ値符号［１］［３］、ベロシティ値符号［１］［４］を順次配置する。
【０３２３】
この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、符号配置部１０は、上記ステップＳ４２１乃至Ｓ４２５の処理を繰り返し、最終的にトラックｍデータに係るベロシティ値符号［ｍ］［１］、ベロシティ値符号［ｍ］［２］、ベロシティ値符号［ｍ］［３］、ベロシティ値符号［ｍ］［４］を順次配置すると、このベロシティ値符号配置処理を終了し、図５０のステップＳ３８４にリターンする。
【０３２４】
続いて、符号配置部１０は差分ベンド値符号を配置する（ステップＳ３８５）。
【０３２５】
即ち、図５５のフローチャートに詳細に示されるように、符号配置部１０は先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ４３０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ４３１）。
【０３２６】
１巡面では、上記ステップＳ４３０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ４３１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ４３２）。続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ４３３）。１巡面では、上記ステップＳ４３２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ４３３よりＹｅｓ側に進み、差分ベンド値符号［０］［０］を配置した後（ステップＳ４３４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とする（ステップＳ４３５）。
【０３２７】
この第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、符号配置部１０は、以降、ステップＳ４３３乃至Ｓ４３５の処理を繰り返して、差分ベンド値符号［０］［１］、差分ベンド値符号［０］［２］、差分ベンド値符号［０］［３］、差分ベンド値符号［０］［４］を順次配置する。
【０３２８】
そして、符号配置部１０は、差分ベンド値符号［０］［４］を配置した後は、ステップＳ４３３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントした後、再びステップＳ４３１乃至Ｓ４３５の処理を繰り返し、続いて差分ベンド値符号［１］［１］、差分ベンド値符号［１］［２］、差分ベンド値符号［１］［３］、差分ベンド値符号［１］［４］を順次配置することになる。
【０３２９】
この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、符号配置部１０は、上記ステップＳ４３１乃至Ｓ４３５の処理を繰り返し、最終的にトラックｍデータに係る差分ベンド値符号［ｍ］［１］、差分ベンド値符号［ｍ］［２］、差分ベンド値符号［ｍ］［３］、差分ベンド値符号［ｍ］［４］を順次配置すると、この差分ベンド値符号配置処理を終了し、図５０のステップＳ３８５にリターンする。
【０３３０】
続いて、符号配置部１０は、差分ボリューム値符号を配置する（ステップＳ３８６）。即ち、図５６のフローチャートに詳細に示されるように、符号配置部１０は先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ４４０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ４４１）。
【０３３１】
１巡面では、上記ステップＳ４４０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ４４１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ４４２）。続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ４４３）。１巡面では、上記ステップＳ４４２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ４４３よりＹｅｓに進み、差分ボリューム値符号［０］［０］を配置した後（ステップＳ４４４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とする（ステップＳ４４５）。
【０３３２】
なお、第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、符号配置部１０は、以降、ステップＳ４４３乃至Ｓ４４５の処理を繰り返し、差分ボリューム値符号［０］［１］、差分ボリューム値符号［０］［２］、差分ボリューム値符号［０］［３］、差分ボリューム値符号［０］［４］を順次配置する。
【０３３３】
そして、符号配置部１０は、差分ボリューム値符号［０］［４］を配置した後は、ステップＳ４４３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントした後、再びステップＳ４４１乃至Ｓ４４５の処理を繰り返し、続いて差分ボリューム値符号［１］［１］、差分ボリューム値符号［１］［２］、差分ボリューム値符号［１］［３］、差分エボリューム値符号［１］［４］を順次配置する。この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、符号配置部１０は、上記ステップＳ４４１乃至Ｓ４４５の処理を繰り返し、最終的にトラックｍデータに係る差分ボリューム値符号［ｍ］［１］、差分ボリューム値符号［ｍ］［２］、差分ボリューム値符号［ｍ］［３］、差分ボリューム値符号［ｍ］［４］を順次配置すると、差分ボリューム値符号配置処理を終了し、図５０のステップＳ３８６にリターンする。
【０３３４】
続いて、符号配置部１０は、イベント種別識別符号を配置する（ステップＳ３８７）。即ち、図５７のフローチャートに詳細に示されるように、符号配置部１０は先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ４５０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ４５１）。
【０３３５】
１巡面では、上記ステップＳ４５０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ４５１よりＹｅｓに進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ４５２）。続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ４５３）。１巡面では、上記ステップＳ４５２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ４５３よりＹｅｓ側に進み、イベント種別識別符号［０］［０］を配置した後（ステップＳ４５４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とする（ステップＳ４５５）。
【０３３６】
なお、第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、符号配置部１０は、以降、ステップＳ４５３乃至Ｓ４５５の処理を繰り返し、イベント種別識別符号［０］［１］、イベント種別識別符号［０］［２］、イベント種別識別符号［０］［３］、イベント種別識別符号［０］［４］を順次配置する。
【０３３７】
そして、この符号配置部１０は、このイベント種別識別符号［０］［４］を配置した後は、ステップＳ４５３をＮｏに進み、トラック番号に係る変数Ｉを１つインクリメントした後、再びステップＳ４５１乃至Ｓ４５５の処理を繰り返し、続いてイベント種別識別符号［１］［１］、イベント種別識別符号［１］［２］、イベント種別識別符号［１］［３］、イベント種別識別符号［１］［４］を順次配置することとなる。
【０３３８】
この第２の実施の形態では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、符号配置部１０は、上記ステップＳ４５１乃至Ｓ４５５の処理を繰り返し、最終的にトラックｍデータに係るイベント種別識別符号［ｍ］［１］、イベント種別識別符号［ｍ］［２］、イベント種別識別符号［ｍ］［３］、イベント種別識別符号［ｍ］［４］を順次配置すると、イベント種別識別符号配置処理を終了し、図５０のステップＳ３８７にリターンする。
【０３３９】
ここで、イベント種別識別符号は、図５８に示されるようなイベント種別識別符号符号化表により、そのイベント種別に応じて適宜割り当てられる。尚、符号化時にイベント種別出現頻度に応じて動的に割り当てることも可能であり、その場合、２次符号化時のハフマン符号化による圧縮には、より好適となる。
【０３４０】
続いて、符号配置部１０は、チャネル番号符号を配置する（ステップＳ３８８）。
【０３４１】
即ち、図５９のフローチャートに詳細に示されるように、符号配置部１０は先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ４６０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ４６１）。
【０３４２】
１巡面では、上記ステップＳ４６０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ４６１よりＹｅｓ側に進み、チャネル番号符号［０］を配置した後（ステップＳ４６２）、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とする（ステップＳ４６３）。そして、符号配置部１０は、再びステップＳ４６１乃至Ｓ４６３の処理を繰り返し、続いてチャネル番号符号符号［１］を配置する。この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、符号配置部１０は、上記ステップＳ４６１乃至Ｓ４６３の処理を繰り返し、最終的にトラックｍデータに係るチャネル番号符号符号［ｍ］を配置すると、チャネル番号符号配置処理を終了し、図５０のステップＳ３８８にリターンすることになる。
【０３４３】
続いて、符号配置部１０は、その他情報符号を配置する（ステップＳ３８９）。
【０３４４】
即ち、図６０のフローチャートに詳細に示されるように、符号配置部１０は先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ４７０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ４７１）。
【０３４５】
１巡面では、上記ステップＳ４７０でＩ＝０と設定されているので、符号配置部１０は、ステップＳ４７１よりＹｅｓ側に進み、次いでチャネル番号に係るＪに０を代入する（ステップＳ４７２）。続いて、符号配置部１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ４７３）。１巡面では、上記ステップＳ４７２でＪ＝０と設定されているので、符号配置部１０は、ステップＳ４７３よりＹｅｓ側に進み、その他情報符号［０］［０］を配置した後（ステップＳ４７４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とする（ステップＳ４７５）。この第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されている。
【０３４６】
よって、符号配置部１０は、これ以降、ステップＳ４７３乃至Ｓ４７５の処理を繰り返して、その他情報符号［０］［１］、その他情報符号［０］［２］、その他情報符号［０］［３］、その他情報符号［０］［４］を順次配置することになる。
【０３４７】
そして、符号配置部１０は、その他情報符号［０］［４］を配置した後は、ステップＳ４７３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ４７１乃至Ｓ４７５の処理を繰り返し、続いて、その他情報符号［１］［１］、その他情報符号［１］［２］、その他情報符号［１］［３］、その他情報符号［１］［４］を順次配置することになる。
【０３４８】
この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、符号配置部１０は、上記ステップＳ４７１乃至Ｓ４７５の処理を繰り返し、最終的にトラックｍデータに係るその他情報符号［ｍ］［１］、その他情報符号［ｍ］［２］、その他情報符号［ｍ］［３］、その他情報符号［ｍ］［４］を順次配置すると、その他情報符号配置処理を終了し、こうして、符号配置部１０による符号配置に係る処理を終了する。
【０３４９】
以上の処理により、図６１に示されるような基本配置順序で各符号が配列され１次符号５が生成される。即ち、この図６１の例では、より詳細には、１次符号５の基本配列順序は、Δタイム符号、音程符号、ゲートタイム符号、ベロシティ値符号、差分ベンド値符号、差分ボリューム値符号、イベント種別識別符号、チャネル番号符号、その他情報符号の順となっている。更に、各符号の内部配列は、先に図２５で示した内容と同様であるので、ここでは重複した説明は省略する。
【０３５０】
この１次符号５は２次符号生成部３に入力され、汎用圧縮方式による圧縮が行われる。この第２の実施の形態では、汎用圧縮技術として、ＬＺ符号化法やハフマン符号化法、ランレングス符号化法、更には、これらを複合した方式（例えばＬＨＡやＺＩＰ等）を採用することができる。
【０３５１】
より詳細には、例えばＬＺ符号化法を採用する場合を想定すると、先ず、１次符号５の先頭から処理を開始し、処理対象位置のデータパターンと先に処理された所定範囲内のデータパターンとを比較する。そして、両者が一致する場合には処理対象位置から当該データパターンまでの距離や一致したデータパターンの長さ等の情報を２次符号６として出力する。これに対して、両者が一致しない場合には、１次符号５を２次符号６としてそのまま出力する。
【０３５２】
このような一連の処理を１次符号５の先頭から最後まで繰り返す。
【０３５３】
第２の実施の形態では、前述したように各情報を情報種別毎かつチャネル毎に時間的に独立した領域に配置した１次符号５を生成していることから、データパターンが繰り返すことを利用して繰り返し分を圧縮するＬＺ符号化法にも好適であり、圧縮率を低くすることができる。さらに、例えばイベント種別識別符号については、イベント種別の出現頻度に応じて符号を動的に割り当てることも可能としていることから、バイト毎の符号の出現頻度によって重み付けして重みのある符号に関して少ないビット数で記録できるように符号化するハフマン符号化法にも好適であって、圧縮率を低くすることができる。また、この他、ベロシティ情報は、ＳＭＦの改良フォーマットの下では値の分布に偏りが出ることが多いことから、ベロシティ情報を独立して纏めて記録したことで、ハフマン符号化法による符号化の効率に好影響を及ぼしている。
【０３５４】
尚、第２の実施の形態では、ＬＺ法及びハフマン符号化の複合方式（ＬＨＡ）を採用することを想定しているが、その場合には、上述した双方の効果が奏されることは勿論である。
【０３５５】
（演奏情報復号装置等）
次に、図６２乃至図７４を参照して、１次符号又は２次符号を復号する第２の実施の形態に係る演奏情報復号装置、演奏情報復号方法、演奏情報復号プログラムについて詳細に説明する。尚、演奏情報復号装置による作用は、第１の実施の形態に係る演奏情報復号方法、演奏情報復号プログラムに相当する。
【０３５６】
この第２の実施の形態に係る演奏情報復号装置８０の構成は、先に図２６に示した構成と略同様であり、２次符号復号部２と１次符号復号部５２からなる。
【０３５７】
この２次符号復号部５１は、上述した汎用圧縮方式により圧縮された上記２次符号６を１次符号５に復号するものである。
【０３５８】
更に、１次符号復号部５２は、２次符号復号部５１で復号された１次符号５を上述したフォーマットの楽曲ファイル４に復号するものである。尚、この１次符号復号部５１の詳細な構成は、先に示した図２７の構成と略同様であり、チャネル別符号抽出部１１０（図６２で後述）、トラック復号部１２０、トラックマージ及びチャネル番号符号復号部５５、トラック配置部５６を有している。
【０３５９】
以下、これら各部の構成及び作用を詳述する。
【０３６０】
先ず、チャネル別符号抽出部１１０の詳細な構成は、図６２に示される通りであり、１次符号５に含まれる各符号をチャネル別に抽出するものである。
【０３６１】
つまり、チャネル別符号抽出部１１０は、１次符号５より、トラック０，チャネル０の符号群、トラック０，チャネル１の符号群、…、トラックｍ，チャネルｎの符号群をチャネル別に順次抽出する。尚、これら各符号群には、Δタイム符号、音程符号、ゲートタイム符号、ベロシティ値符号、差分ベンド値符号、差分ボリューム値符号、イベント種別識別符号、その他情報符号が含まれる。
【０３６２】
以下、図６３のフローチャートを参照して、このチャネル別符号抽出部１１０によるチャネル別符号の抽出に係る処理の流れを詳細に説明する。
【０３６３】
さて、本処理に入ると、チャネル別符号抽出部１１０は、先ずヘッダ・チャンクの符号を抽出する（ステップＳ４８０）。以降、各符号を抽出する。
【０３６４】
先ず、チャネル別符号抽出部１１０はΔタイム符号を抽出する（ステップＳ４８１）。即ち、図６４のフローチャートに詳細に示されるように、チャネル別符号抽出部１１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ４９０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ４９１）。１巡面では、上記ステップＳ４９０でＩ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ４９１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ４９２）。続いて、チャネル別符号抽出部１１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ４９３）。
【０３６５】
１巡面では、上記ステップＳ４９２でＪ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ１７３よりＹｅｓ側に進み、Δタイム符号［０］［０］を抽出した後（ステップＳ４９４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とする（ステップＳ４９５）。
【０３６６】
この第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、チャネル別符号抽出部１１０は、これ以降、上記ステップＳ４９３乃至Ｓ４９５の処理を繰り返し、Δタイム符号［０］［１］、Δタイム符号［０］［２］、Δタイム符号［０］［３］、Δタイム符号［０］［４］を順次抽出する。
【０３６７】
チャネル別符号抽出部１１０は、このΔタイム符号［０］［４］を抽出した後は、ステップＳ４９３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントした後、再び上記ステップＳ４９１乃至Ｓ４９５の処理を繰り返し、Δタイム符号［１］［１］、Δタイム符号［１］［２］、Δタイム符号［１］［３］、Δタイム符号［１］［４］を順次抽出する。この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、チャネル別符号抽出部１１０は、上記ステップＳ４９１乃至Ｓ４９５の処理を繰り返して、最終的にトラックｍデータに係るΔタイム符号［ｍ］［１］、Δタイム符号［ｍ］［２］、Δタイム符号［ｍ］［３］、Δタイム符号［ｍ］［４］を順次抽出すると、このデルタタイム符号抽出処理を終了して、図６３のステップＳ４８１にリターンする。
【０３６８】
続いて、チャネル別符号抽出部１１０は音程符号を抽出する（ステップＳ４８２）。即ち、図６５のフローチャートに詳細に示されるように、チャネル別符号抽出部１１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ５００）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ５０１）。１巡面では、上記ステップＳ５００でＩ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５０１よりＹｅｓ側に進み、次いでチャネル番号に係るＪに０を代入する（ステップＳ５０２）。続いて、チャネル別符号抽出部１１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ５０３）。
【０３６９】
１巡面では、上記ステップＳ５０２でＪ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５０３よりＹｅｓ側に進み、音程符号［０］［０］を抽出した後（ステップＳ５０４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とすることとしている（ステップＳ５０５）。
【０３７０】
この第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、チャネル別符号抽出部１１０は、以降、ステップＳ５０３乃至Ｓ５０５の処理を繰り返し、音程符号［０］［１］、音程符号［０］［２］、音程符号［０］［３］、音程符号［０］［４］を順次抽出する。チャネル別符号抽出部１１０は、この音程符号［０］［４］を抽出した後は、ステップＳ５０３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントした後、再びステップＳ５０１乃至Ｓ５０５の処理を繰り返し、続いて音程符号［１］［１］、音程符号［１］［２］、音程符号［１］［３］、音程符号［１］［４］を順次抽出することになる。この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。
【０３７１】
よって、チャネル別符号抽出部１１０は、上記ステップＳ５０１乃至Ｓ５０５の処理を繰り返し、最終的にトラックｍデータに係る音程符号［ｍ］［１］、音程符号［ｍ］［２］、音程符号［ｍ］［３］、音程符号［ｍ］［４］を順次抽出すると、この音程符号抽出処理を終了し、図６３のステップＳ４８２にリターンする。
【０３７２】
続いて、チャネル別符号抽出部１１０はゲートタイム符号を抽出する（ステップＳ４８３）。即ち、図６６のフローチャートに詳細に示されるように、チャネル別符号抽出部１１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ５１０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ５１１）。先ず、１巡面では、上記ステップＳ５１０でＩ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５１１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を設定する（ステップＳ５１２）。続いて、チャネル別符号抽出部１１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ５１３）。
【０３７３】
１巡面では、上記ステップＳ５１２でＪ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５１３よりＹｅｓに進み、ゲートタイム符号［０］［０］を抽出した後（ステップＳ５１４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とすることとしている（ステップＳ５１５）。
【０３７４】
この第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、チャネル別符号抽出部１１０は、以降、ステップＳ５１３乃至Ｓ５１５の処理を繰り返し、ゲートタイム符号［０］［１］、ゲートタイム符号［０］［２］、ゲートタイム符号［０］［２］、ゲートタイム符号［０］［４］を順次抽出する。
【０３７５】
そして、チャネル別符号抽出部１１０は、このゲートタイム符号［０］［４］が抽出した後は、ステップＳ５１３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ５１１乃至Ｓ５１５の処理を繰り返し、続いてゲートタイム符号［１］［１］、ゲートタイム符号［１］［２］、ゲートタイム符号［１］［３］、ゲートタイム符号［１］［４］を順次抽出する。
【０３７６】
この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、チャネル別符号抽出部１１０は、上記ステップＳ５１１乃至Ｓ５１５の処理を繰り返して、最終的に、トラックｍデータに係るゲートタイム符号［ｍ］［１］、ゲートタイム符号［ｍ］［２］、ゲートタイム符号［ｍ］［３］、ゲートタイム符号［ｍ］［４］を順次抽出すると、このＮｏｔｅ　Ｏｆｆ音程符号抽出処理を終了し、図６３のステップＳ４８３にリターンする。
【０３７７】
続いて、チャネル別符号抽出部１１０はベロシティ値符号を抽出する（ステップＳ４８４）。即ち、図６７のフローチャートに詳細に示されるように、チャネル別符号抽出部１１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ５２０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ５２１）。１巡面では、上記ステップＳ５２０でＩ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５２１よりＹｅｓに進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ５２２）。続いて、チャネル別符号抽出部１１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ５２３）。
【０３７８】
１巡面では、上記ステップＳ５２２でＪ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５２３よりＹｅｓに進み、ベロシティ値符号［０］［０］を抽出した後（ステップＳ５２４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とすることとしている（ステップＳ５２５）。
【０３７９】
尚、この第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されている。よって、チャネル別符号抽出部１１０は、以降、ステップＳ５２３乃至Ｓ５２５の処理を繰り返し、ベロシティ値符号［０］［１］、ベロシティ値符号［０］［２］、ベロシティ値符号［０］［３］、ベロシティ値符号［０］［４］を順次抽出する。
【０３８０】
そして、チャネル別符号抽出部１１０は、このベロシティ値符号［０］［４］を抽出した後は、ステップＳ５２３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントしてＩ＝１とした後、再びステップＳ５２１乃至Ｓ５２５の処理を繰り返し、続いてベロシティ値符号［１］［１］、ベロシティ値符号［１］［２］、ベロシティ値符号［１］［３］、ベロシティ値符号［１］［４］を順次抽出する。
【０３８１】
この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、チャネル別符号抽出部１１０は、上記ステップＳ５２１乃至Ｓ５２５の処理を繰り返して、最終的に、トラックｍデータに係るベロシティ値符号［ｍ］［１］、ベロシティ値符号［ｍ］［２］、ベロシティ値符号［ｍ］［３］、ベロシティ値符号［ｍ］［４］を順次抽出すると、このベロシティ値符号抽出処理を終了し、図６３のステップＳ４８４にリターンする。
【０３８２】
続いて、チャネル別符号抽出部１１０は差分ベンド値符号を抽出する（ステップＳ４８５）。即ち、図６８のフローチャートに詳細に示されるように、チャネル別符号抽出部１１０は、先ずトラック番号に係る変数Ｉに０を設定した後（ステップＳ５３０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ５３１）。１巡面では、上記ステップＳ５３０でＩ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５３１よりＹｅｓ側に進み、次いでチャネル番号に係るＪに０を代入する（ステップＳ５３２）。続いて、チャネル別符号抽出部１１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ５３３）。
【０３８３】
１巡面では、上記ステップＳ５３２でＪ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５３３よりＹｅｓ側に進み、差分ベンド値符号［０］［０］を抽出した後（ステップＳ５３４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とする（ステップＳ５３５）。
【０３８４】
この第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、チャネル別符号抽出部１１０は、以降、ステップＳ５３３乃至Ｓ５３５の処理を繰り返し、差分ベンド値符号［０］［１］、差分ベンド値符号［０］［２］、差分ベンド値符号［０］［３］、差分ベンド値符号［０］［４］を順次抽出する。
【０３８５】
そして、チャネル別符号抽出部１１０は、この差分ベンド値符号［０］［４］を抽出した後は、ステップＳ５３３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントした後、ステップＳ５３１乃至Ｓ５３５の処理を繰り返し、続いて差分ベンド値符号［１］［１］、差分ベンド値符号［１］［２］、差分ベンド値符号［１］［３］、差分ベンド値符号［１］［４］を順次抽出することになる。
【０３８６】
この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、チャネル別符号抽出部１１０は、上記ステップＳ５３１乃至Ｓ５３５の処理を繰り返して、最終的に、トラックｍデータに係る差分ベンド値符号［ｍ］［１］、差分ベンド値符号［ｍ］［２］、差分ベンド値符号［ｍ］［３］、差分ベンド値符号［ｍ］［４］を順次抽出すると、この差分ベンド値符号抽出処理を終了し、図６３のステップＳ４８５にリターンする。
【０３８７】
続いて、チャネル別符号抽出部１１０は、差分ボリューム値符号を抽出する（ステップＳ４８６）。即ち、図６９のフローチャートに詳細に示されるように、チャネル別符号抽出部１１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ５４０）、このＩがトラック数Ｍよりも小さいか否かを判断する（ステップＳ５４１）。１巡面では、上記ステップＳ５４０でＩ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５４１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ５４２）。続いて、チャネル別符号抽出部１１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ５４３）。
【０３８８】
この１巡面では、上記ステップＳ５４２でＪ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５４３よりＹｅｓ側に進み、差分ボリューム値符号［０］［０］を抽出した後（ステップＳ５４４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とする（ステップＳ５４５）。尚、この第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されている。
【０３８９】
よって、チャネル別符号抽出部１１０は、以降、ステップＳ５４３乃至Ｓ５４５の処理を繰り返して、差分ボリューム値符号［０］［１］、差分ボリューム値符号［０］［２］、差分ボリューム値符号［０］［３］、差分ボリューム値符号［０］［４］を順次抽出する。チャネル別符号抽出部１１０は、この差分ボリューム値符号［０］［４］を抽出した後は、ステップＳ５４３よりＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントした後に、再びステップＳ５４１乃至Ｓ５４５の処理を繰り返し、続いて差分ボリューム値符号［１］［１］、差分ボリューム値符号［１］［２］、差分ボリューム値符号［１］［３］、差分ボリューム値符号［１］［４］を順次抽出する。
【０３９０】
この例でも、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、チャネル別符号抽出部１１０は、上記ステップＳ５４１乃至Ｓ５４５の処理を繰り返し、最終的にトラックｍデータに係る差分ボリューム値符号［ｍ］［１］、差分ボリューム値符号［ｍ］［２］、差分ボリューム値符号［ｍ］［３］、差分ボリューム値符号［ｍ］［４］を順次抽出すると、差分ボリューム値符号抽出処理を終了し、図６３のステップＳ４８６にリターンする。
【０３９１】
続いて、チャネル別符号抽出部１１０はイベント種別識別符号を抽出する（ステップＳ４８７）。即ち、図７０のフローチャートに詳細に示されるように、チャネル別符号抽出部１１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ５５０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ５５１）。先ず、１巡面では、上記ステップＳ５５０でＩ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５５１よりＹｅｓに進み、次いでチャネル番号に係る変数Ｊに０を設定する（ステップＳ５５２）。続いて、チャネル別符号抽出部１１０は、このチャネル番号に係る変数Ｊが最大チャネル数に係るＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ５５３）。
【０３９２】
１巡面では、上記ステップＳ５５２でＪ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５５３よりＹｅｓ側に進み、イベント種別識別符号［０］［０］を抽出した後（ステップＳ５５４）、チャネル番号に係るＪを１つインクリメントしてＪ＝１とする（ステップＳ５５５）。
【０３９３】
なお、第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、チャネル別符号抽出部１１０は、以降、ステップＳ５５３乃至Ｓ５５５の処理を繰り返し、イベント種別識別符号［０］［１］、イベント種別識別符号［０］［２］、イベント種別識別符号［０］［３］、イベント種別識別符号［０］［４］を順次抽出する。チャネル別符号抽出部１１０は、このイベント種別識別符号［０］［４］を抽出した後は、ステップＳ５５３よりＮｏ側に進み、トラック番号に係るＩを１つインクリメントした後、再びステップＳ５５１乃至Ｓ５５５の処理を繰り返し、続いてイベント種別識別符号［１］［１］、イベント種別識別符号［１］［２］、イベント種別識別符号［１］［３］、イベント種別識別符号［１］［４］を順次抽出する。
【０３９４】
この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、チャネル別符号抽出部１１０は、上記ステップＳ５５１乃至Ｓ５５５の処理を繰り返し、最終的にトラックｍデータに係るイベント種別識別符号［ｍ］［１］、イベント種別識別符号［ｍ］［２］、イベント種別識別符号［ｍ］［３］、イベント種別識別符号［ｍ］［４］を順次抽出すると、イベント種別識別符号抽出処理を終了し、図６３のステップＳ４８７にリターンする。
【０３９５】
続いて、チャネル別符号抽出部１１０は、チャネル番号符号を抽出する（ステップＳ４８８）。即ち、図７１のフローチャートに詳細に示されるように、チャネル別符号抽出部１１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ５６０）、この変数Ｉがトラック数Ｍよりも小さいか否かを判断する（ステップＳ５６１）。先ず、１巡面では、上記ステップＳ５６０でＩ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５６１よりＹｅｓ側に進み、チャネル番号符号［０］を抽出した後（ステップＳ５６２）、トラック番号に係る変数Ｉを１つインクリメントしＩ＝１とする（ステップＳ５６３）。
【０３９６】
そして、チャネル別符号抽出部１１０は、再びステップＳ５６１乃至Ｓ５６３の処理を繰り返し、続いてチャネル番号符号符号［１］を抽出する。
【０３９７】
この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。よって、チャネル別符号抽出部１１０は、上記ステップＳ５６１乃至Ｓ５６３の処理を繰り返し、最終的にトラックｍデータに係るチャネル番号符号符号［ｍ］を抽出すると、チャネル番号符号抽出処理を終了し、図６３のステップＳ４８８にリターンする。
【０３９８】
続いて、チャネル別符号抽出部１１０は、その他情報符号を抽出する（ステップＳ４８９）。即ち、図７２のフローチャートに詳細に示されるように、チャネル別符号抽出部１１０は、先ずトラック番号に係る変数Ｉに０を代入した後（ステップＳ５７０）、このＩがトラック数Ｍよりも小さいか否かを判断する（ステップＳ５７１）。先ず、１巡面では、上記ステップＳ５７０でＩ＝０と設定されているので、チャネル別符号抽出部１１０は、上記ステップＳ５７１よりＹｅｓ側に進み、次いでチャネル番号に係る変数Ｊに０を代入する（ステップＳ５７２）。
【０３９９】
続いて、チャネル別符号抽出部１１０は、このチャネル番号に係る変数Ｊが最大チャネル数ＭＡＸ＿ＣＨよりも小さいか否かを判断する（ステップＳ５７３）。
【０４００】
この１巡面では、上記ステップＳ５７２でＪ＝０と設定されているので、チャネル別符号抽出部１１０は、ステップＳ５７３よりＹｅｓ側に進み、その他情報符号［０］［０］を抽出した後（ステップＳ５７４）、チャネル番号に係る変数Ｊを１つインクリメントしてＪ＝１とする（ステップＳ５７５）。
【０４０１】
尚、第２の実施の形態では、最大チャネル数に係るＭＡＸ＿ＣＨに４が予め設定されているので、チャネル別符号抽出部１１０は、以降、ステップＳ５７３乃至Ｓ５７５の処理を繰り返し、その他情報符号［０］［１］、その他情報符号［０］［２］、その他情報符号［０］［３］、その他情報符号［０］［４］を順次配置する。
【０４０２】
チャネル別符号抽出部１１０は、その他情報符号［０］［４］を抽出した後は、ステップＳ５７３をＮｏ側に進み、トラック番号に係る変数Ｉを１つインクリメントした後、再びステップＳ５７１乃至Ｓ５７５の処理を繰り返し、続いてその他情報符号［１］［１］、その他情報符号［１］［２］、その他情報符号［１］［３］、その他情報符号［１］［４］を順次抽出する。この例では、先に図３で示したようにトラック数に係るＭにｍ＋１が設定されていることを想定している。
【０４０３】
よって、チャネル別符号抽出部１１０は、上記ステップＳ２５１乃至Ｓ２５５の処理を繰り返し、最終的にトラックｍデータに係るその他情報符号［ｍ］［１］、その他情報符号［ｍ］［２］、…、その他情報符号［ｍ］［１５］を順次抽出すると、その他情報符号抽出処理を終了し、こうして、チャネル別符号抽出部１１０によるチャネル別の符号抽出に係る一連の処理を終了することになる。
【０４０４】
即ち、以上の処理により、単一チャネルからなる符号群（各符号群は、Δタイム符号、音程符号、ゲートタイム符号、ベロシティ値符号、差分ベンド値符号、差分ボリューム値符号、イベント種別識別符号、その他情報符号をそれぞれ含むことは勿論である）が抽出されることになる。
【０４０５】
次に、トラック復号部１２０の詳細な構成は、図７３に示した通りであり、Δタイム符号復号部１２１、音程符号復号部１２２、ゲートタイム符号復号部１２３、ベロシティ値符号復号部１２４、差分ベンド値符号復号部１２５、差分ボリューム値符号復号部１２６、イベント種別識別符号復号部１２７、その他情報符号復号部１２８、そしてイベント書き出し部１２９を有している。
【０４０６】
そして、このような構成の下で、これら各部１２１乃至１２８は、各符号を復号し、イベント書き出し部１２９は、当該各符号についてイベントの書き出しを行ない、こうして単一のチャネルからなるトラックデータを生成する。
【０４０７】
このトラック復号部５４によるトラック復号に係る処理の流れは、先に示した図４０と略同様であり、図４０のステップＳ２６５においてなされるＴｒａｃｋ［Ｉ］［Ｊ］の復号に係る処理についても図４１と略同様である。但し、イベント種別毎の復号に係る処理については、図４２とは異なる。
【０４０８】
そこで、以下、図７４のフローチャートを参照しつつ、第２の実施の形態によるイベント種別毎の復号に係る処理を詳細に説明する。
【０４０９】
即ち、この処理を開始すると、トラック復号部５４は、Δタイムよりイベントの種別を判断する（ステップＳ６００）。この第２の実施の形態では、Δタイムの先頭バイトの情報によって、イベントの種別を識別することができる。
【０４１０】
この例では、イベントタイプを３種類（タイプ１〜タイプ３）のイベントとして識別することができる。よって、トラック復号部５４は、当該Δタイムの先頭バイトの情報に基づいてイベントの種別を判断することになる。
【０４１１】
上記ステップＳ６００において、トラック復号部５４は、イベントがタイプ１であると判断した場合には、音程符号［Ｉ］［Ｊ］から１バイトの情報を読み出し、上位２ビットにＪ、下位６ビットにキーナンバを代入し、Ｅｖｅｎｔの末尾にアペンドする（ステップＳ６０１）。このとき、キーシフトは保存する。
【０４１２】
次いで、トラック復号部５４は、ゲートタイム符号［Ｉ］［Ｊ］から１バイトの情報を読み出し、Ｅｖｅｎｔの末尾にアペンドする（ステップＳ６０２）。さらに、トラック復号部５４は、ベロシティ値符号［Ｉ］［Ｊ］から１バイトの情報を読み出し、上位６ビットにベロシティ、下位２ビットにキーシフトを代入し、Ｅｖｅｎｔの末尾にアペンドし（ステップＳ６０３）、ステップＳ６２０に進む。
【０４１３】
上記ステップＳ６００において、トラック復号部５４は、イベントがタイプ２であると判断した場合には、ステータスバイト０ｘｆｆを生成し、Ｅｖｅｎｔの末尾にアペンドする（ステップＳ６０４）。そして、トラック復号部５４は、上位６ビットには０、下位２ビットにはＪを代入したコマンドバイトを生成し、Ｅｖｅｎｔの末尾にアペンドする（ステップＳ６０５）。さらに、トラック復号部５４は、音程符号［Ｉ］［Ｊ］から１バイトの情報を読み出し、Ｅｖｅｎｔの末尾にアペンドし（ステップＳ６０６）、ゲートタイム符号［Ｉ］［Ｊ］から１バイトの情報を読み出し、Ｅｖｅｎｔの末尾にアペンドし（ステップＳ６０７）、ステップＳ６２０に進む。
【０４１４】
一方、上記ステップＳ６００において、トラック復号部５４は、イベントがタイプ３であると判断した場合には、イベント種別識別符号［Ｉ］［Ｊ］から１符号を順次読み込み（ステップＳ６０８）、イベント種別識別符号が０ｘ０８以上であるか否かがを判断する（ステップＳ６０９）。ここで、イベント種別識別符号が０ｘ０８以上であるならば、トラック復号部５４は、ステータスバイト０ｘｆｆを生成し、Ｅｖｅｎｔの末尾にアペンドし（ステップＳ６１０）、イベント種別識別符号に応じたコマンドバイトを生成し、Ｅｖｅｎｔの末尾にアペンドし（ステップＳ６１１）、イベント種別識別符号が０ｘ０ｄであるか否かを判断する（ステップＳ６１２）。
【０４１５】
このステップＳ６１２で、イベント種別識別符号が０ｘ０ｄであるならば、トラック復号部５４は、差分ベンド値符号［Ｉ］［Ｊ］から１バイトを読み出し、直前のベンド値に加えた値を下位６ビットに、上位２ビットにＪを代入し、Ｅｖｅｎｔの末尾にアペンドし（ステップＳ６１３）、ステップＳ６２０に進む。
【０４１６】
一方、上記ステップＳ６１２において、イベント種別識別符号が０ｘ０ｄでないならば、トラック復号部５４は、続いてイベント種別識別符号が０ｘ０ｂであるか否かを判断し（ステップＳ６１４）、０ｘ０ｂであるならば、差分ボリューム値符号［Ｉ］［Ｊ］から１バイトを読み出し、直前のボリューム値に加えた値を下位６ビットに、上位２ビットにＪを代入し、Ｅｖｅｎｔの末尾にアペンドし（ステップＳ６１５）、ステップＳ６２０に進む。これに対して、上記ステップＳ６１４において、イベント種別識別符号が０ｘ０ｂでないならば、トラック復号部５４は、続いてその他情報符号［Ｉ］［Ｊ］から１バイトの情報を読み出し、下位６ビットに０、上位２ビットにＪを代入し、Ｅｖｅｎｔの末尾にアペンドし（ステップＳ６１６）、ステップＳ６２０に進むことになる。上記ステップＳ６０９において、イベント種別識別符号が０ｘ０８未満であるならば、トラック復号部５４は、Ｊに応じたステータスバイトを生成し、Ｅｖｅｎｔの末尾にアペンドし（ステップＳ６１７）、イベント種別識別情報が０ｘ０３以上であるか否かを判断する（ステップＳ６１８）。
【０４１７】
ここで、Ｊはチャネル番号を示すが、先に説明したように、ＳＭＦの改良フォーマットの符号化時には、イベントクラスに応じて、Ｃｌａｓｓ　Ｎｏｒｍａｌならチャネル０、ＣｌａｓｓＡならチャネル１、ＣｌａｓｓＢならチャネル２、ＣｌａｓｓＣならチャネル３に属するイベントとして扱うことになることから、上記ステップＳ６１７ではイベントクラスに応じたステータスバイトを復元生成することになる。
【０４１８】
このステップＳ６１８において、イベント種別識別符号が０ｘ０３以上であるならば、トラック復号部５４は、イベント種別識別符号に応じたコマンドバイトを生成し、Ｅｖｅｎｔの末尾にアペンドし（ステップＳ６１９）、ステップＳ６２０に進む。これに対して、ステップＳ６１８において、イベント種別識別符号が０ｘ０３未満であるならば、トラック復号部５４はそのままステップＳ６２０に進む。こうして、ステップＳ６２０では、トラック復号部５４は、前述したファイルの仕様に従い、イベントが完成するまでその他情報符号［Ｉ］［Ｊ］から符号を読み出し、Ｅｖｅｎｔの末尾にアペンドし（ステップＳ６２０）、この処理を終了する。
【０４１９】
次に、トラックマージ及びチャネル番号符号復号部５５の詳細な構成は、先に図４３に示した構成と略同様であり、トラックマージ部５５ａとチャネル番号符号復号部５５ｂからなる。かかる構成の下、チャネル番号符号復号部５５ｂはチャネル番号符号１３を復号し、トラックマージ部５５ａは当該チャネル番号符号を加味しつつ、トラックｘデータ１１−ｘを復号する。このとき、チャネルに属しないイベントについては、符号化の説明で述べたとおりイベントクラスにより対応するチャネル０〜３に属するものとしてチャネル番号符号１３に記録されているので、この対応をとって復号することになる。このトラックマージ部５５による復号に係る処理の流れは、先に図４４、図４５のフローチャートに示した通りであるので、ここでは重複した説明は省略する。
【０４２０】
こうして、トラック毎のトラック０データ、トラック１データ、…、トラックｍデータが生成されると、これらは、トラック配置部５６に入力され、当該トラック配置部５６にて楽曲ファイル４に配列される。
【０４２１】
このトラック配置部５６によるトラック配置に係る処理を詳細は、先に図４７のフローチャートに示した通りであるので、重複した説明は省略する。
【０４２２】
以上説明したような一連の処理により、２次符号６から２次符号復号部５１により１次符号５が復号され、当該１次符号５から１次符号復号部５２により楽曲ファイル４が復号されることになる。
【０４２３】
以上説明したように、本発明の第２の実施の形態に係る演奏情報圧縮装置、演奏情報圧縮方法、演奏情報圧縮プログラム、演奏情報復号装置、演奏情報復号方法、演奏情報復号プログラムでは、以下の効果が奏される。
【０４２４】
即ち、演奏情報圧縮装置等では、１次符号生成部２による処理により，楽曲ファイル４（ＳＭＦの改良）の無駄が省かれ、しかも楽曲ファイル４（ＳＭＦの改良）の演奏情報を損なうことなく、圧縮されたデータ量とした１次符号５を生成することを実現している。更に、この１次符号５を、楽曲ファイル４（ＳＭＦの改良）に比して同一データパターンの出現頻度が高く、同一データパターンがより近い距離に記録され、更に同じ種別の符号内で同じデータパターンが出現する確率が高いものとすることで、２次符号生成部３における汎用圧縮方式による圧縮効率を向上させている。
【０４２５】
この効果は、演奏情報復号装置等においても、１次符号復号部５２、２次符号復号部５１にて、同様に奏される。しかも、１次符号化時に各演奏情報を時間的に独立させつつ、当該各演奏情報の順番に係る情報を保存することで、符号化された演奏情報を復号した場合に上記各演奏情報の順番が入れ替わることもない。即ち、復号された演奏情報が完全に元の演奏情報と一致することになる。
【０４２６】
（第３の実施の形態）
第３の実施の形態では、前述した第１及び第２の実施の形態に係る演奏情報圧縮装置、演奏情報圧縮方法、演奏情報圧縮プログラム、演奏情報復号装置、演奏情報復号方法、演奏情報復号プログラムを、携帯端末装置に着信メロディをダウンロードさせるようなシステムに適用する例を示し、説明する。
【０４２７】
尚、この第３の実施の形態では、入力データのフォーマットとして、ＳＭＦ及びその改良フォーマットの他、ＭＦｉ、ＳＭＡＦ、コンパクトＭＩＤＩ等といった着信メロディ専用フォーマットにも適用可能なものとする。
【０４２８】
先ず、図７５には第３の実施の形態にかかるシステムの第１構成例を示す。
【０４２９】
演奏情報としてＳＭＦ２００と歌詞ファイル２０１は、変換部２０２に入力され、演奏情報ファイル２０３に変換される。この歌詞ファイル２０１には、歌詞文字のテキスト情報、テキストの色変更のタイミング情報、テキストの表示位置や書体、ページの切替えタイミング等が記述されている。そして、演奏情報ファイル２０３は、音程の情報と、音の強さの情報と、音の長さの情報と、その他の情報とを記述することが可能な専用のファイルフォーマットであっても、着信メロディ専用フォーマットであっても、ＳＭＦであってもよい。この演奏情報ファイル２０３は、１次符号生成部２０４によって１次符号化され、更に２次符号生成部２０６によって２次符号化され、圧縮ファイル２０８が生成される。
【０４３０】
この２次符号化の際には、再生プレーヤ（ソフトウェア）２０５も併せて圧縮ファイル２０８に含められる。１次符号生成部２０４としては、第１及び第２の実施の形態に係る１次符号生成部２を採用することができ、２次符号生成部２０６としては、第１及び第２の実施の形態に係る２次符号生成部３を採用することができる。上記圧縮ファイル２０８は、サーバ２０７にアップロードされる。
【０４３１】
そして、この圧縮ファイル２０８は、携帯端末装置３００からのリクエストに基づき当該携帯端末装置３００にダウンロードされる。ダウンロードされた圧縮ファイル２０８は、携帯端末装置３００の記憶領域２０９に格納される。
【０４３２】
この圧縮ファイル２０８は、２次符号復号部２１０に送られ、当該２次符号復号部２１０において復号が行われ、再生プレーヤ２１２と１次符号２０８に分離される。この１次符号２０８は記憶領域２１１に格納される。
【０４３３】
再生プレーヤ２１２には、１次符号復号部２１３と歌詞表示部２１４が含まれており、上記１次符号２０８は、１次符号復号部２１３により復号され、演奏情報ファイル２０３が得られ、記憶領域２１５に格納される。この演奏情報ファイル２０３は、更にＳＭＦ２００と歌詞ファイル等２０１に分離され、ＳＭＦ２００は音声再生部２１６に送られ、歌詞ファイル等２０１は歌詞表示部２１４に送られる。そして、音声再生部２１６により音声再生がなされ、歌詞表示部２１４により歌詞表示がなされる。尚、音声再生部２１６、歌詞表示部２１４では、公知の手法を採用できるので、詳細な説明は省略する。
【０４３４】
次に、図７６には第３の実施の形態にかかるシステムの第２構成例を示す。
【０４３５】
この第２構成例においても、ＳＭＦ２００と歌詞ファイル等２１０とが変換部２０２へ入力され、当該変換部２０２において演奏情報ファイル２０３が生成される点は上記第１構成例と同様である。但し、この第２構成例では、演奏情報ファイル２０３が第１圧縮部２２０により圧縮され、圧縮ファイル２２２が生成される。この第１圧縮部２２０としては、上述した第１及び第２の実施の形態に係る演奏情報圧縮装置を採用することができる。一方、演奏情報ファイル２０３を再生するための再生プレーヤ２０５には、上記演奏情報ファイル２２２を復号するための第１復号部２２５が含まれている。再生プレーヤ２０５は、第２圧縮部２２１によって圧縮され、圧縮ファイル２２３が生成される。これら圧縮ファイル２２２，２２３は、サーバ２０７にアップロードされる。
【０４３６】
これら圧縮ファイル２２２，２２３は、いずれも携帯端末装置３０１の記憶領域２０９にダウンロードされる。そして、このダウンロードされた圧縮ファイル２２２，２２３のうち、再生プレーヤに係る圧縮ファイル２２３は、第２復号部２２４により復号され、再生プレーヤ２２５が得られる。
【０４３７】
一方、演奏情報ファイル２０３に係る圧縮ファイル２２２は、第１復号部２２６により伸長され、演奏情報ファイル２０３が生成される。
【０４３８】
そして、この演奏情報ファイル２０３は、ＳＭＦ２００及び歌詞ファイル等２０１に展開され、歌詞ファイル等２０１は歌詞表示部２１４に送られて当該歌詞表示部２１４により歌詞の表示が行われ、ＳＭＦ２００は音声再生部２１６に送られて当該音声再生部２１６により音声の再生が行われることになる。
【０４３９】
尚、上記第１復号部２２６としては、上述した第１及び第２の実施の形態に係る演奏情報復号装置を採用することができる。
【０４４０】
次に、図７７には第３の実施の形態にかかるシステムの第３構成例を示す。
【０４４１】
ここでは、上述した第１及び第２構成例との相違点を中心に説明する。
【０４４２】
この第３構成例では、携帯端末装置３０２内の再生プレーヤ２２８に、第２復号部２２６と、歌詞表示部２１４、音声再生部２２７が内蔵されている。
【０４４３】
この第１復号部２２６としては、上述した第１及び第２の実施の形態に係る演奏情報復号装置を採用することができることは勿論である。そして、第１圧縮部２２０としては、アルゴリズムを公開しない独自の圧縮方法を用い、第１圧縮部２２０及び第１復号部２２６を非公開とすることで、コンテンツの不正な製作による違法サーバを防止することができる。
【０４４４】
次に、図７８には第３の実施の形態に係るシステムの第４構成例を示す。
【０４４５】
ここでは、上述した第１乃至第３構成例との相違点を中心に説明する。
【０４４６】
上記第２及び第３構成例では、ＳＭＦ２００と歌詞ファイル等２０１とが変換部２０２にて演奏情報ファイル２０３に変換され、第１圧縮部２２０によって圧縮されているのに対して、この第４構成例では、歌詞ファイル２０１が圧縮されないで、演奏情報ファイル２０３が第１圧縮部２２０によって圧縮された圧縮ファイル２２２に合成される。そして、この歌詞ファイル２０１が合成された演奏情報ファイル２２２は、サーバ２０７にアップロードされる。
【０４４７】
この演奏情報ファイル２２２及び再生プレーヤ２０５に係る圧縮ファイル２２３は、携帯端末装置３０３の記憶領域２０９にダウンロードされる。そして、この圧縮ファイル２２２，２２３を使用する場合、先ず圧縮ファイル２２３は第２復号部２２４によって復号され、再生プレーヤ２２８が得られる。
【０４４８】
一方、歌詞ファイル１０２が合成された演奏情報ファイル２２２からは、歌詞ファイル２０１が分離される。そして、この歌詞ファイル２０１が分離された圧縮ファイル２２９は、第１復号部２２６によって伸長され、演奏情報ファイル２０３が復号され、更にＳＭＦ２００に展開され、記憶領域２１５に格納され、音声再生部２１６にて音声の再生が行なわれる。一方、分離された歌詞ファイル２０１は、歌詞表示部２１４に送られ、ここで歌詞の表示が行なわれる。
【０４４９】
尚、上記第１復号部２２６としては、上述した第１及び第２の実施の形態に係る演奏情報復号装置を採用することができる。
【０４５０】
以上説明した第１乃至第４の構成例では、圧縮された演奏情報ファイル２０８の復号を行うためには再生プレーヤ１０６に添付されている１次符号復号部２１３が必要となることから、演奏情報ファイル２０３と再生プレーヤ２０５とを関連付け、演奏情報ファイル２０３と再生プレーヤ２０５にＩＤや電子透かしを付加して両者が一致した場合のみ再生を許可する等の処理を行えば、圧縮された演奏情報ファイル２０８が単独でやり取りされても使用不可能となる為、異なる再生プレーヤによる不正な再生が防止されるといった効果がある。また、演奏情報ファイル２０３については、第１及び第２の実施の形態で説明した演奏情報圧縮装置の１次符号生成部２、２次符号生成部３による１次符号化及び２次符号化を採用しているので、よりデータ量を削減することができることになる。
【０４５１】
更に、上記第１乃至第４の構成例では、携帯端末装置３０１を例に挙げたが、これに限定されることなく、家電製品、車載用端末、固定電話端末等、メモリ容量やネツトワークのトラフィック容量に制限を持たせる必要のあるシステムであれば、適用可能である。また、容量に制限のある、例えばメモリカードのような記録媒体にダウンロードしたファイルをそのまま保存するような場合には、メモリカードの記憶容量を節約することも可能となる。
【０４５２】
以上説明した第３の実施の形態によれば、演奏情報ファイルのデータ量を削減することができるので、携帯端末装置にファイルをダウンロードする時間を短縮し、携帯端末装置の記憶手段の容量を節約することができる。
【０４５３】
また、再生プレーヤと圧縮した演奏情報ファイルとを同時に伝送し、演奏情報ファイルを他の再生プレーヤでは再生できない仕様とすれば、演奏情報ファイルの不正使用が防止されることになる。また、例えば１００キロバイトのＳＭＦを上述した第１及び及び第２の実施の形態に係る装置等を第３の実施の形態に係るシステムに適用した場合、１０キロバイト程度まで圧縮可能なことから、着信メロディの如きものをやりとりする上では、サイズ的にもより好適なものとなる。
【０４５４】
以上、本発明の第１乃至第３の実施の形態について説明したが、本発明の演奏情報圧縮装置、方法、プログラムでは、ＳＭＦ又はその改良ファイルをチャネル毎に少なくともイベント間の相対時間の情報と、発音開始音程の情報と、音の強さの情報と、発音終了音程の情報と、その他の情報（改良ファイルでは更に音の長さ）とに分離し、上記チャネルに関係なく上記各情報毎にまとめ、当該まとめられた上記各情報をそれぞれ独立した領域に配置した１次符号を生成し、当該１次符号の各領域の情報を汎用圧縮方法により圧縮する。ＳＭＦでは、１つのトラック・チャンクは１つのトラックデータを含み、該トラックデータには複数のチャネルに係るデータを含むことがあるが、上述のようにチャネルに関係なく各情報毎にまとめることで、汎用圧縮法による圧縮により好適な１次符号を生成することができ、更には２次符号により高効率で圧縮することが可能となる。
【０４５５】
さらに、本発明の演奏情報圧縮装置、方法、プログラムでは、１次符号生成時に同一のトラックデータに同時刻に係る複数のイベントが記録されている場合には、複数のイベントからなるイベント群の最後尾に記録されているイベント以外のチャネルの情報を記録する。このように、最後尾に記録されているイベントのチャネルの情報を削除することで、データ量を縮減することができる。
【０４５６】
また、本発明の演奏情報圧縮装置、方法、プログラムでは、１次符号生成時に各イベントに出現頻度の高低により異なるイベント種別識別符号を割り当て、当該イベント種別識別符号をイベント毎に記録する。本発明の２次符号時にはＬＺ法とハフマン符号化法を組み合わせたＬＨＡ符号化法も採用可能であるが、出現頻度の高低によってイベント種別識別符号を割り当てれば、動的ハフマン符号化法にはより好適なものとなり、その結果、圧縮率を低くすることができる。
【０４５７】
そして、本発明の演奏情報圧縮装置、方法、プログラムは、１次符号生成時にイベント間の相対時間の情報に基づいて、イベント種別を識別する。これによれば、例えば、Δタイムの情報に基づきイベント種別を識別できることになり、データ量が削減され、２次符号時の圧縮効率が更に高まることになる。
【０４５８】
さらに、本発明の演奏情報圧縮装置、方法、プログラムは、１次符号時に各イベント間の相対時間の最大公約数を算出し、各イベント間の相対時間を上記最大公約数で除算した数値を符号化する。Δタイムは各イベントと対で存在するものであるが、通常２バイトを要していたケースでも、１バイトの使用で済ませることもできることになり、全体として容量を削減することができる。尚、最大公約数が演算不能な場合には、所定の値で代替することも考えられる。
【０４５９】
また、本発明の演奏情報復号装置、方法、プログラムは、上記演奏情報圧縮装置等により圧縮された２次符号を復号して１次符号を得て、更に１次符号を復号して楽曲ファイルを得るものであることから、上記同様の効果が奏される。
【０４６０】
尚、本発明は上記第１乃至第３の実施の形態に限定されることなく、その趣旨を逸脱しない範囲で種々の改良・変更が可能である。
【０４６１】
例えば、上記実施の形態では、２次符号化時にＬＺ符号化法とハフマン符号化法の復号方式であるＬＨＡ符号化法等を採用することを例として挙げたが、これに限定されることなく、種々の圧縮法を採用することができる。例えば、ランレングス符号化法、ＢＳＴＷ符号化法、ＺＩＰ符号化法等の如くである。
【０４６２】
尚、このＬＺ符号化法については、ＬＺ７７符号化法のほか、そのバリエーションとして、ＬＺＲ符号化法、ＬＺＳＳ符号化法、ＬＺＢ符号化法、ＬＺＨ符号化法、ＬＺＢＷ符号化法、ＬＺＩＴ符号化法等、種々のものがある。
【０４６３】
更に、入力データ（楽曲ファイル）のフォーマットは、第１及び第２の実施の形態の冒頭で各々説明したフォーマットに限定されるものではなく、ＳＭＡＦ、ＭＦｉやＣＭＸのフォーマットにも適用可能であることは勿論である。
【０４６４】
また、各フローチャートにおける最大チャネル数ＭＡＸ＿ＣＨの値は、前述した値に限定されるものではないことは勿論である。
【０４６５】
尚、本発明には、以下の如き技術的思想が含まれる。
【０４６６】
第１に、少なくとも発音音程の情報、音の強さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有する演奏情報ファイルの入力を受け、当該演奏情報ファイルを圧縮し、伝送する演奏情報伝送システムにおいて、
上記演奏情報ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成する１次符号生成手段と、
上記１次符号生成手段により生成された１次符号の各領域に配置された各情報及び上記演奏情報ファイルを再生するためのプログラム形態の再生プレーヤを所定の圧縮方法により圧縮し、２次符号を生成する２次符号生成手段と、
上記２次符号を伝送する伝送手段と、
を有することを特徴とする演奏情報伝送システム、である。
【０４６７】
第２に、少なくとも発音音程の情報、音の強さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有する演奏情報ファイルと当該演奏情報ファイルを再生するためのプログラム形態の再生プレーヤとが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号を演奏情報ファイルに復号する演奏情報伝送システムにおいて、
上記２次符号を受信する伝送手段と、
上記２次符号を１次符号及び上記演奏情報ファイルを再生するためのプログラム形態の再生プレーヤに復号する２次符号復号手段と、
上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号する１次符号復号手段と、を有することを特徴とする演奏情報伝送システム、である。
【０４６８】
第３に、少なくとも発音音程の情報、音の強さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有する演奏情報ファイルの入力を受け、当該演奏情報ファイルを圧縮し、伝送する演奏情報伝送方法において、
１次符号生成手段により、上記演奏情報ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成し、
２次符号生成手段により、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報及び上記演奏情報ファイルを再生するためのプログラム形態の再生プレーヤを所定の圧縮方法により圧縮し、２次符号を生成し、
伝送手段により、上記２次符号を伝送する、
ことを特徴とする演奏情報伝送方法、である。
【０４６９】
第４に、少なくとも発音音程の情報、音の強さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有する演奏情報ファイルと当該演奏情報ファイルを再生するためのプログラム形態の再生プレーヤとが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号を演奏情報ファイルに復号する演奏情報伝送方法において、
伝送手段により、上記２次符号を受信し、
２次符号復号手段により、上記２次符号を１次符号及び上記演奏情報ファイルを再生するためのプログラム形態の再生プレーヤに復号し、
１次符号復号手段により、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号する、
ことを特徴とする演奏情報伝送方法、である。
【０４７０】
第５に、少なくとも発音音程の情報、音の強さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有する演奏情報ファイルの入力を受け、当該演奏情報ファイルを圧縮し、伝送する演奏情報伝送プログラムにおいて、
コンピュータに、
上記演奏情報ファイルのトラックデータを、各チャネルに帰属する複数のトラックデータに分離し、当該チャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータを上記各情報毎に更に分離し、この分離された各情報を当該チャネルへの帰属に関係なく各情報の種別毎にまとめ、その種別毎に独立した領域に配置することで１次符号を生成するステップと、
上記１次符号生成手段により生成された１次符号の各領域に配置された各情報及び上記演奏情報ファイルを再生するためのプログラム形態の再生プレーヤを所定の圧縮方法により圧縮し、２次符号を生成するステップと、
上記２次符号を伝送するステップと、
を実行させるための演奏情報伝送プログラム、である。
【０４７１】
第６に、少なくとも発音音程の情報、音の強さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでおり所定のチャネルに帰属するトラックデータを有する演奏情報ファイルと当該演奏情報ファイルを再生するためのプログラム形態の再生プレーヤとが圧縮され生成された２次符号を１次符号に復号し、更に当該１次符号を演奏情報ファイルに復号する演奏情報伝送プログラムにおいて、
コンピュータに、
上記２次符号を受信するステップと、
上記２次符号を１次符号及び上記演奏情報ファイルを再生するためのプログラム形態の再生プレーヤに復号するステップと、
上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、
を実行させるための演奏情報伝送プログラム、である。
【０４７２】
【発明の効果】
以上詳述したように、本発明によれば、復号後においても各演奏情報の順番を回復させ、復号された演奏情報が元の演奏情報と一致しない等といった事態が生じるのを防止し、一部の演奏情報の記録を省略する等して１次符号のサイズを小さくし、更には、汎用圧縮方式との組合せにより演奏情報のデータ量を効率的に圧縮、伸長することが可能な、演奏情報圧縮装置、演奏情報復号装置、演奏情報圧縮方法、演奏情報復号方法、演奏情報圧縮プログラム、演奏情報復号プログラムを提供することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係る演奏情報圧縮装置１の構成を示すブロック図である。
【図２】第１の実施の形態に係る演奏情報圧縮装置１における１次符号生成部２の詳細な構成を示すブロック図である。
【図３】第１の実施の形態に係る演奏情報圧縮装置１の１次符号生成部２内のトラック分離部７の詳細な構成を示すブロック図である。
【図４】トラック分離部７によるトラック分離に係る処理を説明するためのフローチャートである。
【図５】第１の実施の形態に係る演奏情報圧縮装置１の１次符号生成部２内のチャネル分離及びチャネル番号符号生成部８の詳細な構成を示すブロック図である。
【図６】チャネル分離及びチャネル番号符号生成部８によるチャネル分離、チャネル番号符号生成に係る処理を説明するためのフローチャートである。
【図７】（ａ）はトラックｘデータの構成を示す図であり、（ｂ）はトラックｘデータを分離した単一チャネルからなるトラックｘデータを示す図であり、（ｃ）はチャネル分離及びチャネル番号符号生成部８によるチャネル番号符号生成に係る処理による効果を説明するための図である。
【図８】第１の実施の形態に係る演奏情報圧縮装置１のチャネル番号以外の符号生成部９の詳細な構成を示すブロック図である。
【図９】チャネル番号以外の符号生成部９による符号化の処理を説明するためのフローチャートである。
【図１０】図９のステップＳ３６において実行されるＴｒａｃｋ［Ｉ］［Ｊ］の符号化に係る処理を更に詳細に説明するためのフローチャートである。
【図１１】図１０のステップＳ４７において実行されるイベント毎の符号化に係る処理を更に詳細に説明するためのフローチャートである。
【図１２】第１の実施の形態に係る演奏情報圧縮装置１の１次符号生成部２内の符号配置部１０の詳細な構成を示すブロック図である。
【図１３】符号配置置部１０による符号配置の処理を説明する為のフローチャートである。
【図１４】図１３のステップＳ６１において実行されるΔタイム符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図１５】図１３のステップＳ６２において実行されるＮｏｔｅ　Ｏｎ音程符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図１６】図１３のステップＳ６３において実行されるＮｏｔｅ　Ｏｆｆ音程符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図１７】図１３のステップＳ６４において実行されるベロシティ値符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図１８】図１３のステップＳ６５において実行される差分ベンド値符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図１９】図１３のステップＳ６６において実行される差分エクスプレッション値符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図２０】図１３のステップＳ６７において実行されるイベント種別識別符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図２１】イベント種別識別符号表の一例を示す図である。
【図２２】図１３のステップＳ６８において実行されるチャネル番号符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図２３】図１３のステップＳ６９において実行されるその他情報符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図２４】１次符号生成部２により生成された１次符号５の基本配置順序を示す図である。
【図２５】（ａ）は１次符号生成部２により生成された１次符号５の各符号の詳細な内部配置順序を示す図、（ｂ）はチャネル番号符号の内部配置順序を示す図である。
【図２６】本発明の第１の実施の形態に係る演奏情報復号装置５０の構成を示すブロック図である。
【図２７】第１の実施の形態に係る演奏情報圧縮装置５０における１次符号復号部５１の詳細な構成を示すブロック図である。
【図２８】第１の実施の形態に係る演奏情報圧縮装置１の１次符号復号部５１内のチャネル別符号抽出部５３の詳細な構成を示すブロック図である。
【図２９】チャネル別符号抽出部５３による符号抽出に係る処理を説明する為のフローチャートである。
【図３０】図２９のステップＳ１６１において実行されるΔタイム符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図３１】図２９のステップＳ１６２において実行されるＮｏｔｅ　Ｏｎ音程符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図３２】図２９のステップＳ１６３において実行されるＮｏｔｅ　Ｏｆｆ音程符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図３３】図２９のステップＳ１６４において実行されるベロシティ値符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図３４】図２９のステップＳ１６５において実行される差分ベンド値符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図３５】図２９のステップＳ１６６において実行される差分エクスプレッション値符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図３６】図２９のステップＳ１６７において実行されるイベント種別識別符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図３７】図２９のステップＳ１６８において実行されるチャネル番号符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図３８】図２９のステップＳ１６９において実行されるその他情報符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図３９】第１の実施の形態に係る演奏情報圧縮装置５０の１次符号生成部５２内のトラック復号部５４の詳細な構成を示すブロック図である。
【図４０】トラック復号部５４による復号処理を説明する為のフローチャートである。
【図４１】図４１のステップＳ２６６において実行されるＴｒａｃｋ［Ｉ］［Ｊ］の復号に係る処理を更に詳細に説明するためのフローチャートである。
【図４２】図４１のステップＳ２７３において実行されるイベント種別毎の復号に係る処理を更に詳細に説明するためのフローチャートである。
【図４３】第１の実施の形態に係る演奏情報圧縮装置５０の１次符号生成部５２内のトラックマージ及びチャネル番号符号復号部５５の詳細構成を示すブロック図である。
【図４４】トラックマージ及びチャネル番号符号復号部５５によるトラックマージ及びチャネル番号符号の復号に係る処理を説明するためのフローチャートである。
【図４５】図４４のステップＳ３０５において実行されるトラックマージに係る処理を更に詳細に説明するためのフローチャートである。
【図４６】第１の実施の形態に係る演奏情報圧縮装置５０の１次符号生成部５２内のトラック配置部５６の詳細な構成を示すブロック図である。
【図４７】トラック配置部５６によるトラック配置に係る処理を説明するためのフローチャートである。
【図４８】第２の実施の形態に係る演奏情報圧縮装置７０のチャネル番号以外の符号生成部１００の詳細な構成を示すブロック図である。
【図４９】第２の実施の形態において、図１０のステップＳ４７において実行されるイベント毎の符号化に係る処理を更に詳細に説明するためのフローチャートである。
【図５０】符号配置置部１０による符号配置の処理を説明する為のフローチャートである。
【図５１】図５０のステップＳ３８１において実行されるΔタイム符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図５２】図５０のステップＳ３８２において実行される音程符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図５３】図５０のステップＳ３８３において実行されるゲートタイム音程符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図５４】図５０のステップＳ３８４において実行されるベロシティ値符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図５５】図５０のステップＳ３８５において実行される差分ベンド値符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図５６】図５０のステップＳ３８６において実行される差分ボリューム値符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図５７】図５０のステップＳ３８７において実行されるイベント種別識別符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図５８】イベント種別識別符号表の一例を示す図である。
【図５９】図５０のステップＳ３８８において実行されるチャネル番号符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図６０】図５０のステップＳ３８９において実行されるその他情報符号配置に係る処理を更に詳細に説明するためのフローチャートである。
【図６１】第２の実施の形態において、１次符号生成部２により生成された１次符号５の基本配置順序を示す図である。
【図６２】第２の実施の形態に係る演奏情報復号装置８０が採用するチャネル別符号抽出部１１０の詳細な構成を示すブロック図である。
【図６３】チャネル別符号抽出部１１０による符号抽出に係る処理を説明する為のフローチャートである。
【図６４】図６３のステップＳ４８１において実行されるΔタイム符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図６５】図６３のステップＳ４８２において実行される音程符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図６６】図６３のステップＳ４８３において実行されるゲートタイム符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図６７】図６３のステップＳ４８４において実行されるベロシティ値符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図６８】図６３のステップＳ４８５において実行される差分ベンド値符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図６９】図６３のステップＳ４８６において実行される差分ボリューム値符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図７０】図６３のステップＳ４８７において実行されるイベント種別識別符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図７１】図６３のステップＳ４８８において実行されるチャネル番号符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図７２】図６３のステップＳ４８９において実行されるその他情報符号抽出に係る処理を更に詳細に説明するためのフローチャートである。
【図７３】第２の実施の形態に係る演奏情報復号装置８０におけるトラック復号部１２０の詳細な構成を示すブロック図である。
【図７４】第２の実施の形態において、図４１のステップＳ２７３において実行されるイベント種別毎の復号に係る処理を更に詳細に説明するフローチャートである。
【図７５】第３の実施の形態に係るシステムの第１構成例を示す図である。
【図７６】第３の実施の形態に係るシステムの第２構成例を示す図である。
【図７７】第３の実施の形態に係るシステムの第３構成例を示す図である。
【図７８】第３の実施の形態に係るシステムの第４構成例を示す図である。
【図７９】演奏情報フォーマット別タイプ対応表を示す図である。
【符号の説明】
１　演奏情報圧縮装置
２　１次符号生成部
３　２次符号生成部
４　楽曲ファイル
５　１次符号
６　２次符号
７　トラック分離部
７ａファイル解析部
８　チャネル分離及びチャネル番号符号生成部
８ａトラック解析部
８ｂチャネル番号符号生成部
９　チャネル番号以外の符号生成部
１０　符号配置部
１１　トラックデータ
２１　イベント種別解析識別部
２２　Δタイム符号生成部
２３　Ｎｏｔｅ　Ｏｎ音程符号生成部
２４　Ｎｏｔｅ　Ｏｆｆ音程符号生成部
２５　ベロシティ値符号生成部
２６　差分ベンド値符号生成部
２７　差分エクスプレッション値符号生成部
２８　イベント種別識別符号生成部
２９　その他情報符号生成部
５０　演奏情報復号装置
５１　２次符号復号部
５２　１次符号復号部
５３　チャネル別符号抽出部
５４　トラック復号部
５５　トラックマージ及びチャネル番号符号復号部
５５ａトラックマージ部
５５ｂチャネル番号符号復号部
５６　トラック配置部
６０　Δタイム符号復号部
６１　Ｎｏｔｅ　Ｏｎ音程符号復号部
６２　Ｎｏｔｅ　Ｏｆｆ音程符号復号部
６３　ベロシティ値符号復号部
６４　差分ベンド値符号復号部
６５　差分エクスプレッション値符号復号部
６６　イベント種別識別符号復号部
６７　その他情報符号復号部
６８　イベント書き出し部
６９　単一チャネルからなるトラックデータ
７０　演奏情報圧縮装置
８０　演奏情報復号装置
１００　チャネル番号以外の符号生成部
１０１　イベント種別解析識別部
１０２　Δタイム符号生成部
１０３　音程符号生成部
１０４　ゲートタイム符号生成部
１０５　ベロシティ値符号生成部
１０６　差分ベンド値符号生成部
１０７　差分ボリューム値符号生成部
１０８　イベント種別識別符号生成部
１０９　その他情報符号生成部
１１０　チャネル別符号抽出部
１２０　チャネル番号以外の符号抽出部
１２１　Δタイム符号抽出部
１２２　音程符号抽出部
１２３　ゲートタイム符号抽出部
１２４　ベロシティ値符号抽出部
１２５　差分ベンド値符号抽出部
１２６　差分ボリューム値符号抽出部
１２７　イベント種別識別符号抽出部
１２８　その他情報符号抽出部
１２９　イベント書き出し部
【図１】
2004004155.tif 000003
【図２】
2004004155.tif 000004
【図３】
2004004155.tif 000005
【図４】
2004004155.tif 000006
【図５】
2004004155.tif 000007
【図６】
2004004155.tif 000008
【図７】
2004004155.tif 000009
【図８】
2004004155.tif 000010
【図９】
2004004155.tif 000011
【図１０】
2004004155.tif 000012
【図１１】
2004004155.tif 000013
【図１２】
2004004155.tif 000014
【図１３】
2004004155.tif 000015
【図１４】
2004004155.tif 000016
【図１５】
2004004155.tif 000017
【図１６】
2004004155.tif 000018
【図１７】
2004004155.tif 000019
【図１８】
2004004155.tif 000020
【図１９】
2004004155.tif 000021
【図２０】
2004004155.tif 000022
【図２１】
2004004155.tif 000023
【図２２】
2004004155.tif 000024
【図２３】
2004004155.tif 000025
【図２４】
2004004155.tif 000026
【図２５】
2004004155.tif 000027
【図２６】
2004004155.tif 000028
【図２７】
2004004155.tif 000029
【図２８】
2004004155.tif 000030
【図２９】
2004004155.tif 000031
【図３０】
2004004155.tif 000032
【図３１】
2004004155.tif 000033
【図３２】
2004004155.tif 000034
【図３３】
2004004155.tif 000035
【図３４】
2004004155.tif 000036
【図３５】
2004004155.tif 000037
【図３６】
2004004155.tif 000038
【図３７】
2004004155.tif 000039
【図３８】
2004004155.tif 000040
【図３９】
2004004155.tif 000041
【図４０】
2004004155.tif 000042
【図４１】
2004004155.tif 000043
【図４２】
2004004155.tif 000044
【図４３】
2004004155.tif 000045
【図４４】
2004004155.tif 000046
【図４５】
2004004155.tif 000047
【図４６】
2004004155.tif 000048
【図４７】
2004004155.tif 000049
【図４８】
2004004155.tif 000050
【図４９】
2004004155.tif 000051
【図５０】
2004004155.tif 000052
【図５１】
2004004155.tif 000053
【図５２】
2004004155.tif 000054
【図５３】
2004004155.tif 000055
【図５４】
2004004155.tif 000056
【図５５】
2004004155.tif 000057
【図５６】
2004004155.tif 000058
【図５７】
2004004155.tif 000059
【図５８】
2004004155.tif 000060
【図５９】
2004004155.tif 000061
【図６０】
2004004155.tif 000062
【図６１】
2004004155.tif 000063
【図６２】
2004004155.tif 000064
【図６３】
2004004155.tif 000065
【図６４】
2004004155.tif 000066
【図６５】
2004004155.tif 000067
【図６６】
2004004155.tif 000068
【図６７】
2004004155.tif 000069
【図６８】
2004004155.tif 000070
【図６９】
2004004155.tif 000071
【図７０】
2004004155.tif 000072
【図７１】
2004004155.tif 000073
【図７２】
2004004155.tif 000074
【図７３】
2004004155.tif 000075
【図７４】
2004004155.tif 000076
【図７５】
2004004155.tif 000077
【図７６】
2004004155.tif 000078
【図７７】
2004004155.tif 000079
【図７８】
2004004155.tif 000080
【図７９】
2004004155.tif 000081
【手続補正書】
【提出日】平成15年7月22日(2003.7.22)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮装置において、
上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成する１次符号生成手段と、
上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮する２次符号生成手段と、
を有することを特徴とする演奏情報圧縮装置。
【請求項２】
少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮装置において、
上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成する１次符号生成手段と、
上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮する２次符号生成手段と、
を有することを特徴とする演奏情報圧縮装置。
【請求項３】
上記１次符号生成手段は、上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置。
【請求項４】
上記１次符号生成手段は、イベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置。
【請求項５】
上記１次符号生成手段は、演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置。
【請求項６】
上記１次符号生成手段は、上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録することを更なる特徴とする請求項２に記載の演奏情報圧縮装置。
【請求項７】
請求項１に記載の演奏情報圧縮装置により圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号装置において、
上記２次符号を１次符号に復号する２次符号復号手段と、
上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号する１次符号復号手段と、を有することを特徴とする演奏情報復号装置。
【請求項８】
請求項２に記載の演奏情報圧縮装置により圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号装置において、
上記２次符号を１次符号に復号する２次符号復号手段と、
上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号する１次符号復号手段と、を有することを特徴とする演奏情報復号装置。
【請求項９】
上記１次符号復号手段は、上記復号のときには、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられたイベント種別識別符号に基づいて識別する、ことを更なる特徴とする請求項７又は８に記載の演奏情報復号装置。
【請求項１０】
上記１次符号復号手段は、イベントが所定のタイプである場合には、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成する、ことを更なる特徴とする請求項８に記載の演奏情報復号装置。
【請求項１１】
少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮方法において、
１次符号生成手段により、上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成するステップと、
２次符号生成手段により、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、
を有することを特徴とする演奏情報圧縮方法。
【請求項１２】
少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮方法において、
１次符号生成手段により、上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成するステップと、
２次符号生成手段により、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、
を有することを特徴とする演奏情報圧縮方法。
【請求項１３】
上記１次符号生成手段により、
上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外するステップ、
を更に有することを特徴とする請求項１１又は１２に記載の演奏情報圧縮方法。
【請求項１４】
上記１次符号生成手段により、
イベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置するステップ、を更に有することを特徴とする請求項１１又は１２に記載の演奏情報圧縮方法。
【請求項１５】
上記１次符号生成手段により、
演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することステップ、
を更に有することを特徴とする請求項１１又は１２に記載の演奏情報圧縮方法。
【請求項１６】
上記１次符号生成手段により、
上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録するステップ、
を更に有することを特徴とする請求項１２に記載の演奏情報圧縮方法。
【請求項１７】
請求項１１に記載の演奏情報圧縮方法により圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号方法において、
２次符号復号手段により、上記２次符号を１次符号に復号するステップと、
１次符号復号手段により、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、
を有することを特徴とする演奏情報復号方法。
【請求項１８】
請求項１２に記載の演奏情報圧縮方法により圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号方法において、
２次符号復号手段により、上記２次符号を１次符号に復号するステップと、
１次符号復号手段により、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、
を有することを特徴とする演奏情報復号方法。
【請求項１９】
上記１次符号復号手段により、上記復号のときには、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられた、イベント種別識別符号に基づいて識別するステップを更に有することを特徴とする請求項１７又は１８に記載の演奏情報復号方法。
【請求項２０】
上記１次符号復号手段により、イベントが所定のタイプである場合には、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成するステップを更に有することを特徴とする請求項１８に記載の演奏情報復号方法。
【請求項２１】
少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮プログラムにおいて、
コンピュータに、
上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成するステップと、
この生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、
を実行させるための演奏情報圧縮プログラム。
【請求項２２】
少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮プログラムにおいて、
コンピュータに、
上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成するステップと、
この生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、
を実行させるための演奏情報圧縮プログラム。
【請求項２３】
上記コンピュータに、
上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外するステップを更に実行させる、
ことを特徴とする請求項２１又は２２に記載の演奏情報圧縮プログラム。
【請求項２４】
上記コンピュータに、
イベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置するステップを更に実行させる、
ことを特徴とする請求項２１又は２２に記載の演奏情報圧縮プログラム。
【請求項２５】
上記コンピュータに、
演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することステップを更に実行させる、
ことを特徴とする請求項２１又は２２に記載の演奏情報圧縮プログラム。
【請求項２６】
上記コンピュータに、
上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録するステップを更に実行させる、ことを特徴とする請求項２２に記載の演奏情報圧縮プログラム。
【請求項２７】
請求項２１に記載の演奏情報圧縮プログラムにより圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号プログラムにおいて、
コンピュータに、
上記２次符号を１次符号に復号するステップと、
上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、
を実行させることを特徴とする演奏情報復号プログラム。
【請求項２８】
請求項２２に記載の演奏情報圧縮プログラムにより圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号プログラムにおいて、
コンピュータに、
上記２次符号を１次符号に復号するステップと、
上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、
を実行させることを特徴とする演奏情報復号プログラム。
【請求項２９】
上記コンピュータに、
上記復号のときには、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられた、イベント種別識別符号に基づいて識別するステップを更に実行させる、ことを特徴とする請求項２７又は２８に記載の演奏情報復号プログラム。
【請求項３０】
上記コンピュータに、
イベントが所定のタイプである場合には、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成するステップを更に実行させることを特徴とする請求項２８に記載の演奏情報復号プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１５
【補正方法】変更
【補正の内容】
【００１５】
【課題を解決するための手段】
上記目的を達成するために、請求項１の発明は、少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮装置において、上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成する１次符号生成手段と、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮する２次符号生成手段と、を有することを特徴とする演奏情報圧縮装置としたものである。
請求項２の発明は、少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮装置において、上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成する１次符号生成手段と、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮する２次符号生成手段と、を有することを特徴とする演奏情報圧縮装置としたものである。
請求項３の発明は、上記１次符号生成手段は、上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置としたものである。
請求項４の発明は、上記１次符号生成手段は、イベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置としたものである。
請求項５の発明は、上記１次符号生成手段は、演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することを更なる特徴とする請求項１又は２に記載の演奏情報圧縮装置としたものである。
請求項６の発明は、上記１次符号生成手段は、上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録することを更なる特徴とする請求項２に記載の演奏情報圧縮装置としたものである。
請求項７の発明は、請求項１に記載の演奏情報圧縮装置により圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号装置において、上記２次符号を１次符号に復号する２次符号復号手段と、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号する１次符号復号手段と、を有することを特徴とする演奏情報復号装置としたものである。
請求項８の発明は、請求項２に記載の演奏情報圧縮装置により圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号装置において、上記２次符号を１次符号に復号する２次符号復号手段と、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号する１次符号復号手段と、を有することを特徴とする演奏情報復号装置としたものである。
請求項９の発明は、上記１次符号復号手段は、上記復号のときには、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられたイベント種別識別符号に基づいて識別する、ことを更なる特徴とする請求項７又は８に記載の演奏情報復号装置としたものである。
請求項１０の発明は、上記１次符号復号手段は、イベントが所定のタイプである場合には、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成する、ことを更なる特徴とする請求項８に記載の演奏情報復号装置としたものである。
請求項１１の発明は、少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮方法において、１次符号生成手段により、上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成するステップと、２次符号生成手段により、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、を有することを特徴とする演奏情報圧縮方法としたものである。
請求項１２の発明は、少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮方法において、１次符号生成手段により、上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成するステップと、２次符号生成手段により、上記１次符号生成手段により生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、を有することを特徴とする演奏情報圧縮方法としたものである。
請求項１３の発明は、上記１次符号生成手段により、上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外するステップ、を更に有することを特徴とする請求項１１又は１２に記載の演奏情報圧縮方法としたものである。
請求項１４の発明は、上記１次符号生成手段により、イベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置するステップ、を更に有することを特徴とする請求項１１又は１２に記載の演奏情報圧縮方法としたものである。
請求項１５の発明は、上記１次符号生成手段により、演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することステップ、を更に有することを特徴とする請求項１１又は１２に記載の演奏情報圧縮方法としたものである。
請求項１６の発明は、上記１次符号生成手段により、上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録するステップ、を更に有することを特徴とする請求項１２に記載の演奏情報圧縮方法としたものである。
請求項１７の発明は、請求項１１に記載の演奏情報圧縮方法により圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号方法において、２次符号復号手段により、上記２次符号を１次符号に復号するステップと、１次符号復号手段により、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、を有することを特徴とする演奏情報復号方法としたものである。
請求項１８の発明は、請求項１２に記載の演奏情報圧縮方法により圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号方法において、２次符号復号手段により、上記２次符号を１次符号に復号するステップと、１次符号復号手段により、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、を有することを特徴とする演奏情報復号方法としたものである。
請求項１９の発明は、上記１次符号復号手段により、上記復号のときには、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられた、イベント種別識別符号に基づいて識別するステップを更に有することを特徴とする請求項１７又は１８に記載の演奏情報復号方法としたものである。
請求項２０の発明は、上記１次符号復号手段により、イベントが所定のタイプである場合には、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成するステップを更に有することを特徴とする請求項１８に記載の演奏情報復号方法としたものである。
請求項２１の発明は、少なくとも発音開始音程の情報、音の強さの情報、発音終了音程の情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮プログラムにおいて、コンピュータに、上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成するステップと、この生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、を実行させるための演奏情報圧縮プログラムとしたものである。
請求項２２の発明は、少なくとも音程の情報、音の強さの情報、音の長さの情報、その他の情報からなるイベントと、該イベント間の相対時間の情報とを含んでいる複数のトラックデータを有するファイルの入力を受け、当該ファイルを圧縮する演奏情報圧縮プログラムにおいて、コンピュータにより、上記ファイルの複数のトラックデータを、各チャネルに帰属するトラックデータ毎に分離し、復号化のときに参照する為のチャネルへの帰属を示す情報を保持しつつ、各チャネルに帰属するトラックデータの情報を種別毎に更に分離し、この分離された種別毎の情報を種別毎にまとめ、種別毎に独立した領域に配置することで１次符号を生成するステップと、この生成された１次符号の各領域に配置された各情報を所定の圧縮方法により圧縮するステップと、を実行させるための演奏情報圧縮プログラムとしたものである。
請求項２３の発明は、上記コンピュータに、上記イベント間の相対時間の情報に基づき、上記トラックデータに同時刻に係る複数のイベントが記録されていると判断した場合には上記複数のイベントからなるイベント群の最後尾に記録されるイベントについて、又は所定時刻に係るイベントが単一であると判断した場合には当該イベントについて、チャネルへの帰属を示す情報を保持する対象から除外するステップを更に実行させる、ことを特徴とする請求項２１又は２２に記載の演奏情報圧縮プログラムとしたものである。
請求項２４の発明は、上記コンピュータに、イベント種別識別符号を上記トラックデータに含まれる各イベント毎に割り当て、当該イベント種別識別符号をまとめて、独立した領域に配置するステップを更に実行させる、ことを特徴とする請求項２１又は２２に記載の演奏情報圧縮プログラムとしたものである。
請求項２５の発明は、上記コンピュータに、演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することステップを更に実行させる、ことを特徴とする請求項２１又は２２に記載の演奏情報圧縮プログラムとしたものである。
請求項２６の発明は、上記コンピュータに、上記イベントが所定のタイプである場合には、チャネルへの帰属を示す情報の代わりにイベントクラス情報を記録するステップを更に実行させる、ことを特徴とする請求項２２に記載の演奏情報圧縮プログラムとしたものである。
請求項２７の発明は、請求項２１に記載の演奏情報圧縮プログラムにより圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号プログラムにおいて、コンピュータに、上記２次符号を１次符号に復号するステップと、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、を実行させることを特徴とする演奏情報復号プログラムとしたものである。
請求項２８の発明は、請求項２２に記載の演奏情報圧縮プログラムにより圧縮され生成された２次符号を所定の復号方法により１次符号に復号し、更に当該１次符号をファイルに復号する演奏情報復号プログラムにおいて、コンピュータに、上記２次符号を１次符号に復号するステップと、上記１次符号について、独立した領域に配置されている種別毎の各情報を当該種別毎に抽出し、上記チャネルへの帰属を示す情報を参照しつつ、抽出した各情報を各チャネルに帰属する複数のトラックデータとして構成し、更にファイルのトラックデータとして構成することでファイルに復号するステップと、を実行させることを特徴とする演奏情報復号プログラムとしたものである。
請求項２９の発明は、上記コンピュータに、上記復号のときには、独立した領域に配置されている各イベントの種別を、各イベント毎に割り当てられた、イベント種別識別符号に基づいて識別するステップを更に実行させる、ことを特徴とする請求項２７又は２８に記載の演奏情報復号プログラムとしたものである。　請求項３０の発明は、上記コンピュータに、イベントが所定のタイプである場合には、上記チャネルへの帰属を示す情報の代わりにイベントクラス情報を参照しつつトラックデータを構成するステップを更に実行させることを特徴とする請求項２８に記載の演奏情報復号プログラムとしたものである。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】削除
【補正の内容】
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１７
【補正方法】削除
【補正の内容】
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１８
【補正方法】削除
【補正の内容】
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００１９
【補正方法】削除
【補正の内容】
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００２０
【補正方法】削除
【補正の内容】
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００２１
【補正方法】削除
【補正の内容】
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００２２
【補正方法】削除
【補正の内容】
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００２３
【補正方法】削除
【補正の内容】
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００２４
【補正方法】削除
【補正の内容】
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００２５
【補正方法】削除
【補正の内容】
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】削除
【補正の内容】
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００２７
【補正方法】削除
【補正の内容】
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】削除
【補正の内容】
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００２９
【補正方法】削除
【補正の内容】
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】００３０
【補正方法】削除
【補正の内容】
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】００３１
【補正方法】削除
【補正の内容】
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】００３２
【補正方法】削除
【補正の内容】
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】００３３
【補正方法】削除
【補正の内容】
【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】００３４
【補正方法】削除
【補正の内容】
【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】００３５
【補正方法】削除
【補正の内容】
【手続補正２３】
【補正対象書類名】明細書
【補正対象項目名】００３６
【補正方法】削除
【補正の内容】
【手続補正２４】
【補正対象書類名】明細書
【補正対象項目名】００３７
【補正方法】削除
【補正の内容】
【手続補正２５】
【補正対象書類名】明細書
【補正対象項目名】００３８
【補正方法】削除
【補正の内容】
【手続補正２６】
【補正対象書類名】明細書
【補正対象項目名】００３９
【補正方法】削除
【補正の内容】
【手続補正２７】
【補正対象書類名】明細書
【補正対象項目名】００４０
【補正方法】削除
【補正の内容】
【手続補正２８】
【補正対象書類名】明細書
【補正対象項目名】００４１
【補正方法】削除
【補正の内容】
【手続補正２９】
【補正対象書類名】明細書
【補正対象項目名】００４２
【補正方法】削除
【補正の内容】
【手続補正３０】
【補正対象書類名】明細書
【補正対象項目名】００４３
【補正方法】削除
【補正の内容】
【手続補正３１】
【補正対象書類名】明細書
【補正対象項目名】００４４
【補正方法】削除
【補正の内容】
【手続補正３２】
【補正対象書類名】明細書
【補正対象項目名】００４５
【補正方法】削除
【補正の内容】
【手続補正３３】
【補正対象書類名】明細書
【補正対象項目名】００４６
【補正方法】削除
【補正の内容】
【手続補正３４】
【補正対象書類名】明細書
【補正対象項目名】００４７
【補正方法】削除
【補正の内容】
【手続補正３５】
【補正対象書類名】明細書
【補正対象項目名】００４８
【補正方法】削除
【補正の内容】
【手続補正３６】
【補正対象書類名】明細書
【補正対象項目名】００４９
【補正方法】削除
【補正の内容】
【手続補正３７】
【補正対象書類名】明細書
【補正対象項目名】００５０
【補正方法】削除
【補正の内容】
【手続補正３８】
【補正対象書類名】明細書
【補正対象項目名】００５３
【補正方法】変更
【補正の内容】
【００５３】
以上は、ＳＭＦのフォーマットの概要であるが、この第１の実施の形態に係る演奏情報圧縮装置等が採用するフォーマットでは、上記演奏情報ファイルに記録されているイベント群に含まれるイベントのうち、少なくとも最も使用頻度の高いイベントのイベント種別の識別情報を、１次符号の相対時間符号に含めて記録することを更なる特徴としている。より詳細には、１次符号のΔタイムをイベント種別識別可能に変換して記録することで、最も使用頻度の高いイベントと使用頻度次点のイベントの符号化時にイベント種別識別符号の符号化を省略して１次符号のデータ量を減らしている。これは、第１の実施の形態に係る特徴部分の一つであることは勿論である。


【手続補正３９】
【補正対象書類名】明細書
【補正対象項目名】０２６１
【補正方法】変更
【補正の内容】
【０２６１】
そして、ここで、Ｍｄｅｌｔａ＝０である場合には、トラックマージ及びチャネル番号符号復号部５５は、チャネル番号符号［Ｉ］から１符号を空読みする（ステップＳ３２６）。次いで、トラックマージ及びチャネル番号符号復号部５５は、イベントを読み込んだチャネルのトラックデータに係るＴｉｃｋを更新し、符号化するΔタイムを算出してＭｄｅｌｔａに代入し、更にＭａｓｔｅｒＴｉｃｋを更新する（ステップＳ３２７）。そして、Ｔｒａｃｋ［Ｉ］の末尾にＭｄｅｌｔａに代入したΔタイム及びＥｖｅｎｔに代入したイベントを付加し（ステップＳ３２８）、上記ステップＳ３１０に戻り、上記処理を繰り返すことになる。そして、上記ステップＳ３１９において、トラックマージ及びチャネル番号符号復号部５５は、ＮｅｘｔＴｉｃｋ＝０ｘｆｆｆｆｆｆｆｆの関係が成立するものと判断すると、この処理を終了する。こうして、トラック毎のトラック０データ、トラック１データ、・・・、トラックｍデータが生成される。


【手続補正４０】
【補正対象書類名】図面
【補正対象項目名】図７
【補正方法】変更
【補正の内容】
【図７】
2004004155.tif 000082
【手続補正４１】
【補正対象書類名】図面
【補正対象項目名】図４５
【補正方法】変更
【補正の内容】
【図４５】
2004004155.tif 000083