(57)【特許請求の範囲】
【請求項１】
複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、
該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、
該入力手段により入力した圧縮伸張情報に基づいて、前記波形データの時間軸上を順方向または逆方向に辿りながら該波形列のうちから逐次に１以上の周期波形からなる波形区間を適宜抽出して、圧縮時には該波形区間以外の波形を適宜間引き、伸張時には該抽出した波形区間を適宜繰り返すことで波形列を再配列して再生波形データを生成する再生手段とを備えた時間軸圧縮伸張機能を有する波形再生装置であって、
前記記憶手段は、前記波形データの他に、該波形データの波形列におけるループ区間を示すループ区間情報を記憶しており、
前記再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って前記波形区間を逐次に抽出するように制御するループ手段をさらに具備した波形再生装置。
【請求項２】
複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、
該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、
該入力手段により入力した圧縮伸張情報に基づく変化量で該波形データの時間軸上を変化して該時間軸上の位置を逐次に指定する指定手段と、
該指定手段が該波形データの時間軸上を順方向または逆方向に辿りながら逐次に指定する位置に応じた波形データから１以上の周期波形からなる波形区間を逐次に抽出して再配列し、その際に該位置指定手段が指定する位置が新たな波形区間を抽出できる位置まで達していなければ既に抽出した波形区間を繰り返すようにして、再生波形データを生成する再生手段と、を備えた時間軸圧縮伸長機能を備えた波形再生装置であって、
前記記憶手段は、前記波形データの他に、該波形データの波形列におけるループ区間を示すループ区間情報を記憶しており、
前記再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って前記波形区間を逐次に抽出するように制御するループ手段をさらに具備した波形再生装置。
【請求項３】
音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、
該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、
該入力手段により入力した圧縮伸張情報に基づいて前記波形データの時間軸上を順方向または逆方向に辿りながら該波形列のうちから所定長の波形区間を逐次に抽出して再配列することで再生波形データを生成する再生手段とを備えた時間軸圧縮伸張機能を有する波形再生装置であって、
前記記憶手段は、前記波形データの他に、該波形データの波形列におけるループ区間を示すループ区間情報を記憶しており、
前記再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って前記波形区間を逐次に抽出するように制御するループ手段をさらに具備した波形再生装置。
【請求項４】
音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、
該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、
該入力手段により入力した圧縮伸張情報に基づく変化量で該波形データの時間軸上を変化して該時間軸上の位置を逐次に指定する指定手段と、
該指定手段が該波形データの時間軸上を順方向または逆方向に辿りながら逐次に指定する位置に応じた波形データから所定長の波形区間を逐次に抽出して再配列することで再生波形データを生成する再生手段とを備えた時間軸圧縮伸張機能を有する波形再生装置であって、
前記記憶手段は、前記波形データの他に、該波形データの波形列におけるループ区間を示すループ区間情報を記憶しており、
前記再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って前記波形区間を逐次に抽出するように制御するループ手段をさらに具備した波形再生装置。
【請求項５】
複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データと、該波形データの波形列におけるループ区間を示すループ区間情報とを記憶する記憶手段と、
前記波形データの時間軸上を順方向または逆方向に辿りながら、該波形データの波形列のうちから逐次に１以上の周期波形からなる波形区間を適宜抽出して、圧縮時には該波形区間以外の波形を適宜間引き、伸張時には該抽出した波形区間を適宜繰り返すことで波形列を再配列して再生波形データを生成する再生手段と、
該再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って該波形区間を逐次に抽出するように制御するループ手段とを備えた波形再生装置。
【請求項６】
音の波形を時間軸に沿って一連に並べた波形列を表す波形データと、該波形データの波形列におけるループ区間を示すループ区間情報とを記憶する記憶手段と、
前記波形データの時間軸上を順方向または逆方向に辿りながら、該波形データの波形列のうちから逐次に所定長の波形区間を抽出して再配列することで再生波形データを生成する再生手段と該再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って該波形区間を逐次に抽出するように制御するループ手段とを備えた波形再生装置。
【請求項７】
上記ループ制御手段は、上記ループ区間を少なくとも１往復以上繰り返し再生することで、波形データを再生する際の時間軸を伸張するものである請求項５または６記載の波形再生装置。
【請求項８】
上記波形区間の再配列は、波形データの時間軸上で順方向に配列されたサンプル値データが同じく順方向に読みだされるように配列されるものである請求項１〜７のいずれかに記載の波形再生装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は電子楽器のサンプラなどに用いられる波形再生装置に関するものである。
【０００２】
【従来の技術】
複数の音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶装置に記憶しておき、その波形データを読み出して再生するものとしてサンプラがある。このサンプラには、通常、波形データを再生する際の時間軸（従って再生時間）を圧縮または伸張する時間軸圧縮伸張機能（いわゆるタイムストレッチ機能）が設けられている。
【０００３】
【発明が解決しようとする課題】
この時間軸圧縮伸張機能は、その時間軸上を順方向に辿りつつその時間軸を圧縮または伸張して波形データを再生するものである。
一方、この時間軸を逆方向に辿るようにする場合、通常は波形データ中の各波形を表すサンプル値（振幅値）データの列を単純に後側から前側に向かって読み出して再生するだけであるので、再生される音色は元の波形データの波形に基づく音色とは全く異なったもの（すなわら波形が前後逆の波形になる）となってしまう。この結果、例えば波形データが人の声のものであれば、何を言っているのか判別できない音になってしまう。したがって、通常はこのような逆方向の再生は音楽的には意味が少なく、音楽表現を豊かにする表現手法としては用いられていない。
【０００４】
また、通常、サンプラはループ再生機能を備えており、このループ再生は、ループ区間を指定して、そのループ区間を開始点から終了点に向かって時間軸上を順方向に再生し、終了点に達したら再び開始点にジャンプして当該開始点から再び終了点に向かって再生を繰り返すものであるが、時間軸上を逆方向に向かって再生するものもある。しかしながら、ループ区間において時間軸を逆方向に辿りながら再生を行った場合には、上述と同様の理由により、再生される音色は元の波形データの波形に基づく音色とは全く異なったもの（すなわら波形が前後逆の波形になる）となってしまい、音楽的には違和感がある。
【０００５】
本発明はかかる事情に鑑みてなされたものであり、波形データをその時間軸を逆方向に辿りつつ再生するも、音楽的などに意味のある音の再生を可能にして、演奏の表現を一層豊かにすることを目的とする。
【０００６】
【課題を解決するための手段および作用】
上述の課題を解決するために、本発明に係る波形再生装置は、第１の形態の一部として、複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、該入力手段により入力した圧縮伸張情報に基づいて、前記波形データの時間軸上を順方向または逆方向に辿りながら該波形列のうちから逐次に１以上の周期波形からなる波形区間を適宜抽出して、圧縮時には該波形区間以外の波形を適宜間引き、伸張時には該抽出した波形区間を適宜繰り返すことで波形列を再配列して再生波形データを生成する再生手段とを備え、さらに後述するループ手段を具備したものである。この第１の形態では、この波形列には、似たパターンが周期的に繰り返される周期波形が複数含まれ、波形区間としてこのパターンを１以上含むことが好ましい。この第１の形態では、入力手段により入力された圧縮伸張情報に基づいて波形データの時間軸を順方向または逆方向に辿りながら波形区間を逐次に抽出していく。圧縮時には、この抽出した波形区間以外の波形を間引きつつ、抽出した波形区間を再生のための時間軸上に順方向に並べる。これにより時間軸（再生時間）を短縮することができる。また伸張時には、この抽出した波形区間を適宜繰り返しつつ、抽出した波形区間を再生のための時間軸上に順方向に並べる。これにより時間軸（再生時間）を延長することができる。元の波形の波形データは通常、サンプル値データを時間軸上に順方向に（すなわち時系列に）並べたものからなるが、再生時には、上記で抽出した波形区間は元の波形列と同様に、時間軸を順方向に進んでサンプル値データを読み出していくので、再生される波形区間の波形が元の波形と前後逆になることはない。
【０００７】
本発明に係る波形再生装置は、第２の形態の一部として、
複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、該入力手段により入力した圧縮伸張情報に基づく変化量で該波形データの時間軸上を変化して該時間軸上の位置を逐次に指定する指定手段と、該指定手段が該波形データの時間軸上を順方向または逆方向に辿りながら逐次に指定する位置に応じた波形データから１以上の周期波形からなる波形区間を逐次に抽出して再配列し、その際に該位置指定手段が指定する位置が新たな波形区間を抽出できる位置まで達していなければ既に抽出した波形区間を繰り返すようにして、再生波形データを生成する再生手段とを備え、さらに後述するループ手段を具備したものである。この第２の形態では、入力手段により入力された圧縮伸張情報に基づいて指定手段で時間軸上の位置を逐次に指定していく。そして、この指定した位置に応じて波形データから波形区間を抽出する。つまり、波形区間は１以上の周期波形からなる区間で構成されているので、指定手段の指定位置が波形データの時間軸における１波長の波形の先頭部分の近傍位置を指定したときに、その波形を含む波形区間が抽出されることになる。圧縮伸張情報により圧縮が指示されている時には、この指定手段で指定される位置が時間軸上を逆方向に進む速度がはやくなる。すると、指定手段で逐次に指定する位置は、新たに指定した位置が前回指定した位置よりも大きく進んだものになり、その間の位置に対応する波形区間は飛び越される（間引かれる）ことになる。このように波形を圧縮伸張情報に応じて適宜間引くことで、再生時間を短縮することができる。また、圧縮伸張情報により伸張が指示されている時には、指定手段で指定される位置が時間軸上を逆方向にゆっくり進むので、現在抽出した波形区間を再配列し終えた後でも、指定手段の位置はまだ次の新たな波形区間を抽出できる位置にまで達していない場合が生じる。この場合には、既に抽出した同じ波形区間を繰り返し使用して再配列する。これにより、再生時間を延長することができる。
【０００８】
このように、上記第１、第２の形態では、波形データの時間軸上を順方向または逆方向に辿りながら、波形区間を抽出し再配列しつつ、その波形区間のサンプル値データを通常の方向（順方向）から読み出して再生することができる。それにより新たな演奏効果を実現することができる。この第１、第２の形態では、抽出する波形区間は１つ以上の周期の音の波形をその特徴を損なわずに含むようにしているから、音が例えば人の声などであれば、再生した波形においてもその声のホルマント特性を保持することができる。またこの波形区間の再生音高（再生ピッチ）を変化させる場合でも、例えば本実施例のようにその再生の仕方によってホルマント特性を同じに保持することもできる。なお、上記第１、第２の形態では、１以上の周期波形からなる波形区間を抽出するためには、波形の１周期を認識する必要があるが、この周期情報は予め検出して記憶手段に記憶しておいてそれを使用すればよい。例えば、後述の本実施例では、予め検出したピッチ情報を波形メモリに記憶しておいて、その情報を使用している。
【０００９】
本発明に係る波形再生装置は、第３の形態の一部として、音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、該入力手段により入力した圧縮伸張情報に基づいて前記波形データの時間軸上を順方向または逆方向に辿りながら該波形列のうちから所定長の波形区間を逐次に抽出して再配列することで再生波形データを生成する再生手段とを備えた時間軸圧縮伸張機能を有する波形再生装置とを備え、さらに後述するループ手段を具備したものである。この第３の形態は、上記の所定長の波形区間を所定の時間長あるいは所定のデータ長（サンプル数）とすることで、ピッチ検出ができない打楽器音や複数の楽音が同時に発音されている場合のような、同じパターンの波形が連続して繰り返されないような音の波形列に対して、より適したものとなる。上記の第３の形態では、入力手段により入力された圧縮伸張情報に基づいて波形データの時間軸を順方向または逆方向に辿りながら波形区間を逐次に抽出して、これを再配列していく。ここで、波形区間を、時間軸上で長い間隔毎に抽出していけば再生の際の時間軸を圧縮することになり、短い間隔毎に抽出していけば再生の際の時間軸を伸張することになる。これにより、時間軸を逆に辿りつつ抽出した各波形区間を順方向に再生するという新たな演奏効果を実現することができる。
【００１０】
本発明に係る波形再生装置は、第４の形態の一部として、音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、該入力手段により入力した圧縮伸張情報に基づく変化量で該波形データの時間軸上を変化して該時間軸上の位置を逐次に指定する指定手段と、該指定手段が該波形データの時間軸上を順方向または逆方向に辿りながら逐次に指定する位置に応じた波形データから所定長の波形区間を逐次に抽出して再配列することで再生波形データを生成する再生手段とを備え、さらに後述するループ手段を具備したものである。この第４の形態は、上記の所定長の波形区間を所定の時間長あるいは所定のデータ長（サンプル数）とすることで、ピッチ検出ができない打楽器音や複数の楽音が同時に発音されている場合のような、同じパターンの波形が連続して繰り返されないような音の波形列に対して、より適したものとなる。この第４の形態では、入力手段により入力された圧縮伸張情報に基づいて指定手段で時間軸上の位置を逐次に指定していく。そして、この指定された位置に応じて波形データから所定長の波形区間が逐次に抽出される。この波形区間は指定した位置からみて所定の長さの区間であるので、指定手段で逐次に指定する全ての位置からそれぞれ波形区間が抽出されることになる。この所定の長さとしては所定の時間長あるいは所定のデータ長（サンプル数）とすることができる。圧縮伸張情報により圧縮が指示されている時には、この指定手段で指定される位置が時間軸上を逆方向に進む速度がはやくなる。すると、指定手段で逐次に指定する位置は、新たに指定した位置が前回指定した位置よりも大きく進んだものになり、その間の位置に対応する波形区間は飛び越される（間引かれる）ことになる。このように波形を圧縮伸張情報に応じて適宜間引くことで、再生時間を短縮することができる。また、圧縮伸張情報により伸張が指示されている時には、指定手段で指定される位置が時間軸上を逆方向にゆっくり進むことになる。このゆっくり進んでいる全ての位置に対応して波形区間を抽出して、その抽出した各波形区間が連なるように、すなわち一つの波形区間の終端に次の波形区間の始端が繋がるようにして、再配列していく。これにより、再生時間を延長することができる。ここで、抽出した個々の波形区間の波形データの波形読出し速度を変化させることでその再生ピッチを変化させることができるが、波形区間として所定の時間長のものを抽出するようにした場合には、この再生ピッチの変化にもかかわらず、再生時間は一定とすることができる。これにより、時間軸を逆に辿りつつ抽出した各波形区間を順方向に再生するという新たな演奏効果を実現することができる。
【００１１】
本発明に係る上述の第１〜４の形態の波形再生装置は、それぞれさらに、前記記憶手段は、前記波形データの他に、該波形データの波形列におけるループ区間を示すループ区間情報を記憶しており、前記再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って前記波形区間を逐次に抽出するように制御するループ手段を具備したものである。従って、前述の第１〜４のそれぞれの形態において、ループ区間を設定し、そのループ区間内において、波形を順方向に辿って抽出しつつ再生したり、逆方向に辿って抽出しつつ再生したりすることを交互に繰り返すことができ、それにより新たな演奏効果を実現することができる。この場合、このループ区間として例えばビブラートがかかっている元の波形列の区間を設定すれば、ループ区間の繰返し再生をした波形列にも自然な感じでビブラートをかけることができる。
【００１２】
本発明に係る波形再生装置は、第５の形態として、複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データと、該波形データの波形列におけるループ区間を示すループ区間情報とを記憶する記憶手段と、前記波形データの時間軸上を順方向または逆方向に辿りながら、該波形データの波形列のうちから逐次に１以上の周期波形からなる波形区間を適宜抽出して、圧縮時には該波形区間以外の波形を適宜間引き、伸張時には該抽出した波形区間を適宜繰り返すことで波形列を再配列して再生波形データを生成する再生手段と、該再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って該波形区間を逐次に抽出するように制御するループ手段とを備えたものである。また本発明に係る波形再生装置は、第６の形態として、音の波形を時間軸に沿って一連に並べた波形列を表す波形データと、該波形データの波形列におけるループ区間を示すループ区間情報とを記憶する記憶手段と、前記波形データの時間軸上を順方向または逆方向に辿りながら、該波形データの波形列のうちから逐次に所定長の波形区間を抽出して再配列することで再生波形データを生成する再生手段と該再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って該波形区間を逐次に抽出するように制御するループ手段とを備えたものである。なお、上記の所定長の波形区間とは、所定の時間長の波形区間、所定のデータ長（サンプル数）の波形区間などとすることができる。この第５または第６の形態では、上記ループ手段は、上記ループ区間を少なくとも１往復以上繰り返し再生することで、波形データを再生する際の時間軸を伸張することができる。このように、ループ区間を順方向、逆方向に繰り返して再生することで、逆方向再生による新たな演奏効果を得つつ、再生時間を延長（時間軸を伸張）することが可能となる。
【００１３】
上述したそれぞれの形態においては、上記波形区間の再配列は、波形データの時間軸上で順方向に配列されたサンプル値データが同じく順方向に読みだされるように配列されるものである。
【００１４】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。
図１は本発明に係る一実施例としての電子楽器の波形発生装置が示される。図１において、１２は再生する波形データを記憶しておくＲＡＭからなる波形メモリである。８は波形メモリ１２の波形データの再生処理等をディジタル処理により行うＤＳＰ（ディジタル信号プロセッサ）である。１４はＤＳＰ８から再生出力されるディジタル波形信号をアナログ波形信号にＤ／Ａ変換して出力するＤ／Ａ変換器、４は入力したアナログ波形信号をディジタル波形信号にＡ／Ｄ変換してＤＳＰ８に入力するＡ／Ｄ変換器である。このＡ／Ｄ変換器４から入力されたディジタル波形信号はＤＳＰ８から波形メモリ１２に波形データとして格納することができる。
【００１５】
２２はＣＰＵ（中央処理装置）であって、ＤＳＰ８の制御、操作子群２０やキーボード３０の状態検出と処理など装置の全体的な制御を行う。２０は操作子群であって、モードスイッチMODE.SW 、再生モードスイッチPLAYMODE.SW 、ループモードスイッチLOOPMODE.SW 、オリジナルキー設定スイッチORGKEY.SW 、バンクスイッチBANK.SW 、アサインスイッチASSIGN.SW 、ホルマント設定操作子F.VR、時間圧伸量設定操作子TCOMP 等の複数の操作子からなる。
【００１６】
３０は演奏操作を行うキーボードであり、操作したキーに対応する種々の楽音情報を演奏のために発生する、例えば波形メモリ１２の波形データの再生にあたってキーのオン／オフにより再生の音高と再生の開始／終了を指示するためにも用いられる。また、このキーボード３０はアフタータッチ機能も備えており、キーを押鍵した後にさらに押下を続けるとその押下の強さに対応した大きさのアフタータッチ信号after.touch が継続して発生されるようになっている。本実施例ではアフタータッチ機能の一つとして、キーを押した状態でさらにキーを押し込んだ場合にその押下の強さに対応して波形信号の再生に要する時間（すなわち再生速度）が変わるようになっている。このアフタータッチ信号after.touch は押下の強さに応じて＄００〜＄７Ｆの範囲の値をとり得る。なお、以降の説明では＄７Ｆ等の先頭に付けた「＄」は１６進表示を意味するものとする。
【００１７】
３３は多くの波形データ等を記憶しておく大容量のハードディスク装置であり、その波形データは必要に応じて波形メモリ１２に転送される。３１はＣＰＵ２２の演算処理等に使用されるワーキングメモリとしてのＲＡＭ、３２はＣＰＵ２２やＤＳＰ８のプログラムやパラメータ等を記憶しておくメモリとしてのＲＯＭである。
【００１８】
以下に、操作子群２０の各操作子の機能について説明する。
モードスイッチMODE.SW は、録音モード、編集モード、再生モードの一つを選択するためのスイッチである。ここで、録音モード (ＲＥＣモード) は外部から入力された楽音信号を録音（サンプリング) するモード、編集モード (ＥＤＩＴモード) は録音モードでサンプリングした波形を編集するモード、再生モード（ＰＬＡＹモード) は波形メモリ１２に記憶した波形データをキーボードの演奏操作に応じて再生するモードである。
【００１９】
再生モードスイッチPLAYMODE.SW は、波形形成のアルゴリズムが異なる第１の再生モードplay１と第２の再生モードplay２とを選択するためのスイッチである。第１の再生モードplay１と第２の再生モードplay２については後述する。
【００２０】
ループモードスイッチLOOPMODE.SW は、前記第１と第２のそれぞれの再生モードにおいて、波形データをループ再生しないモードoff 、ループ再生する場合のノーマル・ループモードnormとオルタネート・ループモードalt との３つのうち一つを設定するスイッチである。
【００２１】
オリジナルキー設定スイッチORGKEY.SW は基準となるキーを設定するときに操作するスイッチである。
バンクスイッチBANK.SW は、波形メモリ１２に記憶されている複数の波形データのうちから一つを選択するためのスイッチである。
【００２２】
アサインスイッチASSIGN.SW は、発音モードを設定するためのスイッチであり、以下の４つのモードを設定できる。
〔モノフォニック１：MONO１〕  １ボイスのみを発音するモードであり、レガート奏法がされても、後の押鍵によってリトリガを行うモードである。
〔モノフォニック２：MONO２〕  １ボイスのみを発音するモードであり、レガート奏法がされたら、リトリガを行なわないモードである。
〔ポリフォニック１：POLY１〕  複数ボイスを発音可能なモードであり、レガート奏法がされても、後の押鍵によってリトリガを行うモードである。
〔ポリフォニック２：POLY２〕  複数ボイスを発音可能なモードであり、レガート奏法がされたら、リトリガを行なわないモードである。
ここで、「レガート奏法」とはキーボードの１番目のキーを押したままの状態で２番目のキーを押す奏法であり、「リトリガ」とは波形メモリ１２の波形データの再生を当該波形データの先頭部分からやり直す処理をいう。
【００２３】
ホルマント設定操作子F.VRは、ホルマントの原波形データからのシフト量を設定する操作子であり、ホルマント移動量f.vr（ホルマント変更係数とも称する）を設定する。このホルマント移動量f.vrについては後述する。
【００２４】
時間圧伸量設定操作子TCOMP は、再生波形データの時間軸上の時間圧伸量tcomp を設定する操作子である。この時間圧伸量tcomp については後述する。
【００２５】
上記のＤＳＰ８は操作子設定テーブル、キー情報レジスタ、変調情報レジスタ、オリジナルピッチ情報レジスタ、ループ情報レジスタを備えている。以下、これらについて説明する。
【００２６】
〔操作子設定テーブル〕
図２には操作子設定テーブルの例が示される。この操作子設定テーブルはＤＳＰ８に備えられており、後述するＣＰＵ２２の「再生処理」において、操作子群２０の操作状態を検出し、その操作状態に対応してこの操作子設定テーブルの内容が設定される。操作子設定テーブルの内容の項目としては、バンク番号bank、リンクモードlink.mode 、ホルマント移動量f.vr、時間圧縮／伸長伸量tcomp （以下、時間圧伸量と記す) 、再生モードplaymode  、ループモードloopmode  がある。
【００２７】
ここで、バンク番号bankは、操作子群２０のバンクスイッチBANK.SW で設定  されたバンク番号が設定され、そのバンク番号bankに従って、再生する波形データ（波形領域番号）の選択が行われる。
【００２８】
リンクモードlink.mode は、操作子群２０のアサインスイッチASSIGN.SW がモノフォニック２またはポリフォニック２のモード（すなわちリトリガしないモード）を設定した時には「１」（ＯＮを意味する）に設定され、モノフォニック１またはポリフォニック１のモード（すなわちリトリガするモード）を設定した時には「０」（ＯＦＦを意味する）に設定される。すなわち、前に発音していた楽音に連結するか否かを設定するレジスタであるが、リトリガを行うか否かを設定するレジスタでもある。
【００２９】
ホルマント移動量f.vrは、波形メモリ１２から読み出して再生する波形データのホルマントの移動量（シフト量）が設定されるもので、波形メモリ１２中の波形データは、このホルマント移動量f.vrが「１」である時は、原波形と同じホルマントで再生され、「１」より大きい値であると、ホルマントを原波形よりも高域側にシフトして再生され、「１」よりも小さい値であると、ホルマントを原波形よりも低域側にシフトして再生される。
【００３０】
時間圧伸量tcomp は、波形メモリ１２に記憶された波形データを再生する時における時間圧縮／伸長の大きさ（すなわち波形再生速度）を数値設定するものである。この時間圧伸量tcomp が「１」であると、原波形の時間変化と同じ速さで時間変化し、「１」より大きい値であると、原波形よりも速い時間変化をして再生時間が短くなり、「１」よりも小さい値であると、原波形よりも遅い時間変化をして再生時間が長くなる。
【００３１】
再生モードplaymode  は、再生モードスイッチPLAYMODE.SW が第１の再生モードplayｌを設定したときは「０」に設定され、第２の再生モードplay２を設定したときは「１」に設定される。ここで、この第１の再生モードplayｌは再生波形のピッチを変えるにあたり元波形のホルマントを変化させないで再生できるモードであり、また第２の再生モードplay２は再生波形のピッチを変えるにあたり元波形のホルマントも共に変化するが、元波形のピッチが検出できなくとも波形再生できるモードである。
【００３２】
ループモードloopmode  は、ループモードスイッチLOOPMODE.SW がループ再生をしないモードoff を設定したときは「０」に設定され、ループ再生する場合のノーマル・ループモードnormを設定したときは「１」に設定され、ループ再生する場合のオルタネート・ループモードalt を設定したときは「２」に設定される。
【００３３】
このノーマル・ループモードnormは、ループ再生区間をループ再生する際に、時間軸を順方向に波形再生してループ再生区間の終点（ループエンド）に達したら、当該ループ再生区間の開始点（ループスタート）に飛び戻って、そこから再びループエンドに向かって波形再生を行うことを繰り返すモードである。一方、オルタネート・ループモードalt は、ループ再生区間をループ再生する際に、ループ再生区間の開始点（ループスタート）から時間軸を順方向に進んで波形再生し、ループ再生区間の終点（ループエンド）に達したら、今度はそのループエンドから当該ループ再生区間の開始点（ループスタート）に向かって時間軸を逆方向に順次戻りながら波形再生を行い、ループスタート点に達したらそこで方向を再び逆転して順方向にループエンドに向かって波形再生を行うことを繰り返すモードである。なお、上述の逆方向での波形再生とは、波形データ自体を後ろ側から読み出すという意味ではなく、所定長の波形区間の取出しを、時間軸上で逆方向に進みながら行うという意味であり、その所定長の波形区間では波形データは常に順方向に読みだされる。
【００３４】
〔キー情報レジスタ〕
ＤＳＰ８はキー情報レジスタを備えており、後述するＣＰＵ２２の「再生処理」において、キーボード３０の操作が検出され、割当処理によってキー情報がＤＳＰ８に転送されて、このキー情報レジスタに一時的に記憶される。図３（１）にこのキー情報レジスタの構成例が示される。キー情報は、キーオン／キーオフ情報key.on/off、音高情報（操作キー情報）kpitch、ボイスモジュール情報voice.No、レベル情報level からなる。例えば、
キーオン情報：「key.on／kpitch／voice.No／level 」
キーオフ情報：「key.off ／kpitch／voice.No／level 」
の構成からなる。
【００３５】
なお、このキー情報レジスタは、ＤＳＰ８での受取り処理の前に、ＣＰＵ２２から新たなキー情報が転送されることがある場合には、複数のキー情報を一時記憶することが可能な、シフトレジスタのような構成で、さらに先に入力した情報を先に出力する構成にすればよい。すなわち、ＭＩＤＩ信号の受信処理と同様な処理とする。
【００３６】
〔ループ情報レジスタ］
図３（２）にはループ情報レジスタが示される。このループ情報レジスタには波形データを選択するバンクbankが更新される毎に、その選択した波形データに対応したループスタートマークloopstart 、ループエンドマークloopend 、ループスタートアドレスloopsa、ループエンドアドレスloopeaが記憶される。
【００３７】
〔変調情報レジスタ〕
図３（３）には変調情報レジスタが示される。この変調情報レジスタには変調値情報lfo.mod が格納される。後述の「ＬＦＯ．ＭＯＤの演算処理」においては、変調信号であることを識別する変調情報識別情報mod.inf と、演算によって得られた変調値情報lfo.mod とが組み合わされて転送される。
【００３８】
〔オリジナルピッチ情報レジスタ〕
図３（４）にはオリジナルピッチ情報レジスタが示される。このオリジナルピッチ情報レジスタには、波形データの音高をどれくらいシフトするかを指定するときの基準となる音高の情報（オリジナルピッチ情報）が記憶されている。なお、オリジナルピッチ情報を設定しないときのために、電源投入時の初期設定において、予め「Ｃ４」の音階に対応するオリジナルピッチ情報が記憶されている。
【００３９】
波形メモリ１２はパラメータ記憶部とマーク記憶部と波形データ記憶部とで構成される。これらの記憶部のデータ構成を図４〜図６に示す。図４はパラメータ記憶部のデータ構成、図５は波形データ記憶部のデータ構成、図６はマーク記憶部のデータ構成である。パラメータ記憶部は＄８００番地毎に、また波形データ記憶部は＄８０００番地毎に、マーク記憶部は＄２番地毎に各々セグメントで区切られており、各々のセグメントはアドレスの若い方から順番にwave０領域、wave１領域  、wave２領域  ・・・のように波形領域番号が付けられる。例えばある一つの波形についてそのパラメータをパラメータ記憶部のwave０領域に格納したら、その波形の波形データはそのパラメータに対応して波形データ記憶部の同じ番号のwave０領域に格納する。なお、図４、図５、図６におけるアドレスは１６進数で表わされており、前述したように以降＄８００のように数値の先頭に＄を付して１６進数であることを示す。
【００４０】
まず、パラメータ記憶部のデータ構成を図４に従って説明する。例えばwave０領域において、アドレス＄００００に格納されているものはヘッダheaderであり、そのデータ内容としてそのwave０領域における波形データの末尾アドレスendadrs が格納され、アドレス＄０００１以降には開始アドレス／ピッチ情報sadrs/spitchが格納される。開始アドレス／ピッチ情報のうちのピッチ情報である波形ピッチspitchは波形データ記憶部に格納された波形の１周期分のアドレス幅のことであり、開始アドレスsadrs は前記波形ピッチspitchで表されるアドレス幅の波形が１周期から複数周期続く波形区間の開始アドレスである（以下、この１周期から複数周期続く波形区間を単に波形区間という) 。開始アドレス／ピッチ情報としては、一つの波形区間の開始アドレスsadrs と波形ピッチspitchとを一対として、波形全体にわたるこれらの対が時系列にパラメータ記憶部に格納される。例えば波形データの最初の波形区間が開始アドレス sadrs０で波形ピッチspitch０であり、次に続く波形区間が開始アドレス sadrs１で波形ピッチspitch１である場合、最初の開始アドレス sadrs０と波形ピッチspitch０はそれぞれアドレス＄０００１  、＄０００２に格納され、続く開始アドレス sadrs１と波形ピッチspitch１はそれぞれアドレス＄０００３、＄０００４に格納される。
【００４１】
次に波形データ記憶部のデータ構成を図５に従って説明すると、これは各wave領域にシーケンシャルなアドレス順序でサンプリング値wave data が格納されるものである。
【００４２】
次にマーク記憶部のデータ構成を図６に従って説明する。これはwave０、wave１・・・の各wave領域毎に、ループ再生する場合のループスタートマークloopstart とループエンドマークloopend が格納されるものである。図６において、ループスタートマークloopstart はループ再生する区間の小さいアドレス側の端を、ループエンドマークloopend はループ再生する区間の大きいアドレス側の端を特定するマークであり、これらのマークはパラメータ記憶部のピッチ変化時点を表すデータ（波形データの開始アドレス sadrs０、 sadrs１・・・）が格納されているパラメータ記憶部のアドレスで表される。例えば波形データの開始アドレス sadrs０をループスタートに、開始アドレス sadrs１をループエンドとする場合、マーク記憶部の最初のアドレス＄００００にはループスタートマークloopstart として＄０００１が格納され、マーク記憶部の次のアドレス＄０００１にはループエンドマークloopend として＄０００３が格納される。
【００４３】
以下、この実施例装置の動作をフローチャートを参照して説明する。なお、以下に説明する各フローチャートにおいては、原則的には、各種のパラメータは英小文字で表し、そのパラメータを記憶するレジスタ等は同じスペルからなる英大文字で表すこととする。また、フローチャートの表記法として、例えば、
Ａ＝Ｂ＋Ｃ
となっていた場合、これは、レジスタＢから読み出した値ｂとレジスタＣから読み出した値ｃとを加算して、その結果を値ａとしてレジスタＡに格納することを意味するが、以下の説明では表現を簡単にするため、例えば単に値ｂと値ｃを加算して値ａとする（あるいはレジスタＡに格納する）などの表現を用いることにする。
【００４４】
図７には、ＣＰＵ２２が行う処理として、メインルーチンのフローチャートが示される。メインルーチンがスタートすると、操作子群２０のモードスイッチ(MODE.SW) が録音モード、編集モード、再生モードの何れに操作されたか監視され（ステップＡ）、操作がされると、その操作が録音モード、編集モード、再生モードの何れであるかが判定される（ステップＢ）。録音モードであれば、録音（ＲＥＣ）処理が行われ（ステップＣ）、編集モードであれば編集（ＥＤＩＴ）処理が行われ（ステップＤ）、再生モードであれば再生（ＰＬＡＹ）処理が行われる（ステップＥ）。
【００４５】
図８には録音モードにおける録音処理ルーチンのフローチャートが示される。録音処理は外部から入力された楽音信号を録音（サンプリング）する処理であり、モードスイッチMODE.SW により録音モードに設定した後、サンプリングスタートの操作子を操作することによって（ステップＣ３）、サンプリングスタートして録音（サンプリング処理）が行われる（ステップＣ４）。サンプリングされる楽音信号のデータは波形メモリ１２に記憶される。この録音処理ルーチンから抜け出てメインルーチンにリターンするにはＥＸＩＴ操作子を操作する（ステップＣ２）。
【００４６】
図９（１）には編集モードにおける編集処理ルーチンのフローチャートが示される。編集処理は、録音モードでサンプリングした波形を変更したり、再生可能な波形データに変更する編集処理や、それらの波形データをハードディスク装置３３に転送したり、ハードディスク装置３３から波形メモリ１２に転送したりする処理を行う（ステップＤ３）。また、波形データのピッチ変化を抽出してそれに基づいてループ再生区間（ループポイント）を設定する。この抽出方法とループポイント設定方法は後述する。この編集処理ルーチンから抜け出るにはＥＸＩＴ操作子を操作する（ステップＤ２）。
【００４７】
「波形データのピッチ変化抽出方法」
まず、図４７に示したフローチャートによって波形データのピッチ変化抽出方法を説明する。前述の録音モード（ＲＥＣモード）において波形信号をサンプリングし、波形メモリ１２に波形データとして記憶する。次に、編集モード（ＥＤＩＴモード）において波形データのピッチ検出を行い、図４に示されるパラメータ記憶部に記憶する開始アドレスsadrs と波形ピッチspitchのデータを作成し、記憶する。
【００４８】
次に、図４７の処理を、その波形メモリに記憶されている波形データに対して、図４７のピッチ変化抽出処理を施し、図５０のようなピッチデータ列を生成する。すなわち、波形データに対してピッチ検出処理を施し、時間経過に対応してピッチデータ列ｘ(n) を作成する（ステップＳｌ）。このステップＳ１で作成したピッチデータ列ｘ(n) は、図４８に示すように、所々、抽出ミスを起こし、パルス性ノイズが乗っている。
【００４９】
カウンタｎに初期値ａを設定する（ステップＳ２）。この初期値ａは平均値処理の対象とするピッチデータｘ(n) のデータ個数を決めるもので、この実施例ではａ＝８とする。次に、
Ｘ(n) ＝｛ｘ(n-a) ＋ｘ(n-a+1）＋・・・＋ｘ(n-1) ｝／ａ
の演算を行い、ピッチデータ列ｎ個の平均を演算する（ステップＳ３）。例えば、図４９のようなピッチデータ列ｘ(1) 〜ｘ(9) ・・・であれば、
Ｘ(8) ＝｛ｘ(0) ＋ｘ(1) ＋ｘ(2) ＋・・・＋ｘ(7) ｝／８
の演算をすることになる。
【００５０】
次に、その平均Ｘ(n) と次のピッチデータｘ(n) を比較し、
（ｌ／α）Ｘ(n) ＜ｘ(n) ＜αＸ(n)
を満足するかを判断する（ステップＳ４）。この判断処理は、誤って抽出されたノイズ的なピッチデータを取り除く処理であり、判断結果がＹｅｓの場合は何もせずに次のステップヘ進み、判断結果がＮｏの場合はピッチデータｘ(n) を平均Ｘ(n) に変更する（ステップＳ５）。このように、ステップＳ４とＳ５は、次のピッチデータｘ(n) がそのデータの前の８個のデータの平均値Ｘ(n) に対して所定の範囲内であるかを判断し、所定範囲内であればそのまま、所定範囲をはみ出していればピッチデータｘ(n) を平均Ｘ(n) に変更する処理をして、ピッチ検出の抽出ミスを補正している。なお、αは目的に応じて適宜、適当な値とすることができるが、この実施例では例えばα＝２．０としておく。
なお、ピッチデータ列の最初のｎ個（８個）のデータについては、この実施例では使用しないため、上記ステップＳ４とＳ５の処理を施していないが、必要であれば抽出ミスを補正する処理を適宜、施してもよい。
【００５１】
以上の処理がピッチデータ列の最後まで行われたかを判断し（ステップＳ６）、終了したなら次のステップＳ７ヘ、終了していないのであれば前記ステップＳ３へ戻って、ピッチデータ列の最後まで処理を続ける。以上の補正が終わったピッチデータ列ｘ(n) に対してさらにローパスフィルタリング処理を施し、ピッチデータ列ｘ(n) の不規則な変化を取り除き、図５０のような滑らかに変化するピッチデータ列ｘ(n) を得る。
以上が波形データのピッチ変化抽出方法で、ビブラート効果の変化を検出する場合に有効である。
【００５２】
「ループポイントの設定」
図４７のピッチ変化抽出方法で抽出されたピッチデータ列に対して、ピッチデータ列のピークとピーク（図５０の矢印の部分）を検出し、それぞれループスタートloopstart とループエンドloopend とし、対応する波形データの開始アドレスsadrs の記憶されたパラメータ記憶部のアドレスをマーク記憶部にそれぞれ記憶する。この矢印の部分は演算によりピークを検出することにより自動的に検出するようにしても良い。
【００５３】
以上のようにループポイントを設定する場合、オルタネートループ再生の場合は不連続部は生じないため、かなり適当なポイントを設定しても不都合は発生しないが、ノーマルループ再生をする場合はループエンドポイントからループスタートポイントにジャンプするため、音色や音量の違いがある場合には不連続部が生じてしまう。この場合には、より注意して音色や音量の違いが少ないループポイントを設定する必要がある。
【００５４】
図９（２）には再生モードにおける再生処理ルーチンのフローチャートが示される。この再生処理ルーチンの初期設定（ステップＥ１）においては、操作子群の状態を操作するレジスタ等をリセットし、操作子群を操作可能な状態にすると共に、各操作子の初期状態を設定しておく。初期状態とは、「再生処理」で、各操作子に変化があった時だけ操作子の操作に対応した処理を行うため、その最初の基準となる状態である。
【００５５】
再生処理ルーチンは、モードスイッチMODE.SW により再生モードに設定した  後、再生スタートの操作子を操作することによってスタートする。再生処理（ステップＥ３）は、波形メモリ１２の波形データを、キーボード３０からの演奏情報に対応して再生する処理であり、この再生処理ルーチンから抜け出るにはＥＸＩＴ操作子を操作する（ステップＥ２）。
【００５６】
図１０〜図１２にはこの再生モードにおける再生処理（ステップＥ３）の詳細な処理手順が示される。この再生処理はＣＰＵ２２で実行される。この再生処理では、操作子群２０による設定とキーボード３０による演奏操作を検出してそれらの操作情報をＤＳＰ８に転送して記憶させる処理を行う。
【００５７】
再生処理が開始されると、操作子群２０の操作状態を走査して、バンクスイッチBANK.SW 、再生モードスイッチPLAYMODE.SW 、ループモードスイッチLOOPMODE.SW 、オリジナルキー設定スイッチORGKEY.SW 、アサインスイッチASSIGN.SW 、ホルマント設定操作子F.VR、時間圧伸量設定操作子TCOMP の操作状態を検出する（ステップＥ３００）。これらの操作状態に変化があったときには、以下のように、それらのスイッチ操作に対応して操作子設定テーブル等への設定処理を行う。
【００５８】
まず、再生モードスイッチPLAYMODE.SW の操作に変化が有るか否かを見て（ステップＥ３０１）、変化が有る場合に、再生モードスイッチPLAYMODE.SW で設定された再生モードが第１の再生モードplay１であればＤＳＰ８の操作子設定テーブルの再生モードplaymode  に「０」を、また第２の再生モードplay２であれば「１」をそれぞれ設定する（ステップＥ３０２）。
【００５９】
次に、ループモードスイッチLOOPMODE.SW の操作に変化が有るか否かを見て（ステップＥ３０３）、変化が有る場合に、ループモードスイッチLOOPMODE.SW で設定されたループモードがオフoff であればＤＳＰ８の操作子設定テーブルのループモードloopmode  に「０」を、ノーマルnormであれば「１」を、オルタネートalt であれば「２」をそれぞれ設定する（Ｅ３０４）。
【００６０】
そして、バンクスイッチBANK.SW の操作に変化が有るか否かを見て（ステップＥ３０５）、変化が有る場合には、バンクスイッチBANK.SW で設定されたバンク番号bankを、ＤＳＰ８の操作子設定テーブルのバンク番号bankに設定する（ステップＥ３０６）。
【００６１】
次に、オリジナルキースイッチORGKEY.SW の操作に変化が有るか否かを見て（ステップＥ３０７）、変化が有る場合にはキーボード３０の操作鍵情報を検出し（ステップＥ３０８）、その検出結果により押鍵情報が有るか否かを見て（ステップＥ３０９）、押鍵情報が有る場合にはその押鍵情報に対応したピッチ情報をオリジナルピッチ情報org.pitch としてＤＳＰ８のオリジナルピッチ情報レジスタorg.pitch に設定する（ステップＥ３１０）。なお、押鍵情報がない場合にはステップＥ３０８に戻り、押鍵情報が有るまでこの処理を繰り返す。
【００６２】
次に、アサインスイッチASSIGN.SW の操作に変化が有るか否かを見て（ステップＥ３１１）、変化が有る場合には、アサインスイッチASSIGN.SW で設定されたモードがモノフォニック２またはポリフォニック２か否かを判定する（ステップＥ３１２）。肯定判定（モノフォニック２またはポリフォニック２と判定）である場合は「リトリガ」を行わないモードが設定されたものであり、この場合には、ＤＳＰ８の操作子設定テーブルのリンクモードlink.mode に「１」を設定する。否定判定である場合は「リトリガ」を行うモードが設定されたものであり、この場合には、ＤＳＰ８の操作子設定テーブルのリンクモードlink.mode に「０」を設定する。さらに、アサインスイッチASSIGN.SW で設定されたモードがモノフォニック（１または  ２）であるかポリフォニック（１または２）であるかを判定し（ステップＥ３１５）、モノフォニック１または２である場合にはアサインフラグAS.FLGをモノフォニックMONOにセットし（ステップＥ３１６）、ポリフォニック１または２である場合にはポリフォニックPOLYにセットする（ステップＥ３１７）。このアサインフラグAS.FLGにより、ボイスモジュール（楽音発生チャネル）への割当処理が１ボイス（モノフォニックの場合）か複数ボイス（ポリフォニックの場合）かを知ることができる。
【００６３】
次に、ホルマント設定操作子F.VRに変化が有るか否かを見て（ステップＥ３１８）、変化が有る場合には、その検出値を、ＤＳＰ８の操作子設定テーブルのホルマント移動量f.vrに設定する（ステップＥ３１９）。同様に、時間圧伸量設定操作子TCOMP に変化が有るか否かを見て（ステップＥ３２０）、変化がある場合には、その検出値を、ＣＰＵ２２側に用意されたレジスタMTCOMPに設定する（ステップＥ３２１）。
【００６４】
次に、キーボード３０からの操作鍵情報（キー情報）を検出する（ステップＥ３２２）。そして、その検出結果から操作鍵に変化があるか否かを見て（ステップＥ３２３）、変化がある場合には先に設定されたAS.FLGの状態を判定する（ステップＥ３２４）。上記アサインフラグAS.FLGの状態の判定結果がモノフォニックMONOである場合には、操作鍵を１ボイスモジュールに割り当てて、検出したキー情報をＤＳＰ８に転送する（ステップＥ３２５）。ポリフォニックPOLYである場合には、操作鍵を複数ボイスモジュールへの割当て処理を行い、検出したキー情報をＤＳＰ８に転送する（ステップＥ３２６）。ＤＳＰ８では受信したキー情報をキー情報レジスタに一時記憶する。
【００６５】
これらステップＥ３２５またはＥ３２６の処理をした後、あるいはステップＥ３２３での判定の結果押鍵操作に変化がないと判定された場合には、アフタータッチ操作が有るか否かを判定する（ステップＥ３２７）。ここでは、アフタータッチ操作の有無はキーボード３０からのアフタータッチ信号after.touch の大きさに基づいて判定される。すなわち、アフタータッチ信号after.touch の大きさが＄２０未満であった場合にはアフタータッチ無しと見なすこととし、＄２０以上の場合にアフタータッチ有りとする。
【００６６】
アフタータッチ有りと判定された場合には、時間圧伸量設定操作子TCOMP による設定値をアフタータッチ信号after.touch に基づいて変更して前述のＣＰＵ側のレジスタMTCOMPに設定する（ステップＥ３２８）。この時間圧伸量設定操作子TCOMP による設定値の修正は次の演算式、
MTCOMP＝ TCOMP＊〔１−（after.touch −＄２０）／＄６０〕
に従って行う。ここで TCOMPは時間圧伸量設定操作子TCOMP による設定値とする。この演算式は、アフタータッチ有りと判定された＄２０〜＄７Ｆの範囲のアフタータッチ信号after.touch を、
（after.touch −＄２０）／＄６０
という演算により０〜１の範囲の値に正規化し、この正規化した値を１から減じて時間圧伸量設定操作子TCOMP の設定値に乗算してレジスタMTCOMPに設定するもので、この演算の結果、アフタータッチ信号after.touch が＄２０を少し超える程度の弱いアフタータッチであった場合には時間圧伸量設定操作子TCOMP による設定値は大きくは変更されないが、アフタータッチ信号after.touch が大きくなるに従って時間圧伸量設定操作子TCOMP の設定値は減少する方向に大きく修正され、アフタータッチが最も強い＄７Ｆでは時間圧伸量設定操作子TCOMP の設定値はその値の如何にかかわらずゼロとされてレジスタMTCOMPに設定される。
【００６７】
そして、このステップＥ３２８あるいは前述のステップＥ３２１で設定されたMTCOMPの値をＤＳＰの操作子設定テーブルのtcomp に設定する（ステップＥ３２９）。なお、アフタータッチ信号after.touch が＄２０未満の場合にはステップＥ３２７でアフタータッチ無しと判定されてステップＥ３２８は実行されない。この場合には、先に設定されているレジスタMTCOMPの値は変更されず、本ステップＥ３２９によってＤＳＰの操作子設定テーブルのtcomp に設定される値は、先のステップＥ３２１において操作子TCOMP によって設定される値となる。
【００６８】
これらの設定操作の後、変調値lfo.mod の演算処理を行う (ステップＥ３３０) 。この演算処理は、ステップＥ３２１またはＥ３２８でレジスタMTCOMPに設定した時間圧伸量の絶対値が小であるときに、再生波形にビブラートに似た変調を行うための変調値lfo.mod を発生するものである。このステップで演算される変調値情報は、変調情報であることを識別する変調情報識別情報mod.inf とともにキー情報の一種としてＤＳＰに転送され、変調値情報は変調情報レジスタに格納される。
【００６９】
図１３は上述のステップＥ３３０における変調値情報の演算処理の詳細な内容を示すフローチャートである。図１４はこの演算処理で生成される波形のタイムチャートである。まず、レジスタMTCOMPの絶対値が「０. １」により大きいか否か判定し（ステップＥ３３０１）、大きければ、ゲート信号lfo.gateを「０」にして、以降のステップにて発生される変調値lfo.mod が常に「１」となるようにする（ステップＥ３３０３）。
【００７０】
レジスタMTCOMPの絶対値が「０. １」以下であれば、ゲート信号lfo.gateを「１」にして（ステップＥ３３０２）、「１」を中心に低周波周期で変動する変調値lfo.mod を発生して、その変調値lfo.mod で再生波形信号に変調をかけて波形信号にビブラート効果を付加する。すなわち、次のステップＥ３３０４において、変調エンベロープlfo.env を、
LFO.ENV ＝LFO.ENV ＋（LFO.GATE−LFO.ENV ）＊SLOPE
で演算して求める。ここで、SLOPE はエンベロープの傾きを決定する係数である。このエンベロープlfo.env は、図１４に示すように、ゲート信号lfo.gateの  「０」から「１」への立上りに同期して漸増して「１」になる波形となる。また、低周波信号lfo を、
LFO ＝ SIN（２＊３. １４＊LFO.RATE／３２０００＊LFO.COUNT ）
を演算することで発生する。ここで、LFO.RATEは係数（単位Ｈz ）、LFO.COUNT はカウンタであって、このカウンタLFO.COUNT はステップＥ３３０４が行われる毎にインクリメントされる。低周波信号lfo は、図１４に示すような正弦波となる。
【００７１】
次に、変調度lfo.mod を、
LFO.MOD ＝ＰＯＷ（０. ５，LFO ＊LFO.ENV ＊LFO.DEPTH ／１２００）
を演算して求める（ステップＥ３３０５）。ここで、LFO.DEPTH は変調の深さであり、単位はcents である。この演算で求められた変調度lfo.mod は、図１４に示すように、ゲート波形lfo.gateの「０」から「１」への立上りに同期して「１」を中心に上下に低周波lfo の周期で振れる波形となる。なお、関数ＰＯＷ（ａ，ｂ）は、ａの値をｂ乗することを表しており、上記演算式は、０．５を（LFO ＊LFO.ENV ＊LFO.DEPTH ／１２００）乗することを表している。
【００７２】
次に、前記の１ボイスモジュールまたは複数ボイスモジュールへの割当て処理について説明する。
「１ボイスモジュールへの割当処理」
単音（１ボイス）のみを発音するモードの割当処理である。キーボード３０のキー情報の検出の結果、操作鍵のうち、最後に押鍵した鍵を優先的に１つのボイスモジュール（楽音発生チャンネル）に割り当てる。なお、この割当処理では１ボイスモジュールへの割当なので、ボイスモジュール情報voice.Noの値は常に「No１」になる。
【００７３】
「複数ボイスモジュールへの割当処理」
複数音が発音可能なモードの割当処理である。キーボード３０のキー情報の検出の結果、操作鍵のうち、予め決められた数の押鍵だけを所定の数のボイスモジュールに割り当てる。この実施例では複数ボイスの数を２ボイスとしている。所定のボイス数（実施例では２）以上操作されても受け付けない。キーオン情報が入力されたとき、空きボイスがあるときのみに割当処理を行う。
【００７４】
なお、キーオン情報を転送し、楽音が発音中にアサインスイッチASSIGN.SW を変更すると、発音中の楽音が止まらないなどの動作の不都合が起こる可能性がある。よって、かかる動作の不都合を防止するため、楽音が発音中にアサインスイッチASSIGN.SW を操作して動作モードが変更された場合には、発音中の楽音の全てに対してキーオフ情報を転送するようにしている。そして、新たな動作モードで発音中（押鍵中）のキーオン情報を転送するようにしている。
【００７５】
以上の割当て処理は、鍵数よりも少ない数の音源を備えた電子楽器において、押鍵を音源に割り当てる公知のジェネレータアサインの技術を使用するので、詳細は省略する。
【００７６】
次に、ＤＳＰ８の処理を図１５を参照して説明する。図１５はＤＳＰ８のメインルーチンを示すフローチャートであり、サンプリング周期で繰り返し実行されるものである。なお、操作子設定テーブルの再生モードplaymode  に設定されたモードが第１再生モードplay１か第２再生モードplay２かに応じて、後述の「読出し処理サブルーチン」「ループモード処理サブルーチン」「順方向再生処理サブルーチン」「逆方向再生処理サブルーチン」「ボイス１の発音開始処理」「ボイス２の発音開始処理」「ボイスｌからボイス２へのリンク発音処理」「ボイス２からボイス１へのリンク発音処理」は異なるように設定されるものであるが、まず、再生モードが第１の再生モードplay１の場合について説明する。
【００７７】
このメインルーチンでは、操作子設定テーブルのバンク番号bankの更新があったか否かを監視しており（ステップＦ１）、バンクスイッチBANK.SW の操作に対応してＣＰＵ２２が操作子設定テーブルのバンク番号bankを更新すると「ループ情報の処理」（ステップＦ２）を行う。この「ループ情報の処理」の詳細は後述する。更新されない場合にはこのステップＦ１を飛び越す。
【００７８】
またメインルーチンでは、ＣＰＵ２２から新たなキー情報の転送があったか否かをキー情報レジスタを見て監視しており（ステップＦ３）、キー情報の転送があればその内容に基づいて「キー情報の処理」を行う（ステップＦ４）。この「キー情報の処理」は転送されたキー情報に応じて各種レジスタの値を変更する処理であるが、詳細な内容は後述する。キー情報の転送がなければこのステップＦ４を飛び越す。
【００７９】
以上のキー情報の処理（ステップＦ４）が終了した場合またはステップＦ３で新たなキー情報がないと判断された場合、ボイスモジュール番号ｎを「１」に設定し（ステップＦ５）、ボイスモジュール(n) の「読出し処理」を行う（ステップＦ６）。この「読出し処理」は波形メモリの波形データを操作子等による各種の設定状態に応じた態様で読み出していく処理であるが、その詳細な内容は後述する。その後、ボイスモジュール番号ｎが最終番号（この実施例ではボイス数の２）か判定し（ステップＦ８）、最終番号に達していなかったら、ボイスモジュール番号ｎを一つインクリメントして（ステップＦ７）、その番号のボイスモジュールの読出し処理を繰り返す。ボイスモジュール番号が最終番号になったら、各ボイス１、２の出力out(1)、out(2)を足し合わせて合成出力out とし（ステップＦ９）、この合成出力out を出力する（ステップＦ１０）。
【００８０】
「ループ情報の処理」
ステップＦ２の「ループ情報の処理」の具体的な内容は、図１６に示されるように、
loopstart ＝＠（bank＊＄0002）
loopend   ＝＠（bank＊＄0002＋１）
の演算を行う（ステップＦ２０１）。ここで、「＊」は乗算を、「＠」は括弧内に示されたアドレスからデータを読み出すことを表す。したがって、上記の処理は、バンク番号bank＊＄０００２の読出しポインタが示すマーク記憶部からループスタートマークloopstart と、バンク番号bank＊＄０００２＋１の読出しポインタが示すマーク記憶部からループエンドマークloopend を読み出し、ループ情報レジスタにそれぞれ記憶する処理である。次に、そのループスタートマークloopstart が示す読出しポインタによってパラメータ記憶部からループスタートアドレスloopsaを、ループエンドマークloopend が示す読出しポインタによってパラメータ記憶部からループエンドアドレスloopeaを読み出し、ループ情報レジスタにそれぞれ記憶する（ステップＦ２０２）。
【００８１】
「キー情報の処理」
ステップＦ４の「キー情報の処理」の具体的な内容は、図１７に示されている。この「キー情報の処理」では、キー情報の転送があると、そのキー情報のボイスモジュール情報voice.Noを調べる（ステップＦ３００）。この実施例では、ボイスモジュールの数は二つであり、従ってボイスモジュール情報voice.NoもVoice.No１とvoice.No２の二つである。ここで、ボイス２への割当はポリフォニック１または２のときだけ行われる。したがってボイスモジュール情報がvoice.No１である場合は、モードとしてはモノフォニックとポリフォニックの双方の場合があり、voice.No２の場合はモードはポリフォニックとなる。
【００８２】
ボイスモジュール情報voice.No１であった場合、更にそのキー情報がキーオン情報key.onかキーオフ情報key.off かを判定し（ステップＦ３０１）、キーオフ情報key.off であれば、それまで発音を行っていたボイス１（ボイスモジュールNo１) の消音処理を行う（ステップＦ３０２）。この消音処理の詳細な内容は、図１８に示すように、
SCNT(1) ＝０
LEVEL(1)＝０
とすることである。
【００８３】
ここで、括弧付きの数字はボイスモジュールの番号である。SCNT(n) はボイスｎの発音の進行を管理するカウンタであり、波形データ記憶部から読み出す波形区間情報を更新（すなわち波形ピッチspitchと開始アドレスsadrs を更新）するためのカウント値をカウントするものである。LEVEL(n)はキー情報レジスタ中のレベルlevel を記憶するレジスタである。従って、上記の図１８の消音処理は、ボイス１について、カウンタSCNT(1) を０にリセットし、音量レベルレジスタLEVEL(1)を０にするものである。
【００８４】
ステップＦ３０１においてキー情報がキーオン情報key.onであった場合、操作子設定テーブルのリンクモードlink.mode を調べる（ステップＦ３０３）。リンクモードlink.mode が「０」の場合には「リトリガ」を行うモード、すなわち新たなキーオン情報key.onを受信したら波形データを再生中であってもその波形データの先頭から再生し直すモードであり、よって「ボイス１の発音開始処理」を行う（ステップＦ３０８）。この「ボイス１の発音開始処理」は要するに、波形メモリ１２から該当する波形のパラメータおよび波形データをその先頭から読み出す処理である。
【００８５】
この「ボイス１の発音開始処理」が実行される条件は以下のようになる。
▲１▼モノフォニック１のモードで、ボイス１に対するキーオン情報が入力されたとき・
▲２▼モノフォニック２のモードで、ボイス１が発音されていないときに、ボイス１に対するキーオン情報が入力されたとき．
▲３▼ポリフォニック１のモードで、ボイス１に対するキーオン情報が入力されたとき．
▲４▼ポリフォニック２のモードで、ボイス２が発音されていないときに、ボイス１に対するキーオン情報が入力されたとき．
（このモードのとき、ボイス１は割当処理で発音されていないことを確認して割り当てられる）
【００８６】
この「ボイス１発音開始処理」の具体的な内容は、図２０に示されるように、
PITCH(1)＝kpitch/org.pitch
LEVEL(1)＝level
SCNT(1) ＝０
ENDADRS(1)＝＠（bank＊＄800)
STARTADRS(1)＝＠（bank＊＄800 ＋SCNT(1) ＋１)
SPHASE(1) ＝STARTADRS(1)
SADRSR(1) ＝STARTADRS(1)
SPITCH(1) ＝＠（bank＊＄800 ＋SCNT(1) ＋２)
SADRS(1)＝＠ (bank＊＄800 ＋SCNT(1) ＋３)
START(1)＝STARTADRS(1)
WIDTH(1)＝０
S.FLG １(1) ＝０
S.FLG ２(1) ＝０
ALT.FLG(1)＝０
SCNT(1) ＝１
を行うことである。
【００８７】
ここで、SPHASEは進行位置sphaseを記憶する進行位置レジスタ、ENDADRS は波形データの末尾アドレスendadrs を記憶する末尾アドレスレジスタ、STARTADRS は波形データの先頭アドレスstartadrs を記憶する先頭アドレスレジスタである。SADRS は波形区間の開始アドレスsadrs を記憶するレジスタであり、順方向に波形データを読み出すときの次の波形区間の開始アドレスが記憶される。SADRSRも波形区間の開始アドレスsadrs を記憶するレジスタであるが、現在読み出している波形区間の開始アドレスを記憶するもので、リバース開始アドレスレジスタと称し、進行位置sphaseを逆方向に進めて波形区間を読み出すときの波形区間の移動を認識するときに使用する。START は後述の音素片を切り出すための基準アドレスとなる切出先頭アドレスstart を格納する切出先頭アドレスレジスタである。また前述したように「＊」は乗算を、「＠」は括弧内に示されたアドレスからデータを読み出すことを表す。例えば、ENDADRS （１）＝＠（bank＊＄８００）は、パラメータ記憶部の読出しポインタが示すアドレス（bank＊＄800 ）から内容dataを読み出し、レジスタENDADRS （ｌ）に設定することを意味している。
【００８８】
上記のボイス１発音開始処理は、ボイス１について、キー入力された音高情報kpitchを先に設定された基準ピッチ情報org.pitch で割算した結果をPITCH(1)に書き込み、レベル情報level をLEVEL(1)に転記し、カウンタSCNT(1) を初期値「０」にリセットし、該当するバンク番号bank (波形領域番号) の波形データの末尾アドレスendadrs を波形パラメータ記憶部における当該バンク番号bankの波形領域の先頭番地＄００００から読み出して末尾アドレスレジスタENDADRS(1)にセットし、先頭の波形区間の開始アドレス sadrs０を波形パラメータ記憶部における上記先頭から２番目の番地＄０００１（最初の波形区間の開始アドレスが格納されている) から読み出して先頭アドレスレジスタSTARTADRS(1)にセットし、その先頭アドレスstartadrs を進行位置sphaseの初期値として進行位置レジスタSPHASE(1) にセットするとともに、その先頭アドレスstartadrs の値を切出先頭アドレスレジスタSTART(1)にセットし、上記波形データの先頭の波形区間の波形ピッチspitch０を上記先頭番地から２番目の番地＄０００２から読み出して波形ピッチレジスタSPITCH(1) にセットし、上記波形データの先頭から２番目の波形区間の開始アドレス sadrs１を上記先頭から３番目の番地＄０００３から読み出して開始アドレスSADRS(1)にセットし、レジスタWIDTH(1)、フラグS.FLG1(1) 、S.FLG2(1) 、ALT.FLG(1)に「０」をセットするなどの処理を行った後に、カウンタSCNT(1) を一つ更新して１にするものである。
【００８９】
ステップＦ３０３においてリンクモードlink.mode が「１」の場合には「リトリガ」を行わないモード、すなわち新たなキーオン情報key.onを受信したら、波形データを再生中であれば、その時点以降の波形データを当該キーオン情報key.onで指定されたピッチに変更して再生するモードである。この場合、まず開始カウンタSCNT(1) が「０」か否かを判定する（ステップＦ３０４）。ここで開始カウンタSCNT(n) はボイスｎの発音の進行を管理するカウンタであり、この値が「０」の場合にはボイスｎがまだ未発音であることを示し、何らかの値となっていれば既に発音開始されたことを示す。
【００９０】
開始カウンタSCNT(1) が「０」以外の値すなわちボイス１が既に発音中であれば、ステップＦ３０５に移行して「ボイス１からボイス１へのリンク発音処理」を行う（ステップＦ３０４）。この経路を辿るのは、モードはモノフォニックであり、ボイス１が既に発音中であり、かつ「リトリガ」をしない場合であるから、ボイス１で発音中の波形を、キーオン情報の入力時点から以降、同じボイス１において当該キーオン情報中の音高情報pitch に変更して再生する。上記リンク発音処理はこのための処理であり、キー情報レジスタの音高情報レジスタPITCH(1)とレベル情報レジスタLEVEL(1)を、受信したキーオン情報中の音高情報kpitchとレベル情報level で書き換える処理、すなわち、図２２に示されるように、
PITCH(1)＝kpitch/org.pitch
LEVEL(1)＝level
とする処理である。
【００９１】
この「ボイス１からボイス１へのリンク発音処理」が実行される条件は、モノフォニック２のモードで、ボイス１が発音中にボイス１に対するキーオン情報が入力されたときであり、このモードのときにのみ、割当処理でボイス１が発音中にボイス１に対するキーオン情報が割り当てられる。
【００９２】
ステップＦ３０４においてカウンタSCNT(1) が「０」すなわちボイス１がまだ未発音であれば、さらにボイス２のカウンタSCNT(2) が「０」か否かを判定する（ステップＦ３０６）。カウンタSCNT(2) が「０」でない場合はボイス２が発音中であることを意味し、よってモードはポリフォニックであり、入力したキーオン情報はレガート奏法における２番目の押鍵のキーオン情報である。この場合、ボイス２での波形の発音再生を継続するとともに、そのキーオン情報の入力時点以降の波形に対して、その新たに入力したキーオン情報に応じた音高での再生をボイス１でも行う。このための処理がステップＦ３０７の「ボイス２からボイス１へのリンク発音処理」であり、ボイス２に保持していた再生中の波形の各種データをボイス１に渡すとともに、そのデータを新たに入力したキーオン情報に基づいて変更する。
【００９３】
この「ボイス２からボイス１へのリンク発音処理」が実行される条件は、ポリフォニック２のモードで、ボイス２が発音中にボイス１に対するキーオン情報が入力されたときである。このモードのとき、ボイス１は割当処理で発音されていないことを確認して割り当てられる。
【００９４】
「ボイス２からボイス１へのリンク発音処理」の具体的内容は、図２４に示されるように、
PITCH(1)＝kpitch/org.pitch
LEVEC(1)＝level
SCNT(1) ＝SCNT(2)
ENDADRS(1)＝ENDADRS(2)
STARTADRS(1)＝STARTADRS(2)
SPHASE(1) ＝SPHASE(2)
SPITCH(1)=SPITCH(2)
SADRSR(1) ＝SADRSR(2)
SADRS(1)＝SADRS(2)
START(1)＝START(2)
WIDTH(1)＝０
S.FLG1(1) ＝０
S.FLG2(1) ＝０
ALT.FLG(1)＝ALT.FLG(2)
とする処理である。
【００９５】
すなわち、このリンク発音処理は、ボイス２での発音をその音高とレベルを変更してボイス１で受け継ぐために、キー入力された音高情報pitch を先に設定された基準ピッチ情報org.pitch で割算した結果をPITCH(1)に書き込み、レベル情報level をキー情報LEVEL(1)に転記するとともに、ボイス２における、レジスタSCNT(2) 、ENDADRS(2)、STARTADRS(2)、SPHASE(2) 、SPITCH(2) 、SADRSR(2) 、SADRS(2)、START(2)の各値をボイス１におけるレジスタSCNT(1) 、ENDADRS(1)、STARTADRS(1)、SPHASE(1) 、SPITCH(1) 、SADRSR(1) 、SADRS(1)、START(1)にそれぞれ書き写し、レジスタWIDTH(1)、フラグS.FLG1(1) 、S.FLG2(1) に「０」をセットし、ALT.FLG(1)にALT.FLG(2)を書き写すものである。
【００９６】
ステップＦ３０６において、カウンタSCNT(2) が「０」の場合は、ボイス２がまだ未発音であることを意味し、よってモードはモノフォニックまたはポリフォニックである。この経路を辿る場合はボイス１もボイス２も未発音であるので、新たに入力したキーオン情報はレガート奏法における２番目の押鍵ではなく、よってこのキーオン情報はボイス１に割り当てられて、波形データは先頭から再生される。この場合、前述のステップＦ３０８の「ボイス１の発音開始処理」を行う。
【００９７】
一方、ステップＦ３００の判定において、ボイスモジュール情報voice.Noがvoice.No２であった場合は、モードはポリフォニックとなる。この場合、更にそのキー情報がキーオン情報key.onかキーオフ情報key.off かを判定し（ステップＦ３０９）、キーオフ情報key.off であれば、それまで発音を行っていたボイス２(No.２のボイスモジュール) の消音処理を行う（ステップＦ３１４）。この消音処理の詳細な内容は、図１９に示すように、
SCNT(2) ＝０
LEVEL(2)＝０
とする処理である。
【００９８】
ステップＦ３００において、キー情報がキーオン情報key.onであった場合、操作子設定テーブルのリンクモードlind.mode を調べる。リンクモードlink.mode が「０」の場合には「リトリガ」を行うモード、すなわち新たなキーオン情報key.onを受信したら波形データを再生中であってもその波形データの先頭から再生し直すモードであり、よって「ボイス２の発音開始処理」を行う（ステップＦ３１１）。この「ボイス２の発音開始処理」は要するに、波形メモリ１２から該当する波形のパラメータおよび波形データをその先頭から読み出してボイス２で発音する処理である。
【００９９】
この「ボイス２の発音開始処理」が実行される条件は、
▲１▼ポリフォニック１のモードで、ボイス２に対するキーオン情報が入力されたとき、
▲２▼ポリフォニック２のモードで、ボイス１が発音されていないときに、ボイス２に対するキーオン情報が入力されたとき、
である。
なお、ボイス２への割当はポリフォニック１、ポリフォニック２のときだけ行われる。
【０１００】
この「ボイス２発音開始処理」の具体的な内容は、図２１に示されるように、
PITCH(2)＝kpitch/org.pitch
LEVEL(2)＝level
SCNT(2) ＝０
ENDADRS(2)＝＠ (bank＊＄800)
STARTADRS(2)＝＠ (bank＊＄800 ＋SCNT(2) ＋１)
SPTASE(2) ＝STARTADRS(2)
SADRSR(2) ＝STARTADRS(2)
SPITCH(2) ＝＠ (bank＊＄800 ＋SCNT(2) ＋２)
SADRS(2)＝＠ (bank＊＄800 ＋SCNT(2) ＋３)
START(2)＝STARTADRS(2)
WIDTH(2)＝０
S.FLG1(2) ＝０
S.FLG2(2) ＝０
ALT.FLG(2)＝０
SCNT(2) ＝１
を行うことである。
【０１０１】
ステップＦ３１０の判断で、リンクモードlink.mode が「１」の場合には「リトリガ」を行わないモード、すなわち新たなキーオン情報key.onを受信したら、波形データを再生中であれば、その時点以降の波形データを当該キーオン情報key.onで指定されたピッチに変更して再生するモードである。この場合、まずカウンタSCNT(1) が「０」か否かを判定する（ステップＦ３１２）。
【０１０２】
カウンタSCNT(1) が「０」の場合、すなわちボイス１が未だ未発音であれば、前述のステップＦ３１１の「ボイス２の発音開始処理」を行う。
【０１０３】
カウンタSCNT(1) が「０」以外の値の場合、すなわちボイス１が既に発音中であれば、ステップＦ３１３に移行し「ボイス１からボイス２へのリンク発音処理」を行う。この経路を辿るのは、モードはポリフォニックであり、ボイス１が既に発音中であり、かつ「リトリガ」をしない場合であるから、ボイス１で発音中の波形を、キーオン情報の入力時点から以降、ボイス１で継続して発音するとともに、それと並行して、ボイス２においても当該キーオン情報中の音高情報pitch に対応して再生する。上記「ボイス１からボイス２へのリンク発音処理」はこのための処理である。
【０１０４】
この「ボイス１からボイス２へのリンク発音処理」が実行される条件は、ポリフォニック２のモードで、ボイス１が発音中にボイス２に対するキーオン情報が入力されたときである。
【０１０５】
「ボイス１からボイス２へのリンク発音処理」の具体的内容は、図２３に示されるように、
PITCH(2)＝kpitch/org.pitch
LEVEC(2)＝level
SCNT(2) ＝SCNT(1)
ENDADRS(2)＝ENDADRS(1)
STARTADRS(2)＝STARTADRS(1)
SPHASE(2) ＝SPHASE(1)
SPITCH(2)=SPITCH(1)
SADRSR(2) ＝SADRSR(1)
SADRS(2)＝SADRS(1)
START(2)＝START(1)
WIDTH(2)＝０
S.FLG1(2) ＝０
S.FLG2(2) ＝０
ALT.FLG(2)＝ALT.FLG(1)
とする処理である。
以上、キー情報の処理が終了したらメインルーチンに戻る。
【０１０６】
「読出し処理」
前述のステップＦ６の「読出し処理」は、サンプル波形（音声）から音素片を切り出し、その音素片のホルマントの特徴をほぼ保ったまま、所望の再生音高に対応した周期でその音素片を再生することによって、サンプル波形のホルマント特性を保ったままピッチを変換するものである。
【０１０７】
この読出し処理では、同じ波形データを読み出す場合、再生される波形のピッチは鍵盤で押下したキーの音高に応じて変更されるが、再生時間は再生ピッチの大きさ（すなわちどのキーが押下されたか）によらず一定である。すなわち、ポリフォニックの場合、レガート奏法の２番目の押鍵により、１番目の押鍵の音高に応じた波形再生と並行して２番目の押鍵の音高に応じた波形再生が行われたとき、１番目の波形再生の終了と２番目の波形再生の終了は同時となる。一方、従来のように単に読出し速度を変えることでピッチシフトを行っている場合には、上記のようなときには１番目と２番目の波形再生の終了はタイミングがずれてしまい違和感が生じるが、本実施例によれば、かかる違和感を無くすことができる。
【０１０８】
この読出し処理動作の概要を説明すると、波形メモリ１２に記憶されている波形データからパラメータデータに基づいて所望の区間（この実施例では基本的には２ピッチ分の波形区間で、場合によってはそれよりも短い波形区間）を音素片として時間経過に従って順次に切り出して、その切り出した音素片を、元の波形とは異なるピッチおよびホルマントで再生するものである。その際、この音素片の再生を二つの処理経路で並行して行い、それぞれの処理経路では再生しようとするピッチ周期の２倍の周期でかつ互いが半周期（再生しようとするピッチ周期）ずれるようにして音素片を再生し、これらを合成して、再生しようとするピッチ周期にするようにしている。
【０１０９】
図２５、図２６はこのピッチ変換処理を説明する図である。ホルマント移動量f.vrは「１」であれば変更なし、「１」以外であればホルマントを若干変更する。ここでは、ホルマント移動量f.vrが「１」、すなわちホルマント変更無しでかつ再生ピッチを波形メモリ１２の元の波形データより高くする場合を図２５で説明し、ホルマント移動量f.vrが「１」よりも大きい、すなわちホルマント変更有りでかつ再生ピッチを波形メモリ１２の元の波形データと同じにする場合を図２６で説明する。
【０１１０】
まず、図２５を参照して、鍵盤のキー押下で音高を指定することにより、元の波形データより高域側にピッチをシフトし、かつホルマント特性の変更は行わない（ホルマント移動量f.vr＝１）場合について説明する。
【０１１１】
図２５の（ａ）はwave０領域の波形データを示しており、波形パラメータで示されるピッチspitch０、spitch１・・・を有する。そして、基本的には、このピッチspitchに対応して音素片が順次に切り出される。なお、この図２５（ａ）には開始アドレス sadrs０から始まる波形ピッチspitch０のwave０領域の複数周期の波形のうちのＰ０〜Ｐ４の５周期分の波形を示している。
【０１１２】
また、再生ピッチwidth は後述の「読出し処理サブルーチン」のステップＦ７０において再生ピッチレジスタWIDTH に設定されており、基本的には（波形ピッチレジスタＳPITCH ＊キー比レジスタPITCH ）の演算によって決定されている。なお、lfo.mod は再生ピッチを変調する信号に対応するものであるので、ここでは無視する。この演算処理において使われるキー比レジスタPITCH の情報（キー比pitch ）は、前述の各発音処理において演算された「操作キー情報pitch ／基準キー情報org.pitch 」の割算の結果であり、鍵盤でキー操作されたキー情報kpitchと先に設定された基準キー情報org.pitch との比である。従って、再生ピッチwidth は、鍵盤のキー操作による再生音高の指定にあたって、オリジナルキー設定時に予め設定された基準キーが操作されると、波形ピッチspitchと同じピッチで再生され、その他のキーが操作されると、基準キーとその操作されたキーとの比に対応して波形ピッチspitchをシフトして再生するようにされている。つまり、基準キーを基準に操作キーで波形ピッチspitchのシフト量を設定している。
【０１１３】
この再生ピッチwidth を周期長とする再生位相phase を図２５ (ｂ) のように作成し、この再生位相pahse から２つの処理経路の位相、すなわち図２５ (ｄ) に示す第１の処理経路の第１位相ph１、図２５ (ｅ) に示す第２の処理経路の第２位相ph２を作成する。なお、これら第１、第２の位相ph１、ph２はサンプリング周期毎にインクリメントされて増加する
【０１１４】
そして、第１の処理経路は、後述の「波形読出し処理サブルーチン」のステップＦ７７０６で行う読出しアドレス演算の「第１位相ph１×ホルマント移動量f.vr」の部分で決まる読出し速度で、また、第２の処理経路は、後述の「波形読出し処理サブルーチン」のステップＦ７７１５で行う読出しアドレス演算の「第２位相ph２×ホルマント移動f.vr」の読出し速度で、それぞれの音素片を順次に読み出す。この読出し速度がホルマント特性の変更に関係する。ただし、今の場合はホルマント移動量f.vr＝１であるから、第１、第２の位相ph１、ph２の変化と等しく、結果的にホルマント特性は変更されない。
【０１１５】
さらに、第１、第２の位相ph１、ph２にそれぞれ同期して、ホルマント処理のために波形データを切り取る切出し窓としてのエンベロープ env１、 env２を第１、第２の処理経路について作成する。第１の処理経路は図２５ (ｆ) に示すエンベロープ env１の波形を持ち、第２の処理経路は図２５ (ｇ) に示すエンベロープ env２の波形を持つ。エンベロープ env１、 env２は「０〜１」の範囲の値であり、エンベロープ窓長lenghtを半周期とし、前半の周期では「０」から逐次に増加して「１」になり、後半の周期では「１」から逐次に減少して「０」になる三角形をしている。エンベロープ env１、 env２の半周期であるエンベロープ窓長lengthは、後述の「読出し処理のサブルーチン」のステップＦ７０において、
「エンベロープ長length＝元波形のピッチspitch／ホルマント移動量f.vr」で求める。但し、エンペロープ窓長lengthは後述するように再生ピッチwidth を超えないように最大でも再生ピッチwidth の値に制限される。図２５はかかる制限がされた場合の例である。
【０１１６】
第１の処理経路では、後述の「読出し処理サブルーチン」のステップＦ７５において設定されている第１切出先頭アドレス START１から波形データの約２ピッチ分の音素片にエンベロープ env１を乗算し、図２５ (ｈ) に示す波形を得る。同様に、第２の処理経路では、後述の「読出し処理サブルーチン」のステップＦ７６において設定されている第２切出先頭アドレス START２から波形データの２ピッチ分の音素片にエンベロープ env２を乗算し、図２５（ｉ) に示す波形を得る。なお、図２５の場合は、前述のように、エンベロープ窓長lengthが再生ピッチwidth の値に制限されているため、音素片は波形データの２ピッチ分より短くなっている。このような処理の仕方によれば、これらの波形は元の波形データの音素片のホルマント特性をそのまま保持したものとなる。この図２５ (ｈ) 、 (ｉ) の波形は再生ピッチwidth の周期長の２倍の長さであるが、両者の波形を足し合わせると再生ピッチwidth の周期長となる。従って、鍵盤からの操作キー情報kpitchによって元のサンプリングデータを高域側にピッチシフトしつつ、そのホルマント特性はそのまま維持できる。
【０１１７】
図２６はホルマント移動量f.vrを１より大きくして再生波形のホルマントを元波形のホルマントより高域側にシフトする場合を示すものである。ここでは理解しやすくするために、操作キー情報kpitchが元波形のピッチspitchとほぼ等しいものとして示している。
【０１１８】
音素片の読出し速度は、第１の処理経路が、「第１位相ph１×ホルマント移動量f.vr」、第２の処理経路が、「第２位相ph２×ホルマント移動量f.vr」であるから、第１、第２の位相ph１、ph２の変化より速く、結果的にホルマント特性は高域側にシフトされ、変更が付与されることになる。
【０１１９】
そして、読出し速度を速くすることによって音素片は短くなる。従って、エンベロープenv1、env2のエンプロープ窓長lengthも、
「エンプロープ窓長length＝元波形のピッチspitch／ホルマント移動量f.vr」として、音素片が短くなったことに合わせて短くしている。
【０１２０】
「読出し処理のサブルーチン」
上記の効果付加を含む読出し処理の動作を図２７、図２８のフローチャートに基づいて説明する。なお、図２７、図２８中の括弧書きの添字(n) はボイスモジュール番号ｎのパラメータ等であることを意味するものであるが、以下の説明では特に必要がない場合は記述を省略する。
【０１２１】
ＤＳＰ８は、処理のため着目している１ピッチ分の波形ピッチspitchを記憶する波形ピッチレジスタSPITCHを備えている。更に、後述する再生ピッチ周期長width に達したかをカウントするための再生位相カウンタPHASE 、第１の波形の位相ph１をカウントするための第１位相カウンタPH１、第２の波形の位相ph２をカウントするための第２位相カウンタPH２も設けられている。
【０１２２】
また、再生ピッチ（＝再生ピッチ周期長width ）を記憶するための再生ピッチレジスタWIDTH 、波形ピッチspitchとホルマント移動量f.vrから定めたエンベロープの窓長lengthを記憶するエンベロープ窓長レジスタLENGTH、第１の波形のエンベロープ env１を記憶するための第１エンベロープ波形レジスタ ENV１、および第２の波形のエンベロープ env２を記憶するための第２エンベロープ波形レジスタ ENV２が設けられている。
【０１２３】
更に、第１の波形のエンベロープの形状を決定するためのカウンタを構成するレジスタWINDOW１、第２の波形のエンベロープの形状を決定するためのカウンタを構成するWINDOW２、エンベロープ窓長lengthの値に基づいて定めたレジスタWINDOW１、WINDOW２の値の歩進率w.rateを記憶する歩進率レジスタW.RATE、第１の波形の切出先頭アドレス start１を記憶する第１切出先頭アドレスレジスタ START１、第２の波形の切出先頭アドレス start２を記憶する第２切出先頭アドレスレジスタ START２、第１および第２の波形の読出しの先頭アドレスを設定する処理を決定するために使用する相識別フラグＦ等も設けられている。
【０１２４】
以下、全体的な動作を図２７、図２８のフローチャートに従って説明する。このフローチャートは図２５、図２６の動作に対応したものである。上述の各レジスタは、電源の投入の際に、初期化が行われる。即ち、相識別フラグＦ(1) 、Ｆ(2) を「１」に、他のもの例えばレジスタSCNT(2) 、SCNT(1) 、WIDTH(1)、WIDTH(2)、PITCH(1)、PITCH(2)、LEVEL(1)、LEVEL(2)、ENDADRS(1)、ENDADRS(2)等を「０」に初期設定する。
【０１２５】
なお、以下の説明では、電源投入後少し時間が経過し、前記フローチャートの処理によって、各レジスタや各カウンタには、既に適当な値が記憶されているとして説明する。また、このフローチャートの処理は、ＤＳＰ８においてサンプリング周期毎に実行される。
【０１２６】
まず、発音の進行を管理するためのカウンタSCNT(n) が「０」であるか否かを判断する。「０」であれば発音指示がされていないキーオフ中、「０」でなければキーオン中（発音指示中) である。「０」でない（すなわちキーオン中）と判断した場合には進行位置sphaseの更新処理を行い（ステップＦ６２）、「０」すなわちキーオフ中と判断した場合には進行位置sphaseの更新を停止するためにステップＦ６２を飛び越す。
【０１２７】
進行位置sphaseの更新処理を以下に説明すると、発音開始時においては、進行位置レジスタSPHASE(n) には、前述のボイスの発音開始処理によって、波形メモリ１２のパラメータ記憶部におけるバンク番号bankで示される波形領域の先頭の波形区間の開始アドレス sadrs０が格納されている。進行位置sphaseはこれを基準点にして時間の進行を管理する。１サンプル周期毎に、進行位置sphaseを時間圧伸量tcomp だけインクリメントする（ステップＦ６２）。すなわち、
SPHASE(n) ＝SPHASE(n) ＋tcomp
とする。このような更新をする結果、時間圧伸量tcomp が大きければ、進行位置sphaseは速く進んで波形全体を再生するに要する時間が短くなり、反対に時間圧伸量tcomp が小さければ進行位置sphaseは遅く進むので波形全体を再生するに要する時間は長くなる。
【０１２８】
次に、先のループモードスイッチLOOPMODE.SW によって設定されたループモードloopmode  に対応して「ループモード処理」を行う（ステップＦ６３）。図２９はこの「ループモード処理」のフローチャートである。以下にこの「ループモード処理」について詳細に説明する。
【０１２９】
まず、操作子設定テーブルに設定されているループモードloopmode  が、ループ再生をしないループオフ“off ”であるか否かを判断する（ステップＦ６３０１）。ループモードloopmode  が“off ”である場合には何も処理をせずに「読出し処理サブルーチン」に戻る。ループモードloopmode  が“off ”でなければ、さらにノーマルループ“norm”か、またはオルタネートループ“alt ”かを判定する（ステップＦ６３０２）。つまり、ステップＦ６３０２とＦ６３０８とで３つのループモードloopmode  の設定に対応してそれぞれ分岐する処理をしている。
【０１３０】
ステップＦ６３０２においてループモードloopmode  がノーマルループ“norm”であった場合には、時間圧伸量tcomp が「０」以上であるか否か、すなわち正か負かを判断する（ステップＦ６３０３）。時間圧伸量tcomp が「０」以上でない（時間圧伸量tcomp が負）とは後述の「逆方向再生処理」をすることを意味するが、ノーマルループ“norm”では「逆方向再生処理」はしないので、時間圧伸量tcomp が「０」以上でない場合には、ループ再生をしないようにするために、以下の進行位置sphaseの変更処理をしないように何も処理をせずに「読出し処理サブルーチン」に戻る。
【０１３１】
ステップＦ６３０３で時間圧伸量tcomp が「０」以上であると判断されると、進行位置sphaseがループエンドアドレスloopeaを超えたかか否かを判断する（ステップＦ６３０４）。進行位置sphaseがループエンドアドレスloopeaを超えていない場合には「読出し処理サブルーチン」に戻り、ループエンドアドレスloopeaを超えた場合には、ループ再生の区間の先頭に戻って再生を行うための各レジスタの値の再設定処理を行う（ステップＦ６３０５〜Ｆ６３０７）。
【０１３２】
すなわち、まず、
SPHASE(n) ＝loopsa＋（SPHASE(n) −loopea）
を実行する（ステップＦ６３０５）。この処理は進行位置sphaseがループエンドアドレスloopeaを超えると、進行位置sphaseをループスタートアドレスloopsaに戻すとともにその超えた長さ（SPHASE(n) −loopea）だけループスタートアドレスloopsaから進める演算を行っている。そして、
SADRS (n) ＝loopsa、
START (n) ＝loopsa
を行い（ステップＦ６３０６）、開始アドレスsadrs と切出先頭アドレスstart もループスタートアドレスloopsaに戻している。また、
SCNT(n) ＝（loopstart −１−bank＊＄800 ）／２
を行い（ステップＦ６３０７）、カウンタSCNTもループスタートアドレスloopsaに対応して戻し、「読出し処理サブルーチン」に戻っている。
【０１３３】
以上のステップＦ６３０４〜Ｆ６３０７の処理によってノーマルループ再生に対応した進行位置sphaseの変化が得られる。なお、以上の説明から分るように、ノーマルループ再生とは、進行位置sphaseが順方向に変化し、ループエンドアドレスloopeaに達するとループスタートアドレスloopsaに戻って、その間を繰り返す再生のことである。
【０１３４】
次に、ステップＦ６３０２でループモードloopmode  がオルタネートループ“alt ”と判断された場合の処理を説明する。ここで、オルタネートループ再生とは、進行位置sphaseが順方向に変化しループエンドアドレスloopeaに達すると進行位置sphaseの変化がループスタートアドレスloopsaへ向かう逆方向へと変化するようになり、そして進行位置sphaseがループスタートアドレスloopsaに達すると進行位置sphaseの変化がループエンドアドレスloopeaへ向かう順方向へと変化するというように、進行位置sphaseの変化方向がループスタートアドレスloopsaとループエンドアドレスloopeaとで交互に反転してその間を繰り返し再生する再生の仕方である。
【０１３５】
したがって、オルタネートループ“alt ”と判断された場合には、さらに時間圧伸量tcomp が「０」以上であるか否か（正か負か）を判断する（ステップＦ６３０８）。これは進行位置sphaseの変化方向を判断していることになり、時間圧伸量tcomp が「０」以上である場合は順方向に再生を行っており、「０」より小さい場合は逆方向に再生を行っていることになる。
【０１３６】
順方向再生（時間圧伸量tcomp が「０」以上）を行っている場合、まず、次のステップＰ６３０９からステップＦ６３１１を実行して、進行位置sphaseがループスタートアドレスloopsaを超えるとオルタネートフラグALT.FLG を「１」にセットする処理を行っている。つまり、フラグALT.FLT (n) ＝０であるか否かを判断し（ステップＦ６３０９）、「０」であれば進行位置sphaseがループスタートアドレスloopsa以上か否かを判断して（ステップＦ６３１０）、進行位置sphaseがループスタートアドレスloopsa以上であると判断されたときには、進行位置sphaseがループスタートアドレスloopsaに達したことになるためフラグALT.FLG (n) を「ｌ」にセット（ステップＦ６３１１）し、ループスタートアドレスloopsaより小さいと判断されたときには、進行位置sphaseがまだループスタートアドレスloopsaに達していないため次のステップＦ６３１１をジャンプしている。また、前記ステップＦ６３０９でフラグALT.FLG(n)が「０」でないと判断された場合には、既に進行位置sphaseがループスタートアドレスloopsaに達してフラグALT.FLG (n) が「ｌ」にセットされているため、ステップＦ６３１０とＦ６３１１をジャンプしている。
なお、このフラグALT.FLG (n) は後述のステップＦ６３１５で使用している。
【０１３７】
次のステップＦ６３１２からＦ６３１４の処理では、進行位置sphaseが順方向においてループエンドアドレスloopeaを超えたかを判断し、超えていれば進行位置sphaseの変化方向を逆方向に変える処理を行っている。具体的には、進行位置sphaseがループエンドアドレスloopea以上かを判断し（ステップＦ６３１２）、以上と判断された場合には
SPHASE(n) ＝loopea−（SPHASE(n) −loopea）
の演算を行い（ステップＦ６３１３）、これにより進行位置sphaseを、上記ループエンドアドレスloopeaから順方向に超過した分（SPHASE(n) −loopea）だけループエンドアドレスloopeaから逆方向に戻した位置に設定する。そして時間圧伸量tcomp に「−１」を乗算し（ステップＦ６３１４）、時間圧伸量tcomp の符号を反転して進行位置sphaseの進行方向を反転している。
【０１３８】
また、前記ステップＦ６３１２において、進行位置sphaseがループエンドアドレスloopea以上でないと判断された場合には、前記ステップＦ６３１３とＦ６３１４を飛び越して、読出しサブルーチンに戻る。
【０１３９】
次に前記ステップＦ６３０８で時間圧伸量tcomp が「０」以上でない（逆方向再生を行っている）と判断された場合には、フラグALT.FLG (n) が「１」であるか否かを判断する（ステップＦ６３１５）。このフラグALT.FLG (n) の判断は、進行位置sphaseがループスタートアドレスloopsaを超えるまでは次のループスタートアドレスloopsaとの比較判断で誤った判断を行うため、それを防ぐためである。ALT.FLG (n) ＝ｌでない、すなわち順方向再生して進行位置sphaseがループスタートアドレスを超えていないと判断された場合には「読出し処理サブルーチン」ヘ戻る。
【０１４０】
一方、ALT.FLG (n) ＝１である、すなわち順方向再生して進行位置sphaseがループスタートアドレスを超えたと判断された場合には、現在の状態が、進行位置spahseがループスタートアドレスに達し、逆方向再生処理の状態であるため、進行位置sphaseがループスタートアドレスloopsa以下であるか否か、すなわち逆方向に変化した進行位置sphaseがループスタートアドレスloopsaに達したか否かを判断する（ステップＦ６３１６）。進行位置sphaseがループスタートアドレスloopsa以下であると判断された場合、すなわち進行位置sphaseがループスタートアドレスloopsaを逆方向に超えたと判断された場合には、
SPHASE(n) ＝loopsa＋（SPHASE(n) −loopsa）
の演算を行い（ステップＦ６３１７）、これにより進行位置sphaseを、上記ループスタートアドレスloopsaから逆方向に超過した分（SPHASE(n) −loopsa）だけループスタートアドレスloopsaから順方向に進めた位置に設定する。そして、前記したように、時間圧伸量tcomp に「−１」を乗算し（ステップＦ６３１４）、時間圧伸量tcomp の符号を反転して進行位置sphaseの進行方向を反転している。
【０１４１】
また、前記ステップＦ６３１６において、進行位置sphaseがループスタートアドレスloopsa以下でないと判断された場合には前記ステップＦ６３１７とＦ６３１４を飛び越して、「読出し処理のサブルーチン」に戻る。
【０１４２】
以上のようにして「ループモード処理サブルーチン」が終了して「読出し処理サブルーチン」に戻ると、「読出し処理サブルーチン」では、次に時間圧伸量tcomp が「０」以上か否かを判断する（ステップＦ６４）。時間圧伸量tcomp が「０」以上であると判断された場合には「順方向再生処理」（ステップＦ６５）を、時間圧伸量tcomp が「０」以上でないと判断された場合には「逆方向再生処理」（ステップＦ６６）を実行する。
【０１４３】
「順方向再生処理」
図３０はこの「順方向再生処理」の手順を示すフローチャートであり、以下にこの「順方向再生処理」について詳細に説明する。まず進行位置sphaseと末尾アドレスレジスタendadrs を比較し（ステップＦ６５０１）、進行位置spase が末尾アドレスendadrs 以上であれば、進行位置sphaseが末尾まで処理を終えていることを意味しているため、進行位置sphaseを末尾アドレスendadrs にして（ステップＦ６５０２）、進行位置sphaseが末尾アドレスendadrs を超えないようにしている。なお、ステップＦ６５０１で進行位置sphaseが末尾アドレスendadrs 以上でなければ、まだその波形全体の末尾まで処理を終えていないことを意味するため、前記ステップＦ６５０２は飛び越す。
【０１４４】
次に切出先頭アドレスレジスタSRART(n)を更新するか否かを判定するために、（ START(n) ＋SPITCH(n) ）と進行位置レジスタSPHASE(n) の値とを比較する（ステップＦ６５０３）。（START (n) ＋SPITCH(n) ）よりも進行位置レジスタSPHASE(n) の値の方が大きければ、進行位置sphaseが、切出先頭アドレスstart から順方向に波形ピッチspitch分だけ進んだ位置を超えたことを意味し、この場合には切出先頭アドレスレジスタSTART を次の切出先頭アドレスの値に更新する。この更新は切出先頭アドレスレジスタSTART(n)を波形ピッチspitchでインクリメントして行う（ステップＦ６５０４）。すなわち、
START(n)＝ START(n) ＋SPITCH(n)
とする。進行位置spitchが（START ＋SPITCH）以下である場合には、この切出先頭アドレスstart の更新は行わない。
【０１４５】
進行位置sphaseと開始アドレスレジスタsadrs を比較する（ステップＦ６５０５）。この開始アドレスsadrs は前述した図２０、図２１の発音開始処理からも分かるように、次に続く波形区間の開始アドレスである。よって進行位置sphaseが開始アドレスsadrs 以上であれば、それまで処理していた波形区間が終了したので、この波形区間から次の波形区間に処理を移行するために波形区間の更新を行う。この波形区間の更新は次のようにして行う。
SADRSR(n) ＝＠ (bank＊＄800 ＋１＋SCNT(n) ＊２)
SPITCH(n) ＝＠（bank＊＄800 ＋２＋SCNT(n) ＊２）
SADRS(n)  ＝＠（bank＊＄800 ＋３＋SCNT(n) ＊２）
SCNT(n)   ＝SCNT(n) ＋１
【０１４６】
すなわち、波形メモリ１２のパラメータ記憶部からパラメータデータ（次に続く波形区間の開始アドレスsadrs と波形ピッチspitchと更にその後の波形区間の開始アドレスsadrs)を読み出してきて、それぞれ、現在の波形区間のリバース開始アドレスsadrsr、波形ピッチspitch、次の波形区間の開始アドレスsadrs とし、カウンタSCNTを一つインクリメントする（ステップＦ６５０６）。
【０１４７】
ステップＦ６５０５において、進行位置sphaseが次の波形区間の開始アドレスsadrs より小さければ、まだ現在の波形区間の途中であるから、波形区間の更新は行わないので、ステップＦ６５０６の処理は飛び越す。
【０１４８】
「逆方向再生処理」
図３１は前述のステップＦ６６の「逆方向再生処理」の手順を示すフローチャートであり、以下にこの「逆方向再生処理」について詳細に説明する。まず、進行位置sphaseと先頭アドレスsraradrsを比較し（ステップＦ６６０１）、進行位置sphaseが先頭アドレスレジスタstartadrs 以下であれば、進行位置sphaseが逆方向に進んで先頭アドレスstartadrs に達していることを意味しているため、進行位置sphaseを先頭アドレスstartadrs にして（ステップＦ６６０２）、進行位置sphaseが先頭アドレスstartadrs を超えて逆方向に進まないようにしている。なお、ステップＦ６６０１で進行位置sphaseが先頭アドレスstartadrs 以下でなければ、まだその波形全体の末尾まで処理を終えていないことを意味するため、前記ステップＦ６６０２を飛び越す。
【０１４９】
次に、進行位置sphaseとリバース開始アドレスsadrsrを比較する（ステップＦ６６０３）。このリバース開始アドレスsasrsrは前述したように、現在読み出している波形区間の開始アドレスである。よって進行位置sphaseがリバース開始アドレスsadrsrより小さければ、進行位置sphaseが逆方向に進んで現在処理している波形区間の開始アドレスに達したことになるので、この波形区間から前の波形区間に処理を移行するために波形区間の更新を行う。この波形区間の更新は、
SCNT(n) ＝SCNT(n) −１
SADRSR (n)＝＠〔bank＊＄800 ＋１＋（SCNT(n) −１）＊２〕
SPITCH(n) ＝＠〔bank＊＄800 ＋２＋（SCNT(n) −１）＊２〕
SADRS (n) ＝＠〔bank＊＄800 ＋３＋（SCNT(n) −１）＊２〕
のようにして行う（ステップＦ６６０４）。すなわち、カウンタSCNTを一つディクリメントし、波形メモリ１２のパラメータ記憶部からパラメータデータ（次に続く前の波形区間の開始アドレスsadrsr  と波形ピッチspitchと更に前記前の波形区間の後に続く波形区間の開始アドレスsadrs ）を読み出してきて、それぞれ、現在の波形区間のリバース開始アドレスsadrsr、波形ピッチspitch、次の波形区間の開始アドレスsadrs とする。
【０１５０】
ステップＦ６６０３において、進行位置sphaseが現在の波形区間の開始アドレスであるリバース開始アドレスsadrsr以上であれば、まだ現在の波形区間の途中であるから、波形区間の更新は行わないで、ステップＦ６６０４の処理は飛び越す。
【０１５１】
次に切出先頭アドレスstart を更新するか否かを判定するために、切出先頭アドレスstart と進行位置sphaseとを比較する（ステップＦ６６０５）。切出先頭アドレスstart の方が進行位置sphaseより大きければ、進行位置sphaseが切出先頭アドレスstart を逆方向へ超えて進んだことを意味し、この場合には切出先頭アドレスstart を次の切出先頭アドレスの値に更新する。この更新は切出先頭アドレスレジスタSTART の値を波形ピッチspitchでディクリメントして行う（ステップＦ６６０６）。すなわち、
START(n)＝START(n)−SPITCH(n)
とする。
【０１５２】
さらに、切出先頭アドレスstart が波形の先頭アドレスstartadrs を逆方向へ超えて進まないように制限を加えている。具体的には、切出先頭アドレスstart と先頭アドレスstartadrs を比較（ステップＦ６６０７）し、切出先頭アドレスstart が先頭アドレスstartadrs より小さいと判断された場合は、切出先頭アドレスstart が波形の先頭アドレスstartadrs を逆方向に超えて進んだことになるため、切出先頭アドレスstart を先頭アドレスstartadrs とする（ステップＦ６６０８）。ステップＦ６６０７において、切出先頭アドレスstart が先頭アドレスstartadrs 以上と判断された場合は、切出先頭アドレスstart が波形の先頭アドレスstartadrs に達していないため、ステップＦ６６０８を飛び越す。
【０１５３】
なお、先のステップＦ６６０５において進行位置sphaseが切出先頭アドレスstart 以上である場合には、進行位置sphaseが切出先頭アドレスstart を逆方向に超えていないため、切出先頭アドレスstart の更新は行わない。
【０１５４】
以上のステップＦ６１〜Ｆ６６の処理により、ＤＳＰの操作子設定テーブルに絶対値が大きな時間圧伸量tcomp が設定された場合には進行位置sphaseが速く進んで切出先頭アドレスstart の更新が早く行われ、よって波形再生時間が短くなる。反対に時間圧伸量tcomp の絶対値が小さい場合には進行位置shase が遅く進んで切出先頭アドレスstart の更新が遅く行われ、よって波形再生時間が長くなる。
【０１５５】
なお、この時間圧伸量tcomp の絶対値をかなり小さな値に設定した場合には、同じ波形区間が複数回繰り返して再生されつつ、遅い速度で波形再生が進行するようになる。これは、進行位置sphaseの進行がゆっくりしているためステップＦ６５０５、Ｆ６５０３、Ｆ６６０５の判断で進行位置sphaseがなかなか比較している値よりも大きく又は小さくならず、よって波形区間の更新がなかなか行われないで同じ波形区間からの読出し処理が繰り返し行われるためである。反対に、時間圧伸量tcomp の絶対値をかなり大きな値にすると、波形区間の更新において、次に続く波形区間を飛び越してしまいその波形区間の再生が行われないような場合も生じる。
【０１５６】
ここで、アフタータッチがあった場合には、ＤＳＰの操作子設定テーブルの時間圧伸量tcomp は、前述の再生処理のステップＥ３２８においてそのアフタータッチの強さに応じて変更されるので、波形再生時間はアフタータッチにより次のように調整される。
▲１▼アフタータッチ無しの場合
アフタータッチがごく弱いためアフタータッチ無しと判定された場合、つまりアフタータッチ信号after.touch の大きさが＄００〜＄１９の場合は、時間圧伸量設定操作子TCOMP で設定した時間圧伸量tcomp の速さで再生され、アフタータッチにより変化しない。
▲２▼アフタータッチ有りの場合
アフタータッチが有りと判定された場合には、アフタータッチ信号after.touch の大きさが＄２０以上、＄７Ｆ未満では、アフタータッチ信号after.touch の値が大きくなるほど、つまりアフタータッチが強くなるほど、波形再生の速さが遅くなる。アフタータッチ信号after.touch が＄７Ｆ、つまりアフタータッチが最も強い場合には、再生速度はほぼ停止状態となり、同じ波形が繰り返して再生され続けるようになる。
【０１５７】
上記のように進行位置sphaseを時間基準として用いて波形区間の更新を行いつつ波形データを再生すると、波形再生に要する時間長は、再生する波形の音高によらず、ユーザが時間圧伸量設定操作子TCOMP とキーボードのアフタータッチで設定する時間圧伸量tcomp で決めることができるようになる。この結果、ポリフォニックモード２で２つのボイスモジュールを並行して発音させる場合でも、その発音の終了時間は２つのボイスモジュールで同時とすることができる。
【０１５８】
次に「読出し処理のサブルーチン」において、ステップＦ６７では、再生位相phase 、第１位相ph１、第２位相ph２の値をそれぞれ１つ歩進させる（ステップＦ６７）。次に、再生位相phase と再生ピッチwidth を比較する（ステップＦ６８）。この再生ピッチwidth が再生されるピッチに対応する。再生位相phase が再生ピッチwidth に達していなければ、後述するステップＦ７７の「波形読出し処理」へ進む。なお、再生ピッチwidth は後述のステップＦ７０で算出される。
【０１５９】
再生位相phase が再生ピッチwidth に達している時にはステップＦ６９〜Ｆ７６を行う。このステップＦ６９〜Ｆ７６ではレジスタPHASE(n)の初期化、各レジスタWIDTH(n)、LENGTH(n) 、W.RATE(n) の更新、相識別フラグＦ(n) の反転を行うとともに、相識別フラグＦ(n) の値に応じた側の第１、第２の処理経路について各パラメータの設定を行う。
【０１６０】
まず、再生位相phase を「０」とする（ステップＦ６９）。次いで、新たな再生ピッチwidth を、波形ピッチspitchと、鍵盤の押鍵で音高指定された操作キー情報kpithcと基準ピッチorg.pitch との割算結果のキー比pitch と、前述の再生処理におけるステップＥ３３０の演算処理で求めた変調度lfo.mod とを乗算することで求め、これを再生ピッチレジスタWIDTH に記憶させる（ステップＦ７０）。この処理を行うことにより、レジスタMTCOMPの設定値が「０. １」より大きい場合には変調度lfo.mod は「１」に固定されるので、再生ピッチwidth は操作キー情報kpitchに一致する。一方、レジスタMTCOMPの絶対値が「０．１」以下になると、変調度lfo.mod は「１」を中心に低周波数で振動する波形となり、したがって再生ピッチwidth はこのステップＦ７０の演算をする毎に値が変動することになる。
【０１６１】
レジスタMTCOMPの絶対値が時間圧伸量操作子 TCOMPの設定により、さらにはキーボードのアフタータッチ操作により「０．１」以下の小さな値になると、前述したように波形再生速度がかなり遅くなって同じ波形区間が繰り返して読み出される。このように、同じ特質を持った再生波形の繰返しは、それが規則正しく繰り返されるものであるため、その繰返し部分の再生波形に揺らぎ成分がなくなり、このためかかる再生波形により発音される音は美しくはあるが単調で不自然な感じのものになるが、上記の変調度lfo.mod を乗じる処理を行うことで、同じ波形区間が繰り返して読み出される場合でも、前記演算をする毎に再生ピッチwidth は変化し、時間的に変化する変調を受けることになるので、同じ波形区間の繰返し再生であっても再生波形にビブラートに似た効果を付与することができ、単調な感じを無くすことができる。この効果は押鍵後にアフタータッチ操作により波形再生速度が遅くなった場合も同様に得られる。
【０１６２】
次いで、ホルマント移動量f.vrを入力し、第１の波形のエンベロープ env１、第２の波形のエンベロープ env２の窓長lengthを、波形ピッチspitchをホルマント移動量f.vrで割算して求めて、エンベロープ窓長レジスタLENGTHに記憶させる（ステップＦ７０）。
【０１６３】
次に、エンベロープの窓長lengthを再生ピッチwidth 以内に制限する（ステップＦ７１、Ｆ７２）。エンベロープ窓長lengthと再生ピッチwidth とを比較し（ステップＦ７１）、エンベロープ窓長lengthが再生ピッチwidth よりも大きい場合には、エンベロープ窓長lengthを再生ピッチwidth とする（ステップＦ７２）。一方、エンベロープ窓長lengthが再生ピッチwidth 以下である場合には、このステップＳ７２の処理は行わない。これにより、エンベロープ窓長lengthが再生ピッチwidth より大きくならないように制限をかける。
【０１６４】
次いで、エンベロープ窓長lengthの逆数を求め、これを歩進率w.rateとして歩進率レジスタW.RATEに記憶させる (ステップＦ７３）。この歩進率w.rateはカウンタWINDOW１、WINDOW２の値を歩進させるために使用する。また、相識別フラグＦの極性を反転させる。このステップＦ７３の処理は、ステップＦ６８おいて再生位相phase が再生ピッチwidth 以上になったときに行われるので、相識別フラグＦの反転も、再生位相phase が再生ピッチwidth 以上になったときに行われることになり、例えば図２５、図２６の（ｃ）に示されるように、再生位相phase の周期で「１」と「−１」に反転する波形が得られる。
【０１６５】
次に、相識別フラグＦの値を「０」と比較し、相識別フラグＦが「１」であるか、「−１」であるかを判断する（ステップＦ７４）。相識別フラグＦの値が「１」であることは相識別フラグＦが「−１」から「１」に立ち上がったときを意味しており、この場合には、第１の処理経路に相当するレジスタPH１とカウンタWINDOW１の値をそれぞれ「０」とし、切出先頭アドレスstart を第１切出先頭アドレス start１とし、フラグ S.FlG１を「１」にする（ステップＦ７５）。
【０１６６】
また、相識別フラグＦの値が「−１」であることは相識別フラグＦが「１」から「−１」に立ち下がったことを意味しており、この場合には、第２の処理経路に相当するレジスタPH２とカウンタWINDOW２をそれぞれ「０」とし、切出先頭アドレスstart を第２切出先頭アドレス start２とし、第２のフラグ S.FLG２を「１」  にする（ステップＦ７６）。
【０１６７】
この場合、前述のステップＦ７５とこのステップＦ７６は、ステップＦ６８で再生位相phase が再生ピッチwidth を超えたと判定される毎に交互に実行されるものであるから、第１位相ph１と第２位相ph２は、図２５の（ｄ）、（ｅ）のように再生ピッチwidth の２倍の周期で、かつ、お互いに再生ピッチwidth だけ位相の異なる変化をするものとなる。また、第１切出先頭アドレス start１は第１位相ph１の立下り部分で、第２切出先頭アドレス start２は第２位相ph２の立下り部分の、それぞれ再生ピッチwidth だけ時間差を持ったタイミングで更新されることになる。
【０１６８】
なお、上述のフラグS.FLG 1 ＝1 、S.FLG 2 ＝1 の処理により、発音開始後、レジスタPH１(n) 、PH２(n) がリセットされて初めて発音が開始されるようにして、発音開始後すぐの不要な発音を防止している。
【０１６９】
このステップＦ７５またはＦ７６の処理に続いて、あるいはステップＦ６８において再生位相phase が再生ピッチwidth に達していないと判断されたときには、波形読出し処理を行う（ステップＦ７７）
【０１７０】
「波形読出し処理」
図３２、図３３はこの波形読出し処理を示すフローチャートである。以下にこの波形読出し処理について詳細に説明する。
図３２は波形読出し処理のフローチャートであり、同図中のステップＦ７７０１〜Ｆ７７０９は第１の処理経路のための処理、次の図３３のステップＦ７７１０〜Ｆ７７１８は第２の処理経路のための処理であり、この二つの処理は時系列に行われるが、処理の内容は実質的に同様な内容となっている。
【０１７１】
図３２に示すように、波形読出し処理では、まずカウンタWINDOW１(n) の値を歩進率w.rateだけ歩進させる（ステップＦ７７０１）。そして、歩進させたカウンタWINDOW１(n) の値が「１」より小さいか、「１」以上であって「２」より小さいか、あるいは「２」以上であるかを判定する（ステップＦ７７０２）。「１」より小さい場合には、カウンタWINDOW１(n) の値を第１エンベロープ env１とし（ステップＦ７７０３）、「１」以上であって「２」より小さい場合には、「２」からカウンタWINDOW１(n) の値を減算した値を第１エンベロープ env１とし（ステップＦ７７０４) 、「２」以上のとき、第１エンベロープレジスタ env１を０とする（ステップＦ７７０５）。
【０１７２】
ステップＦ７７０２〜Ｆ７７０５は、例えば図２５（ｆ) に示されるように、歩進率w.rateずつ値が増加する鋸歯状波を作成し、これの値を「１」で折り返すことによって、第１エンベロープ env１を作成している。但し、カウンタWINDOW 1(n) の値が「２」を越えた場合には、ステップＦ７７０５によって第１エンベロープ env１の値を「０」としている。即ち、ホルマント移動量f.vrと波形ピッチspitchとに基づいて定めたエンベロープ窓長lengthの値の逆数である歩進率w.rateずつ「１」まで増加し、その後、歩進率w.rateずつ「０」まで減少する三角波を第１のエンベロープ env１の波形として作成している。
【０１７３】
また、ステップＦ７７０３〜Ｆ７７０５に続いて、第１位相ph１（読出しアドレスの歩進値）にホルマント移動量f.vrを乗算した値を、第１の波形の先頭アドレス start１と加算して、第１の波形の読出しアドレスadrs１としている（ステップＦ７７０６）。
【０１７４】
また、読出しアドレス adres１と末尾アドレスレジスタendadrs を比較し（ステップＦ７７０７）、末尾アドレスレジスタendadrs よりも大きければ、「読出しアドレス adres１＝末尾アドレスレジスタendadrs 」とする（ステップＦ７７０８）。これは読出しアドレス adres１にリミットをかけて、末尾アドレスendadrs の値を超えて読み出さないようにしているものである。
【０１７５】
これに続いて、波形メモリから読出しアドレス adres１で第１の波形の波形データdata１を読み出す（ステップＦ７７０９）。このように読出しアドレス adres１はその歩進幅がホルマント移動量f.vrによって変更されるので、結果的には波形データdata１の読出し速度が、ホルマント移動量f.vrによって変更されている。これに続くステップＦ７７１０〜Ｆ７７１８では上述と同じ処理を、第２の処理経路についても行う。
【０１７６】
このようにして読み出された第１の処理経路のデータdata１と第１エンベロープレジスタ env１の値とフラグ S.FLG１を乗算したものと、第２の処理経路のデータdata２に第２エンベロープレジスタ ENV２の値とフラグ S.FLG２を乗算したものとを加算して出力out とする（ステップＦ７７１９）。これにより、フラグ S.FLG１(n) または S.FLG２(n) が「０」の間は、合成する信号が「０」になるようにして、エンベロープ env１、 env２が必ず「０」から始まるようにしている。
【０１７７】
次いで、
L.ENV(n)＝L.ENV(n)＋(LEVEL(n) −L.ENV(n)) ＊Ｋ
とし、このレジスタL.ENV の値を出力out に乗じたものを最終的な出力out とする。すなわち、立上り、立下りの特性が係数Ｋで決まるレベルエンベロープL.env を算出し、これを出力に付加している。なお、ステップＦ７７２０の演算では、レベルエンベロープL.env は「０」にならないので、所定レベル以下になると、L.ENV(n)＝０となるように処理を追加してもよい。
【０１７８】
なお、上述の実施例では、再生波形に揺らぎを付加する方法として、再生波形のピッチに変化を与えるようにしたが、これに限らず、例えば波形データを切り出す切出し窓の窓長lengthに変化を与えるようにすることもできるし、また再生波形の音量レベルに変化を与えるものであってもよい。
【０１７９】
本発明の実施にあたっては種々の変形形態が可能である。例えば上述の実施例では、時間圧伸量操作子TCOMP による設定値をアフタータッチ信号after.touch に基づいて修正するにあたり、
MTCOMP＝ TCOMP＊〔１−（after.touch −＄２０）／＄６０〕
という演算式を用いており、この演算式は、アフタータッチが強ければ強いほど波形再生速度が遅くなり、最も強いアフタータッチでは波形再生速度がほぼ停止するというものであった。しかし、本発明はこのような修正の演算式だけに限られるものではなく、例えば次のような演算を行うなどの方法も可能である。
【０１８０】
すなわち、次の演算式
MTCOMP＝ TCOMP＊〔１−（after.touch −＄２０）／＄４０〕
により時間圧伸量設定操作子TCOMP による設定値を修正する。この演算式は、アフタータッチ有りと判定された＄２０〜＄７Ｆの範囲のアフタータッチ信号after.touch を、
（after.touch −＄２０）／＄４０
という演算により０〜２の範囲の値に正規化し、この正規化した値を１から減じて時間圧伸量設定操作子TCOMP による設定値に乗算してレジスタMTCOMPに設定するものである。この演算式によれば、アフタータッチ信号after.touch が＄００〜＄１９の範囲では時間圧伸量設定操作子TCOMP で設定した値による再生速度で波形再生されてアフタータッチによっては影響されず、＄２０〜＄５９の範囲ではアフタータッチが強くなるほど時間圧伸量設定操作子TCOMP の検出値がゼロに向かって小さくなるように修正されて波形再生速度が次第に遅くなり、＄６０でゼロになって波形再生速度がほぼ停止して同じ波形が繰り返して再生されるようになる。さらに、アフタータッチ信号after.touch が＄６１〜＄７Ｆの範囲では、レジスタMTCOMPの値は負の値となり、この場合には操作子設定テーブルの時間圧伸量tcomp が負の値となって進行位置sphaseが逆方向に進むようになり、その結果、波形が逆方向に戻りながら再生される。この逆方向再生の場合の再生速度はアフタータッチが強ければ強いほど速くなる。
なお、この逆方向の再生が必要ないのであれば、アフタータッチ信号after.touch の値にリミッタをかけてレジスタMTCOMPの値が負にならないようにすればよい。
【０１８１】
次に、本発明の他の実施例を説明する。前述の実施例では、波形再生にあたりメモリ波形のピッチを使用することから、メモリ波形のピッチが検出可能なものでなければならない。しかし、楽音として使用する波形には、必ずしもピッチ検出可能なものばかりではない。例えば、シンバルや太鼓類などの打楽器音、それから和音演奏のように複数の楽音が同時に発音されているものなどがある。そこで、本実施例では、例えば本出願人に係る特願平６−９７６０８号（特開平７−３０６６９３号公報）に開示されているような従来からあるピッチシフタの技術を使用して、ピッチ変化に対応してホルマントも変化する読出し方法を実現しており、前記再生モードスイッチPLAYMODE.SW により第２再生モードplay２に設定することにより実行される。
【０１８２】
この実施例の構成は基本的には前述の実施例を用いているが、異なる点を以下に示す。
1.  波形メモリのデータ構成は先のものと同じとするが、ピッチ検出ができない波形の場合は波形ピッチspitchは記憶されていない。
4.「ボイス１の発音開始処理」を図３９に示すように変更
5.「ボイス２の発音開始処理」を図４０に示すように変更
7.「ボイス１からボイス２へのリンク発音処理」を図４１に示すように変更
8.「ボイス２からボイス１へのリンク発音処理」を図４２に示すように変更
9.「読出し処理」を図３４、図３５に示すように変更
「ループモード処理」を図３６に示すように変更
「順方向再生処理」および「逆方向再生処理」を図３７、図３８に示すように変更
10. 「波形読出し処理」を図４３、図４４に示すように変更
【０１８３】
上述の「ボイス１の発音開始処理」、「ボイス２の発音開始処理」、「ボイス１からボイス１へのリンク発音処理」、「ボイス１からボイス２へのリンク発音処理」、「ボイス２からボイス１へのリンク発音処理」のうちの主な変更点について説明する。
【０１８４】
本実施例の「読出し処理」は図３４、図３５に示すものとする。この「読出し処理」と前述の実施例の図２７、図２８の「読出し処理」との主な相違点を以下に示す。ステップＦ６３’の「ループモード処理」は、図３６に示すようになり、前記図２９の「ループモード処理」からステップＦ６３０６とＦ６３０７が削除されたものになっている。ステップＦ６５’の「順方向再生処理」は、図３７に示すようになり、前記図３０の「順方向再生処理」からステップＦ６５０３からＦ６５０６を削除したものになっている。ステップＦ６６’の「逆方向再生処理」は、図３８に示すようになり、前記図３１の「逆方向再生処理」からステップＦ６６０３からＦ６６０８を削除したものになっている。また、ステップＦ７０’では、前述の実施例のステップＦ７０に換えて、再生ピッチwidth およびエンベロープ窓長lengthとして係数env.p を設定するものである。また、前述の実施例のステップ７１、Ｐ７２は削除する。そして、前述の実施例のステップ７５、Ｆ７６に換えて、切出しの先頭アドレスを設定するレジスタ START１、 START２に進行位置レジスタSPHASEの値を設定するステップＦ７５’、Ｆ７６’とする。さらに、前述の実施例のステップ７７の「波形読出し処理」を後述するようなものにする。
【０１８５】
なお、ステップＦ７０’における係数env.p は予め定められた定数で、 ENV１、 ENV２の周期を決定するものである。
【０１８６】
「波形読出し処理」
本実施例の「波形読出し処理」は図４３、図４４に示すものとする。この「波形読出し処理」と前述の実施例の図３２、図３３の「波形読出し処理」との主な相違点を以下に示す。ステップＦ７７０１、ステップＦ７７１０でWINDOW 1、WINDOW 2に加算する量w.rateは、本実施例では先のステップＦ７３で算出され、予め定められた係数env.p に設定されたlengthで、「w.rate＝１／length」を満たす値とする。また、前述の実施例のステップＦ７７０５、ステップＦ７７１４は、本実施例ではWINDOW(n) は「２」によりも大きくならないため、削除してある。また、ステップＦ７７０６’、Ｆ７７１５’ではph１、ph２に対して、前述の実施例のホルマント移動量f.vrに換えて、ピッチレジスタPITCH(n)の値と変調値lfo.mod との積を乗じている。
【０１８７】
本実施例の処理の概要を図４５、図４６を参照して以下に説明する。図４５は再生音声を元の波形データの音高より低くする場合の処理、図４６は再生音声を元の波形データの音高より高くする場合の処理を示している。
【０１８８】
この処理においては、例えば図４５において、波形メモリに記憶されている波形データWave Date をアドレス adres１で読み出し、その読み出した波形データに“ENV 1" を乗算して窓関数を付加したもの（図４５の（２) ）と、波形メモリに記憶されている波形データ“Wave-Date" をアドレス adres２で読み出し、その読み出した波形データに“ENV 2" を乗算して窓関数を付加したもの（図４５の（３））とを図面で示している。（２) と（３) とを加算した信号がピッチシフトされた信号となる。図４６についても同様である。
【０１８９】
再生音高を元の波形データの音高より低くする場合、図４５に示すように、波形メモリの読出し速度が「１」よりも小さくなり、 ENV１が付加される波形データは、ＷD+0 、ＷD+2 、ＷD+4 、ＷD+6 ・・・となり、 ENV２が付加される波形データは、ＷD+1 、ＷD+3 、ＷD+5 ・・・となって、これらが伸長されてＷD+0 ’、ＷD+2 ’、ＷD+4 ’、ＷD+6 ’、およびＷD+1 ’ 、ＷD+3 ’ 、ＷD+5 ’となる。
【０１９０】
反対に、再生音高を元の波形データの音高より高くする場合、図４６に示すように、波形メモリの読出し速度が１よりも大きくなり、 ENV１が付加される波形データは、ＷU+0 、ＷU+2 、ＷU+4 、ＷU+6 ・・・となり、 ENV２が付加される波形データは、ＷU+1 、ＷU+3 、ＷU+5 ・・・となって、これらが圧縮されてＷU+0 ’、ＷU+2 ’、ＷU+4 ’、ＷU+6 ’、およびＷU+1 ’ 、ＷU+3 ’ 、ＷU+5 ’となる。
【０１９１】
なお、波形メモリの読出し速度は、「波形読出し処理」の「PH１(n) ＊PITCH (n) ＊lfo.mod 」と「PH２(n) ＊PITCH (n) ＊lfo.mod 」の変化速度に対応する。
【０１９２】
また、この第２再生モードplay２はピッチ検出ができない波形を再生する場合として説明したが、フォルマントがピッチ変化に対応して移動するが、ピッチ検出ができる場合の波形も再生することができ、当然、前述のようなループ再生も第１再生モードplay１と同様に可能であることはその構成から明らかである。
【０１９３】
なお、以上の実施例ではループポイントのアドレス（loopsa、loopea）を間接的に指示するパラメータ記憶部のアドレスとしてマーク記憶部に（loopstart 、loopend ）記憶していたが、これは第１再生モードplay１においてノーマルループ再生したときにループモード処理のサブルーチンのステップＦ６３０７で値がジャンプするカウンタSCNTの値を算出することができるようにしたためで、例えばこのような必要のない、第１再生モードplay１のオルタネートループや、第２再生モードplay２だけであれば、マーク記憶部に直接ループポイント（loopsa、loopea）を記憶するようにして、このマーク記憶部からループ情報レジスタのloopsaやloopeaを設定するようにしてもよい。
【０１９４】
【発明の効果】
以上に説明したように、本発明によれば、波形データをその時間軸を逆方向に辿りつつ再生するも、音楽的などに意味のある音の再生を可能にして、それにより演奏の表現を一層豊かにすることができる。
【図面の簡単な説明】
【図１】本発明にかかる一実施例としての波形発生装置の全体的なブロック構成を示す図である。
【図２】実施例装置における操作子設定テーブルの構成例を示す図である。
【図３】実施例装置におけるキー情報レジスタ、ループ情報レジスタ、変調情報レジスタ、オリジナルピッチ情報レジスタの構成例を示す図である。
【図４】実施例装置における波形メモリのパラメータ記憶部のデータ構成例を示す図である。
【図５】実施例装置における波形メモリの波形データ記憶部のデータ構成例を示す図である。
【図６】実施例装置における波形メモリのマーク記憶部のデータ構成例を示す図である。
【図７】実施例装置におけるメインルーチンを示すフローチャートである。
【図８】実施例装置における録音ルーチンを示すフローチャートである。
【図９】実施例装置における編集ルーチンおよび再生ルーチンを示すフローチャートである。
【図１０】実施例装置における再生処理ルーチン（１／３）の詳細を示すフローチャートである。
【図１１】実施例装置における再生処理ルーチン（２／３）の詳細を示すフローチャートである。
【図１２】実施例装置における再生処理ルーチン（３／３）の詳細を示すフローチャートである。
【図１３】実施例装置における変調値情報の演算処理の詳細を示すフローチャートである。
【図１４】実施例装置における変調値情報の演算処理で生成される各種信号波形のタイムチャートである。
【図１５】実施例装置におけるＤＳＰでのメインルーチンを示すフローチャートである。
【図１６】実施例装置におけるＤＳＰでのメインルーチン中の「ループ情報の処理」を示すフローチャートである。
【図１７】実施例装置におけるＤＳＰでのメインルーチン中の「キー情報の処理」を示すフローチャートである。
【図１８】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス１の消音処理」を示すフローチャートである。
【図１９】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス２の消音処理」を示すフローチャートである。
【図２０】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス１の発音開始処理」を示すフローチャートである。
【図２１】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス２の発音開始処理」を示すフローチャートである。
【図２２】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス１からボイス１へのリンク発音処理」を示すフローチャートである。
【図２３】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス１からボイス２へのリンク発音処理」を示すフローチャートである。
【図２４】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス２からボイス１へのリンク発音処理」を示すフローチャートである。
【図２５】「読出し処理」の動作概要（ホルマント特性変更なし、高域にピッチシフト）を説明するためのタイムチャートである。
【図２６】「読出し処理」の動作概要（ホルマント特性を低域にシフト）を説明するためのタイムチャートである。
【図２７】実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン（１／２）を示すフローチャートである。
【図２８】実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン（２／２）を示すフローチャートである。
【図２９】実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「ループモード処理」ルーチンを示すフローチャートである。
【図３０】実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「順方向再生処理」ルーチンを示すフローチャートである。
【図３１】実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「逆方向再生処理」ルーチンを示すフローチャートである。
【図３２】実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「波形読出し処理」ルーチン（１／２）を示すフローチャートである。
【図３３】実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「波形読出し処理」ルーチン（２／２）を示すフローチャートである。
【図３４】他の実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン（１／２）を示すフローチャートである。
【図３５】他の実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン（２／２）を示すフローチャートである。
【図３６】他の実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「ループモード処理」ルーチンを示すフローチャートである。
【図３７】他の実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「順方向再生処理」ルーチンを示すフローチャートである。
【図３８】他の実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「逆方向再生処理」ルーチンを示すフローチャートである。
【図３９】他の実施例装置におけるＤＳＰでのメインルーチン中の「ボイス１の発音開始処理」を示すフローチャートである。
【図４０】他の実施例装置におけるＤＳＰでのメインルーチン中の「ボイス２の発音開始処理」を示すフローチャートである。
【図４１】他の実施例装置におけるＤＳＰでのメインルーチン中の「ボイス１からボイス１へのリンク発音処理」を示すフローチャートである。
【図４２】他の実施例装置におけるＤＳＰでのメインルーチン中の「ボイス２からボイス１へのリンク発音処理」を示すフローチャートである。
【図４３】他の実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「波形読出し処理」ルーチン（１／２）を示すフローチャートである。
【図４４】他の実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「波形読出し処理」ルーチン（２／２）を示すフローチャートである。
【図４５】他の実施例装置における「読出し処理」の動作概要（低域にピッチシフト）を説明するためのタイムチャートである。
【図４６】他の実施例装置における「読出し処理」の動作概要（高域にピッチシフト）を説明するためのタイムチャートである。
【図４７】実施例装置における「波形データのピッチ変化抽出方法」を説明するたのフローチャートである。
【図４８】実施例装置における「波形データのピッチ変化抽出方法」で、ピッチ検出により検出したピッチデータ列を示す図である。
【図４９】実施例装置における「波形データのピッチ変化抽出方法」で、ピッチ検出により検出したピッチデータ列の具体例を示す図である。
【図５０】実施例装置における「波形データのピッチ変化抽出方法」で、フィルタリング処理したピッチデータ列を示す図である。
【符号の説明】
４  Ａ／Ｄ変換器
８  ＤＳＰ（ディジタル信号プロセッサ）
１２  波形メモリ
１４  Ｄ／Ａ変換器
２０  操作子群
２２  ＣＰＵ（中央処理装置）
３０  キーボード
３１  ＲＡＭ（ランダム・アクセス・メモリ）
３２  ＲＯＭ（リード・オンリー・メモリ）
３３  ハードディスク装置
【図１】
0004057700.tif 000002
【図２】
0004057700.tif 000003
【図３】
0004057700.tif 000004
【図４】
0004057700.tif 000005
【図５】
0004057700.tif 000006
【図６】
0004057700.tif 000007
【図７】
0004057700.tif 000008
【図８】
0004057700.tif 000009
【図９】
0004057700.tif 000010
【図１０】
0004057700.tif 000011
【図１１】
0004057700.tif 000012
【図１２】
0004057700.tif 000013
【図１３】
0004057700.tif 000014
【図１４】
0004057700.tif 000015
【図１５】
0004057700.tif 000016
【図１６】
0004057700.tif 000017
【図１７】
0004057700.tif 000018
【図１８】
0004057700.tif 000019
【図１９】
0004057700.tif 000020
【図２０】
0004057700.tif 000021
【図２１】
0004057700.tif 000022
【図２２】
0004057700.tif 000023
【図２３】
0004057700.tif 000024
【図２４】
0004057700.tif 000025
【図２５】
0004057700.tif 000026
【図２６】
0004057700.tif 000027
【図２７】
0004057700.tif 000028
【図２８】
0004057700.tif 000029
【図２９】
0004057700.tif 000030
【図３０】
0004057700.tif 000031
【図３１】
0004057700.tif 000032
【図３２】
0004057700.tif 000033
【図３３】
0004057700.tif 000034
【図３４】
0004057700.tif 000035
【図３５】
0004057700.tif 000036
【図３６】
0004057700.tif 000037
【図３７】
0004057700.tif 000038
【図３８】
0004057700.tif 000039
【図３９】
0004057700.tif 000040
【図４０】
0004057700.tif 000041
【図４１】
0004057700.tif 000042
【図４２】
0004057700.tif 000043
【図４３】
0004057700.tif 000044
【図４４】
0004057700.tif 000045
【図４５】
0004057700.tif 000046
【図４６】
0004057700.tif 000047
【図４７】
0004057700.tif 000048
【図４８】
0004057700.tif 000049
【図４９】
0004057700.tif 000050
【図５０】
0004057700.tif 000051