(57)【特許請求の範囲】
【請求項１】
メモリから１周期分のマスター波形に対応する複数のデータサンプルを読み出す際のマスター波形読み出し速度及び前記メモリから１周期分のスレーブ波形に対応する複数のデータサンプルを読み出す際のスレーブ波形読み出し速度を設定する読み出し速度設定処理と、
前記設定されたマスター波形読み出し速度で前記１周期分のマスター波形に対応するデータサンプル数分読み出す間に、前記設定されたスレーブ波形読み出し速度で読み出し可能なデータサンプル数を取得する取得処理と、
前記設定されたマスター波形読み出し速度で、前記メモリから前記１周期分のマスター波形に対応する複数のデータサンプルを順次読み出す動作を繰り返す第１の波形読出処理と、
前記マスター波形に対応する複数のデータサンプルの読み出しの開始に同期して、前記メモリに記憶された前記１周期分のスレーブ波形に対応する複数のデータサンプルを、予め定められたデータサンプルの位置から読み出しを開始する読み出し開始処理と、
前記スレーブ波形に対応するデータサンプルの読み出しを開始した後、前記設定されたスレーブ波形読み出し速度で前記スレーブ波形に対応する複数のデータサンプルを順次読み出すとともに、前記読み出された前記スレーブ波形に対応するデータサンプル数が前記取得されたデータサンプル数と一致したか否か判別し、一致と判別された場合には、前記スレーブ波形の読み出しを前記予め定められたデータサンプルの位置に戻して前記１周期分のスレーブ波形に対応する複数のデータサンプルを読み出す動作を繰り返す第２の波形読出処理と、
を実行する処理部を有する波形発生装置。
【請求項２】
前記処理部は、前記第２の波形読出処理として、前記取得されたデータサンプル数が、１周期分のスレーブ波形のデータサンプル数より多い場合は、前記１周期分のスレーブ波形の終了位置に対応するデータサンプルまで読み出された後、再び前記１周期分のスレーブ波形の開始位置に対応するデータサンプル戻って読み出しを開始する処理を実行する、請求項１記載の波形発生装置。
【請求項３】
波形発生装置として用いられるコンピュータに、
メモリから１周期分のマスター波形に対応する複数のデータサンプルを読み出す際のマスター波形読み出し速度及び前記メモリから１周期分のスレーブ波形に対応する複数のデータサンプルを読み出す際のスレーブ波形読み出し速度を設定する読み出し速度設定ステップと、
前記設定されたマスター波形読み出し速度で前記１周期分のマスター波形に対応するデータサンプル数分読み出す間に、前記設定されたスレーブ波形読み出し速度で読み出し可能なデータサンプル数を取得する取得ステップと、
前記設定されたマスター波形読み出し速度で、前記メモリから前記１周期分のマスター波形に対応する複数のデータサンプルを順次読み出す動作を繰り返す第１の波形読出ステップと、
前記マスター波形に対応する複数のデータサンプルの読み出しの開始に同期して、前記メモリに記憶された前記１周期分のスレーブ波形に対応する複数のデータサンプルを、予め定められたデータサンプルの位置から読み出しを開始する読み出し開始ステップと、
前記スレーブ波形に対応するデータサンプルの読み出しを開始した後、前記設定されたスレーブ波形読み出し速度で前記スレーブ波形に対応する複数のデータサンプルを順次読み出すとともに、前記読み出された前記スレーブ波形に対応するデータサンプル数が前記取得されたデータサンプル数と一致したか否か判別し、一致と判別された場合には、前記スレーブ波形の読み出しを前記予め定められたデータサンプルの位置に戻して前記１周期分のスレーブ波形に対応する複数のデータサンプルを読み出す動作を繰り返す第２の波形発生ステップと、
を実行させるプログラム。
【請求項４】
前記第２の波形読出ステップは、前記取得されたデータサンプル数が、１周期分のマスター波形のデータサンプル数より多い場合は、前記１周期分のスレーブ波形の終了位置に対応するデータサンプルまで読み出された後、再び前記１周期分のスレーブ波形の開始位置に対応するデータサンプルに戻って読み出しを開始する、請求項３記載のプログラム。
【請求項５】
波形発生装置として用いられる波形発生方法であって、前記波形発生装置が、
メモリから１周期分のマスター波形に対応する複数のデータサンプルを読み出す際のマスター波形読み出し速度及び前記メモリから１周期分のスレーブ波形に対応する複数のデータサンプルを読み出す際のスレーブ波形読み出し速度を設定し、
前記設定されたマスター波形読み出し速度で前記１周期分のマスター波形に対応するデータサンプル数分読み出す間に、前記設定されたスレーブ波形読み出し速度で読み出し可能なデータサンプル数を取得し、
前記設定されたマスター波形読み出し速度で、前記メモリから前記１周期分のマスター波形に対応する複数のデータサンプルを順次読み出す動作を繰り返し、
前記マスター波形に対応する複数のデータサンプルの読み出しの開始に同期して、前記メモリに記憶された前記１周期分のスレーブ波形に対応する複数のデータサンプルを、予め定められたデータサンプルの位置から読み出しを開始し、
前記スレーブ波形に対応するデータサンプルの読み出しを開始した後、前記設定されたスレーブ波形読み出し速度で前記スレーブ波形に対応する複数のデータサンプルを順次読み出すとともに、前記読み出された前記スレーブ波形に対応するデータサンプル数が前記取得されたデータサンプル数と一致したか否か判別し、一致と判別された場合には、前記スレーブ波形の読み出しを前記予め定められたデータサンプルの位置に戻して前記１周期分のスレーブ波形に対応する複数のデータサンプルを読み出す動作を繰り返す、
波形発生方法。
【請求項６】
前記波形発生装置が、前記取得されたデータサンプル数が、１周期分のマスター波形のデータサンプル数より多い場合は、前記１周期分のスレーブ波形の終了位置に対応するデータサンプルまで読み出された後、再び前記１周期分のスレーブ波形の開始位置対応するデータサンプルに戻って読み出しを開始する、請求項５記載の波形発生方法。
【請求項７】
請求項１に記載の波形発生装置と、
演奏操作に応じた演奏情報を発生する演奏情報発生部と、
前記演奏情報に応答して、前記波形発生装置から楽音信号を生成するための波形を発生させるように制御する制御部と、
を備えた電子楽器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子楽器の音源に用いて好適な波形発生装置、プログラム、波形発生方法および電子楽器に関する。
【背景技術】
【０００２】
マスター側およびスレーブ側の２系統のオシレータを備え、スレーブオシレータの波形発生開始タイミングを、マスターオシレータの波形発生開始タイミングに強制的に同期させる、いわゆるオシレータ同期型の波形発生装置が知られている。この種の波形発生装置では、例えばスレーブ波形出力のピッチを一定にして、マスター波形出力のピッチのみを変化させると、スレーブ波形出力の波形形状が変形され、これによりピッチ変化と音色変化とが同時に得られる独特な音響効果（オシレータシンクロナイズ効果）を備えた波形を生成し得るようになっており、この種の装置については例えば特許文献１に開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−４２７８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、一般的な波形データ読み出し方式の音源では、複数チャンネルのオシレータ（波形発生装置）を搭載していても、その内の任意の２組のオシレータをマスターオシレータとスレーブオシレータとに割り当て、スレーブオシレータが発生する波形の先頭をマスターオシレータの波形読み出し周期に強制的に同期させようとすると、この同期のためのハードウェア構成が必要となり、その分製品コスト高を招致してしまう。
【０００５】
本発明は、このような事情に鑑みてなされたもので、製品コスト高を招致することなく波形データ読み出し方式でオシレータシンクロナイズ効果を具現することができる波形発生装置、プログラム、波形発生方法および電子楽器を提供することを目的としている。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明の波形発生装置は、
メモリから１周期分のマスター波形に対応する複数のデータサンプルを読み出す際のマスター波形読み出し速度及び前記メモリから１周期分のスレーブ波形に対応する複数のデータサンプルを読み出す際のスレーブ波形読み出し速度を設定する読み出し速度設定処理と、
前記設定されたマスター波形読み出し速度で前記１周期分のマスター波形に対応するデータサンプル数分読み出す間に、前記設定されたスレーブ波形読み出し速度で読み出し可能なデータサンプル数を取得する取得処理と、
前記設定されたマスター波形読み出し速度で、前記メモリから前記１周期分のマスター波形に対応する複数のデータサンプルを順次読み出す動作を繰り返す第１の波形読出処理と、
前記マスター波形に対応する複数のデータサンプルの読み出しの開始に同期して、前記メモリに記憶された前記１周期分のスレーブ波形に対応する複数のデータサンプルを、予め定められたデータサンプルの位置から読み出しを開始する読み出し開始処理と、
前記スレーブ波形に対応するデータサンプルの読み出しを開始した後、前記設定されたスレーブ波形読み出し速度で前記スレーブ波形に対応する複数のデータサンプルを順次読み出すとともに、前記読み出された前記スレーブ波形に対応するデータサンプル数が前記取得されたデータサンプル数と一致したか否か判別し、一致と判別された場合には、前記スレーブ波形の読み出しを前記予め定められたデータサンプルの位置に戻して前記１周期分のスレーブ波形に対応する複数のデータサンプルを読み出す動作を繰り返す第２の波形読出処理と、を実行する処理部を有することを特徴とする。
【発明の効果】
【０００７】
本発明では、製品コスト高を招致することなく波形データ読み出し方式でオシレータシンクロナイズ効果を具現することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の一形態による電子楽器１００の全体構成を示すブロック図である。
【図２】本発明による波形発生装置を備えた音源１７の構成を示すブロック図である。
【図３】オシレータの波形読み出しを説明するための図である。
【図４】マスターオシレータＯＳＣ１とスレーブオシレータＯＳＣ２との関係を説明するための図である。
【図５】発音処理の動作を示すフローチャートである。
【図６】ピッチ計算処理の動作を示すフローチャートである。
【図７】アドレス計算処理の動作を示すフローチャートである。
【図８】ハードウェアピッチ／アドレス処理の動作を示すフローチャートである。
【図９】周期処理の動作を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下、図面を参照して本発明の実施形態について説明する。
Ａ．構成  
図１は、本発明の実施の一形態による電子楽器１００の全体構成を示すブロック図である。この図に示す電子楽器１００は、鍵盤１０、スイッチ部１１、ピッチベンダ１２、ＣＰＵ１３、表示部１４、ＲＯＭ１５、ＲＡＭ１６、音源１７、Ｄ／Ａ変換器１８およびサウンドシステム１９を備える。
【００１０】
鍵盤１０は、押離鍵操作（演奏操作）に応じたキーオン／キーオフ信号、キーナンバ（鍵番号）およびベロシティ等からなる演奏情報を発生する。スイッチ部１１は、楽器パネルに配設され、発生楽音の音色を選択する音色選択スイッチやオシレータシンクさせるか否かを指定するオシレータシンクスイッチなどの各種スイッチを備え、操作されるスイッチ種に応じた操作イベントを発生する。
【００１１】
ピッチベンダ１２は、ユーザのベンダホイール回動操作に応じたピッチベンド値を発生してＣＰＵ１３に供給する。ピッチベンド値は、後述するように、鍵盤１０の演奏情報（キーナンバ）で指定されるピッチデータ（位相情報）を可変制御するために用いられる。
【００１２】
ＣＰＵ１３は、スイッチ部１１のスイッチ操作に応じて発生する操作イベントに基づき楽器各部の動作状態を設定したり、鍵盤１０から供給される演奏情報に応じたコマンド（例えば発音指示コマンドや消音指示コマンド等）を生成し、これを音源１７に送出して楽音形成させる。また、ＣＰＵ１３はピッチベンダ１２から供給されるピッチベンド値に応じて変化させたピッチデータ（位相情報）を音源１７に与える。本発明の要旨に係わるＣＰＵ１３の特徴的な処理動作については追って述べる。
【００１３】
表示部１４は、液晶表示パネルおよび駆動回路から構成され、ＣＰＵ１３から供給される表示制御信号に応じて、例えばパラメータ設定状態や動作状態などを表示する。ＲＯＭ１５は、上記ＣＰＵ１３にロードされる各種制御プログラムや制御データ等を記憶する。ここで言う各種制御プログラムとは、後述するピッチ計算処理、アドレス計算処理およびハードウェアピッチ／アドレス処理を含む。ＲＡＭ１６は、ＣＰＵ１３のワークエリアとして用いられ、各種レジスタ・フラグデータを一時記憶する。
【００１４】
音源１７は、ＣＰＵ１３から供給される演奏情報に応じた楽音波形を発生する。音源１７の構成については追って詳述する。Ｄ／Ａ変換器１８は、音源１７から出力される楽音波形をアナログ形式の楽音信号に変換して出力する。サウンドシステム１９は、Ｄ／Ａ変換器１８が出力する楽音信号から不要ノイズを除去する等のフィルタリングを施した後、これを増幅してスピーカから発音させる。
【００１５】
（２）音源１７の構成
次に、図２を参照して音源１７の構成について説明する。音源１７はＤＳＰを用いた周知の波形メモリ読み出し方式で構成される。したがって、図２はそのＤＳＰにおいて実行されるマイクロプログラムの各機能をハードウェアイメージとして捉らえた機能ブロックを図示している。
【００１６】
図２において、ＬＦＯ（低周波発振器）１７１は、ピッチ変調用のＬＦＯ波形を発生する。加算器１７２は、ユーザのベンダホイール回動操作に応じてピッチベンダ１２から出力されるピッチベンダ出力（ピッチベンド値）と、ＬＦＯ１７１から出力されるＬＦＯ波形とを加算して発振器１７０ａに供給する。
【００１７】
発振器１７０ａは、押鍵に応じてＣＰＵ１３から供給され、押鍵された鍵の音高（キーナンバ）に対応した読み出し速度を表すピッチデータ（位相情報）を、加算器１７２の出力で変調し、変調されたピッチデータ（位相情報）に従った読み出し速度で波形メモリ１７３から波形データを読み出す。波形メモリ１７３には、各種音色の波形データが記憶されており、この中からユーザにより選択された音色の波形データが上記発振器１７０ａにより読み出される。
【００１８】
ＥＧ（エンベロープジェネレータ）１７０ｂは、ＣＰＵ１３の制御の下に、音量制御に用いる公知のＡＤＳＲ型のエンベロープ波形を発生する。増幅器１７０ｃは、ＥＧ１７０ｂから供給されるエンベロープ波形に応じて、発振器１７０ａから出力される波形データの振幅を制御して出力する。
【００１９】
上記構成において、発振器１７０ａ、ＥＧ１７０ｂおよび増幅器１７０ｃが、１つの発音チャンネルに対応する波形発生装置（オシレータＯＳＣ）１７０を構成する。本実施形態では、６４組の波形発生装置（オシレータＯＳＣ）１７０−１〜１７０−６４を備えており、これらの内の固定的な２組（マスターオシレータＯＳＣ１およびスレーブオシレータＯＳＣ２）を用いてオシレータシンク機能を具現する。ミキサ１７４は、各波形発生装置１７０−１〜１７０−６４から出力される波形データを加算して楽音出力を発生する。
【００２０】
ここで、図３および図４を参照してオシレータシンク機能を具現するマスターオシレータＯＳＣ１およびスレーブオシレータＯＳＣ２の波形読み出し動作について説明する。図３は、波形発生装置（オシレータＯＳＣ）１７０の波形読み出し動作を示す図である。波形メモリ１７３から波形データを読み出す波形発生装置（オシレータＯＳＣ）１７０には、波形データの先頭を指定する開始点ＳＰ（先頭アドレス）、波形データの末尾を指定する終了点ＥＰ（エンドアドレス）、ループ点ＬＰ（ループアドレス）および読み出し速度が指定される。
【００２１】
本実施形態では、１周期の波形データを繰り返し読み出す為、繰り返し点となるループ点ＬＰが開始点ＳＰに一致する。波形の読み出し速度は、１サンプリング周期における読み出しアドレスの増加幅により表される。
【００２２】
１発音当たり２つマスターオシレータＯＳＣ１およびスレーブオシレータＯＳＣ２を用いてオシレータシンク機能を具現する場合、マスターオシレータＯＳＣ１は通常の波形読み出し動作を行う。スレーブオシレータＯＳＣ２の開始点ＳＰおよびループ点ＬＰは波形の先頭になるが、終了点ＥＰはマスターオシレータＯＳＣ１のピッチ（より詳しくは波形読み出し周期）に応じて変化する。これについて図４を参照して説明する。
【００２３】
図４（ａ）、（ｂ）は、マスターオシレータＯＳＣ１のピッチがスレーブオシレータＯＳＣ２より高い（又は低い）場合の読み出し動作を図示している。オシレータシンク機能を具現する場合、スレーブオシレータＯＳＣ２は常にマスターオシレータＯＳＣ１と同じ周期で先頭アドレスに戻る。
【００２４】
この為、マスターオシレータＯＳＣ１が１周期分の波形データを読み出し終える時点が、スレーブオシレータＯＳＣ２の終了点ＥＰとなる。つまり、マスターオシレータＯＳＣ１のピッチがスレーブオシレータＯＳＣ２より高ければ、スレーブオシレータＯＳＣ２が１周期分の波形データを読み出す前に終了点ＥＰとなり、一方、マスターオシレータＯＳＣ１のピッチがスレーブオシレータＯＳＣ２より低ければ、スレーブオシレータＯＳＣ２が１周期分以上の波形データを読み出した時点で終了点ＥＰとなる。
【００２５】
Ｂ．動作
次に、図５〜図９を参照して、ＣＰＵ１３を動作主体とする発音処理および周期処理の各動作について説明する。発音処理は押鍵イベントに応じて実行され、ピッチ計算処理、アドレス計算処理、ハードウェアピッチ／アドレス制御処理を備える。周期処理はタイマ割り込みにより一定周期（例えば１ｍｓｅｃ毎）に実行され、発音処理と同様、ピッチ計算処理、アドレス計算処理、ハードウェアピッチ／アドレス制御処理を備える。
【００２６】
（１）発音処理の動作
図５は、発音処理の動作を示すフローチャートである。押鍵イベントに応じて本処理が実行されると、図５に図示するステップＳＡ１を介してピッチ計算処理を実行する。ピッチ計算処理では、後述するように、マスターオシレータＯＳＣ１およびスレーブオシレータＯＳＣ２のそれぞれについて、発音すべき音高に応じた波形読み出し速度（１サンプリング周期当たりのアドレス増加分ＩＮＣ［ｎ］）を算出する。
【００２７】
続いて、ステップＳＡ２では、アドレス計算処理を実行する。アドレス計算処理では、後述するように、オシレータＯＳＣ［０］がマスターオシレータＯＳＣ１、オシレータＯＳＣ［１］がスレーブオシレータＯＳＣ２に割り当てられている場合には、オシレータＯＳＣ［０］が読み出す波形データの先頭アドレス、ループアドレスおよびエンドアドレスを、それぞれレジスタＳＡＤＲ［０］、レジスタＬＡＤＲ［０］、レジスタＥＡＤＲにセットすると共に、オシレータＯＳＣ［１］が読み出す波形データの先頭アドレスおよびループアドレスを、それぞれレジスタＳＡＤＲ［１］、レジスタＬＡＤＲ［１］にセットする。
【００２８】
そして、オシレータシンク機能を使用する場合には、オシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）のエンドアドレス（レジスタＥＡＤＲ［１］）を、オシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）の波形読み出し周期に合致させるように変更する。こうすることでオシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）は、常にオシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）と同じ周期で先頭アドレスに戻る。
【００２９】
次いで、ステップＳＡ３では、ハードウェアピッチ／アドレス制御処理を実行する。ハードウェアピッチ／アドレス制御処理では、後述するように、音源１７のオシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）およびオシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）のそれぞれに、上述のピッチ計算処理で得られた読み出し速度（１サンプリング周期当たりのアドレス増加分ＩＮＣ）と、上述のアドレス計算処理で得られた先頭アドレス、ループアドレス、エンドアドレスを供給する。
【００３０】
そして、ステップＳＡ４に進み、音源１７のオシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）およびオシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）に波形読み出しを開始させる。
【００３１】
以上のように、発音処理では、オシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）が常にオシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）と同じ周期で先頭アドレスに戻るようにする為、スレーブオシレータＯＳＣ２のエンドアドレス（レジスタＥＡＤＲ［１］）を、マスターオシレータＯＳＣ１の波形読み出し周期に合致するよう制御する。
【００３２】
（２）ピッチ計算処理の動作
図６は、ピッチ計算処理の動作を示すフローチャートである。上述した発音処理のステップＳＡ１（図５参照）を介して本処理が実行されると、図６に図示するステップＳＢ１に進む。ステップＳＢ１では、押鍵された鍵のキーナンバをレジスタＫＹＮに、現在のＬＦＯ波高値をレジスタＣＬＦに、ピッチベンド幅設定値をレジスタＰＢＲに、現在のピッチベンド値をレジスタＣＰＢにそれぞれストアする。
【００３３】
続いて、ステップＳＢ２では、オシレータ番号ｎをゼロリセットする。なお、オシレータ番号ｎの値は「０」又は「１」となり、「０」の場合にはマスターオシレータＯＳＣ１用の配列要素を指定し、「１」の場合にはスレーブオシレータＯＳＣ２用の配列要素を指定する。
【００３４】
次いで、ステップＳＢ３では、オシレータ番号ｎで指定されるオシレータＯＳＣ［ｎ］のＬＦＯの掛かり具合をレジスタＬＦＤ［ｎ］に、オシレータ番号ｎで指定されるオシレータＯＳＣ［ｎ］のチューニング値をレジスタＴＵＮ［ｎ］にストアした後、次式（１）に基づきオシレータ番号ｎで指定されるオシレータＯＳＣ［ｎ］に指示する最終的なピッチＯＰ［ｎ］を算出する。
ＯＰ［ｎ］←ＫＹＮ＋（ＣＰＢ×ＰＢＲ）＋（ＣＬＦ×ＬＦＤ［ｎ］）＋ＴＵＮ［ｎ］…（１）
【００３５】
続いて、ステップＳＢ４では、上記ステップＳＢ３で得られたピッチＯＰ［ｎ］を次式（２）に従って平均律の周波数ＦＲＱ［ｎ］に変換する。
ＦＲＱ［ｎ］←ＭＴＮ×２＾（（ＯＰ［ｎ］−６９．０）／１２）…（２）
なお、上記（２）式において、ＭＴＮは基準音高であるＡ４音（周波数４４０Ｈｚ）をチューニングした周波数（４２０〜４６０Ｈｚ）を表す。また、「６９．０」は、基準音高（Ａ４音）のＭＩＤＩキーナンバーを表す。
【００３６】
さらに、ステップＳＢ４では、オシレータ番号ｎで指定されるオシレータＯＳＣ［ｎ］の読み出し波形の１波長分のサンプル数をレジスタＷＬ［ｎ］にストアする。そして、次式（３）に基づきレジスタＷＬ［ｎ］にストアされた読み出し波形の１波長分のサンプル数（波形データの数）と、変換された周波数ＦＲＱ［ｎ］とから波形読み出し速度を表す１サンプリング周期当たりのアドレス増加分ＩＮＣ［ｎ］を算出する。
ＩＮＣ［ｎ］←ＷＬ［ｎ］×（ＦＲＱ［ｎ］／Ｆｓ）…（３）
なお、上記（３）式において、Ｆｓは波形メモリ１７３に記憶される波形データのサンプリング周波数を表す
【００３７】
次いで、ステップＳＢ５では、オシレータ番号ｎをインクリメントして歩進させ、続くステップＳＢ６では、歩進されたオシレータ番号ｎが「１」より大きいか否かを判断する。歩進されたオシレータ番号ｎが「１」ならば、判断結果は「ＮＯ」になり、上述したステップＳＢ３に進み、オシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）の最終的なピッチＯＰ［ｎ］を平均律の周波数ＦＲＱ［ｎ］に変換し、変換された周波数ＦＲＱ［ｎ］とから波形読み出し速度を表す１サンプリング周期当たりのアドレス増加分ＩＮＣ［ｎ］を算出する。そして、ステップＳＢ５において歩進されたオシレータ番号ｎが「２」になると、上記ステップＳＢ６の判断結果が「ＹＥＳ」になり、本処理を終える。
【００３８】
このように、ピッチ計算処理では、マスターオシレータＯＳＣ１およびスレーブオシレータＯＳＣ２のそれぞれについて、最終的なピッチＯＰ［ｎ］に応じた波形読み出し速度（１サンプリング周期当たりのアドレス増加分ＩＮＣ［ｎ］）を算出する。
【００３９】
（３）アドレス計算処理の動作
図７は、アドレス計算処理の動作を示すフローチャートである。本処理では、オシレータＯＳＣ［０］がマスターオシレータＯＳＣ１、オシレータＯＳＣ［１］がスレーブオシレータＯＳＣ２に割り当てられているものとする。前述した発音処理のステップＳＡ２（図５参照）を介して本処理が実行されると、図７に図示するステップＳＣ１に進み、オシレータＯＳＣ［０］が読み出す波形データの先頭アドレス、ループアドレスおよびエンドアドレスを、それぞれレジスタＳＡＤＲ［０］、レジスタＬＡＤＲ［０］、レジスタＥＡＤＲにセットする。
【００４０】
次いで、ステップＳＣ２では、オシレータＯＳＣ［１］が読み出す波形データの先頭アドレスおよびループアドレスを、それぞれレジスタＳＡＤＲ［１］、レジスタＬＡＤＲ［１］にセットする。
【００４１】
続いて、ステップＳＣ３では、オシレータシンクスイッチがオン設定されているか否かを判断する。オシレータシンクスイッチがオン設定されている場合には、判断結果が「ＹＥＳ」になり、ステップＳＣ４に進み、オシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）のエンドアドレスを、オシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）の波形読み出し周期に合致させるように制御する。
【００４２】
すなわち、ＷＬ［０］／ＩＮＣ［０］＝ＷＬ［１］／ＩＮＣ［１］の関係を成立させる為、次式（４）によりスレーブオシレータＯＳＣ２が読み出すべき波形データの数ＷＬ［１］（図４に図示した読み出し波形の長さに相当）を算出する。
ＷＬ［１］←ＷＬ［０］×ＩＮＣ［１］／ＩＮＣ［０］…（４）
【００４３】
そして、次式（５）に表すように、算出したＷＬ［１］をレジスタＳＡＤＲ［１］（先頭アドレス）に加算して得たオシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）のエンドアドレスをレジスタＥＡＤＲ［１］にセットして本処理を終える。
ＥＡＤＲ［１］←ＳＡＤＲ［１］＋ＷＬ［１］…（５）
【００４４】
一方、オシレータシンクスイッチがオン設定されておらず、オシレータシンク機能を使用しない場合には、上記ステップＳＣ３の判断結果が「ＮＯ」になり、ステップＳＣ５に進み、オシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）のエンドアドレスをレジスタＥＡＤＲ［１］にセットして本処理を終える。
【００４５】
このように、アドレス計算処理では、オシレータＯＳＣ［０］がマスターオシレータＯＳＣ１、オシレータＯＳＣ［１］がスレーブオシレータＯＳＣ２に割り当てられている場合には、オシレータＯＳＣ［０］が読み出す波形データの先頭アドレス、ループアドレスおよびエンドアドレスを、それぞれレジスタＳＡＤＲ［０］、レジスタＬＡＤＲ［０］、レジスタＥＡＤＲにセットすると共に、オシレータＯＳＣ［１］が読み出す波形データの先頭アドレスおよびループアドレスを、それぞれレジスタＳＡＤＲ［１］、レジスタＬＡＤＲ［１］にセットする。そして、オシレータシンク機能を使用する場合には、オシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）のエンドアドレス（レジスタＥＡＤＲ［１］）を、オシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）の波形読み出し周期に合致させるよう制御する。
【００４６】
（４）ハードウェアピッチ／アドレス制御処理
図８は、ハードウェアピッチ／アドレス制御処理の動作を示すフローチャートである。前述した発音処理のステップＳＡ３（図５参照）を介して本処理が実行されると、図８に図示するステップＳＤ１に進み、オシレータ番号ｎをゼロリセットする。続いて、ステップＳＤ２では、波形読み出し速度を表す１サンプリング周期当たりのアドレス増加分ＩＮＣ［ｎ］を、オシレータ番号ｎで指定されるオシレータＯＳＣ［ｎ］のピッチレジスタにストアする。
【００４７】
また、ステップＳＤ２では、レジスタＳＡＤＲ［ｎ］に格納される先頭アドレスを、オシレータ番号ｎで指定されるオシレータＯＳＣ［ｎ］のスタートアドレスレジスタにストアする。レジスタＬＡＤＲ［ｎ］に格納されるループアドレスを、オシレータ番号ｎで指定されるオシレータＯＳＣ［ｎ］のループアドレスレジスタにストアする。レジスタＥＡＤＲ［ｎ］に格納されるエンドアドレスを、オシレータ番号ｎで指定されるオシレータＯＳＣ［ｎ］のエンドアドレスレジスタにストアする。
【００４８】
続いて、ステップＳＤ３では、オシレータ番号ｎをインクリメントして歩進させ、続くステップＳＤ４では、歩進されたオシレータ番号ｎが「１」を超えたかどうかを判断する。歩進されたオシレータ番号ｎが「１」を超えていなければ、上記ステップＳＤ２に処理を戻し、音源１７のオシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）に、波形読み出し速度を表す１サンプリング周期当たりのアドレス増加分ＩＮＣ［１］、レジスタＳＡＤＲ［１］の先頭アドレス、レジスタＬＡＤＲ［１］のループアドレスおよびレジスタＥＡＤＲ［１］のエンドアドレスを供給する。そして、歩進されたオシレータ番号ｎが「１」を超えると、ステップＳＤ４の判断結果が「ＹＥＳ」になり、本処理を終える。
【００４９】
このように、ハードウェアピッチ／アドレス制御処理では、音源１７のオシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）およびオシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）のそれぞれに、発音音高に対応した読み出し速度（１サンプリング周期当たりのアドレス増加分ＩＮＣ［１］）、読み出すべき波形データの先頭アドレス、ループアドレス、エンドアドレスを供給する。これにより、音源１７では、オシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）およびオシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）が与えられたパラメータに従い、ピッチ変化と音色変化とが同時に得られるオシレータシンクロナイズ効果を備えた楽音を形成する。
【００５０】
（５）周期処理の動作
図９は、周期処理の動作を示すフローチャートである。本処理はタイマ割り込みにより一定周期（例えば１ｍｓｅｃ毎）に実行される。実行タイミングになると、図９に図示するステップＳＥ１を介して図６に図示するピッチ計算処理を実行する。ピッチ計算処理では、前述したように、マスターオシレータＯＳＣ１およびスレーブオシレータＯＳＣ２のそれぞれについて、発音すべき音高に応じた波形読み出し速度（１サンプリング周期当たりのアドレス増加分ＩＮＣ［ｎ］）を算出する。
【００５１】
続いて、ステップＳＥ２を介して図７に図示するアドレス計算処理を実行する。アドレス計算処理では、前述したように、オシレータＯＳＣ［０］がマスターオシレータＯＳＣ１、オシレータＯＳＣ［１］がスレーブオシレータＯＳＣ２に割り当てられている場合には、オシレータＯＳＣ［０］が読み出す波形データの先頭アドレス、ループアドレスおよびエンドアドレスを、それぞれレジスタＳＡＤＲ［０］、レジスタＬＡＤＲ［０］、レジスタＥＡＤＲにセットすると共に、オシレータＯＳＣ［１］が読み出す波形データの先頭アドレスおよびループアドレスを、それぞれレジスタＳＡＤＲ［１］、レジスタＬＡＤＲ［１］にセットする。
【００５２】
そして、オシレータシンク機能を使用する場合には、オシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）のエンドアドレス（レジスタＥＡＤＲ［１］）を、オシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）の波形読み出し周期に合致させるように変更する。こうすることでオシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）は、常にオシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）と同じ周期で先頭アドレスに戻る。
【００５３】
次いで、ステップＳＥ３を介して図８に図示したハードウェアピッチ／アドレス制御処理を実行する。ハードウェアピッチ／アドレス制御処理では、前述したように、音源１７のオシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）およびオシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）のそれぞれに、上記ステップＳＥ１で得られた読み出し速度（１サンプリング周期当たりのアドレス増加分ＩＮＣ）と、上記ステップＳＥ２で得られた先頭アドレス、ループアドレス、エンドアドレスを供給して本処理を終える。
【００５４】
これにより、音源１７では、オシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）およびオシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）が与えられたパラメータに従い、ピッチ変化と音色変化とが同時に得られるオシレータシンクロナイズ効果を備えた楽音を形成する。
【００５５】
以上説明したように、本実施形態では、波形データ読み出し方式で構成される２組のマスターオシレータＯＳＣ１およびスレーブオシレータＯＳＣ２を用い、スレーブオシレータＯＳＣ２のエンドアドレス（レジスタＥＡＤＲ［１］）を、マスターオシレータＯＳＣ１の波形読み出し周期に合致するよう制御する為、オシレータＯＳＣ［１］（スレーブオシレータＯＳＣ２）が常にオシレータＯＳＣ［０］（マスターオシレータＯＳＣ１）と同じ周期で先頭アドレスに戻るオシレータシンク機能が実現する。この結果、製品コスト高を招致せずに波形データ読み出し方式でオシレータシンクロナイズ効果を具現することができる。
【００５６】
以上、本発明の実施の一形態について説明したが、本発明はそれに限定されるものではなく、本願出願の特許請求の範囲に記載された発明とその均等の範囲に含まれる。以下では、本願出願当初の特許請求の範囲に記載された各発明について付記する。
【００５７】
（付記）
［請求項１］
１周期分のマスター波形及びスレーブ波形を記憶するメモリと、
このメモリから１周期分のマスター波形を繰り返し読み出す第１の波形読出手段と、
前記第１の波形読出手段が前記１周期分のマスター波形を最初から最後まで読み出すまでの間に前記メモリから１周期分のスレーブ波形を最初から繰り返し読み出す動作を行うとともに、当該動作を前記１周期分のマスター波形の読み出しを開始する毎に繰り返して実行する第２の波形読出手段と、
を具備することを特徴とする波形発生装置。
【００５８】
［請求項２］
前記第２の波形読出手段がスレーブ波形を読み出す際の第２の波形読み出し速度と、前記第１の波形読出手段がマスター波形を発生する際の第１の波形読み出し速度との比率に応じて、前記１周期分のマスター波形の読出し終了時点における前記スレーブ波形の読み出し位置を制御することを特徴とする請求項１記載の波形発生装置。
【００５９】
［請求項３］
１周期分のマスター波形及びスレーブ波形を記憶するメモリを有するコンピュータに、
このメモリから１周期分のマスター波形を繰り返し読み出す第１の波形読出ステップと、
前記１周期分のマスター波形を最初から最後まで読み出すまでの間に前記メモリから１周期分のスレーブ波形を最初から繰り返し読み出す動作を行うとともに、当該動作を前記１周期分のマスター波形の読み出しを開始する毎に繰り返して実行する第２の波形発生ステップと、
を実行させることを特徴とするプログラム。
【００６０】
［請求項４］
前記第２の波形読出ステップがスレーブ波形を読み出す際の第２の波形読み出し速度と、前記第１の波形読出ステップがマスター波形を読み出す際の第１の波形読み出し速度との比率に応じて、前記１周期分のマスター波形の読出し終了時点における前記スレーブ波形の読み出し位置を制御することを特徴とする請求項３記載のプログラム。
【符号の説明】
【００６１】
１０  鍵盤
１１  スイッチ部
１２  ピッチベンダ
１３  ＣＰＵ
１４  表示部
１５  ＲＯＭ
１６  ＲＡＭ
１７  音源
１８  Ｄ／Ａ変換器
１９  サウンドシステム
１００  電子楽器
【図１】
0005995054.tif 000002
【図２】
0005995054.tif 000003
【図３】
0005995054.tif 000004
【図４】
0005995054.tif 000005
【図５】
0005995054.tif 000006
【図６】
0005995054.tif 000007
【図７】
0005995054.tif 000008
【図８】
0005995054.tif 000009
【図９】
0005995054.tif 000010