(57)【要約】【課題】  合成音波形を生成するものにおいて、波形データと波形処理を一元管理するとともに、読み出された波形データの波形処理を簡素化する音波形生成装置を提供する。【解決手段】  波形生成データは、元の波形データが複数の区間に分割された波形データに各区間の管理データを組み合わせたものが時系列の順に接続されたものである。管理データは、対応する各区間において実行される波形処理を指示するイベントID、その実行位置を指示するサンプル位置データを有する。読み出しポインタMPを用いて、各区間の波形データを、楽音波形の時系列に従って読み出す。読み出しポインタMPの値が、各区間の管理データとして記憶されたサンプル位置［0］〜［j］により指定される位置になったときは、対応するイベントID［0］〜ID［j］の指示する波形処理を実行する。ジャンプ処理やループ処理である場合は、読み出しポインタMPの値を変更させる。【選択図】  図２
2006301267.tif 000002
【特許請求の範囲】
【請求項１】
時系列に従った一連の音波形の波形データが複数の区間に分割され、分割された各区間の波形データに該各区間の管理データを組み合わせたデータ構造をとり、該管理データは、前記各区間において実行される波形処理を指示するイベント識別データ及び該波形処理の実行位置を指示する波形位置データを有するように構成された、波形生成データを記憶している波形生成データ記憶手段と、
波形生成を制御する側からの指示に応じて読み出しポインタを生成する読み出しポインタ生成手段と、
該読み出しポインタ生成手段により生成された読み出しポインタを用いて、前記波形生成データ記憶手段から、前記分割された各区間の波形データを読み出す波形データ読み出し手段と、
前記読み出しポインタ生成手段により生成された読み出しポインタの値が、該読み出しポインタから識別される区間に対する管理データとして前記波形生成データ記憶手段に記憶された波形位置データの指示する波形位置になったときは、当該管理データとして前記波形生成データ記憶手段に記憶され、当該波形位置データに対応したイベント識別データの指示する波形処理を実行する波形処理実行手段、
を有することを特徴とする音波形生成装置。
【請求項２】
時系列に従った一連の音波形の波形データが複数の区間に分割され、分割された各区間の波形データに該各区間の管理データを組み合わせたデータ構造をとり、該管理データは、前記各区間において実行される波形処理を指示するイベント識別データ及び該波形処理の実行位置を指示する波形位置データを有するように構成された、波形生成データを記憶している波形生成データ記憶手段を用いて、
波形生成を制御する側からの指示に応じて読み出しポインタを生成する読み出しポインタ生成ステップと、
該読み出しポインタ生成ステップにより生成された読み出しポインタを用いて、前記波形生成データ記憶手段から、前記分割された各区間の波形データを読み出す波形データ読み出しステップと、
前記読み出しポインタ生成ステップにより生成された読み出しポインタの値が、該読み出しポインタから識別される区間に対する管理データとして前記波形生成データ記憶手段に記憶された波形位置データの指示する波形位置になったときは、当該管理データとして前記波形生成データ記憶手段に記憶され、当該波形位置データに対応したイベント識別データの指示する波形処理を実行する波形処理実行ステップ、
をコンピュータに実行させることを特徴とする音波形生成プログラム。
【請求項３】
波形生成データ記憶装置に記憶されており、波形を生成するためにコンピュータにより読み出されて使用される波形生成データのデータ構造であって、
前記波形生成データは、時系列に従った一連の音波形の波形データが複数の区間に分割され、分割された各区間の波形データに該各区間の管理データを組み合わされ、該管理データは、前記各区間において実行される波形処理を指示するイベント識別データ及び該波形処理の実行位置を指示する波形位置データを有するように構成されたものであり、
前記波形生成データは、前記波形生成データ記憶装置を用いて、
波形生成を制御する側からの指示に応じて読み出しポインタを生成する読み出しポインタ生成ステップと、
該読み出しポインタ生成ステップにより生成された読み出しポインタを用いて、前記波形生成データ記憶手段から、前記分割された各区間の波形データを読み出す波形データ読み出しステップと、
前記読み出しポインタ生成ステップにより生成された読み出しポインタの値が、該読み出しポインタから識別される区間に対する管理データとして前記波形生成データ記憶手段に記憶された波形位置データの指示する波形位置になったときは、当該管理データとして前記波形生成データ記憶手段に記憶され、当該波形位置データに対応したイベント識別データの指示する波形処理を実行する波形処理実行ステップ、
を実行する前記コンピュータにより使用されることを特徴とする音波形の波形生成データのデータ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、「波形メモリ読み出し方式」による音波形生成装置に関するものである。
【背景技術】
【０００２】
いわゆる「波形メモリ読み出し方式」を用いた電子楽器の音源においては、楽音波形を、PCM（パルス符号変調）、DPCM（差分PCM）、又は、ADPCM（適応差分PCM）等でディジタル化して得られたサンプルデータをメモリに記憶しておく。このサンプルデータを、音高に応じて読み出すことにより楽音波形を生成する。
図１０は、従来の電子楽器において楽音波形を生成する一例を示す機能構成図である。
図中、１は演奏コントローラであって、鍵盤、外部のMIDI（Musical Instrument Digital Interface）キーボード、シーケンサ等である。音色を指定するプログラムチェンジ・メッセージ、音高、押鍵速度を指示するノートオン・メッセージなどが、演奏制御部２に送られる。
【０００３】
演奏制御部２は、CPU（Central Processing Unit）側の機能であり、波形情報データメモリ５１、波形生成制御部５２を備える。
波形情報データメモリ５１に記憶された波形情報データは、波形生成に必要なデータであり、後述する波形データメモリ５４に記憶されている波形データの記憶領域の先頭位置のデータ、その波形データ中の、どの位置の波形サンプルデータを読み出すか、といったデータである。
この他、演奏制御部２の側の図示しないメモリには、設定音色に応じて、音量レベル、キータッチ（ベロシティ）の感度、フィルタ特性、ビブラート等のエフェクト、等を制御する波形パラメータ群も記憶されている。
波形生成制御部５２は、設定音色に応じて、波形情報データメモリ５１から波形情報データを読み出し、上述した波形パラメータ群とともに、波形生成制御データとして音源部５に転送する。また、演奏コントローラ１から送られてきたノートオン・メッセージ，ノートオフ・メッセージに応じた波形生成制御データを転送する。
波形データとしては、通常、異なるものが同時に用いられるが、以下の説明では、１つの波形データが使用されるものとして説明する。
【０００４】
５は音源部であって、ディジタル論理回路又はDSP（Digital Signal Processor）で構成され、ICチップ化されている。波形データメモリ５４は、楽音波形をサンプリングして得られたサンプルデータを記憶するROM又はRAMであり、ICチップに対して外付けの場合もある。波形生成部５３は、波形生成制御データの指示に従って、波形データメモリ５４に記憶されたサンプルデータを読み出し、合成波形を出力する。
例えば、波形データメモリ５４に記憶されている一楽音の楽音波形を生成するための波形データが、アタック部波形とリリース部ループ波形とで構成されるとすると、これに対応して、波形情報データメモリ５１には、ループ処理を実行する「ループ終了位置」と「ループ長」とがサンプル単位で記憶されている。
【０００５】
波形生成制御部５２は、図示しないCPUバスを介して、波形生成部５３が読み出しているサンプル位置を監視しており、読み出し毎に、「ループ終了位置」との比較をし、現在のサンプル位置が「ループ終了位置」であれば、波形生成部５３に対し、「ループ長」に応じた次のサンプル位置を指示することにより、波形データ読み出し処理を制御する。
上述した具体例では、演奏制御部２の処理はさほど多くない。しかし、近年、「波形メモリ読み出し方式」は複雑化している。
例えば、一楽音の楽音波形を生成するのに、各部分の部分波形として奏法に応じたものを選択し、かつ、１つの部分波形の先頭部と後尾部に波形接続用のループ波形領域を備え、この領域同士を繰り返し用いながらクロスフェードでつないで遷移させる波形生成装置が知られている（特許文献１参照）。
【０００６】
また、波形データメモリ５４の読み出しポインタは、音高（ピッチ）に応じて更新される。この楽音波形の「ピッチ変更処理」に伴い、読み出しポインタを、同一位相の異なるサンプル位置にジャンプさせて、サンプル位置を進めたり戻したりすることにより、波形データの再生期間を伸縮する「波形データの時間軸伸縮制御」が、上述した特許文献１の他、特許文献２，３等で知られている。
いずれも、ループ処理やジャンプ処理を実行するサンプル位置の個数が増大するにつれ、読み出しポインタを更新する度に、処理を実行する多数のサンプル位置と比較し、一致したときは次の読み出しポインタを指示するため、演奏制御部２の処理が飛躍的に増大し、機器組込み用の低速のCPUでは、電子楽器全体の処理に支障を来すことになる。
【０００７】
このように、単に波形データを記録しておくだけでは、波形生成が困難になっている。そのため、複雑な波形生成の要求にこたえる新たなデータ構造が必要とされている。
その一方法として、音源部５の側に、上述した特許文献１に記載の、複数種類の単位波形データを記憶しておく方法が考えられる。ただし、特許文献１は、音源回路がなく、CPUがソフトウエア音源を実現するものである。
【０００８】
図１１は、従来の波形シーケンス及び単位波形データを説明するためのデータ構造図である。図１１（ａ）は、波形情報データメモリ５１に記憶する波形シーケンスWSである。図１１（ｂ）〜図１１（ｅ）は、波形データメモリ５４に記憶する波形データである。
波形シーケンスWSは、一楽音の立ち上がりから立ち下がりまでの一連の楽音波形を生成するために使用する「単位波形データ」を選択するデータ（例えば、アタック部波形AUW（5））と、選択されたものの読み出しを開始する時間のデータ（例えば、Dt0）とを対にして時系列に従って記録されたものである。
【０００９】
「単位波形データ」は、先頭部分に管理データの領域を有し、その後に、波形データが記録されている領域がある。TYPEは単位波形データの種類を示すデータであり、IDは各種類別に多数用意された単位波形データを識別するためのIDである。
図１０（ｂ）のL1Sはスタートアドレス、L1Eはエンドアドレス、L1Pはスタート時の初期位相である。
図１０（ｃ）のNLSはノンループ波形のスタートアドレス、L2S（＝NLE）はノンループ波形のエンドアドレス（＝後尾ループ波形のスタートアドレス）、L2Eは後尾ループ波形のエンドアドレス、L2Pは後尾ループ波形の初期位相である。
図１０（ｄ）のL1Sは先頭ループ波形のスタートアドレス、L1E（＝NLS）は先頭ループ波形のエンドアドレス（＝ノンループ波形のスタートアドレス）、L1Pは先頭ループ波形の初期位相、L2S（＝NLE）は後尾ループ波形のスタートアドレス（＝ノンループ波形のエンドアドレス）、L2Eは後尾ループ波形のエンドアドレス、L2Pは後尾ループ波形の初期位相である。
図１０（ｅ）のL1Sは先頭ループ波形のスタートアドレス、L1E（＝NLS）は先頭ループ波形のエンドアドレス（＝ノンループ波形のスタートアドレス）、L1Pは先頭ループ波形の初期位相、NLEはノンループ波形のエンドアドレスである。
【００１０】
波形情報データとして、図１０（ａ）に示した波形シーケンスWSを用いれば、波形生成制御部５２の処理が低減され、データ転送量も低減される。
しかし、依然として複数の単位波形データと、波形シーケンスWSとが別々に記憶されているので、処理の低減には限界がある。
【００１１】
また、各単位波形データの楽音波形を子細に分析すれば、波形データに冗長性があることがわかる。その結果、ループ波形部分を、ループ波形の繰り返しとノンループ波形とすることができ、ノンループ波形部分も、ループ波形の繰り返しとノンループ波形とすることができる余地がある。
しかし、上述した単位波形データをさらに細分化すれば、先頭部分にある管理データの領域に、多数のループ処理のパラメータを記録しなければならない。そうすると、ループ処理を実行するサンプル位置が増大することから、読み出しポインタを更新する毎にループ処理を実行するサンプル位置になったか否かの判定処理が増大する。
また、合成波形データの多様性が増加するほど、単位波形データの種類を増やす必要がある。
しかし、管理データの領域には、多数のループ処理のパラメータが、各単位波形データ毎に独自に定義されて配列されているので、単位波形データの管理が複雑になるという問題もある。
【００１２】
一方、メモリに記憶された波形データを用いて波形を生成する技術において、波形データブロックの読み出しを指示するデータを、各ブロックのヘッダ部に記録したものが、特許文献４で知られている。種々の同期信号を含む試験用ビデオ信号は、１水平信号ブロック（1H）毎にヘッダとデータブロックが記憶されている。各ブロックにおいて、まずヘッダが読み出された後にデータブロックが読み出される。
ヘッダには、直後のデータブロックを用いて波形を生成するのに用いるパラメータ（このブロックの次に読み出すブロックの先頭アドレス、このブロックが繰り返し選択される場合の繰り返し数、繰り返し終了後に読み出す次のブロックの先頭アドレス）が記録されている。その結果、波形合成用データの全体を１つのメモリに記憶して管理することが可能となる。
しかし、特許文献４に記載の波形データは、水平走査周期という、予め定められた固定のデータブロック単位でループ処理やジャンプ処理を行うビデオ信号である。これに対し、楽音波形には固定のデータブロックという単位がない。
【００１３】
そこで、特許文献４に記載の技術を前提に、特許文献１に記載の上述した単位波形データを用いる楽音生成においても、複数の単位波形データを波形シーケンスに従って接続したものを１つのメモリに記憶しておく方法が考えられる。
加えて、管理データの領域は、その単位波形データ内でループ処理を実行するのに必要なパラメータを含んでいるが、さらに、単位波形データを最小単位として、ジャンプ処理やループ処理をするためのイベント識別データ及びパラメータを含めるようにする。
しかし、ある単位波形データ内のあるサンプル位置から、異なる単位波形データ内の別のサンプル位置にループやジャンプをさせることはできない。そのため、単位波形データが決まれば、読み出しポインタの自由な移動が制約され、多様な合成波形を得られないという問題がある。また、先に述べたように、冗長性を少なくするために単位波形データの中を細分化することは、依然として難しいという問題がある。
【００１４】
以上の通り、特許文献１に記載の楽音波形生成装置は、奏法に応じて多様な合成波形データを実現できるものであるが、一楽音の全波形データや一楽音の単位波形データを、波形生成部５３が容易に処理できるようなデータ構造までは検討されていない。特許文献４に記載の他分野の波形生成技術をそのまま適用しても問題を解決することができない。
【特許文献１】特開2000−56773号公報
【特許文献２】特開2000−122666号公報
【特許文献３】特開2003−84770号公報
【特許文献４】特開2004−5175号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
本発明は、上述した問題点を解決するためになされたもので、音波形の波形データを用いて合成音波形を生成するものにおいて、波形データと波形処理の一元管理、及び、読み出された波形データの波形処理を簡素化する音波形生成装置、音波形生成プログラム、及び、音波形の波形生成データのデータ構造、を提供することを目的とするものである。
【課題を解決するための手段】
【００１６】
本発明は、請求項１に記載の発明においては、音波形生成装置において、時系列に従った一連の音波形の波形データが複数の区間に分割され、分割された各区間の波形データに該各区間の管理データを組み合わせたデータ構造をとり、該管理データは、前記各区間において実行される波形処理を指示するイベント識別データ及び該波形処理の実行位置を指示する波形位置データを有するように構成された、波形生成データを記憶している波形生成データ記憶手段と、波形生成を制御する側からの指示に応じて読み出しポインタを生成する読み出しポインタ生成手段と、読み出しポインタを用いて、前記波形生成データ記憶手段から、前記分割された各区間の波形データを読み出す波形データ読み出し手段と、読み出しポインタの値が、該読み出しポインタから識別される区間に対する管理データとして前記波形生成データ記憶手段に記憶された波形位置データの指示する波形位置になったときは、当該管理データとして前記波形生成データ記憶手段に記憶され、当該波形位置データに対応したイベント識別データの指示する波形処理を実行する波形処理実行手段を有するものである。
また、請求項２に記載の音波形生成プログラムは、コンピュータに、請求項１に記載の音波形生成装置の機能を実現させるものである。
また、請求項３に記載の音波形の波形生成データのデータ構造は、請求項２に記載の音波形生成プログラムを用いて、コンピュータに請求項１に記載の音波形生成装置の機能を実現させるものである。
【００１７】
従って、各区間の波形データにその区間の管理データを組み合わせたデータ構造をとる波形生成データを記憶し、この管理データとして、各区間において実行される波形処理を指示するイベント識別データ及びこの波形処理の実行位置を指示する波形位置データを有するから、波形データと波形処理の実行を管理する管理データが区間毎に一元管理されたデータ構造である。
ある区間の波形生成をしているときは、読み出しポインタの値が、この区間に対する管理データとして記憶された波形位置データの指示する波形位置になったかどうかを判定するだけでよいから、波形処理が簡素化される。
波形生成データ記憶手段に波形生成データを記録する際に、区間を単位として、波形データと管理データの挿入、削除、複写等ができるので、編集が簡素化される。
このように区間を単位として波形データを記憶していても、波形処理の実行位置は区間に制約されることなく、任意に指示される。
【００１８】
上述した波形処理実行手段が実行する波形処理には、ジャンプ処理やループ処理のように読み出しポインタの値を指定するものである場合と、読み出しポインタの値を指定しない場合がある。実行する波形処理が読み出しポインタの値を指定するものである場合、波形処理実行手段は、上述した読み出しポインタ生成手段に対し、読み出しポインタの値を変更させる。読み出しポインタ生成手段は、波形処理実行手段による読み出しポインタの値の変更がなければ、波形のピッチ情報など、波形生成を制御する側からの指示に応じた通常の読み出しポインタの生成処理を継続する。
また、各区間の管理データは、各区間において実行される複数の波形処理を指示する複数のイベント識別データ、及び、この複数の波形処理の実行位置をそれぞれ指示する複数の波形位置データを有するように構成される場合がある。
この場合、読み出しポインタの値が、この読み出しポインタから識別される区間に対する管理データとして波形生成データ記憶手段に記憶された１つの波形位置データの指示する波形位置になったときは、当該管理データとして前記波形生成データ記憶手段に記憶され、前記１つの波形位置データに対応したイベント識別データの指示する波形処理を実行するようにし、この波形処理が読み出しポインタの値を指定するものである場合は、読み出しポインタ生成手段に対し、読み出しポインタの値を変更させるようにすればよい。
【００１９】
また、上述した請求項１に記載の発明において、管理データは、前記波形生成データの各区間の波形データに共通の波形特性制御パラメータを有してもよいように構成され、読み出しポインタ生成手段により生成された読み出しポインタの値から識別される区間に対する管理データとして、波形生成データ記憶手段に波形特性制御パラメータが記憶されているときは、この波形特性制御パラメータに応じて、当該区間の波形データの波形特性を制御する波形特性制御手段を有するものとすることができる。
従って、区間を単位として波形特性制御が簡単に行えるとともに、波形データ、波形処理の実行を管理するデータ、及び、波形特性制御パラメータが一元管理される。
【発明の効果】
【００２０】
波形データと波形処理の実行を管理する管理データが区間毎に組み合わせたデータ構造であることから、波形処理が簡素化されるという効果がある。波形生成データを記録する際にも、編集が簡素化されるという効果がある。
区間を単位としていても、区間に制約されることなく波形処理ができる。
波形生成データに管理データが含まれていても、読み出しポインタの生成に際して、管理データの記録領域を考慮する必要がないという効果がある。
従って、背景技術で述べたように、一楽音の全波形データや単位波形データを、区間分割して細分化することにより冗長性の少ない基本的な波形生成データにし、その反面、ジャンプやループなどの波形処理が複雑になる場合でも、波形処理を波形生成装置の側で容易に実現できるようになる。
波形処理を指示する情報はイベント識別データとして、音波形の波形データとともに波形生成データ記憶手段で一元管理されるので、波形データ及び波形情報データのコンテンツとしての販売、アップグレードに大きな効果がある。さらに、本発明を音源部に適用した場合、波形生成を制御する側の処理が低減されるから、低速のCPUでの実装が可能となる。
【発明を実施するための最良の形態】
【００２１】
図１は、本発明の音波形生成装置の実施の一形態を説明するための機能構成図である。図１（ａ）は全体構成図、図１（ｂ）は音源部５の内部構成図である。従来の電子楽器を示す図１０と同様な部分には同じ符号を付している。
この実施の形態では、演奏制御部２内の波形情報データメモリ３は、音色に応じて使用される波形生成データを指示するデータを持つ。
【００２２】
図２は、図１の波形生成データメモリ７に記憶された波形生成データの第１の具体例を示すデータ構造図である。
図２（ａ）は波形データを分割する区間であり、固定サイズ（固定サンプル）である。
図２（ｂ）は元の波形データである。一例として、時系列に従った一連の音波形の波形サンプルデータである。より具体的には、アタック部と、ループ処理される中間波形と、リリース部とで構成される一楽音の波形データである。あるいは、従来の図１１（ｂ）〜（ｅ）に示した各単位波形データでもよい。
他の例としては、時系列に従った一連の音波形の波形サンプルデータに、同様な一連の音波形の波形サンプルデータを連結したもの、より具体的には、図１１（ｂ）〜（ｅ）に示した各単位波形を図１１（ａ）に示した波形シーケンスに従って連結した一連の波形サンプルデータである。
上述した元の波形データは、固定サイズで区間分割される。
【００２３】
図２（ｃ）に示す波形生成データは、図２（ｂ）に示す元の波形データが、固定サイズで複数の区間Ａ，区間Ｂ，区間Ｃ，…に分割され、かつ、固定サイズの管理データＡ，Ｂ，Ｃがヘッダ（先頭部）として、分割された各区間の波形データＡ，Ｂ，Ｃの間に挿入されたデータ構造を有している。管理データがトレーラ（後尾部）として、分割された各区間の波形データの間に挿入されたデータ構造でもよい。
言い換えれば、元の波形データが複数の区間に分割され、分割された各区間の波形データに各区間の管理データを組み合わせたものが１つの「構造体」を構成し、図２（ｃ）に示した波形生成データは、この構造体が時系列の順に接続されている構造体配列になっている。
ここで、各管理データＡ，Ｂ，Ｃ，…は、これに対応する各区間Ａ，Ｂ，Ｃ，…において実行される波形処理を指示するイベント識別データ、及び、このイベント識別データに対応し、この波形処理の実行位置を指示する波形位置データを有する。
【００２４】
図２（ｄ）に示す波形生成イベントリストは、管理データの第１例である。ループ処理，ジャンプ処理等の複数の波形処理を指示する波形生成イベントデータが１又は複数並べられた波形生成イベントリスト（表）形式で記録されている。
「イベント識別データ」は、イベントID[0]〜ID[j]によりコード化されて示される。サンプル位置[0］〜[j]は、この管理データの区間に対応する波形データの区間（直後の波形データ）内に存在する「波形位置」をサンプル単位で指示する。
このサンプル位置[0]〜[j]を指示する方法としては、図２（ｂ）に示した元の波形データの先頭からのサンプル位置であっても、各区間Ａ，Ｂ，Ｃにおける波形データの先頭からのサンプル位置であってもよい。
上述した「波形位置」は、サンプル位置に限らず、メモリのアドレス位置（例えば、8ビット単位のアドレス）、複数の波形サンプルデータ（例えば、ステレオのL，R両チャンネルの波形サンプルデータ）を１単位として指定される位置であってもよい。
【００２５】
上述した「イベント識別データ」は、対応する波形データの区間において、「サンプル位置」で指定された「波形位置」で実行する波形処理を、コード化されたIDによって波形生成部６に指示する一種の命令である。
波形処理の一具体例は、波形データの読み出しを制御する処理であり、この制御によりメモリに記憶された波形データの利用方法を変更して合成波形の形状を制御する処理である。例えば、次に読み出す波形位置を制御するジャンプ処理やループ処理である。ループ処理はジャンプ処理の一例ということができる。
この場合、上述した波形処理は、一般的には、メモリに記憶された楽音波形データに内在する波形の性質の区切りに応じて、例えば、アタック区間と中間波形区間の区切りの前あるいは後のサンプル位置において実行される。
なお、波形処理の実行によって次に読み出す波形位置は、典型的にはサンプル位置で指定するが、これに限らず、区間位置で指定し、区間単位でジャンプ先を指定したりループ先を指定したりしてもよい。
【００２６】
また、波形処理の他の具体例として、楽音波形の波形データを読み出す間隔を、メモリに記憶された波形データの性質に応じて制御することもできる。
振動音（連続した繰り返し音）と打撃音（過渡的な音）とは、発音構造が異なるため、振動音はピッチを変更するが、打撃音はピッチを変更したくないという場合がある。人声音で言えば、有声音はピッチを変更するが、無声音はピッチを変更したくないという場合がある。
このような場合に、詳細は後述するが、対応する区間のある波形位置から振動音のサンプルデータになるか、打撃音のサンプルデータになるかに応じて、楽音波形の波形データを読み出す間隔を、固定音高用の間隔にするという波形処理を実行したり、可変音高用の間隔にするという波形処理を実行したりする。
【００２７】
また、波形処理は、外部（MIDIシーケンサ等）から与えられる演奏情報によって、実行するか否かを決めることもできる。図９を参照して後述するように、任意の波形処理の実行/不実行を、外部から与えられる条件、例えば、フラグビット（Next Flag）を用いることにより、外部から与えられる条件により簡単に制御できる。
【００２８】
パラメータ［00］〜パラメータ［0k］，…，パラメータ［j1］〜パラメータ［jk］は、波形処理を実行するのに必要なパラメータである。例えば、「ループ」であれば、ループ長（サンプル単位）を、「ジャンプ」であれば、ジャンプ先のサンプル位置などをパラメータとして記録しておき、音源部５側にある図示しないパラメータ・バッファに設定する。
上述したサンプル位置[0]〜[j]のデータサイズ、イベントID[1]〜ID[j]のデータサイズ、パラメータ［00］〜パラメータ［0k］，…，パラメータ［j1］〜パラメータ［jk］のデータサイズは、それぞれにおいて予め決められた固定サイズとする。
【００２９】
イベントID[0]〜ID[j]としては、イベントID＝1をジャンプ処理、イベントID＝2をループ処理とするように、単純に数値を割り振ればよい。しかし、複数の波形生成イベントを同じ波形位置で実行させたい場合がある。この場合は、「ビット形式」にする。すなわち、イベントID[0]〜ID[j]として、各16ビットを使用し、その各ビット位置を1〜16種の波形生成イベントに対応付ける。実行する波形生成イベントに対応するビット位置を1とし、実行されない波形生成イベントに対応するビット位置を0とする。
【００３０】
区間によって波形処理の数が異なるから、管理データとして記録する波形生成イベントの数は任意でよい。また、パラメータの数も波形処理に応じて任意でよく、なくてもよい。しかし、管理データを固定サイズとしたので、空きが生じる場合がある。そのような場合には、空きの領域に、読み出さなくてもよいが読み出しても無意味なデータを記録しておけばよい。
【００３１】
次に、波形処理の具体例として、楽音の音高変更値を切り替える例を説明しておく。
波形生成制御部４は、「音高加算値」として、固定音高用、可変音高用という２種類のものを、波形生成部６に供給する。波形生成部６は、これらを、図示しない音高加算値レジスタに設定しておく。
波形生成部６は、通常、読み出しポインタ（波形読み出しアドレス）に音高加算値を、所定の固定タイミングで累積加算することにより、次の読み出しポインタ（読み出しアドレス）を決定し、それを繰り返し行いながら波形読み出しを行う。
【００３２】
イベントID＝3をピッチ制御処理と定義する。イベントID＝3の付随するパラメータとして、対応する区間の、あるサンプル位置からの波形データが、打撃音であるか、振動音であるかに応じたレジスタ番号（音高加算値レジスタの何番目に設定されている音高加算値を使用するかを指定する値）を用いる。
あるサンプル位置のイベントID＝3であった場合、そのパラメータ（レジスタ番号）から、固定音高用、可変音高用のどちらかの音高加算値を選択し、これに応じて読み出しポインタ（波形読み出しアドレス）を進める。
その結果、波形生成部６は、波形生成データに含まれた波形生成イベントに応じて波形処理をすることにより、自律的に、打撃音，振動音に適したピッチで楽音合成をすることができるようになる。
【００３３】
より多数の音高加算値を持ち、波形の性質に応じてパラメータの値を設定しておき、音高加算値を多様に変化させてもよい。
波形生成部６がビブラート用のピッチオシレータを備えている場合、音高加算値は一種類のままで、あるサンプル位置以後の時系列において、波形の性質がビブラートをかけるのが好ましいものになるか否かに応じて、パラメータの値を設定し、ピッチオシレータ値を加算する/しないの制御を行うことができる。
【００３４】
その場合、上述した定義のイベントID＝3とは別に、ピッチオシレータ加算制御イベントID＝4を定義し、付随するパラメータはオシレータ値を加算する/しないのフラグとして使用してもよい。あるサンプル位置以後の時系列において、その波形の性質に応じて、イベントID＝3，イベントID＝4のそれぞれを管理データとして記録するか、しないかを個別に決めることができる。
【００３５】
図２を参照しながら、図１に戻って説明を続ける。
図１（ｂ）は、波形生成部６の機能のうち、本発明に関係するものを示す説明図である。波形生成部６は、読み出しポインタ生成部６ａ、波形サンプルデータ読み出し部６ｂ、及び、波形処理（波形生成イベント）実行部６ｃを有する。
読み出しポインタ生成部６ａは、波形生成を制御する側からの指示に応じて読み出しポインタMPを生成する。この読み出しポインタMPは、図２（ｃ）に示した波形生成データのうち、波形データを指示する。言い換えれば、図２（ｂ）に示した元の波形データを読み出すのと同じ読み出しポインタである。
【００３６】
波形データ読み出し部６ｂは、読み出しポインタMPを用いて、波形生成データメモリ７から、各区間の波形データを、記録された順、すなわち、楽音波形の時系列に従って読み出す。区間分割された波形データ及び管理データの領域が固定長であることから、波形データの領域及び管理データの領域を個別に読み出すことは、後述する構造体の参照によって簡単にできる。従って、このデータ構造は、リアルタイムで波形を生成する場合に適している。
【００３７】
波形処理実行部６ｃは、波形データ読出部６ｂが各区間の波形データを読み出し中に、読み出しポインタMPの値が、この読み出しポインタから識別される区間（読み出されている波形サンプルデータの属する区間、例えば、図３（ｂ）に示すように、MPの上位ビットが区間番号MNとなる）に対する管理データとして波形生成データメモリ７に記憶されたサンプル位置［0］〜［j］の指示する波形位置になったときは、その管理データとして波形生成データメモリ７に記憶され、このサンプル位置［0］〜［j］に対応したイベントID［0］〜ID［j］の指示する波形処理を実行する。この波形処理が、ジャンプ処理やループ処理のように、読み出しポインタMPの値を指定するものである場合は、読み出しポインタ生成部６ａに対し、読み出しポインタMPの値を変更させる。
【００３８】
読み出しポインタMPの値が、この読み出しポインタから識別される区間の管理データとして記憶されたサンプル位置［0］〜［j］の指示する波形位置になったとき、その波形位置の波形サンプルデータを読み出す前に、イベントID［0］〜ID［j］の指示する波形処理を実行するか、逆に、そのサンプル位置の波形サンプルデータを読み出した後に、波形処理を実行するかは、予め決めておけばどちらでもよい。
【００３９】
波形生成データメモリ７から管理データを読み出すタイミングとしては何通りかある。
（１）読み出しポインタMPの値が更新される毎に、このMPの値から識別される区間に対する管理データとして記憶されたサンプル位置、イベントID、及び、パラメータを読み出して、バッファに一時記憶する。記憶した波形位置データを以後の読み出しポインタMPと比較する。
（２）読み出しポインタMPの値から識別される区間が変更されたときに、識別された区間に対応する管理データとして記憶されたサンプル位置、イベントID、及び、パラメータを読み出して、バッファに一時記憶する。
（３）図２（ｄ）に示したように、ある区間の管理データの領域に複数のサンプル位置［0］〜［j］、対応するイベントID［0］〜ID［j］、パラメータ［00］〜［jk］が記憶されている場合、全ての管理データ（波形生成イベントリスト）を読み出して、バッファに一時記憶しておく必要はなく、波形処理が終了する毎に、１つずつ次のサンプル位置、対応するイベントID、パラメータを読み出せばよい。
（４）上述したいずれの方法においても、イベントID及びパラメータは、読み出しポインタMPの値が、読み出しポインタMPから識別される区間のサンプル位置［0］〜サンプル位置［j］になったときに初めて読み出して、これをバッファに一時記憶してもよい。
以上いずれの方法で管理データを読み出してもよいが、必要になるときまで読み出さなくてもよい。逆に、バッファに先読みしておくことにより、次の波形処理の実行準備をする余裕ができるので、波形処理の遅延を少なくでき、処理の遅い音源チップ、DSPチップであっても実装が可能となる。
【００４０】
図３は、図２に示した波形生成データの具体例において、波形データ及び管理データにアクセスする方法の説明図である。
図３（ａ）は、波形生成データの構造体配列の説明図である。メモリ上のデータ構造で表現をしている。説明を簡単にするため、パラメータが付随しない場合を説明する。
波形生成データは、区間データWAVS［MN］の配列で構成される。MNは、区間番号である。この区間データは、管理データEVENTLISTと波形データWDATAとをまとめた構造体である。
まず、波形データWDATAは、波形サンプルデータWDATA［MPI］の64個の配列で構成される。MPIは区間内の波形位置（サンプル位置）である。WDATA［MPI］は、例えば、符号付16bitで表現することができる。
一方、管理データEVENTLISTは、イベントリストEV[EIX]の6個の配列である。EIXはイベント番号である。管理データEVENTLIST（波形生成イベントリスト）は、波形処理を実行する波形位置（サンプル位置）WPと波形処理を指定するイベントIDであるEIDとをまとめた構造体である。WP，EIDは、例えば、符号なし16bitで表現される。
上述した例では、WDATA［MPI］，WP，EIDをいずれも同じ16bitサイズとしたが、同じにする必要は全くない。
【００４１】
図３（ｂ）は、読み出しポインタMPの一例を示す説明図である。読み出しポインタMPは整数部と小数部を有し、整数部の値に応じて読み出しアドレスを指定し、波形サンプルデータを読み出す。前後の２つの波形サンプルデータを読み出せば、小数部で２つの波形サンプルデータの補間演算を行うことができる。
整数部の上位bitで区間番号MNを示し、下位bitで区間内の波形位置MPIを示す。
図３（ｃ）は、管理データ読み出しポインタの一例を示す説明図である。
その上位bitで区間番号MNを示し、下位bitで管理データ内のイベント番号EIXを示す。
【００４２】
図３（ｄ）は、図３（ａ）に示した構造体配列の参照方法の説明図である。
従来であれば、所望の波形データが記録されている領域の先頭からのオフセット位置が波形サンプルデータの記録位置と同じ値になる。しかし、管理データが挿入されると、そのままでは、波形サンプルデータにアクセスできない。
ところが、構造体配列に対する一般的な参照方法を用いて、簡単に波形サンプルデータにアクセスすることができる。Ｃ言語的に記述する。
【００４３】
波形データ中の波形サンプルデータへアクセスするには、WAVS[MN].WDATA[MPI]でアクセスする。例えば、読み出しポインタMP＝1000の波形サンプルデータを読み出す場合は、MP/64＝15余り40となるので、区間番号MN＝15、区間内波形サンプル位置MPI＝40となる。従って、WAVS[15].WDATA[40]でアクセスする。
管理データ中の「サンプル位置」へアクセスするには、WAVS[MN].EV[EIX].WPでアクセスし、「イベントID」へアクセスするには、WAVS[MN].EV[EIX].EIDでアクセスする。例えば、読み出しポインタMP＝1000の波形サンプルデータが属する区間の管理データの先頭の波形処理を実行する「サンプル位置」とその「イベントID」には、WAVS[15].EV[0].WP、WAVS[15].EV[0].EIDでアクセスする。
以上、Ｃ言語的な関数を用いることができる場合を説明したが、単純計算によってもアクセスが可能である。波形サンプルデータへアクセスするには、読み出しポインタMPからMN，MPIを求め、既知の各構成データのサイズを用いて計算すればアクセスできる。管理データへアクセスするには、読み出しポインタMPからMNを求め、所望のEIXを指定すれば、同様にアクセスできる。従って、図１に示した波形生成部６をハードウエアで構成する場合でもアクセスができる。
【００４４】
図４は、図１の波形生成データメモリ７に記憶された波形生成データの第２の具体例を示すデータ構造図である。
図４（ａ）に示す元の波形データは固定サイズで分割される。図４（ｂ）に示す波形生成データは、管理データの領域を可変サイズにし、各区間の波形データＡ，Ｂ，Ｃ，…に各区間の管理データＡ，Ｂ，Ｃをヘッダ（先頭部）として組み合わせたものが、時系列の順に接続されたデータ構造を有している。管理データＡ，Ｂ，Ｃがトレーラ（後尾部）であってもよい。
管理データの領域に記録されるデータは、図２（ｄ）に示した波形生成イベントのリストと同様であるが、各区間において、実際に存在する波形処理の数やパラメータの数に応じて管理データのサイズを設定し、波形生成データメモリ７の記憶容量を低減することができる。
【００４５】
図５は、図１の波形生成データメモリ７に記憶された波形生成データの第３の具体例を示すデータ構造図である。
図５（ａ）に示す元の波形データは可変サイズで分割される。
図５（ｂ）に示す波形生成データは、各区間の波形データＡ，Ｂ，Ｃ，…に各区間の管理データＡ，Ｂ，Ｃ（図示の通りでは可変サイズであるが、固定サイズでもよい）をヘッダ（先頭部）として組み合わせたものが、時系列の順に接続されたデータ構造を有している。管理データＡ，Ｂ，Ｃがトレーラ（後尾部）であってもよい。
この具体例では、図５（ａ）の元波形データを、元波形データに内在する波形の区切り（例えば、アタック区間と中間波形の区間の区切り）のみで分割することにより、分割数を少なくすることができる。その結果、波形生成データの量を少なくして、波形生成データメモリ７の記憶容量を低減することができる。
【００４６】
図４，図５に示した第２，第３の具体例では、波形読み出し部６ｂが読み出しポインタMPを用いて波形データを読み出すための波形位置計算や、波形処理実行部６ｃが読み出しポインタMPを用いて管理データを読み出すための読出位置計算が複雑になり、処理時間もかかるが、ソングデータの自動演奏など、波形生成したデータを所定時間遅らせて出力してもよい場合、処理時間は余り問題にならない。
ただし、あらかじめ各区間の波形データの領域及び各区間の管理データの領域の可変サイズを知っておく必要がある。そのため、管理データは、次の図６（ａ）に示すものにする。
【００４７】
図６は、図１の波形生成データメモリに記憶された管理データの第２，第３の具体例の説明図である。
図６（ａ）は、図５に示した波形生成データに含まれる管理データ（波形生成イベントリスト）の一例を示す説明図である。
この管理データは、管理データ自身のサイズを記録する領域と、対応する同じ区間の波形データのサイズを記録する領域を備えている。従って、可変サイズに応じたデータバイトあるいはメモリアドレスを累積加算して行くことによって、各区間の波形データ内の波形サンプルデータの波形位置及び対応する各区間の管理データ内の各波形処理の波形位置、イベントIDの記録位置、パラメータの記録位置を知ることができる。
図４に示した波形生成データに含まれる管理データとしては、管理データ自身のサイズを記録する領域のみを追加すればよい。
【００４８】
図６（ｂ）は、管理データ（波形生成イベントリスト）としては第３の具体例となるものを示す説明図である。
図３（ａ）の波形生成データ中に示された管理データに、波形パラメータ[1]〜[m]が加えられている。区間に応じて、波形パラメータの個数および各波形パラメータの値は任意であり、波形パラメータがなくてもよい。しかし、無意味なデータを埋め込んで管理データのサイズを固定にしておく。
波形パラメータ[1]〜[m]は、各区間の波形サンプルデータに対する共通の波形特性制御パラメータである。読み出しポインタの値から識別される区間に対する管理データとして、波形パラメータ[1]〜[m]が記憶されているときは、これらに応じて、その区間の波形データの波形特性を制御する。
【００４９】
ピッチが大きく変化している波形を、一定のピッチで出力するような処理は、従来の方法では困難（波形周期ごとのピッチを記憶しておき、その波形周期毎に波形のピッチを指定する等の方法により可能であるが、波形周期毎の制御は通常困難なため）であった。区間毎にその波形のピッチを記憶しておくことにより、区間波形ごとにピッチの再計算が可能となるため、容易に実現可能となる。
また、通常、波形データの読み出し後にAEG（Amplitude Envelope Generator）により、振幅制御を行う。その際、元波形データ自体に大きな振幅変更があった場合は、波形データを読み出した後に、元波形データ自体の振幅値を求めて振幅を補正する必要があった。このような場合、区間波形全体についての平均的な振幅レベルを波形パラメータとして記録しておくことにより、改めて振幅値を求める必要がないので振幅制御を簡素化することが可能になる。
【００５０】
図６（ｂ）に示した、波形パラメータ[1]〜[m]は、図４，図５に示した波形生成データの管理データに加えてもよい。図５に示した波形生成データの場合、元の波形データに内在する波形の区切りを考慮して可変サイズに分割されていれば、分割された区間毎にパラメータを管理したり設定したりすることが簡単になる。
【００５１】
図７は、本発明の実施の一形態を説明するためのハードウエア構成図である。
CPUバス１１は、複数のハードウエアブロック間でデータを転送する。１４はROM（Read Only Memory）であり、処理プログラムや制御データが記憶されている。１３はRAM（Random Access Memory）であり、ROM１４から処理プログラムがロードされるとともに、作業領域（ワークエリア）が設けられる。CPU１２は、処理プログラムに従って、操作子１５の操作イベント検出、表示部１７に対する表示制御等の一般的な制御を行うとともに、音源回路２２が演奏データに応じて楽音信号を合成するために必要な制御をする。
ROM１４に制御プログラムや設定データが記憶されていない場合、これらを後述する外部記憶装置２１の、ハード磁気ディスク装置（HDD）等に記憶させてもよい。このハード磁気ディスク装置に、制御プログラムや設定データを、CD-ROMからインストールしたり、サーバ装置（外部機器１９）からダウンロードしたりすることができる。
【００５２】
１５は鍵盤、音色設定スイッチ等の操作子、１６は検出回路である。１７はディスプレイ、インジケータ等の表示部、１８は表示回路である。
１９はパーソナルコンピュータ，電子楽器，サーバ等の外部機器である。２０は外部機器１９との間で演奏データ，ソングデータ等を転送する通信インタフェースであり、例えば、MIDI（Musical Instrument Digital Interface）ケーブル、RS232C、USB（Universal Serial Bus）、IEEE1394等である。
２１は外部記憶装置であり、複数の音色に対応した波形情報データや自動演奏用のソングデータ等が記憶されている。例えば、電源オフでも記憶内容を保持し、読み出し書き込み可能な記憶装置、例えば、フラッシュメモリ及び/又はハード磁気ディスク装置（HDD）である。
２２は音源回路であり、楽音合成機能を有した集積回路（音源LSI：Large Scale Integrated Circuit）又はDSP（Digital Signal Processor）である。
【００５３】
複数の波形生成データは、波形メモリ（ROM）２３に記憶されている。この波形メモリ２３は、上述した音源LSI又はDSPに内蔵されていてもよい。
波形メモリ（ROM）２３を差し替えたり増設したりすることができる。これをフラッシュメモリ（フラッシュROM）にすることにより、外部機器１９から波形生成データを転送して書き換えることができる。
上述した波形生成データは、図示しない波形メモリ（RAM）に記憶しておくこともできる。波形生成データを外部記憶装置２１に記憶しておき、外部記憶装置２１から、CPUバス１１を経由して波形メモリ（RAM）に書き込んでおく。音源回路２２は、この波形メモリ（RAM）から波形生成データを、CPUバス１１を経由しないで波形メモリバスを経由して読み出す。
【００５４】
CPU１２は、図１に示した波形生成制御部４の機能を実行し、鍵盤（操作子１５）の操作等に応じた入力演奏データ（ノートメッセージ）に基づいて波形生成制御データを作成し、音源回路２２に出力する。
音源回路２２は、図１に示した波形生成部６の機能を実行し、指定された音色に対応して設定されたパラメータに従って、図１に示した波形生成データメモリ７に対応する、波形メモリ（ROM）２３及び/又は図示しない波形メモリ（RAM）に記憶された波形生成データを読み出し、読み出された波形データを用いて、音色に応じた波形パラメータ群に従い、音量エンベロープを付加し、フィルタ処理等をして、ノートメッセージに応じた合成波形を生成し、アナログ信号に変換してサウンドシステム２４に出力する。
【００５５】
パーソナルコンピュータ内のCPUがソフトウエア音源プログラムを実行することにより、楽音波形を生成してもよい。この場合、図１に示した波形生成部６の機能もCPUが実行する。波形生成データは、外部記憶装置２１に記憶しておき、外部記憶装置２１から、CPUバス１１を経由して波形メモリ（RAM）１３のワークエリアにロードして使用する。従来の波形データと従来の波形情報データは、波形生成データとして一元管理される。
【００５６】
図８は、図７に示した音源回路２２が、図１に示した波形生成部６の機能を実行する動作を説明するためのフローチャートである。DSPを用いた場合は、マイクロプログラムに従って機能を実行する。
このフローチャートは、複数の波形サンプルをまとめて処理するという「フレーム処理」を行った場合の動作を示し、１フレーム分の波形サンプルデータの読み出し処理が指示されたときに起動される。
説明を簡単にするために、図３に示した各区間の波形データ及び管理データが固定サイズのデータ構造で、パラメータは存在しないものとする。
【００５７】
最初の起動時にのみ、各変数を初期化する。１フレーム分のサンプル数をFNとし、処理を終了したサンプル数をfnとすると、初期化時にfn＝0にしておく。
初期化後に、現在の区間MNの管理データ（EVENTLIST）内で次の波形処理を実行する波形位置（波形サンプルデータの位置）NXMP及びこの波形処理を指示するEID（イベントID）をワークメモリ（RAM）にセットしておく。
図３（ａ）に示した波形生成データの先頭からフレーム処理を始める場合、NXMP＝WAVS［0］.EV［0］.WP、EID＝WAVS［0］.EV［0］.EIDである。
このフローチャートの１回分の処理において、波形生成データメモリ７から読み出された波形読み出しサンプル数をnとする。１回分の処理が終わるとfn＝fn＋nが計算される。fn＝FNになるまで、このフローチャートが繰り返し実行される。
【００５８】
Ｓ３０において、上述した波形読み出しサンプル数nを0とする。
Ｓ３１において、次の波形処理を実行するイベント位置（サンプル位置）まで来たか否かを、MP（現在の読み出しポインタ）≧NXMP（次の波形処理を実行するサンプル位置）であるかにより判定する。そうであれば、Ｓ３５以下に処理を進め波形処理を実行する。そうでなければ、Ｓ３２〜Ｓ３４の通常の波形読み出し処理を行う。
【００５９】
Ｓ３２において、波形サンプルデータを読み出す。MP（現在の読み出しポインタ）及びMD（読み出しポインタの加算値）は、整数部と小数部とを有し、図３（ｂ）に示したように、整数部により読み出し位置を指定する。MD（読み出しポインタの加算値）の値は、生成する波形のピッチ等によって決まる。
読み出した波形サンプルデータをRDATAとすると、RDATA［n++］＝波形データ［MP］＝WAVS［MN］.WDATA［MPI］となる。波形読み出しサンプル数nは代入後に+1アップされる。
【００６０】
Ｓ３３において、MPに上述したMDを加算してMPを更新するとともに、区間番号MNの更新をする。MNNをMPの更新後の区間番号とし、FSMPを１区間の波形データに含まれる波形データサンプルの数とすると、MNN＝MP/FSMPとなる。なお、MNNはMPから求められるため、必要な際にMPから取り出してもよい。
Ｓ３４において、更新された読み出しポインタMPが現在の区間を超えたか否かを、MNN（MPの更新後の区間番号）＝MNO（MPの更新前の区間番号）か否かによって判定する。区間が更新された場合は、Ｓ４５へ処理を進め、更新後の区間の波形生成イベントリストにおける最初の波形生成イベントデータを読み出すために、EIX＝0とし、MNNの値をMNO（MP更新前の区間番号）に待避させ、Ｓ４７の波形生成イベントデータ読み出し処理に進める。一方、Ｓ３４において、同じ区間であれば、Ｓ３１の処理に戻り、Ｓ３１において、MPがNXMPを超えるまでＳ３２〜Ｓ３４を繰り返す。
【００６１】
一方、Ｓ３１において次の波形処理位置まで来たと判定されたときは、Ｓ３５に処理を進め、EID（イベントID）があるか否かを判定し、EID＝0のとき、この区間内には実行すべき波形処理がないと判定し、Ｓ３６に処理を進め、区間番号MNN（MP更新後の区間番号）を＋1することにより次の区間を指定し、Ｓ４５へ処理を進め、次の区間の波形生成イベントリストの最初の波形生成イベントデータを読み出すために、EIX＝0として波形生成イベントリストの先頭に戻し、MNNの値をMNO（MP更新前の区間番号）に待避させ、Ｓ４７の波形生成イベントデータ読み出し処理に進める。
EID（イベントID）があれば、Ｓ３７〜Ｓ３９において、このEIDにより指示された波形処理が何であるかを判定し、その結果に応じてＳ４０〜Ｓ４２の波形生成イベント処理に進める。
【００６２】
Ｓ４０〜Ｓ４２の処理が、MPの値を指定する処理でなければ、Ｓ４３からＳ４６に処理を進め、前と同じ区間MNNの波形生成イベントリスト内の次のイベント番号EIXに更新し、Ｓ４７の波形生成イベントデータ読み出し処理に進める。
説明を簡単にするため、１つの区間において、波形生成イベントリストには、波形生成イベント処理を実行する「サンプル位置」の小さいものから順に「サンプル位置」及び「イベントID」が記録されているものとする。
一方、Ｓ４０〜Ｓ４２の波形生成イベント処理が、ジャンプ処理やループ処理など、MPの値を指定するものであった場合、Ｓ４４に処理を進め、Ｓ３３における区間番号更新と同様に、MNN（MP更新後の区間番号）を更新し、Ｓ４５に処理を進める。
【００６３】
Ｓ４５において、更新後の区間の波形生成イベントリストにおける最初の波形生成イベントデータを指定するために、EIX＝0とし、MNNをMNO（MP更新前の区間番号）に格納し、Ｓ４７の管理データ読み出し処理に進める。
説明を簡単にするため、１つの区間において、読み出しポインタの変更を伴う波形生成イベント処理によってMPの値が変更されるときは、異なる区間に移動するものとする。かつ、その区間における最初の波形生成イベント処理を実行するサンプル位置よりも前（過去）の位置であることを前提とする。
この前提を設けない場合、波形生成イベント処理によって読み出しポインタMPが更新されたときは、更新後の区間の波形生成イベントリストを参照し、何番目（EIX）を読み出せば、更新されたMPの波形位置よりも後（未来）になるかを識別する必要がある。
【００６４】
Ｓ４７では、図３（ｄ）に示した構造体配列の参照方法を用いて、指定された区間MNNの管理データにおける、指定されたイベント番号EIXの波形生成イベント処理を実行するサンプル位置（次のイベントのサンプル位置NXMP）及び波形生成イベント処理を特定するイベントID（EID）を読み出す。
以上の１回分の処理が終わると、最後に、波形読み出しサンプル数nを返し、最初に説明したように、fn＝fn＋nが計算され、fn＝FNになるまで、このフローチャートが繰り返し実行される。
【００６５】
図９は、図１に示した機能構成図において、波形生成データが処理される動作例を示す説明図である。図８に示したフローチャートにほぼ従うが、説明を簡単にするため、原則として図８とは切り離して説明する。
図９（ａ）に示すように、元波形データは通常波形Ａ（0〜99），ループ波形Ｂ（100〜149），通常波形Ｃ（150〜255）が接続された0〜255サンプルである。説明を簡単にするため、この元波形データの全体が、１回のフレーム処理で実行されるものとする。
図９（ｂ）に示す波形生成データは、元波形データが、固定サイズ64サンプルの４区間の波形データに分割され、固定サイズの波形生成イベントリストが挿入されたものである。
図９（ｃ）に示す管理データは波形生成イベントリストであり、３個の波形生成イベントについて、各処理を実行するサンプル位置WP、処理を特定するEID、１つのパラメータを伴っている。
図９（ｄ）は、これまでに説明していなかったNext Flag（ネクストフラグ）であって、0又は1である。このフラグにより、波形生成制御部４の側から波形生成イベント処理の条件を変更して波形生成を制御することが可能になる。
図９（ｅ）は、波形生成された合成波形である。
【００６６】
図９（ｃ）の波形生成イベントリストにおいて、EID＝0は、この波形生成イベントリストに、これ以後波形生成イベントが無いことを示す。この場合、その後続のデータは読み込む必要がない。リスト中、「−」の記号は読み出しても無意味なデータを表す。
EID＝1は、「条件付波形ジャンプ処理」を指示する。条件付とは、図９（ｄ）に示したNext Flag＝1のときに実行される「ジャンプ処理」である。ジャンプ先の波形位置は、付随するパラメータで指示される。
EID＝2は、「ループ処理」を指示する。現在の読み出しポインタMPの位置より、付随するパラメータで指示されるループサイズ分、MPを戻す。
【００６７】
以下、波形生成部６が波形生成イベントを処理する動作例を説明する。
初期設定時に、区間番号MN＝0、イベント番号EIX＝0のWP＝「−」，EID＝0が読み出されている。Ｓ３１〜Ｓ３４の繰り返しにおいて、読み出しポインタMPは、MDを累積加算されて更新されるので、波形データ（0〜63）が時間進行に従って順次読み出される。
【００６８】
MP＝64となり、区間番号がMN＝1に更新されたとき、区間番号MN＝1の波形生成イベントリストからEIX＝0のWP＝120，EID＝1，パラメータ（ジャンプ先の波形位置）が読み出される。その後、波形データ（64〜119）が読み出される。この間、合成波形は、通常波形Ａから通常波形Ｂに移行している。
MP＝120になると、次の波形生成イベントを実行するサンプル位置となり波形生成イベント処理に進められる。しかし、EID＝1は条件付ジャンプ処理であり、現在は、図９（ｄ）に示すNext Flag＝0である。従って、ジャンプ処理は実行されることなく、区間番号MN＝1，次のイベント番号EIX＝1のWP＝「−」，EID＝0を読み出す。その後、波形データ（120〜127）が読み出される。
【００６９】
区間番号がMN＝2に更新されたとき、区間番号MN＝2の波形生成イベントリストからEIX＝0のWP＝150，EID＝2，パラメータ（ループ長50サンプル）が読み出される。その後、波形データ（128〜149）が読み出される（MP＝149はループ波形Ｂの最後尾の波形位置である）。
MP＝150になると、次の波形生成イベントを実行するサンプル位置となり波形生成イベント処理に進められ、EID＝2であるので読み出しポインタはループ長（50）分戻されて、MP＝150−50＝100（ループ波形Ｂの先頭の波形位置である）に更新される。かつ、区間番号MN＝1に更新され、区間番号MN＝1の波形生成イベントリストからWP＝120，EID＝1，パラメータ（ジャンプ先の波形位置）が読み出される。その後、波形データ（100〜119）が読み出される。
再度、MP＝120になると、次の波形生成イベントを実行するサンプル位置となるが、EID＝1であるから、先の場合と同様に、ジャンプ処理は実行されることなく、区間番号MN＝1の波形生成イベントリストから次のEIX＝1のWP＝「−」，EID＝0が読み出される。その後、波形データ（120〜127）が読み出される。
【００７０】
区間番号がMN＝2に更新されたとき、先の場合と同様に、区間番号MN＝2の波形生成イベントリストからEIX＝0のWP＝150，EID＝2，パラメータ（ループ長50サンプル）が読み出される。その後、波形データ（128〜149）が読み出される。
再度MP＝150になると、次の波形生成イベントを実行するサンプル位置となり、EID＝2であるから、読み出しポインタはループ長（50）分戻されて、MP＝150−50＝100に更新され、かつ、区間番号MN＝1に更新され、区間番号MN＝1の管理データのイベント番号EIX＝0が指定され、Ｓ４７において、区間番号MN＝1の波形生成イベントリストからWP＝120，EID＝1，パラメータ（ジャンプ先の波形位置）が読み出される。その後、波形データ（100〜119）が読み出される。
再々度、MP＝120になると、次の波形生成イベントを実行するサンプル位置となり、EID＝1は条件付ジャンプ処理であったが、今回は、図９（ｄ）に示すNext Flag＝1になっている。従って、MP＝150（パラメータで指示されるジャンプ先の波形位置）に更新され、かつ、区間番号MNN＝2に更新される。
【００７１】
この場合は、図８に示した簡略化されたフローチャートでは正しく動作しない。正しく動作するフローチャートは複雑になるので省略するが、次のような処理が行われるようにする。
すなわち、Ｓ４４からＳ４５に処理を進め、イベント番号EIX＝0のWP＝150，EID＝2，パラメータ（ループ長50サンプル）が読み出される。ここで、ジャンプ処理によってMP＝150になっており、NXMPとなるWP＝150と等しい。しかし、波形生成イベント処理によってMPが更新されたときは、更新されたサンプル位置よりも後の波形生成イベント処理を実行する仕様とする。
従って、イベント番号EIX＝EIX＋1の計算をし、Ｓ４７において、EIX＝1のWP＝「−」，EID＝0を読み出す。EID＝0のときのWP＝「−」は、更新されたサンプル位置よりも後の波形処理として扱う。その後、Ｓ３０に戻る。Ｓ３１においてnoである場合はＳ３２に処理を進め、Ｓ３１〜Ｓ３４が繰り返され、波形データ（150〜191）が読み出される。
Ｓ３３において、区間番号MN＝3に更新されたとき、Ｓ４７において、区間番号MN＝3の管理データからイベント番号EIX＝0のWP＝「−」，EID＝0が読み出され、Ｓ３０に戻り、Ｓ３１においてnoである場合はＳ３２に処理を進め、Ｓ３１〜Ｓ３４が繰り返され、波形データ（192〜255）が読み出される。
【００７２】
上述した動作からわかるように、元の波形データの区切りとは無関係に、波形データを任意の固定サイズで分割しても、元の波形データの区切りに応じて、ループ処理やジャンプ処理等をサンプル単位できめ細かく実行できる。また、外部の条件で制御できるNext Flagを用いることにより、任意の波形生成イベントを条件付で実行するか否かを簡単に決定できる。
【００７３】
上述した説明では、主として、１系列の波形生成データをメモリに記憶しておいて、楽音波形を合成する場合について説明した。これに代えて、特許文献１に記載のような各単位波形データについて、個別に、本発明のデータ構造を適用してもよい。
すなわち、各単位波形データよりも単純な構成の波形データをメモリに記憶しておき、ループ処理、ジャンプ処理等の波形生成イベントを実行することにより、これらの単位波形データを生成する。生成された各単位波形データは、波形シーケンスWSに従って接続される。なお、波形シーケンスWSも音源部５側で記憶しておくこともできる。
その結果、複数の単位波形データを用いて合成波形を生成する利点を有するとともに、より単純化されて冗長度の小さいデータ構造の波形データを元波形データとして、少ないメモリ容量で、かつ多様な単位波形データを合成することができる。また、複数種類の単位波形データを共通の、又は、より少ない種類の波形データに基づいて合成することも可能となる。
【００７４】
上述した説明では、メモリに記憶された１系列の波形生成データを１つの読み出しポインタMPを用いて波形生成データを読み出していた。これに代えて、２個の読み出しポインタMP1，MP2を用いて波形生成データを読み出すようにすれば、クロスフェード合成ができる。また、同時に複数系列の波形生成データを、それぞれの読み出しポインタMP1，MP2で互いに同期して読み出せば、各系列の波形生成データを合成することによりクロスフェード合成ができる。
【００７５】
上述した説明では、楽音波形を生成する波形生成装置について説明した。
しかし、本発明は、楽音波形に限らず、人間の発する声（人声音）や動物の声、その他、自然界で発生する音、人工的な音等の波形を含んだ概念としての音波形を生成する音波形生成装置、音波形生成プログラム、及び、音波形生成データのデータ構造に適用できる。
楽音波形以外の音波形は、電子楽器においては効果音として用いられるが、電子楽器の用途に限定されるものではない。一般に、波形メモリを用いて音波形を生成する装置において、多様な音波形を生成するのに適している。
【図面の簡単な説明】
【００７６】
【図１】本発明の音波形生成装置の実施の一形態を説明するための機能構成図である。
【図２】図１の波形生成データメモリに記憶された波形生成データの第１の具体例を示すデータ構造図である。
【図３】図２に示した波形生成データの具体例において、波形データ及び管理データにアクセスする方法の説明図である。
【図４】図１の波形生成データメモリに記憶された波形生成データの第２の具体例を示すデータ構造図である。
【図５】図１の波形生成データメモリに記憶された波形生成データの第３の具体例を示すデータ構造図である。
【図６】図１の波形生成データメモリに記憶された波形生成データにおける管理データの第２，第３の具体例の説明図である。
【図７】本発明の実施の一形態を説明するためのハードウエア構成図である。
【図８】図７に示した音源回路が、図１に示した波形生成部の機能を実行する動作を説明するためのフローチャートである。
【図９】図１に示した機能構成図において、波形生成データが処理される動作例を示す説明図である。
【図１０】従来の電子楽器において楽音波形を生成する一例を示す機能構成図である。
【図１１】従来の波形シーケンス及び単位波形データを説明するためのデータ構造図である。
【符号の説明】
【００７７】
１…演奏コントローラ、２…演奏制御部、３…波形情報データ、４…波形生成制御部、５…音源部、６…波形生成部、７…波形生成データメモリ
【図１】
2006301267.tif 000003
【図２】
2006301267.tif 000004
【図３】
2006301267.tif 000005
【図４】
2006301267.tif 000006
【図５】
2006301267.tif 000007
【図６】
2006301267.tif 000008
【図７】
2006301267.tif 000009
【図８】
2006301267.tif 000010
【図９】
2006301267.tif 000011
【図１０】
2006301267.tif 000012
【図１１】
2006301267.tif 000013