(57)【特許請求の範囲】
【請求項１】
音の波形信号の振幅情報を波形データとして記憶した記憶手段と、
任意に設定された変化量で順次変化して該波形データにおける時間軸上の経過に従った位置を指定する位置情報を順次に生成する位置情報生成手段と、
再生ピッチを指定する再生ピッチ指定手段と、
再生ピッチ指定手段で指定された再生ピッチに応じた周期で、該位置情報で指定される近傍の波形データを少なくとも１周期切り出して再生波形信号を生成する波形再生手段と、
該位置情報生成手段で設定される変化量が所定値よりも小さくなったときに、該波形再生手段で生成される再生波形に揺らぎを付加する揺らぎ付加手段と
を備えた波形発生装置。
【請求項２】
前記切り出す波形データの読出し速度を変更する変更係数を設定する変更係数設定手段をさらに備えた請求項１記載の波形発生装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は電子楽器の波形発生装置、更に詳しくはメモリに記憶された各種の音の波形データを読み出して再生する波形発生装置に関する。
かかる波形発生装置は例えばサンプラと呼ばれているような電子楽器に用いられる。
【０００２】
本出願人は、先に、音声等の波形について、元の波形のホルマント特性を維持したままそのピッチを任意のものに変換する波形発生装置を提案した。この波形発生装置は、連続した複数周期からなる波形信号の振幅情報を波形データとしてメモリに記憶しておき、任意に設定された変化量で順次変化して該波形データにおける時間軸上の経過に従った位置を指定する位置情報を順次に生成する位置情報生成手段を設け、使用者が再生ピッチ指定手段で所望の再生ピッチを指定し、これにより波形再生手段により再生ピッチ指定手段で指定された再生ピッチに応じた周期で、該位置情報で指定される近傍の波形データを少なくとも１周期切り出して再生波形信号を生成することで、元の波形のピッチを指定した再生ピッチに変換することができる。
【０００３】
この波形発生装置では、位置情報生成手段で設定する変量を変えることで、波形データ全体を再生するに要する時間を自由に変えることができる。しかし、変量を小さくして時間経過をゆっくりにした場合、位置情報生成手段の位置情報で指定される波形データ中の切出し波形データがなかなか次の周期のものに更新されないので、波形再生手段では、同じ切出し波形データを繰り返し用いてそれを所望の再生ピッチに変換して再生波形を生成する。この結果、同じ特質を持った波形が繰り返し再生されることになる。このような同じ特質の再生波形の繰返しは、それが規則正しく繰り返されるものであるため、その繰返し部分の再生波形に揺らぎ成分がなくなり、このためかかる再生波形により発音される音は美しくはあるが単調で不自然な感じのものになる。
【０００４】
本発明はかかる問題点に鑑みてなされたものであり、上述のような形態の波形発生装置において、再生時間をゆっくりにした場合にも、再生音が単調で不自然なものにならないようにすることを目的とする。
【０００５】
【課題を解決するための手段】
上述の課題を解決するために、本発明にかかる波形発生装置は、音の波形信号の振幅情報を波形データとして記憶した記憶手段と、任意に設定された変化量で順次変化して該波形データにおける時間軸上の経過に従った位置を指定する位置情報を順次に生成する位置情報生成手段と、再生ピッチを指定する再生ピッチ指定手段と、再生ピッチ指定手段で指定された再生ピッチに応じた周期で、該位置情報で指定される近傍の波形データを少なくとも１周期切り出して再生波形信号を生成する波形再生手段と、該位置情報生成手段で設定される変化量が所定値よりも小さくなったときに、該波形再生手段で生成される再生波形に揺らぎを付加する揺らぎ付加手段とを備える。
この波形発生装置によれば、同じ波形を繰り返し再生するようになる場合には、再生波形にビブラート等の揺らぎが付加されるので、自然な感じの再生波形の音を生成することができる。
【０００６】
上記の波形発生装置において、上記切り出す波形データの読出し速度を変更する変更係数を設定する変更係数設定手段をさらに備えることができる。この変更係数設定手段を用いて切出し波形データの読出し速度を変更することで、波形信号が人声などの場合にそのホルマント特性を変えることができる。
【０００７】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。
図１は本発明に係る一実施例としての電子楽器の波形発生装置が示される。図１において、１２は再生する波形データを記憶しておくＲＡＭからなる波形メモリである。８は波形メモリ１２の波形データの再生処理等をディジタル処理により行うＤＳＰ（ディジタル信号プロセッサ）である。１４はＤＳＰ８から再生出力されるディジタル波形信号をアナログ波形信号にＤ／Ａ変換して出力するＤ／Ａ変換器、４は入力したアナログ波形信号をディジタル波形信号にＡ／Ｄ変換してＤＳＰ８に入力するＡ／Ｄ変換器である。このＡ／Ｄ変換器４から入力されたディジタル波形信号はＤＳＰ８から波形メモリ１２に波形データとして格納することができる。
【０００８】
２２はＣＰＵ（中央処理装置）であって、ＤＳＰ８の制御、操作子群２０やキーボード３０の状態検出と処理など装置の全体的な制御を行う。２０は操作子群であって、モードスイッチMODE.SW 、バンクスイッチBANK.SW 、アサインスイッチASSIGN.SW 、ホルマント設定操作子F.VR、時間圧伸量設定操作子TCOMP 等の複数の操作子からなる。３０は演奏操作を行うキーボードであり、波形メモリ１２の波形データの再生にあたってキーのオン／オフにより再生の音高と再生の開始／終了を指示するためにも用いられる。３３は多くの波形データ等を記憶しておく大容量のハードディスク装置であり、その波形データは必要に応じて波形メモリ１２に転送される。３１はＣＰＵ２２の演算処理等に使用されるワーキングメモリとしてのＲＡＭ、３２はＣＰＵ２２やＤＳＰ８のプログラムやパラメータ等を記憶しておくメモリとしてのＲＯＭである。
【０００９】
以下に、操作子群２０の各操作子の機能について説明する。
モードスイッチMODE.SW は、録音モード、編集モード、再生モードの一つを選択するためのスイッチである。ここで、録音モード (ＲＥＣモード) は外部から入力された楽音信号を録音（サンプリング) するモード、編集モード (ＥＤＩＴモード) は録音モードでサンプリングした波形を編集するモード、再生モード（ＰＬＡＹモード) は波形メモリ１２に記憶した波形データをキーボードの演奏操作に応じて再生するモードである。
【００１０】
バンクスイッチBANK.SW は、波形メモリ１２に記憶されている複数の波形データのうちから一つを選択するためのスイッチである。
【００１１】
アサインスイッチASSIGN.SW は、発音モードを設定するためのスイッチであり、以下の４つのモードを設定できる。
〔モノフォニック１：MONO１〕  １ボイスのみを発音するモードであり、レガート奏法がされても、後の押鍵によってリトリガを行うモードである。
〔モノフォニック２：MONO２〕  １ボイスのみを発音するモードであり、レガート奏法がされたら、リトリガを行なわないモードである。
〔ポリフォニック１：POLY１〕  複数ボイスを発音可能なモードであり、レガート奏法がされても、後の押鍵によってリトリガを行うモードである。
〔ポリフォニック２：POLY２〕  複数ボイスを発音可能なモードであり、レガート奏法がされたら、リトリガを行なわないモードである。
ここで、「レガート奏法」とはキーボードの１番目のキーを押したままの状態で２番目のキーを押す奏法であり、「リトリガ」とは波形メモリ１２の波形データの再生を当該波形データの先頭部分からやり直す処理をいう。
【００１２】
ホルマント設定操作子F.VRは、ホルマントの原波形データからのシフト量を設定する操作子であり、後述するホルマント移動量f.vr（ホルマント変更係数とも称する）を設定する。
【００１３】
時間圧伸量設定操作子TCOMP は、再生波形データの時間軸上の時間圧伸量tcomp を設定する操作子である。
【００１４】
上記のＤＳＰ８は操作子設定テーブル、キー情報レジスタ、変調情報レジスタを備えている。以下、これらについて説明する。
〔操作子設定テーブル〕
図２には操作子設定テーブルの例が示される。この操作子設定テーブルはＤＳＰ８に備えられており、後述するＣＰＵ２２の〔再生処理〕において、操作子群２０の操作状態を検出し、その操作状態に対応してこの操作子設定テーブルの内容が設定される。操作子設定テーブルの内容の項目としては、バンク番号bank、リンクモードlink.mode 、ホルマント移動量f.vr、時間圧縮／伸長伸量tcomp （以下、時間圧伸量と記す) がある。
【００１５】
ここで、バンク番号bandは、操作子群２０のバンクスイッチBANK.SW で設定  されたバンク番号が設定され、そのバンク番号bankに従って、再生する波形データ（波形領域番号）の選択が行われる。
【００１６】
リンクモードlink.mode は、操作子群２０のアサインスイッチASSIGN.SW がモノフォニック２またはポリフォニック２のモード（すなわちリトリガしないモード）を設定した時には“１”（ＯＮを意味する）に設定され、モノフォニック１またはポリフォニック１のモード（すなわちリトリガするモード）を設定した時には“０”（ＯＦＦを意味する）に設定される。すなわち、リトリガを行うか否かを設定するレジスタとなる。
【００１７】
ホルマント移動量f.vrは、波形メモリ１２から読み出して再生する波形データのホルマントの移動量（シフト量）が設定されるもので、波形メモリ１２中の波形データは、このホルマント移動量f.vrが「１」である時は、原波形と同じホルマントで再生され、「１」より大きい値であると、ホルマントを原波形よりも高域側にシフトして再生され、「１」よりも小さい値であると、ホルマントを原波形よりも低域側にシフトして再生される。
【００１８】
時間圧伸量tcomp は、波形メモリ１２に記憶された波形データを再生する時における時間圧縮／伸長の大きさ（すなわち波形再生速度）を数値設定するものである。この時間圧伸量tcomp が「１」であると、原波形の時間変化と同じ速さで時間変化し、「１」より大きい値であると、原波形よりも速い時間変化をして再生時間が短くなり、「１」よりも小さい値であると、原波形よりも遅い時間変化をして再生時間が長くなる。
【００１９】
〔キー情報レジスタ〕
ＤＳＰ８はキー情報レジスタを備えており、後述するＣＰＵ２２の〔再生処理〕において、キーボード３０の操作が検出され、割当処理によってキー情報がＤＳＰ８に転送されて、このキー情報レジスタに一時的に記憶される。図３にこのキー情報レジスタの構成例が示される。キー情報は、キーオン／キーオフ情報key.on/off、音高情報pitch 、ボイスモジュール情報voice.No、レベル情報level からなる。例えば、
キーオン情報：「key.on／pitch ／voice.No／level 」
キーオフ情報：「key.off ／pitch ／voice.No／level 」
の構成からなる。
【００２０】
なお、このキー情報レジスタは、ＤＳＰ８での受取り処理の前に、ＣＰＵ２２から新たなキー情報が転送されることがある場合には、複数のキー情報を一時記憶することが可能な、シフトレジスタのような構成で、さらに先に入力した情報を先に出力する構成にすればよい。すなわち、ＭＩＤＩ信号の受信処理と同様な処理とする。
【００２１】
〔変調情報レジスタ〕
図３には変調情報レジスタも示される。この変調情報レジスタには相値情報lfo.mod が格納される。後述の〔ＬＦＯ．ＭＯＤの演算処理] においては、変調信号であることを識別する変調情報識別情報mod.inf と、演算によって得られた変調値情報lfo.mod とが組み合わされて転送される。
【００２２】
波形メモリ１２はパラメータ記憶部と波形データ記憶部とで構成される。これらの記憶部のデータ構成を図４、図５に示す。図４はパラメータ記憶部のデータ構成、図５は波形データ記憶部のデータ構成である。パラメータ記憶部は＄８００番地毎に、また波形データ記憶部は＄８０００番地毎に各々セグメントで区切られており、各々のセグメントはアドレスの若い方から順番にwave０領域、wave１領域  、wave２領域  ・・・のように波形領域番号が付けられる。例えばある一つの波形についてそのパラメータをパラメータ記憶部のwave０領域に格納したら、その波形の波形データはそのパラメータに対応して波形データ記憶部の同じ番号のwave０領域に格納する。なお、図４、図５におけるアドレスは１６進数で表わされており、以降、本明細書では、＄８００のように数値の先頭に＄を付して１６進数であることを示す。
【００２３】
まず、パラメータ記憶部のデータ構成を図４に従って説明する。例えばwave０領域において、アドレス$0000 に格納されているものはヘッダheaderであり、そのデータ内容としてそのwave０領域における末尾アドレスendadrs が格納され、アドレス$0001 以降には開始アドレス／ピッチ情報sadrs/spitchが格納される。開始アドレス／ピッチ情報のうちのピッチ情報である波形ピッチspitchは波形データ記憶部に格納された波形の１周期分のアドレス幅のことであり、開始アドレスsadrs は前記波形ピッチspitchで表されるアドレス幅の波形が１周期から複数周期続く波形区間の開始アドレスである（以下、１周期から複数周期続く波形区間を単に波形区間という) 。開始アドレス／ピッチ情報としては一つの波形区間の開始アドレスsadrs と波形ピッチspitchとを一対として、波形全体にわたるこれらの対が時系列にパラメータ記憶部に格納される。例えば波形データの最初の波形区間が開始アドレスsadrs0で波形ピッチspitch0 であり、次に続く波形区間が開始アドレスsadrs1で波形ピッチspitch1 である場合、最初の開始アドレス sadrs０と波形ピッチspitch０はそれぞれアドレス$0001 、$OOO2 に格納され、続く開始アドレス sadrs１と波形ピッチspitch１はそれぞれアドレス$0003 、$OO04 に格納される。
【００２４】
次に波形データ記憶部のデータ構成を図５に従って説明すると、これは各wave領域にシーケンシャルなアドレス順序でサンプリング値wave data が格納されるものである。
【００２５】
以下、この実施例装置の動作をフローチャートを参照して説明する。なお、以下に説明する各フローチャートにおいては、基本的には、各種のパラメータは英小文字で表し、そのパラメータを記憶するレジスタ等は英大文字で表すこととする。
【００２６】
図６には、ＣＰＵ２２が行う処理として、メインルーチンのフローチャートが示される。メインルーチンがスタートすると、操作子群２０のモードスイッチ(MODE.SW) が録音モード、編集モード、再生モードの何れに操作されたか監視されており（ステップＡ）、操作がされると、その操作が録音モード、編集モード、再生モードの何れであるかが判定される（ステップＢ）。録音モードであれば、録音（ＲＥＣ）処理が行われ（ステップＣ）、編集モードであれば編集（ＥＤＩＴ）処理が行われ（ステップＤ）、再生モードであれば再生（ＰＬＡＹ）処理が行われる（ステップＥ）。
【００２７】
図７には録音モードにおける録音処理ルーチンのフローチャートが示される。録音処理は外部から入力された楽音信号を録音（サンプリング）する処理であり、モードスイッチMODE.SW により録音モードに設定した後、サンプリングスタ  ートの操作子を操作することによって（ステップＣ３）、サンプリングスタートして録音（サンプリング処理）が行われる（ステップＣ４）。サンプリングされる楽音信号のデータは波形メモリ１２に記憶される。この録音処理ルーチンから抜け出てメインルーチンにリターンするにはＥＸＩＴ操作子を操作する（ステップＣ２）。
【００２８】
図８には編集モードにおける編集処理ルーチンのフローチャートが示される。編集処理は、録音モードでサンプリングした波形を変更したり、再生可能な波形データに変更する編集処理や、それらの波形データをハードディスク装置３３に転送したり、ハードディスク装置３３から波形メモリ１２に転送したりする処理を行う（ステップＤ３）。この編集処理ルーチンから抜け出るにはＥＸＩＴ操作子を操作する（ステップＤ２）。
【００２９】
図９には再生モードにおける再生処理ルーチンのフローチャートが示される。この再生処理ルーチンの初期設定（ステップＥ１）においては、操作子群の状態を操作するレジスタ等をリセットし、操作子群を操作可能な状態にすると共に、各操作子の初期状態を設定しておく。初期状態とは、〔再生処理〕で、各操作子に変化があった時だけ操作子の操作に対応した処理を行うため、その最初の基準となる状態を設定している。
【００３０】
再生処理ルーチンは、モードスイッチMODE.SW により再生モードに設定した  後、再生スタートの操作子を操作することによってスタートする。再生処理（ステップＥ３）は、波形メモリ１２の波形データを、キーボード３０からの演奏情報に対応して再生する処理であり、この再生処理ルーチンから抜け出るにはＥＸＩＴ操作子を操作する（ステップＥ２）。
【００３１】
図１０、図１１にはこの再生モードにおける再生処理（ステップＥ３）の詳細な処理手順が示される。この再生処理はＣＰＵ２２で実行される。この再生処理では、操作子群２０による設定とキーボード３０による演奏操作を検出してそれらの操作情報をＤＳＰ８に転送して記憶させる処理を行う。
【００３２】
再生処理が開始されると、操作子群２０の操作状態を走査して、バンクスイッチBANK.SW 、アサインスイッチASSIGN.SW 、ホルマント設定操作子F.VR、時間圧伸量設定操作子TCOMP の操作状態を検出する（ステップＥ３００）。これらの操作状態に変化があったときには、以下のように、それらのスイッチ操作に対応して操作子設定テーブル等への設定処理を行う。
【００３３】
まず、バンクスイッチBANK.SW の操作に変化が有るか否かを見て（ステップＥ３０１）、変化が有る場合には、バンクスイッチBANK.SW で設定されたバンク番号bankを、ＤＳＰ８の操作子設定テーブルのバンク番号bankに設定する。
【００３４】
次に、アサインスイッチASSIGN.SW の操作に変化が有るか否かを見て（ステップＥ３０３）、変化が有る場合には、アサインスイッチASSIGN.SW で設定されたモードがモノフォニック２またはポリフォニック２か否かを判定する。肯定判定（モノフォニック２またはポリフォニック２と判定）である場合は「リトリガ」を行わないモードが設定されたものであり、この場合には、ＤＳＰ８の操作子設定テーブルのリンクモードlink.mode に“１”を設定する。否定判定である場合は「リトリガ」を行うモードが設定されたものであり、この場合には、ＤＳＰ８の操作子設定テーブルのリンクモードlink.mode に“０”を設定する。さらに、アサインスイッチASSIGN.SW で設定されたモードがモノフォニック（１または  ２）であるかポリフォニック（１または２）であるかを判定し、モノフォニック１または２である場合にはアサインフラグAS.FLGをモノフォニックMONOにセットし（ステップＥ３０８）、ポリフォニック１または２である場合にはポリフォニックPOLYにセットする（ステップＥ３０９）。このアサインフラグAS.FLGにより、ボイスモジュール（楽音発生チャネル）への割当処理が１ボイス（モノフォニックの場合）か複数ボイス（ポリフォニックの場合）かを知ることができる。
【００３５】
次に、ホルマント設定操作子F.VRに変化が有るか否かを見て（ステップＥ３１０）、変化が有る場合には、その検出値を、ＤＳＰ８の操作子設定テーブルのホルマント移動量f.vrに設定する（ステップＥ３１１）。同様に、時間圧伸量設定操作子TCOMP に変化が有るか否かを見て（ステップＥ３１２）、変化がある場合には、その検出値を、ＤＳＰ８の操作子設定テーブルの時間圧伸量tcomp に設  定する（ステップＥ３１３）。
【００３６】
これらの設定操作の後、変調値lfo.mod の演算処理を行う (ステップＥ３１４) 。この演算処理は、ステップＥ３１３で設定した時間圧伸量tcomp が小であるときに、再生波形にビブラーラに似た変調を行うための変調値lfo.mod を発生するものである。このステップで演算される変調値情報は、変調情報であることを識別する変調情報識別情報mod.inf とともにキー情報の一種としてＤＳＰに転送され: 変調値情報は変調情報レジスタに格納される。詳細な内容は後述する。
【００３７】
次に、キーボード３０からの操作鍵情報（キー情報）を検出する（ステップＥ３１5 ）。そして、その検出結果から操作鍵に変化があるか否かを見て（ステップＥ３１６）、変化がある場合には先に設定されたAS.FLGの状態を判定する（ステップＥ３１７）。一方、変化がない場合にはこの再生処理ルーチンを終了する。上記アサインフラグAS.FLGの状態の判定結果がモノフォニックMONOである場合には、操作鍵を１ボイスモジュールに割り当てて、検出したキー情報をＤＳＰ８に転送する（ステップＥ３１８）。ポリフォニックPOLYである場合には、操作鍵を複数ボイスモジュールに割り当てて、検出したキー情報をＤＳＰ８に転送する（ステップＥ３１９）。ＤＳＰ８では受信したキー情報をキー情報レジスタに一時記憶する。
【００３８】
図１２は上述のステップＥ３１４における変調値情報の演算処理の詳細な内容を示すフローチャートである。図１３はこの演算処理で生成される波形のタイムチャートである。まず、ステップＥ３１３で設定された時間圧伸量tcomp の値が０. １により大きいか否か判定し（ステップＥ３１４１）、大きければ、ゲート信号lfo.gateを格納するレジスタLFO.GATEの値を０にして、以降のステップにて発生される変調値lfo.mod が常に１となるようにする（ステップＥ３１４３）。
【００３９】
時間圧伸量tcomp が０. １以下であれば、レジスタLFO.GATEの値を１にして（ステップＥ３１４２）、１を中心に低周波周期で変動する変調値lfo.mod を発生して、その変調値lfo.mod で再生波形信号に変調をかけて波形信号にビブラート効果を付加する。すなわち、次のステップＥ３１４４において、変調エンベロープlfo.env を、
lfo.env ＝lfo.env ＋（lfo.gate−lfo.env ）＊slope
で演算して求め、結果をレジスタLFO.ENV に格納する。ここで、slope はエンベロープの傾きを決定する係数である。このエンベロープlfo.env は、図１３に示すように、ゲート信号lfo.gateの０から１への立上りに同期して漸増して１になる波形となる。また、低周波信号lfo を、
lfo＝ sin（２＊３. １４＊lfo.rate／３２０００＊lfo.count ）
を演算することで発生する。ここで、lfo.rateは係数（単位Ｈz ）、lfo.count はカウンタLFO.COUNT の値であって、このカウンタLFO.COUNT はステップＥ３１４４が行われる毎にインクリメントされる。低周波信号lfo は、図１３に示すような正弦波となる。
【００４０】
次に、変調度lfo.mod を、
lfo.mod ＝ＰＯＷ（０. ５，lfo ＊lfo.env ＊lfo.depth ／１２００）
を演算して求め、その結果をレジスタLFO.MOD に格納する。ここで、lfo.depth は変調の深さであり、単位はcents である。この演算で求められた変調度lfo.mod は、図１３に示すように、ゲート波形lfo.gateの０から１への立上りに同期して１を中心に上下に低周波lfo の周期で振れる波形となる。
【００４１】
次に、前記の１ボイスモジュールまたは複数ボイスモジュールへの割当て処理について説明する。
〔１ボイスモジュールへの割当処理〕
単音（１ボイス）のみを発音するモードの割当処理である。キーボード３０のキー情報の検出の結果、操作鍵のうち、最後に押鍵した鍵を優先的に１つのボイスモジュール（楽音発生チャンネル）に割り当てる。なお、この割当処理では１ボイスモジュールへの割当なので、ボイスモジュール情報voice.Noの値は常に「No１」になる。
【００４２】
〔複数ボイスモジュールへの割当処理〕
複数音が発音可能なモードの割当処理である。キーボード３０のキー情報の検出の結果、操作鍵のうち、予め決められた数の押鍵だけを所定の数のボイスモジュールに割り当てる。この実施例では複数ボイスの数を２ボイスとしている。所定のボイス数（実施例では２）以上操作されても受け付けない。キーオン情報が入力されたとき、空きボイスがあるときのみに割当処理を行う。
【００４３】
なお、キーオン情報を転送し、楽音が発音中にアサインスイッチASSIGN.SW を変更すると、発音中の楽音が止まらないなどの動作の不都合が起こる可能性がある。よって、かかる動作の不都合を防止するため、楽音が発音中にアサインスイッチASSIGN.SW を操作して動作モードが変更された場合には、発音中の楽音の全てに対してキーオフ情報を転送するようにしている。そして、新たな動作モードで発音中（押鍵中）のキーオン情報を転送するようにしている。
【００４４】
以上の割当て処理は、鍵数よりも少ない数の音源を備えた電子楽器において、押鍵を音源に割り当てる公知のジェネレータアサインの技術を使用するので、詳細は省略する。
【００４５】
次に、キー情報の転送を受けたＤＳＰ８の処理を図１４、図１５を参照して説明する。図１４、図１５はＤＳＰ８のメインルーチンを示すフローチャートであり、サンプリング周期で繰り返し実行されるものである。ＣＰＵ２２から新たなキー情報の転送があったか否かをキー情報レジスタをみて監視しており（ステップＦ１）、キー情報の転送があればその内容に基づいて以下のステップＦ２〜Ｆ１６のボイスの消音処理／発音開始処理／リンク発音処理を行い、キー情報の転送がなければ後述するステップＦ１７〜Ｆ２２の読出処理／出力処理へとジャンプする。
【００４６】
キー情報の転送があると、そのキー情報のボイスモジュール情報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)＝０
SPHASE(1) ＝ENDADRS(1)
とすることである。
【００４８】
ここで、括弧付きの数字はボイスモジュールの番号である。SCNT(n) はボイスｎの発音の進行を管理するカウンタであり、波形データ記憶部から読み出す波形区間情報を更新（すなわち波形ピッチspitchと開始アドレスsadrs を更新）するためのカウント値をカウントするものである。LEVEL(1)はキー情報レジスタ中のレベルlevel を記憶するレジスタ、SPHASE(1) は進行位置sphaseを記憶するレジスタ、ENDADRS(1)は末尾アドレスendadrs を記憶するレジスタである。上記の進行位置sphaseは波形再生に要する時間の進行を管理するパラメータであり、全波形データ中の先頭の波形区間の開始アドレスを基準点とした波形データのアドレス値（波形データ記憶部のアドレス値）で表現される。従って、上記の図１６の消音処理は、ボイス１について、カウンタSCNT(1) を０にリセットし、音量レベルレジスタLEVEL(1)を０にするとともに、進行位置レジスタSPHASE(1) の値を末尾アドレスレジスタENDADRS(1)の値にして波形再生が進行しないようにするものである。
【００４９】
ステップＦ３においてキー情報がキーオン情報key.onであった場合、操作子設定テーブルのリンクモードlink.mode を調べる（ステップＦ５）。リンクモードlink.mode が“０”の場合には「リトリガ」を行うモード、すなわち新たなキーオン情報key.onを受信したら波形データを再生中であってもその波形データの先頭から再生し直すモードであり、よって〔ボイス１の発音開始処理〕を行う（ステップＦ１０）。この〔ボイス１の発音開始処理〕は要するに、波形メモリ１２から該当する波形のパラメータおよび波形データをその先頭から読み出す処理である。
【００５０】
この〔ボイス１の発音開始処理〕が実行される条件は以下のようになる。
▲１▼モノフォニック１のモードで、ボイス１に対するキーオン情報が入力されたとき・
▲２▼モノフォニック２のモードで、ボイス１が発音されていないときに、ボイス１に対するキーオン情報が入力されたとき．
▲３▼ポリフォニック１のモードで、ボイス１に対するキーオン情報が入力されたとき．
▲４▼ポリフォニック２のモードで、ボイス２が発音されていないときに、ボイス１に対するキーオン情報が入力されたとき．（このモードのとき、ボイス１は割当処理で発音されていないことを確認して割り当てられる）。
【００５１】
この〔ボイス１発音開始処理〕の具体的な内容は、図１８に示されるように、
PITCH(1)＝pitch
LEVEL(1)＝level
SCNT(1) ＝０
ENDADRS(1)＝@ (bank ＊ $800)
SPHASE(1) ＝@ (bank ＊ $800 ＋SCNT(1) ＋１)
SPITCH(1) ＝@ (bank ＊ $800 ＋SCNT(1) ＋２)
SADRS(1)＝@ (bank ＊ $800 ＋SCNT(1) ＋３)
START(1)＝SPHASE(1)
WIDTH(1)＝０
S.FLG1(1) ＝０
S.FLG2(1) ＝０
SCNT(1) ＝１
を行うことである。
【００５２】
ここで、START は後述の音素片を切り出すための先頭アドレスstart を格納するレジスタである。また上記中の「＊」は乗算を、「＠」は括弧内に示されたアドレスからデータを読み出すことを表す。例えば、ENDADRS(1)＝@ (bank ＊ $800 ) は、パラメータ記憶部の読出しポインタが示すアドレス(bank ＊ $800 ) から内容dataを読み出し、レジスタENDADRS(1)に設定することを意味している。
【００５３】
上記のボイス１発音開始処理は、ボイス１について、キー入力された音高情報pitch とレベル情報level をキー情報レジスタPITCH(1)、LEVEL(1)に転記し、カウンタSCNT(1) を初期値「０」にリセットし、該当するバンク番号bank (波形領域番号) の波形データの末尾アドレスendadrs を波形パラメータ記憶部における当該バンク番号bankの波形領域の先頭番地$0000 から読み出して末尾アドレスレジスタENDADRS(1)にセットし、先頭の波形区間の開始アドレスsadrs0を波形パラメータ記憶部における上記先頭から２番目の番地$0001 （最初の波形区間の開始アドレスが格納されている) から読み出して進行位置sphaseとして進行位置レジスタSPHASE(1) にセットするとともに、その進行位置レジスタSPHASE(1) の値を先頭アドレスレジスタSTART(1)にセットし、上記波形データの先頭の波形区間の波形ピッチｓpitch0を上記先頭番地から２番目の番地$0002 から読み出して波形ピッチレジスタSPITCH(1) にセットし、上記波形データの先頭から２番目の波形区間の開始アドレスsadrs1を上記先頭から３番目の番地$0003 から読み出して開始アドレスSADRS(1)にセットし、レジスタWIDTH(1)、S.FLG1(1) 、S.FLG2(1) に０をセットするなどの処理を行った後に、カウンタSCNT(1) を一つ更新して１にするものである。
【００５４】
リンクモードlink.mode が“１”の場合には「リトリガ」を行わないモード、すなわち新たなキーオン情報key.onを受信したら、波形データを再生中であれば、その時点以降の波形データを当該キーオン情報key.onで指定されたピッチに変更して再生するモードである。この場合、まず開始カウンタSCNT(1) が０か否かを判定する（ステップＦ６）。ここで開始カウンタSCNT(n) はボイスｎの発音の進行を管理するカウンタであり、この値が「０」の場合にはボイスｎがまだ未発音であることを示し、何らかの値となっていれば既に発音開始されたことを示す。
【００５５】
開始カウンタSCNT(1) が「０」以外の値すなわちボイス１が既に発音中であれば、ステップＦ７に移行しボイス１からボイス１へのリンク発音処理を行う（ステップＦ７）。この経路を辿るのは、モードはモノフォニックであり、ボイス１が既に発音中であり、かつ「リトリガ」をしない場合であるから、ボイス１で発音中の波形を、キーオン情報の入力時点から以降、同じボイス１において当該キーオン情報中の音高情報pitch に変更して再生する。上記リンク発音処理はこのための処理であり、キー情報レジスタの音高情報レジスタPITCH(1)とレベル情報レジスタLEVEL(1)を、受信したキーオン情報中の音高情報pitch とレベル情報level で書き換える処理、すなわち、図２０に示されるように、
PITCH(1)＝pitch
LEVEL(1)＝level
とする処理である。
【００５６】
この〔ボイス１からボイス１へのリンク発音処理〕が実行される条件は、モノフォニック２のモードで、ボイス１が発音中にボイス１に対するキーオン情報が入力されたときであり、このモードのときにのみ、割当処理でボイス１が発音中にボイス１に対するキーオン情報が割り当てられる。
【００５７】
ステップＦ６でカウンタSCNT(1) が「０」すなわちボイス１がまだ未発音であれば、さらにボイス２のカウンタSCNT(2) が「０」か否かを判定する（ステップＦ８）。カウンタSCNT(2) が「０」でない場合はボイス２が発音中であることを意味し、よってモードはポリフォニックであり、入力したキーオン情報はレガート奏法における２番目の押鍵のキーオン情報である。この場合、ボイス２での波形の発音再生を継続するとともに、そのキーオン情報の入力時点以降の波形に対して、その新たに入力したキーオン情報に応じた音高での再生をボイス１でも行う。このための処理がステップＦ９の〔ボイス２からボイス１へのリンク発音処理〕であり、ボイス２に保持していた再生中の波形の各種データをボイス１に渡すとともに、そのデータを新たに入力したキーオン情報に基づいて変更する。
【００５８】
この〔ボイス２からボイス１へのリンク発音処理〕が実行される条件は、ポリフォニック２のモードで、ボイス２が発音中にボイス１に対するキーオン情報が入力されたときである。このモードのとき、ボイス１は割当処理で発音されていないことを確認して割り当てられる。
【００５９】
〔ボイス２からボイス１へのリンク発音処理〕の具体的内容は、図２２に示されるように、
PITCH(1)＝pitch
LEVEC(1)＝level
SCNT(1) ＝SCNT(2)
ENDADRS(1)＝ENDADRS(2)
SPHASE(1) ＝SPHASE(2)
SPITCH(1)=SPITCH(2)
SADRS(1)＝SADRS(2)
START(1)＝START(2)
WIDTH(1)＝０
S.FLG1(1) ＝０
S.FLG2(1) ＝０
とする処理である。
【００６０】
すなわち、このリンク発音処理は、ボイス２での発音をその音高とレベルを変更してボイス１で受け継ぐために、キー入力された音高情報pitch とレベル情報level をキー情報レジスタPITCH(1)、LEVEL(1)に転記するとともに、ボイス２における、レジスタSCNT(2) 、ENDADRS(2)、SPHASE(2) 、SADRS(2)、START(2)の各値をボイス１におけるレジスタSCNT(1) 、ENDADRS(1)、SPHASE(1) 、SADRS(1)、START(1)にそれぞれ書き写し、フラグS.FLG1(1) 、S.FLG2(1) に０をセットするものである。
【００６１】
ステップＦ８において、カウンタSCNT(2) が「０」の場合はボイス２がまだ未発音であることを意味し、よってモードはモノフォニックまたはポリフォニックである。この経路を辿る場合はボイス１もボイス２も未発音であるので、新たに入力したキーオン情報はレガート奏法における２番目の押鍵ではなく、よってこのキーオン情報はボイス１に割り当てられて、波形データは先頭から再生される。この場合、前述のステップＦ１０の〔ボイス１の発音開始処理〕を行う。
【００６２】
一方、ステップＦ２の判定において、ボイスモジュール情報voice.Noがvoice.No２であった場合はモードはポリフォニックとなる。この場合、更にそのキー情報がキーオン情報key.onかキーオフ情報key.off かを判定し（ステップＦ１１）、キーオフ情報key.off であれば、それまで発音を行っていたボイス２(No.２のボイスモジュール) の消音処理を行う（ステップＦ１６）。この消音処理の詳細な内容は、図１７に示すように、
SCNT(2) ＝０
LEVEL(2)＝０
SPHASE(2) ＝ENDADRS(2)
とする処理である。
【００６３】
キー情報がキーオン情報key.onであった場合、操作子設定テーブルのリンクモードlind.mode を調べる。リンクモードlink.mode が“０”の場合には「リトリガ」を行うモード、すなわち新たなキーオン情報key.onを受信したら波形データを再生中であってもその波形データの先頭から再生し直すモードであり、よって〔ボイス２の発音開始処理〕を行う（ステップＦ１３）。この〔ボイス２の発音開始処理〕は要するに、波形メモリ１２から該当する波形のパラメータおよび波形データをその先頭から読み出してボイス２で発音する処理である。
【００６４】
この〔ボイス２の発音開始処理〕が実行される条件は、
▲１▼ポリフォニック１のモードで、ボイス２に対するキーオン情報が入力されたとき、
▲２▼ポリフォニック２のモードで、ボイス１が発音されていないときに、ボイス１に対するキーオン情報が入力されたとき、
である。
なお、ボイス２への割当はポリフォニック１、ポリフォニック２のときだけ行われる。
【００６５】
この〔ボイス２発音開始処理〕の具体的な内容は、図１９に示されるように、
PITCH(2)＝pitch
LEVEL(2)＝level
SCNT(2) ＝０
ENDADRS(2)＝@ (bank ＊ $800)
SPHASE(2) ＝@ (bank ＊ $800 ＋SCNT(2) ＋１)
SPITCH(2) ＝@ (bank ＊ $800 ＋SCNT(2) ＋２)
SADRS(2)＝@ (bank ＊ $800 ＋SCNT(2) ＋３)
START(2)＝SPHASE(2)
WIDTH(2)＝０
S.FLG1(2) ＝０
S.FLG2(2) ＝０
SCNT(2) ＝１
を行うことである。
【００６６】
ステップＦ１２の判断で、リンクモードlink.mode が“１”の場合には「リトリガ」を行わないモード、すなわち新たなキーオン情報key.onを受信したら、波形データを再生中であれば、その時点以降の波形データを当該キーオン情報key.onで指定されたピッチに変更して再生するモードである。この場合、まずカウンタSCNT(1) が０か否かを判定する（ステップＦ１４）。
【００６７】
カウンタSCNT(1) が「０」の場合、すなわちボイス１が未だ未発音であれば、前述のステップＦ１３の〔ボイス２の発音開始処理〕を行う。
【００６８】
カウンタSCNT(1) が「０」以外の値の場合、すなわちボイス１が既に発音中であれば、ステップＦ１５に移行し〔ボイス１からボイス２へのリンク発音処理〕を行う。この経路を辿るのは、モードはポリフォニックであり、ボイス１が既に発音中であり、かつ「リトリガ」をしない場合であるから、ボイス１で発音中の波形を、キーオン情報の入力時点から以降、ボイス１で継続して発音するとともに、それと並行して、ボイス２においても当該キーオン情報中の音高情報pitch に変更して再生する。上記〔ボイス１からボイス２へのリンク発音処理〕はこのための処理である。
【００６９】
この〔ボイス１からボイス２へのリンク発音処理〕が実行される条件は、ポリフォニック２のモードで、ボイス１が発音中にボイス２に対するキーオン情報が入力されたときである。
【００７０】
〔ボイス１からボイス２へのリンク発音処理〕の具体的内容は、図２１に示されるように、
PITCH(2)＝pitch
LEVEC(2)＝level
SCNT(2) ＝SCNT(1)
ENDADRS(2)＝ENDADRS(1)
SPHASE(2) ＝SPHASE(1)
SPITCH(2)=SPITCH(1)
SADRS(2)＝SADRS(1)
START(2)＝START(1)
WIDTH(2)＝０
S.FLG1(2) ＝０
S.FLG2(2) ＝０
とする処理である。
【００７１】
キー情報の入力に対して以上の処理が終了したら、ボイスモジュール番号ｎを「１」に設定し（ステップＦ１７）、ボイスモジュール（ｎ）の読出し処理を行う（ステップＦ１８）。この読出し処理については後に詳述する。その後、ボイスモジュール番号ｎが最終番号（この実施例ではボイス数の２）か判定し（ステップＦ１９）、最終番号に達していなかったら、ボイスモジュール番号ｎを一つインクリメントして（ステップＦ２０）、その番号のボイスモジュールの読出し処理を繰り返す。
【００７２】
ボイスモジュール番号が最終番号になったら、各ボイス１、２の出力OUT(1)、OUT(2)を足し合わせて合成出力OUT とし（ステップＦ２１）、この合成出力OUT を出力する（ステップＦ２２）。
【００７３】
上述のステップＦ１８の「読出し処理」は、サンプル波形（音声）から音素片を切り出し、その音素片のホルマントの特徴をほぼ保ったまま、所望の再生音高に対応した周期でその音素片を再生することによって、サンプル波形のホルマント特性を保ったままピッチを変換するものである。
【００７４】
この読出し処理では、再生される波形のピッチは鍵盤で押下したキーの音高に応じて変更されるが、再生時間は再生ピッチの大きさ（すなわちどのキーが押下されたか）によらず一定である。すなわち、ポリフォニックの場合、レガート奏法の２番目の押鍵により、１番目の押鍵の音高に応じた波形再生と並行して２番目の押鍵の音高に応じた波形再生が行われた場合、１番目の波形再生の終了と２番目の波形再生の終了は同時となる。一方、従来のように単に読出し速度を変えることでピッチシフトを行っている場合には、上記のようなときには１番目と２番目の波形再生の終了はタイミングがずれてしまい違和感が生じるが、本実施例によれば、かかる違和感を無くすことができる。
【００７５】
この読出し処理動作の概要を説明すると、波形メモリ１２に記憶されている波形データからパラメータデータに基づいて所望の区間（この実施例では基本的には２ピッチ分の波形区間で、場合によってはそれよりも短い波形区間）を音素片として時間経過に従って順次に切り出して、その切り出した音素片を、元の波形とは異なるピッチおよびホルマントで再生するものである。その際、この音素片の再生を二つの処理経路で並行して行い、それぞれの処理経路では再生しようとするピッチ周期の２倍の周期でかつ互いが半周期（再生しようとするピッチ周期）ずれるようにして音素片を再生し、これらを合成して元のピッチ周期にするようにしている。
【００７６】
図２３、図２４はこのピッチ変換処理を説明する図である。ホルマント移動量f.vrは１であれば変更なし、１以外であればホルマントを若干変更する。ここでは、ホルマント移動量f.vrが１、すなわちホルマント変更無しでかつ再生ピッチを波形メモリ１２の元の波形データより高くする場合を図２３で説明し、ホルマント移動量f.vrが１よりも大きい、すなわちホルマント変更有りでかつ再生ピッチを波形メモリ１２の元の波形データと同じにする場合を図２４で説明する。
【００７７】
まず、図２３を参照して、鍵盤のキー押下で音高を指定することにより、元の波形データより高域側にピッチをシフトし、かつホルマント特性の変更は行わない（ホルマント移動量f.vr＝１）場合について説明する。
【００７８】
図２３の（ａ）はwave0 領域の波形データを示しており、波形パラメータで示されるピッチspitch0 、spitch1 ・・・を有する。そして、基本的には、このピッチspitchに対応して音素片が順次に切り出される。なお、この図２３（ａ）には開始アドレスsadrs0から始まる波形ピッチspitch0 のwave0 領域の複数周期の波形のうちのＰ０〜Ｐ４の５周期分の波形を示している。
【００７９】
また、鍵盤のキーで音高指定されたキー指定ピッチpitch は後述の「読出し処理サブルーチン」のステップＦ４１でwidth に設定されており、width は再生ピチを表すことになる。すなわち、
再生ピッチwidth ＝キー指定ピッチpitch
である。この再生ピッチ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 の周期長となる。従って、鍵盤からのキー指定ピッチpitch によって元のサンプリングデータを高域側にピッチシフトしつつ、そのホルマント特性はそのまま維持できる。
【００８３】
図２４はホルマント移動量f.vrを１より大きくして再生波形のホルマントを元波形のホルマントより高域側にシフトする場合を示すものである。ここでは理解しやすくするためにキー指定ピッチが元波形のピッチspitchとほぼ等しいものとして示している。
【００８４】
音素片の読出し速度は、第１の処理経路が、「第１位相ph１×ホルマント移動量f.vr」、第２の処理経路が、「第２位相ph２×ホルマント移動量f.vr」であるから、第１、第２の位相ph１、ph２の変化より速く、結果的にホルマント特性は高域側にシフトされ、変更が付与されることになる。
【００８５】
そして、読出し速度を速くすることによって音素片は短くなる。従って、エンベロープenv1、env2のエンプロープ窓長lengthも、
「エンプロープ窓長length＝元波形のピッチspitch／ホルマント移動量f.vr」
として、音素片が短くなったことに合わせて短くしている。
【００８６】
上記の効果付加を含む読出し処理の動作を図２５、図２６のフローチャートに基づいて説明する。なお、図２５、図２６中の括弧書きの添字(n) はボイスモジュール番号ｎのパラメータ等であることを意味するものであるが、以下の説明では特に必要がない場合は記述を省略する。
【００８７】
ＤＳＰ８は、処理のため着目している１ピッチ分の波形区間のピッチspitchを記憶するピッチレジスタSPITCH、波形ピッチspitchが変化した位置（波形区間の開始点）を表すアドレスである開始アドレスsadrs を記憶する開始アドレスレジスタSADRS 、時間経過に従って更新する、音素片を切り出す基準（読出し開始）となる先頭アドレスstart を記憶する先頭アドレスレジスタSTART を備えている。更に、後述する再生ピッチ周期長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)等を「０」に初期設定する。
【００９１】
なお、以下の説明では、電源投入後少し時間が経過し、前記フローチャートの処理によって、各レジスタや各カウンタには、既に適当な値が記憶されているとして説明する。また、このフローチャートは、ＤＳＰ８においてサンプリング周期毎に実行される。
【００９２】
発音開始時においては、進行位置レジスタSPHASE(n) には、前述のボイスの発音開始処理によって、波形メモリ１２のパラメータ記憶部におけるバンク番号bankで示される波形領域の先頭の波形区間の開始アドレスsadrs0が格納されている。進行位置レジスタSPHASEはこれを基準点にして時間の進行を管理する。１サンプル周期毎に、進行位置レジスタSPHASE(n) の値を時間圧伸量tcomp だけインクリメントする（ステップＦ３１）。すなわち、
SPHASE(n)＝SPHASE(n) ＋tcomp
とする。このような更新をする結果、時間圧伸量tcomp が大きければ、進行位置sphaseは速く進んで波形全体を再生するに要する時間が短くなり、反対に時間圧伸量tcomp が小さければ進行位置sphaseは遅く進むので波形全体を再生するに要する時間は長くなる。
【００９３】
この進行位置レジスタSPHASEの値と末尾アドレスレジスタENDADRS の値を比較し (ステップＦ３２) 、進行位置レジスタSPHASEの値が末尾アドレスレジスタENDADRS の値より小さければ、まだその波形全体の末尾まで処理を終えていないことを意味する。この場合、さらに進行位置レジスタSPHASEの値と開始アドレスレジスタSADRS の値を比較する（ステップＦ３３）。この開始アドレスレジスタSADRS の値sadrs は前述した図１８、図１９の発音開始処理からも分かるように、次に続く波形区間の開始アドレスである。よって進行位置レジスタSPHASEの値が開始アドレスレジスタSADRS(n)の値より大きければ、それまで処理していた波形区間が終了したので、この波形区間から次の波形区間に処理を移行するために波形区間の更新を行う。この波形区間の更新は次のようにして行う。
SPITCH(n) ＝@ （bank＊＄800 ＋２＋SCNT(n) ＊２）
SADRS(n)  ＝@ （bank＊＄800 ＋３＋SCNT(n) ＊２）
SCNT(n)   ＝SCNT(n) ＋１
【００９４】
すなわち、波形メモリ１２のパラメータ記憶部からパラメータデータ（次に続く波形区間の波形ピッチspitchと更にその後の波形区間の開始アドレスsadrs)を読み出してきて、それぞれ、現在の波形区間の波形ピッチレジスタSPITCH(n) の値、次の波形区間の開始アドレスレジスタSADRS(n)  の値とし、カウンタSCNT(n) を一つインクリメントする。
【００９５】
ステップＦ３３において、進行位置レジスタSPHASEの値が次の波形区間の開始アドレスレジスタSADRS(n)の値以下であれば、まだ現在の波形区間の途中であるから、波形区間の更新は行わないので、ステップＦ３４の処理は飛び越す。
【００９６】
さらに、先頭アドレスレジスタSTART(n)を更新するか否かを判定するために、（START(n)＋SPITCH(n) ）と進行位置レジスタSPHASEの値とを比較する（ステップＦ３５）。（START(n)＋SPITCH(n) ）よりも進行位置レジスタSPHASEの値の方が大きければ、進行位置sphaseが現在の波形区間を超えたことを意味し、この場合には先頭アドレスレジスタSTART(n)を次の波形区間の値に更新する。この更新は先頭アドレスレジスタSTART(n)の値を波形ピッチレジスタSPITCH(n) の値だけインクリメントして行う（ステップＦ３６）。すなわち、
START(n)＝START(n)＋SPITCH(n)
とする。進行位置レジスタSPHASEの値が（START(n)＋SPITCH(n) ）以下である場合には、この先頭アドレスの更新は行わない。
【００９７】
前記のステップＦ３２で、進行位置レジスタSPHASEの値が末尾アドレスレジスタENDADRS の値以上の場合には、
SPHASE(n) ＝ENDADRS(n)
とする。すなわち進行位置レジスタSPHASEを末尾アドレスレジスタENDADRS の値に固定して（ステップＦ３７）、上述のステップＦ３３〜Ｆ３６を飛び越してステップＦ３８に移行する。この場合には、波形区間と先頭アドレスの更新を行わない（つまりレジスタSPITCH、SADRS 、SCNT、START を更新しない）。これは、進行位置sphaseが波形全体の末尾まで至ったら、その値を末尾アドレスendadrs に固定してその進行を止めるものである。かかる制限をしない場合には次に続く波形領域の他の波形データが読み出されてノイズとなる虞があるが、上記制限によりこれを防止できる。
【００９８】
以上のステップＦ３１〜Ｆ３７の処理により、大きな時間圧伸量tcomp が設定された場合には進行位置sphaseが速く進んで先頭アドレスstart の更新が早く行われ、よって波形再生時間が短くなる。反対に時間圧伸量tcomp が小さい場合には進行位置shase が遅く進んで先頭アドレスstart の更新が遅く行われ、よって波形再生時間が長くなる。なお、この時間圧伸量tcomp をかなり小さな値に設定した場合には同じ波形区間が複数回繰り返して再生されつつ、遅い速度で波形再生が進行するようになる。これは、進行位置sphaseの進行がゆっくりしているためステップＦ３３、Ｆ３５の判断で進行位置sphaseがなかなか比較している値よりも大きくならず、よって波形区間の更新がなかなか行われないで同じ波形区間からの読出し処理が繰り返し行われるためである。反対に、時間圧伸量tcomp をかなり大きな値にすると、波形区間の更新において、次に続く波形区間を飛び越してしまいその波形区間の再生が行われないような場合も生じる。
【００９９】
上記のように進行位置sphaseを時間基準として用いて波形区間の更新を行いつつ波形データを再生すると、波形再生に要する時間長は再生する波形の音高によらず、ユーザが設定する時間圧伸量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 を、鍵盤の押鍵で音高指定されたキー指定ピッチpitch を格納するレジスタPITCH の値と、前述の再生処理におけるステップＥ３１４の演算処理で求めた変調度lfo.mod を格納するレジスタLFO.MOD の値とを乗算することで求め、これを再生ピッチレジスタWIDTH に記憶させる（ステップＦ４１）。この処理を行うことにより、時間圧伸量tcomp が０. １より大きい場合には変調度lfo.mod は１に固定されるので、再生ピッチwidth はキー指定ピッチpitch に一致する。一方、時間圧伸量tcomp が０．１以下になると、変調度lfo.mod は１を中心に低周波数で振動する波形となり、したがって再生ピッチwidth はこのステップＦ４１の演算をする毎に値が変動することになる。時間圧伸量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(n) の値だけ歩進させる（ステップＦ５２）。そして、歩進させたカウンタWINDOW１(n) の値が１より小さいか、１以上であって２より小さいか、あるいは２以上であるかを判定する（ステップＦ５３）。１より小さい場合には、カウンタWINDOW１(n) の値を第１エンベロープ env１として第１エンベロープレジスタ ENV１に記憶させ（ステップＦ５４）、１以上であって２より小さい場合には、２からカウンタWINDOW１(n) の値を減算した値を第１エンベロープ env１として第１エンベロープレジスタ ENV１に記憶させ（ステップＦ５５) 、２以上のとき、第１エンベロープレジスタ ENV１の値を０とする（ステップＦ５６）。
【０１１４】
ステップＦ５３〜Ｆ５６は、例えば図２３（ｆ) に示されるように、歩進率w.rateずつ値が増加する鋸歯状波を作成し、これの値を１で折り返すことによって、第１エンベロープ env１を作成している。但し、カウンタWINDOW 1(n) の値が２を越えた場合には、ステップＦ５６によって第１エンベロープ env１の値を０としている。即ち、ホルマント移動量f.vrと波形ピッチspitchとに基づいて定めたエンベロープ窓長lengthの値の逆数である歩進率w.rateずつ１まで増加し、その後、歩進率w.rateずつ０まで減少する三角波を第１のエンベロープ env１の波形として作成している。
【０１１５】
また、ステップＦ５４〜Ｆ５６に続いて、第１位相カウンタPH１の値（読出しアドレスの歩進値）にホルマント移動量f.vrを乗算した値を、第１の波形の先頭アドレス START１(n) の値と加算して、第１の波形の読出しアドレスを記憶するレジスタ ADRES１に記憶させる（ステップＦ５７）。
【０１１６】
また、読出しアドレスレジスタADRES １の値と末尾アドレスレジスタENDADRS の値を比較し（ステップＦ５８）、末尾アドレスレジスタENDADRS の値よりも大きければ、「読出しアドレスレジスタADRES 1 の値＝末尾アドレスレジスタ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(n)を出力OUT(n)に乗じたものを最終的な出力OUT(n)とする。すなわち、立上り、立下りの特性が係数Ｋで決まるレベルエンベロープL.env(n)を算出し、これを出力に付加している。なお、ステップＦ７１の演算では、レベルエンベロープL.env(n)は０にならないので、所定レベル以下になると、L.ENV(n)＝０となるように処理を追加してもよい。
【０１２１】
本発明の実施にあたっては種々の変形形態が可能である。例えば上述の実施例では、再生波形に揺らぎを付加する方法として、再生波形のピッチに変化を与えるようにしたが、もちろん本発明はこれに限られるものではなく、例えば波形データを切り出す切出し窓の窓長lengthに変化を与えるようにすることもできるし、また再生波形の音量レベルに変化を与えるものであってもよい。
【０１２２】
【発明の効果】
以上に説明したように、本発明によれば、波形の再生時間を長くしたことにより同じ波形区間の波形データに基づいて同じような再生波形が繰り返し再生されるような場合でも、その再生波形にビブラート等に似た揺らぎを付加することができるので、単調な不自然な感じを無くすことができる。
【図面の簡単な説明】
【図１】本発明にかかる一実施例としての波形発生装置の全体的なブロック構成を示す図である。
【図２】実施例装置における操作子設定テーブルの構成例を示す図である。
【図３】実施例装置におけるキー情報レジスタと変調情報レジスタの構成例を示す図である。
【図４】実施例装置における波形メモリのパラメータ記憶部のデータ構成例を示す図である。
【図５】実施例装置における波形メモリの波形データ記憶部のデータ構成例を示す図である。
【図６】実施例装置におけるメインルーチンを示すフローチャートである。
【図７】実施例装置における録音ルーチンを示すフローチャートである。
【図８】実施例装置における編集ルーチンを示すフローチャートである。
【図９】実施例装置における再生ルーチンを示すフローチャートである。
【図１０】実施例装置における再生処理ルーチン（１／２）の詳細を示すフローチャートである。
【図１１】実施例装置における再生処理ルーチン（２／２）の詳細を示すフローチャートである。
【図１２】実施例装置における変調値情報の演算処理の詳細を示すフローチャートである。
【図１３】実施例装置における変調値情報の演算処理で生成される各種信号波形のタイムチャートである。
【図１４】実施例装置におけるＤＳＰでのメインルーチン（１／２）を示すフローチャートである。
【図１５】実施例装置におけるＤＳＰでのメインルーチン（２／２）を示すフローチャートである。
【図１６】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス１の消音処理」を示すフローチャートである。
【図１７】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス２の消音処理」を示すフローチャートである。
【図１８】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス１の発音開始処理」を示すフローチャートである。
【図１９】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス２の発音開始処理」を示すフローチャートである。
【図２０】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス１からボイス１へのリンク発音処理」を示すフローチャートである。
【図２１】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス１からボイス２へのリンク発音処理」を示すフローチャートである。
【図２２】実施例装置におけるＤＳＰでのメインルーチン中の「ボイス２からボイス１へのリンク発音処理」を示すフローチャートである。
【図２３】「読出し処理」の動作概要（ホルマント特性変更なし、高域にピッチシフト）を説明するためのタイムチャートである。
【図２４】「読出し処理」の動作概要（ホルマント特性を低域にシフト）を説明するためのタイムチャートである。
【図２５】実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン（１／２）を示すフローチャートである。
【図２６】実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン（２／２）を示すフローチャートである。
【図２７】実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「波形読出し処理」ルーチン（１／２）を示すフローチャートである。
【図２８】実施例装置におけるＤＳＰでのメインルーチン中の「読出し処理」ルーチン中の「波形読出し処理」ルーチン（２／２）を示すフローチャートである。
【符号の説明】
４  Ａ／Ｄ変換器
８  ＤＳＰ（ディジタル信号プロセッサ）
１２  波形メモリ
１４  Ｄ／Ａ変換器
２０  操作子群
２２  ＣＰＵ（中央処理装置）
３０  キーボード
３１  ＲＡＭ（ランダム・アクセス・メモリ）
３２  ＲＯＭ（リード・オンリー・メモリ）
３３  ハードディスク装置
【図１】
0003763493.tif 000002
【図２】
0003763493.tif 000003
【図３】
0003763493.tif 000004
【図４】
0003763493.tif 000005
【図５】
0003763493.tif 000006
【図６】
0003763493.tif 000007
【図７】
0003763493.tif 000008
【図８】
0003763493.tif 000009
【図９】
0003763493.tif 000010
【図１０】
0003763493.tif 000011
【図１１】
0003763493.tif 000012
【図１２】
0003763493.tif 000013
【図１３】
0003763493.tif 000014
【図１４】
0003763493.tif 000015
【図１５】
0003763493.tif 000016
【図１６】
0003763493.tif 000017
【図１７】
0003763493.tif 000018
【図１８】
0003763493.tif 000019
【図１９】
0003763493.tif 000020
【図２０】
0003763493.tif 000021
【図２１】
0003763493.tif 000022
【図２２】
0003763493.tif 000023
【図２３】
0003763493.tif 000024
【図２４】
0003763493.tif 000025
【図２５】
0003763493.tif 000026
【図２６】
0003763493.tif 000027
【図２７】
0003763493.tif 000028
【図２８】
0003763493.tif 000029