(57)【特許請求の範囲】
【請求項１】
発音させるべき楽音の波形データを記憶する波形記憶手段と、
前記波形記憶手段から波形データを読み出すためのアドレスを生成するためのアドレス生成情報及びマスターチャンネルを判別する判別情報をチャンネル別に記憶した生成用情報記憶手段と、
この生成用情報記憶手段から、チャンネル毎に順次時分割でアドレス生成情報及び判別情報を読み出す読み出し手段と、
この読み出された判別情報により、前記読み出し手段により読み出されたアドレス生成情報がマスターチャンネルに対応するものか、あるいは当該マスターチャンネルと判別されたチャンネルをマスターとして指定するスレーブチャンネルに対応するものかを判別する判別手段と、
前記読み出されたアドレス生成情報に基づいて前記波形記憶手段から波形データを読み出すためのアドレス情報を生成するアドレス生成手段と、
前記マスターチャンネルのループ開始か否かを示すデータを記憶するループ開始記憶手段と、
前記判別手段によりマスターチャンネルに対応するものと判別される毎に、前記アドレス生成手段にて生成されたアドレスに基づき、ループ開始か否かを検出するとともに、この判別結果に基づいて前記ループ開始記憶手段の記憶内容を更新するループ検出手段と、
前記ループ検出手段によりループ開始が検出されるに応答して、前記マスターチャンネルのアドレスをループ開始アドレスに変更するように前記アドレス生成手段を制御するとともに、前記判別手段によりスレーブチャンネルに対応するものと判別される毎に前記ループ開始記憶手段の記憶内容を参照し、前記記憶内容がループ開始を示すデータである場合は、当該スレーブチャンネルのアドレスをループ開始アドレスに変更するように前記アドレス生成手段を制御するアドレス制御手段と、
前記アドレス生成手段にて生成されたアドレスに基づいて前記波形データ記憶手段から波形データを読み出す波形読み出し手段と、
を具備したことを特徴とする楽音発生装置。
【請求項２】
前記判別情報は、マスターチャンネルを表わすマスターチャンネル情報からなり、
前記判別手段は、前記読み出されたアドレス生成情報に対応するチャンネルと前記マスターチャンネル情報により表わされたチャンネルとを比較する比較手段を有することを特徴とする請求項１記載の楽音発生装置。
【請求項３】
前記アドレス生成情報は、所定周期毎に進めるアドレスの値、前記発音させるべき楽音の波形データの先頭位置を表わすアドレス、当該波形データの最後の位置を表わすアドレス値及び再生を繰り返す開始位置を表わすアドレスから成ることを特徴とする請求項１記載の楽音発生装置。
【請求項４】
発音させるべき楽音の波形データを記憶する波形記憶手段と、
前記波形記憶手段から波形データを読み出すためのアドレスを生成するためのアドレス生成情報及びマスターチャネルか否か識別する識別情報をチャンネル別に記憶した生成用情報記憶手段と、
この生成用情報記憶手段から、チャンネル毎に順次時分割でアドレス生成情報及び識別情報を読み出す読み出し手段と、
この読み出された識別情報により、前記読み出し手段により読み出されたアドレス生成情報がマスターチャンネルに対応するものか、あるいはスレーブチャンネルに対応するものかを判別する判別手段と、
前記読み出されたアドレス生成情報に基づいて前記波形記憶手段から波形データを読み出すためのアドレス情報を生成するアドレス生成手段と、
前記マスターチャンネルのループ開始か否かを示すデータを記憶するループ開始記憶手段と、
前記判別手段によりマスターチャンネルに対応するものと判別される毎に、前記アドレス生成手段にて生成されたアドレスに基づき、ループ開始か否かを検出するとともに、この判別結果に基づいて前記ループ開始記憶手段の記憶内容を更新するループ検出手段と、
前記ループ検出手段によりループ開始が検出されるに応答して、前記マスターチャンネルのアドレスをループ開始アドレスに変更するように前記アドレス生成手段を制御するとともに、前記判別手段によりスレーブチャンネルに対応するものと判別される毎に前記ループ開始記憶手段の記憶内容を参照し、前記記憶内容がループ開始を示すデータである場合は、当該スレーブチャンネルのアドレスをループ開始アドレスに変更するように前記アドレス生成手段を制御するアドレス制御手段と、
前記アドレス生成手段にて生成されたアドレスに基づいて前記波形データ記憶手段から波形データを読み出す波形読み出し手段と、
を具備したことを特徴とする楽音発生装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、メモリ等に格納された生成用の波形データを読み出して発音させるべき楽音（音声）の波形データを生成するための技術に関する。
【０００２】
【従来の技術および発明が解決しようとする課題】
現在、楽音発生装置の多くは、楽器の音をサンプリングして得られたデジタルデータ（波形データ）をメモリに格納しておき、そのメモリから任意のタイミングで波形データを読み出すことにより、発音させるべき楽音の波形データを生成するようになっている。この方法では、波形データを読み出す速さによって楽音の音高を制御することができることから、データ量を抑えられるという利点がある。。
【０００３】
楽器の音の多くは、ドラム音などの減衰音ではなく、持続音である。その持続音を全てサンプリングすると、当然のことながら、データ量が膨大となる。このことから、普通、楽音発生装置は、波形データ全体のなかで繰り返し再生する２つのポイント（スタートポイント、及びエンドポイント）を定め、それらの間の波形データを繰り返し再生することにより、持続音をつくりだすようになっている。
【０００４】
そのようなループ機能を搭載した楽音発生装置のなかには、発音させる楽音を装飾させるといったことのために、チャンネル間で波形データのループを同期させる機能（以降、便宜的にループ同期機能と呼ぶ）を更に搭載されたものがある。その機能によるループの同期は、普通、マスターチャンネルでの波形データのループに合わせて、それのスレーブチャンネルの波形データをループさせることで行われる。
【０００５】
従来の楽音発生装置は、そのループ同期機能をソフトウェアの実行によって実現させていた。しかし、その機能を実現させるためには、各チャンネルで波形データ全体のなかで再生を行っているポイントを管理するだけでなく、マスターチャンネルでのループに合わせて、それのスレーブチャンネルにおけるポイントを変更するといった煩雑な処理も行わなければならない。このため、そのソフトウェアの実行時の負荷が重いという問題点があった。
【０００６】
全てのチャンネルに対する処理は、当然のことながら、１サンプリング期間内に終了させなければならない。そのような時間的制約があることから、上記問題点は、処理可能なチャンネル数の減少、即ち同時発音可能な楽音数の減少といった形で表面化することになる。
【０００７】
本発明の課題は、チャンネル間における波形データのループの同期をより容易に行えるようにすることにある。
【０００８】
【課題を解決するための手段】
本発明の楽音発生装置は、発音させるべき楽音の波形データを記憶する波形記憶手段と、前記波形記憶手段から波形データを読み出すためのアドレスを生成するためのアドレス生成情報及びマスターチャンネルを判別する判別情報をチャンネル別に記憶した生成用情報記憶手段と、この生成用情報記憶手段から、チャンネル毎に順次時分割でアドレス生成情報及び判別情報を読み出す読み出し手段と、この読み出された判別情報により、前記読み出し手段により読み出されたアドレス生成情報がマスターチャンネルに対応するものか、あるいは当該マスターチャンネルと判別されたチャンネルをマスターとして指定するスレーブチャンネルに対応するものかを判別する判別手段と、前記読み出されたアドレス生成情報に基づいて前記波形記憶手段から波形データを読み出すためのアドレス情報を生成するアドレス生成手段と、前記マスターチャンネルのループ開始か否かを示すデータを記憶するループ開始記憶手段と、前記判別手段によりマスターチャンネルに対応するものと判別される毎に、前記アドレス生成手段にて生成されたアドレスに基づき、ループ開始か否かを検出するとともに、この判別結果に基づいて前記ループ開始記憶手段の記憶内容を更新するループ検出手段と、前記ループ検出手段によりループ開始が検出されるに応答して、前記マスターチャンネルのアドレスをループ開始アドレスに変更するように前記アドレス生成手段を制御するとともに、前記判別手段によりスレーブチャンネルに対応するものと判別されたる毎に前記ループ開始記憶手段の記憶内容を参照し、前記記憶内容がループ開始を示すデータである場合は、当該スレーブチャンネルのアドレスをループ開始アドレスに変更するように前記アドレス生成手段を制御するアドレス制御手段と、前記アドレス生成手段にて生成されたアドレスに基づいて前記波形データ記憶手段から波形データを読み出す波形読み出し手段と、を具備する。
【０００９】
なお、上記構成において、前記判別情報は、マスターチャンネルを表わすマスターチャンネル情報からなり、前記判別手段は、前記読み出されたアドレス生成情報に対応するチャンネルと前記マスターチャンネル情報により表わされたチャンネルとを比較する比較手段を有することが望ましい。
また、前記判別情報は、マスターチャネルか否か識別する識別情報からなる
ことが望ましい。
さらには、前記アドレス生成情報は、所定周期毎に進めるアドレスの値、前記発音させるべき楽音の波形データの先頭位置を表わすアドレス、当該波形データの最後の位置を表わすアドレス値及び再生を繰り返す開始位置を表わすアドレスから成ることが望ましい。
また、本発明の楽音発生装置は、発音させるべき楽音の波形データを記憶する波形記憶手段と、前記波形記憶手段から波形データを読み出すためのアドレスを生成するためのアドレス生成情報及びマスターチャネルか否か識別する識別情報をチャンネル別に記憶した生成用情報記憶手段と、この生成用情報記憶手段から、チャンネル毎に順次時分割でアドレス生成情報及び識別情報を読み出す読み出し手段と、この読み出された識別情報により、前記読み出し手段により読み出されたアドレス生成情報がマスターチャンネルに対応するものか、あるいはスレーブチャンネルに対応するものかを判別する判別手段と、前記読み出されたアドレス生成情報に基づいて前記波形記憶手段から波形データを読み出すためのアドレス情報を生成するアドレス生成手段と、前記マスターチャンネルのループ開始か否かを示すデータを記憶するループ開始記憶手段と、前記判別手段によりマスターチャンネルに対応するものと判別される毎に、前記アドレス生成手段にて生成されたアドレスに基づき、ループ開始か否かを検出するとともに、この判別結果に基づいて前記ループ開始記憶手段の記憶内容を更新するループ検出手段と、前記ループ検出手段によりループ開始が検出されるに応答して、前記マスターチャンネルのアドレスをループ開始アドレスに変更するように前記アドレス生成手段を制御するとともに、前記判別手段によりスレーブチャンネルに対応するものと判別されたる毎に前記ループ開始記憶手段の記憶内容を参照し、前記記憶内容がループ開始を示すデータである場合は、当該スレーブチャンネルのアドレスをループ開始アドレスに変更するように前記アドレス生成手段を制御するアドレス制御手段と、前記アドレス生成手段にて生成されたアドレスに基づいて前記波形データ記憶手段から波形データを読み出す波形読み出し手段と、を具備したことを特徴とする。
【００１１】
本発明では、生成用波形データを読み出すアドレスを生成するアドレス生成部分と、それを管理・制御する制御部分とに分け、アドレスを生成するための演算等をアドレス生成部分に行わせる。その演算等は、ハードウェアのみで行わせることが可能である。このことから、ソフトウェアを実行する制御部分の負荷が軽減することになる。
【００１２】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
＜第１の実施の形態＞
図１は、第１の実施の形態による楽音発生装置を搭載した電子楽器の構成図である。
【００１３】
その電子楽器は、図１に示すように、楽器全体の制御を行うＣＰＵ１０１と、ＣＰＵ１０１がワーク用に用いるＲＡＭ１０２と、ＣＰＵ１０１が実行するプログラムや各種制御用データ等を格納したＲＯＭ１０３と、鍵盤や各種スイッチからなる操作子群１０４と、ＣＰＵ１０１の指示に従って発音させるべき楽音の波形データを生成する楽音発生装置１０５と、各種楽器の音をサンプリングして得られた波形データを格納したＲＯＭ１０６と、楽音発生装置１０５から入力した波形データをアナログのオーディオ信号に変換するＤＡコンバータ１０７と、そのオーディオ信号を音声に変換して出力する音響回路１０８と、を備えて構成されている。
【００１４】
以上の構成において、動作を説明する。
【００１５】
ＣＰＵ１０１は、電源が投入されると、ＲＯＭ１０３からプログラムを読み出して実行することにより、楽器全体の制御を開始する。その制御は、ＲＡＭ１０２をワーク用に使用しながら、操作子群１０４に対するユーザの操作に応じて行う。
【００１６】
操作子群１０４に対するユーザの操作は、例えばそれを走査し、その走査結果を解析することで検出する。ＣＰＵ１０１は、そのようにして解析した結果を基に、各種設定や楽音発生装置１０５に対する指示を行うことにより、ユーザが操作子群１０４を介して指定した内容に応じて電子楽器を動作させる。
【００１７】
図２は、上記楽音発生装置１０５の回路構成図である。
【００１８】
その楽音発生装置１０５は、図２に示すように、装置１０５全体の制御を行う制御信号発生部２０１と、各チャンネル（各チャンネルが１つの楽音に対応）毎にその波形データを生成していくためのデータを格納するＲＡＭ２０２と、ＲＯＭ１０６から波形データを読み出すアドレスを発生する波形読み取りアドレス発生部２０３と、そのアドレス発生部２０３が発生したアドレスによってＲＯＭ１０６から読み出された波形データを用いて、発音させるべき楽音の波形データを生成する波形生成部２０４と、ＲＡＭ２０２と各部２０１〜２０４との間のデータのやりとりを仲介するＲＡＭ  Ｉ／Ｆ（以降、Ｉ／Ｆと略す）２０５と、を備えて構成されている。
【００１９】
上記の構成において、楽音発生装置１０５の動作について説明する。ここでは、便宜的に、１チャンネル分の動作に注目して説明することにする。
【００２０】
ＣＰＵ１０１は、ユーザが押鍵を行う度に、その押鍵に応じて発音させるべき楽音のチャンネルを割り当て、楽音の発音を指示する識別子、チャンネル番号、及びその楽音の波形データを生成するために必要なデータを制御コマンドとして楽音発生装置１０５に送出する。
【００２１】
その制御コマンドは、Ｉ／Ｆ２０５を介して制御信号発生部２０１に送られる。そのＩ／Ｆ２０５は、その制御コマンドのなかで、例えば識別子、チャンネル番号、及びマスターチャンネル番号だけを制御信号発生部２０１に送る。それを受け取った制御信号発生部２０１は、チャンネル番号から特定されるアドレスをＩ／Ｆ２０５に出力して、制御コマンド中の残りのデータをＲＡＭ２０２に格納させる。
【００２２】
図４は、そのようにして楽音発生装置１０５内のＲＡＭ２０２に格納された内容を説明する図である。
【００２３】
本実施の形態では、３２チャンネルの発音を可能としている。そのため、図４に示すように、０〜３２チャンネルの楽音再生に関わるデータを格納できるようになっている。図中、３桁の１６進数で表現したアドレスは、上位２桁がチャンネルを表し、他の１桁がそのチャンネルに割り当てられた領域内のアドレスを表している。その領域は各１６アドレス分の記憶容量を有し、アドレス０００Ｂ〜００ＦＢが０チャンネル用で、アドレス１ＦＯＢ〜ＩＦＦＢが３１チャンネル用である。なお、各アドレスのビット数は、そこに格納されるデータに応じて決めたビット数である。
【００２４】
図４中のＡＤＣは、ＲＯＭ１０６から読み出すべき波形データのアドレスを示している。初期値、言い換えれば、制御コマンドとして送られてくるアドレスは、再生すべき波形データのなかで先頭に位置している波形データのアドレスである。同様に、ＡＤＥは、その波形データが格納されている最後のアドレス（エンドアドレス）、ＡＤＬは、波形データのなかで再生を繰り返す（ループ）開始位置となる波形データのアドレス（ループスタートアドレス）を各々示している。持続音は、アドレスＡＤＬ〜ＡＤＥの間の波形データを繰り返し再生することで行われる。
【００２５】
ＦＬＰは、そのループを行ったか否かを示すデータ（フラグ）であり、ループ時に１、そうでない時に０となる。当然のことながら、初期値は０である。ＥＳＴＰは、ループ時に、波形データを読み出すべきアドレスがエンドアドレスＡＤＥより越えた分の差を示すデータである。当然のことながら、その初期値は０である。ＭＣＨは、マスターチャンネルの番号を示すデータであり、このチャンネルの楽音は、そのマスターチャンネルの楽音のループに合わせてループさせることを指定している。自身がマスターチャンネルであれば、その値は自身のチャンネルの番号となる。ＦＲＮは、１サンプリング周期毎に進めるアドレスの値を示すデータ（歩進幅）である。
【００２６】
上記のようなデータが制御コマンド中に格納されて楽音発生装置１０５に送出される。制御信号発生部２０１は、それをチャンネルから特定された領域に、図４に示すように格納させる。それらのデータは、発音させている楽音の消音を指示する制御コマンドをＣＰＵ１０１から受け取った場合に、消去させる。それにより、その楽音を消音させる。なお、その制御コマンドは、例えばその旨を示す識別子、チャンネル番号が少なくとも格納されているものである。
【００２７】
ＲＡＭ２０２にチャンネル別に格納したデータは、そのチャンネルの処理期間時に読み出されて波形読み取りアドレス発生部２０３に送られる。制御信号発生部２０１は、Ｉ／Ｆ２０５に、ＲＡＭ２０２から対象とするチャンネルのデータが格納されたアドレス（の値）を順次出力する。Ｉ／Ｆ２０５は、それらのアドレスに格納されたデータをＲＡＭ２０２から読み出して波形読み取りアドレス発生器２０３に送出する。
【００２８】
波形読み取りアドレス発生器２０３は、そのようにしてＲＡＭ２０２からＩ／Ｆ２０５を介して送られたデータを対応するレジスタに格納しつつ、そのレジスタに格納されたデータを用いて各種演算を行い、ＲＯＭ１０６から波形データを読み出すべきアドレスを生成する。そのアドレスの生成に応じて更新したデータはＩ／Ｆ２０５に送出する。
【００２９】
制御信号発生部２０１は、その送出のタイミングに合わせて、Ｉ／Ｆ２０５にデータを格納させるアドレスを出力する。それにより、Ｉ／Ｆ２０５は、ＲＡＭ２０２内のデータの書き換え（更新）を行う。
【００３０】
波形読み取りアドレス発生部２０３は、１チャンネルで２つの隣り合うアドレス（の値）を順次ＲＯＭ１０６に出力する。それらのアドレスに格納された波形データをＲＯＭ１０６から読み出す。
【００３１】
波形生成部２０４は、ＲＯＭ１０６から読み出されたそれら波形データを入力すると、直線補間等を行うことによって発音させるべき楽音の波形データを生成する。その生成した波形データは、それまでに生成した他のチャンネルの波形データと加算する。それにより、全チャンネル分の波形データの生成が終了した後に、全チャンネル分の波形データを全て加算して得られる波形データを１／Ｆ２０５に出力する。その波形データが、Ｉ／Ｆ２０５を介して図１に示すＤＡコンバータ１０７に送出される。
【００３２】
制御信号発生部２０１は、上記各部２０３、及び２０４に対して、クロックや各種制御信号を出力することにより、それらの動作を制御する。その制御信号は、それらから入力した信号に応じて変化させる。それにより、各部２０３、及び２０４を状況に応じて動作させる。
【００３３】
図３は、上記波形読み取りアドレス発生部２０３の回路構成図である。次に、図３、及び図４〜図８に示す各種説明図を参照して、その構成、更には制御信号発生部２０１、及び波形読み取りアドレス発生部２０３の動作について詳細に説明する。
【００３４】
図３において、３０１〜３０３はＳＬ（セレクタ）、３０４〜３１３はＦ／Ｆ（フリップフロップ）、３１４は加減算器、３１５はコンパレータ（ＣＯＭＰＡＲＡＴＥＲ）、３１６はアドレスインクリメンタ（ＡＤＤＲＥＳＳ  ＩＮＣＲＥＭＥＮＴＥＲ）、ＲＩ、及びＲＯはデータバスである。
【００３５】
この図３中の文字列は、それぞれ、以下の内容を示している。
【００３６】
「Ｆ／Ｆ」の下側に位置している文字列はレジスタ名である。各Ｆ／Ｆ３０４〜３１３は、実際にはそれに格納させる内容のビット数のＦ／Ｆから構成されているレジスタである。しかし、ここでは、煩雑さを避けるために、Ｆ／Ｆとしている。それに保持されるデータと図４中に示すデータの対応関係を明確にするために、その図４中に示すデータの文字列を用いている。また、そのレジスタ名を示す文字列は、便宜的に、それの出力信号名としても用いる。その文字列の先頭に「ＣＫ」を付加した文字列は、その「ＣＫ」を付加した文字列に対応するＦ／Ｆ（レジスタ）に入力するクロック（制御信号）名である。
【００３７】
各ＳＬ３０１〜３０３の下方に位置している文字列は、それのセレクト信号名である。各ＳＬ３０１〜３０３の入力信号の上方に位置している数値は、それが選択されるときのセレクト信号の値を示している。例えばＳＬ３０２では、セレクト信号ＦＩＡＳの値が０のときにＦ／Ｆ３０４の出力信号が選択され、以下、同様に、その値が１のときにはＦ／Ｆ３０５の出力信号、その値が２のときにはＦ／Ｆ３０６の出力信号が選択されることを示している。加減算器３１４下の「ＦＳＵＢ」は、それが加減算のどちらを行うかを指示する制御信号であり、その値が０のときには加算、その値が１のときには減算が加減算器３１４で行われる。また、その値が２のときには、ＳＬ３０２の出力信号ＦＩＡをそのまま出力するようになっている。各部３０１〜３１５に入力するクロック、セレクト信号等を含む各種制御信号は、制御信号発生部２０１から出力される。
【００３８】
制御信号発生部２０１は、図５に示すように、チャンネル番号の小さい方から順次、チャンネル単位で波形データを生成する処理を行う。以降、マスターチャンネルがＭチャンネル、そのＭチャンネルをマスターチャンネルとするスレーブチャンネルがＮ、及びＫの２チャンネル（Ｋ＜Ｍ＜Ｎである）存在している場合を例にとって、各チャンネル別に、制御信号発生部２０１、及び波形読み取りアドレス発生部２０３（を構成する各部）の動作について詳細に説明する。
【００３９】
始めに、マスターチャンネルであるＭチャンネルの処理時における制御信号発生部２０１、及び波形読み取りアドレス発生部２０３を構成する各部の動作について、図６に示すタイミングチャートを参照しつつ説明する。
【００４０】
図６中に示すシステムクロックは、制御信号発生部２０１が波形読み取りアドレス発生部２０３を含む楽音発生装置１０５内の各部の制御用に生成されたクロックである。制御信号発生部２０１はそのクロックに同期して出力すべき制御信号を出力する。そのシステムクロックの下のサイクルは、１チャンネル分に割り当てられた処理時間をシステムクロックの１周期で分割して示した処理時間である。動作は、便宜的に、そのサイクルに着目して説明する。
【００４１】
なお、本実施の形態では、１チャンネル当たり０Ｈ〜ＦＨ（Ｈは１６進数表現を示す記号である）の１６サイクルを割り当てている。従って、１サンプリング周期は、５１２（＝１６×３２）システムクロックである。
【００４２】
処理チャンネルがＭチャンネルに移行すると、データバスＲＯには、ＲＡＭ２０２から読み出されたデータが、ＡＤＣ、ＦＲＮ（ＭＣＨを含む）、ＡＤＥ、そのマスターチャンネルのＦＬＰ（ＥＳＴＰを含む）、ＡＤＬの順序で順次、Ｉ／Ｆ２０５から出力される。
【００４３】
制御信号発生部２０１は、それらのデータの出力タイミングに合わせて、それを保持させるＦ／Ｆ（レジスタ）の制御信号をアクティブ（論理値が１のハイレベル。その期間は全て１／２サイクル期間である）にする。具体的には、サイクル０でセレクト信号の値を０にした後、サイクル１でクロックＣＫＡＤＣをアクティブにしてＦ／Ｆ３０４にデータＡＤＣを保持させ、サイクル２でクロックＣＫＦＲＮ、及びＣＫＭＣＨを共にアクティブにして、Ｆ／Ｆ３０９にデータＦＲＮ、Ｆ／Ｆ３１０にデータＭＣＨをそれぞれ保持させ、サイクル３でクロックＣＫＡＤＥをアクティブにしてＦ／Ｆ３０７にデータＡＤＥを保持させ、サイクル４でクロックＣＫＦＬＰＭ、及びＣＫＥＳＴＰＭを共にアクティブにして、Ｆ／Ｆ３１１にデータＦＬＰ、Ｆ／Ｆ３０６にデータＥＳＴＰ（ＦＬＰを含む）をそれぞれ保持させ（それらはマスターチャンネルのデータである）、サイクル５でクロックＣＫＡＤＬをアクティブにしてＦ／Ｆ３０８にデータＡＤＬを保持させる。それにより、各Ｆ／Ｆ３０４〜３１１に保持させるべきデータを保持させる。
【００４４】
上記サイクル４では、制御信号発生部２０１は、セレクト信号ＦＩＡＳの値を０、セレクト信号ＦＩＢＳの値を２、制御信号ＦＳＵＢの値を０にする。それにより、Ｆ／Ｆ３０９のデータＦＲＮにＦ／Ｆ３０４のデータＡＤＣを加える加算演算を加減算器３１４に行わせる。加減算器３１４は、その加算結果（＝ＦＲＮ＋ＡＤＣ）を出力ＦＯとして出力する。
【００４５】
そのサイクル４では、Ｆ／Ｆ３１０にデータＭＣＨが保持されてコンパレータ３１５に出力される。そのコンパレータ３１５には、制御信号発生部２０１から現処理チャンネルのマスターチャンネル番号ＣＨＣＹが出力されている。コンパレータ３１５は、それらが異なっている場合に、出力信号ＦＳＬＶの値を１にする。その出力信号ＦＳＬＶは制御信号発生部２０１に出力される。なお、Ｍチャンネルはマスターチャンネルであることから、ここでの出力信号ＦＳＬＶの値は０である。
【００４６】
その次のサイクル５では、制御信号発生部２０１は、セレクト信号ＡＤＣＩＳの値を１にし、クロックＣＫＡＤＣをアクティブにする。それにより、加減算器３１４の演算結果（＝ＦＲＮ＋ＡＤＣ）をＦ／Ｆ３０４に保持させる。その一方では、セレクト信号ＦＩＢＳの値を０、制御信号ＦＳＵＢの値を１にする。それにより、加減算器３１４に、Ｆ／Ｆ３０７のデータＡＤＥからＦ／Ｆ３０４のデータＡＤＣを減算させる演算を行わせる。加減算器３１４は、その減算結果（＝ＡＤＥ−ＡＤＣ）を出力ＦＯとして出力する。
【００４７】
サイクル６では、クロックＣＫＦＬＰ、及びＣＫＥＳＴＰを共にアクティブにする。それにより、加減算器３１４の演算結果（＝ＡＤＥ−ＡＤＣ）をＦ／Ｆ３１３、及び３０５に保持させる。
【００４８】
更新後の波形データの読み出しアドレスＡＤＣがエンドアドレスＡＤＥよりも大きいことは、ループさせるべき状況になったことを意味し、その演算結果は負の値となる。Ｆ／Ｆ３１３は１ビットであり、その演算結果の符号が入力されるようになっている。このため、その状況になったとき、Ｆ／Ｆ３１３が保持する値は１となる。Ｆ／Ｆ３１３の値は制御信号発生部２０１に出力される。なお、波形データの読み出しアドレスＡＤＣがエンドアドレスＡＤＥよりも大きくなった際の差分（＝ＡＤＣ−ＡＤＥ）については、以降、飛び越しステップとも呼ぶことにする。
【００４９】
その一方で制御信号発生部２０１は、セレクト信号ＦＩＡＳの値を１、セレクト信号ＦＩＢＳの値を１、制御信号ＦＳＵＢの値を１にする。それにより、Ｆ／Ｆ３０８のデータＡＤＬからＦ／Ｆ３０４のデータＥＳＴＰ（加減算器３１４の直前の演算結果）を減算させる演算を加減算器３１４に行わせる。加減算器３１４は、その減算結果（＝ＡＤＬ−ＥＳＴＰ）を出力ＦＯとして出力する。ループ時では、ＥＳＴＰ＜０であることから、実際にはデータＡＤＬにデータＥＳＴＰの絶対値を加算する演算が行われる。
【００５０】
その後のサイクル７では、クロックＣＫＡＤＣをアクティブにして、加減算器３１４の演算結果（＝ＡＤＬ−ＥＳＴＰ）をＥ／Ｆ３０４に保持させる。それに保持された更新後のデータＡＤＣがデータバスＲＩを介してＩ／Ｆ２０５に送られてＲＡＭ２０２に書き込まれる。その一方では、セレクト信号ＦＩＡＳの値を１のままで、制御信号ＦＳＵＢの値を２にする。それにより、Ｆ／Ｆ３０５に保持されたデータをそのまま加減算器３１４から出力させる。
【００５１】
サイクル８では、クロックＣＫＡＤＣをアクティブにする。それにより、Ｆ／Ｆ３０５が保持しているデータＥＳＴＰはＦ／Ｆ３０４、及びデータバスＲＩを介してＩ／Ｆ２０５に送られてＲＡＭ２０２に書き込まれる。それ以外では、クロックＣＫＡＤＯをアクティブにする。それにより、Ｆ／Ｆ３０４がデータＥＳＴＰの前に保持していたデータＡＤＣはＦ／Ｆ３１２に保持されてアドレスインクリメンタ３１６に送られる。その結果、アドレスインクリメンタ３１６は、アドレスＥＡＤＲとして、サイクル８からそのＦ／Ｆ３１２に保持されたデータＡＤＯ（ＡＤＣ）を出力し、次のチャンネルにおけるサイクル０でその値をインクリメントした値（＝ＡＤＯ＋１）を出力する。それにより、ＲＯＭ１０６から、アドレスの値が１つだけ異なる２つの波形データが読み出されて図２に示す波形生成部２０４に送られることになる。
【００５２】
図６に示すタイミングチャートでは、ループさせる場合の動作を示している。そのループをさせる状況でないときには、Ｆ／Ｆ３１３の値は０である。その値が０のときには、制御信号発生部２０１は、サイクル７でクロックＣＫＡＤＣをアクティブにしない。それにより、サイクル５で保持させたデータＡＤＣをサイクル８に移行するまでＦ／Ｆ３０４に保持させる。ループ時とそうでない時の動作上の違いは基本的にそれだけである。
【００５３】
次に、ＭチャンネルのスレーブチャンネルであるＮチャンネル処理時における制御信号発生部２０１、及び波形読み取りアドレス発生部２０３を構成する各部の動作について、図７に示すタイミングチャートを参照しつつ説明する。その図７は、Ｍチャンネルでループが起こった後のものである。
【００５４】
マスターチャンネルからスレーブチャンネルに処理対象が移行しても、基本的な動作は同じである。このため、上述したＭチャンネル時の動作から異なっている部分にのみ着目して説明することにする。
【００５５】
先ず、サイクル２では、クロックＣＫＭＣＨがアクティブになってＦ／Ｆ３１０にデータＭＣＨが保持される。それにより、コンパレータ３１５の出力信号ＦＳＬＶの値が１となって、Ｎチャンネルがスレーブチャンネルであることが制御信号発生部２０１に通知される。
【００５６】
サイクル４では、クロックＣＫＦＬＰＭ、及びＣＫＥＳＴＰＭが共にアクティブになって、Ｆ／Ｆ３１１にデータＦＬＰ、Ｆ／Ｆ３０６にデータＥＳＴＰがそれぞれ保持される（それらはＭチャンネルのデータである）。Ｆ／Ｆ３１１にデータＦＬＰが保持されることによって、Ｍチャンネルでループを行ったことが制御信号発生部２０１に通知される。
【００５７】
制御信号発生部２０１は、そのＦ／Ｆ３１１に保持された値を基に、サイクル６で出力するセレクト信号ＦＩＡＳの値を決定する。具体的にはその値が１であれば２にする。それにより、サイクル６では、加減算器３１４に、Ｆ／Ｆ３０８のデータＡＤＬからＦ／Ｆ３０６のデータＥＳＴＰＭを減算させる演算を行わせる。その結果、続くサイクル７でＦ／Ｆ３０４には、その演算結果（＝ＡＤＬ−ＥＳＴＰＭ）が保持されることになる。言い換えれば、Ｍチャンネルのループに合わせて、そのときのエンドアドレスＡＤＥからの超過分をＮチャンネルのデータＡＤＬに加算して得られる値がＦ／Ｆ３０４に保持されることになる。
【００５８】
Ｎチャンネル処理時には、上記した部分がＭチャンネル処理時から異なっている。なお、単にＮチャンネルでループを行うときには、制御信号発生部２０１はサイクル６で出力するセレクト信号ＦＩＡＳの値を１にするだけである。また、ループを行わないときには、Ｍチャンネル処理時と同様に、サイクル７でクロックＣＫＡＤＣをアクティブにしない。
【００５９】
図８は、ＭチャンネルのスレーブチャンネルであるＫチャンネル処理時における制御信号発生部２０１、及び波形読み取りアドレス発生部２０３の動作を示すタイミングチャートである。Ｍチャンネルでループさせた後に始めてＫチャンネルの処理を行った場合の動作を示している。その動作内容は、基本的にＮチャンネル処理時と同じなので、説明は省略する。
【００６０】
図９は、上述したようにしてＲＯＭ１０６から波形読み取りアドレス発生部２０３が読み出す波形データによって生成・発音される楽音波形を説明する図である。
【００６１】
図９（ａ）、及び（ｂ）に示すように、スレーブチャンネルの楽音（再生波形）の１周期がマスターチャンネルのそれよりも長いか短いかに関わらず、マスターチャンネルの楽音（再生波形）の周期に合わせて、スレーブチャンネルにおけるループが行われる。
【００６２】
そのようなチャンネル間でのループの同期は、制御信号発生部２０１が、上記のように各種制御信号を出力することにより、波形読み取りアドレス発生部２０３に、ＲＯＭ１０６から読み出すべき波形データのアドレスを生成させることで実現させている。制御信号発生部２０１自身が、各種演算等を行わなくて済むようになっている。そのように、波形データの生成するうえでの負荷を波形読み取りアドレス発生部２０３に分散させたため、発生部２０１自体の負荷を軽減させることができる。
【００６３】
なお、本実施の形態では、マスターチャンネルでループさせたときには、その際の飛び越しステップをスレーブチャンネルのループスタートアドレスＡＤＬに加算して、そのスレーブチャンネルでのループを行うようにしているが、必ずしもそうしなくて良い。例えば、マスターチャンネルでループさせると、そのスレーブチャンネルの次の読み出しアドレスをそれのループスタートアドレスＡＤＬとしても良い。
＜第２の実施の形態＞
上記第１の実施の形態では、波形データを生成していくうえでのデータを全てＲＡＭ２０２に格納している。これに対し、第２の実施の形態は、そのＲＡＭ２０２に格納するデータ量がより少なくてすむようにしたものである。
【００６４】
この第２の実施の形態による楽音発生装置の構成は、基本的には上記第１の実施の形態と同じである。このため、第１の実施の形態の説明に用いた符号をそのまま用いて、その第１の実施の形態から異なっている部分のみ説明する。
【００６５】
第２の実施の形態では、ＲＡＭ２０２に格納させるデータ量を低減させたことに合わせて、第１の実施の形態から波形読み取りアドレス発生部２０３の構成が変更されている。このことから、波形読み取りアドレス発生部２０３の構成、ＲＡＭ２０２に格納させる内容、及び制御信号発生部２０１と波形読み取りアドレス発生部２０３の動作についてのみ、説明する。
【００６６】
図１０は、第２の実施の形態による波形読み取りアドレス発生部２０３の回路構成図である。始めに、図１０を参照して、その波形読み取りアドレス発生部２０３の構成について説明する。
【００６７】
図１０に示すように、第２の実施の形態では、Ｆ／Ｆ３０６の前段にＳＬ（セレクタ）１００１を設けている。そのＳＬ１００１は、セレクト信号ＥＳＴＰＭＩＳの値に応じて、加減算器３１４の出力信号ＦＯ、及びＦ／Ｆ３０６の出力信号の何れかを選択してそのＦ／Ｆ３０６に出力するものである。
【００６８】
Ｆ／Ｆ３１０及び３１１、コンパレータ３１５は除かれている。その替わりにＦ／Ｆ１００３、１００４、及び、ＳＬ１００２が設けられている。Ｆ／Ｆ１００３は、データバスＲＯと接続されている。ＳＬ１００２は、セレクト信号ＦＬＰＭＩＳの値に応じて、加減算器３１４の出力信号ＦＯ、及びＦ／Ｆ１００４の出力信号の何れかを選択してそのＦ／Ｆ１００４に出力するものである。Ｆ／Ｆ１００３、及び１００４の出力信号は共に制御信号発生部２０１に出力されるようになっている。
【００６９】
図１１は、上記ＲＡＭ２０２に格納された内容を説明する図である。
【００７０】
図１１に示すように、第２の実施の形態では、データＦＬＰ、ＥＳＴＥＰ、及びＭＣＨの替わりに、データＦＳＬＶだけをＲＡＭ２０２に格納するようにしている。そのデータは、チャンネルがマスターチャンネルかスレーブチャンネルかを示すものであり、マスターチャンネルでは０、スレーブチャンネルでは１が設定される。そのデータＦＳＬＶもＣＰＵ１０１から制御コマンドとして送られてくるデータである。
【００７１】
第２の実施の形態においても、図１２に示すように、チャンネル番号の小さい方から順次、チャンネル単位で波形データを生成する処理を行う。以降、Ｎ〜（Ｎ＋３）の連続する４つのチャンネルの処理時における制御信号発生部２０１、及び波形読み取りアドレス発生部２０３（を構成する各部）の動作について、図１３〜図１６のタイミングチャートを参照しつつ、詳細に説明する。
【００７２】
Ｎ、及び（Ｎ＋３）チャンネルはマスターチャンネル、（Ｎ＋１）及び（Ｎ＋２）チャンネルはＮチャンネルをマスターチャンネルとするスレーブチャンネルである。それら各チャンネル処理時の動作は第１の実施の形態と似ているため、動作は、要点のみ説明することにする。
【００７３】
始めに、図１３を参照して、Ｎチャンネル処理時における制御信号発生部２０１、及び波形読み取りアドレス発生部２０３（を構成する各部）の動作について説明する。
【００７４】
処理チャンネルがＮチャンネルに移行すると、データバスＲＯには、ＲＡＭ２０２から読み出されたデータが、ＡＤＣ、ＦＲＮ（ＦＳＬＶを含む）、ＡＤＥ、ＡＤＬの順序で順次、Ｉ／Ｆ２０５から出力される。
【００７５】
制御信号発生部２０１は、それらのデータの出力タイミングに合わせて、それを保持させるＦ／Ｆ（レジスタ）の制御信号をアクティブにする。その際に、サイクル２では、クロックＣＫＦＳＬＶをアクティブにして、Ｆ／Ｆ１００３にデータＦＳＬＶを保持させる。制御信号発生部２０１は、そのようにしてＦ／Ｆ１００３が保持した値から、現在対象しているチャンネルがマスターチャンネルか否か判定する。
【００７６】
サイクル４では、セレクト信号ＦＬＰＭＩＳ、及びＥＳＴＰＭＩＳの値を０にする。続くサイクル５では、クロックＣＫＦＬＰＭ、及びＣＫＥＳＴＰをアクティブにする。それにより、Ｆ／Ｆ３０６、及び１００４に、加減算器３１４の出力信号ＦＯを保持させる。なお、Ｆ／Ｆ１００４が保持するのは、その出力信号ＦＯの符号の値である。
【００７７】
クロックＣＫＦＬＰＭをアクティブにすることにより、Ｆ／Ｆ１００４の値は１（ループさせる状況となったことを示す値である）となっている。このため、制御信号発生部２０１は、サイクル６でクロックＣＫＡＤＣをアクティブにしている。なお、このときには、Ｆ／Ｆ３１３の値も１である。
【００７８】
このようにして、マスターチャンネル処理時には、制御信号発生部２０１はＦ／Ｆ３０６及び１００４が保持する内容を更新する。その内容は、それのスレーブチャンネルの処理が終了するまで保持させる。それにより、ＲＡＭ２０２に格納するデータ量を低減させている。
【００７９】
もう一つのマスターチャンネルである（Ｎ＋３）チャンネルは、ループが行われなかったチャンネルである。このため、図１６に示すように、サイクル６でクロックＣＫＡＤＣをアクティブにしていない。Ｎチャンネル処理時との動作の違いは基本的にそれだけである。
【００８０】
次に、Ｎチャンネルのスレーブチャンネルである（Ｎ＋１）チャンネル処理時における制御信号発生部２０１、及び波形読み取りアドレス発生部２０３を構成する各部の動作について、図１４に示すタイミングチャートを参照しつつ説明する。
【００８１】
マスターチャンネルからスレーブチャンネルに処理対象が移行しても、基本的な動作は同じである。このため、更に、上述したＮチャンネル時の動作から異なっている部分にのみ着目して説明することにする。
【００８２】
サイクル４では、セレクト信号ＦＬＰＭＩＳ、及びＥＳＴＰＭＩＳの値を１にする。続くサイクル５では、クロックＣＫＦＬＰＭ、及びＣＫＥＳＴＰをアクティブにする。それにより、Ｆ／Ｆ３０６、及び１００４の内容をそのまま保持させる。
【００８３】
図１５は、Ｎチャンネルのスレーブチャンネルである（Ｎ＋２）チャンネル処理時における制御信号発生部２０１、及び波形読み取りアドレス発生部２０３の動作を示すタイミングチャートである。その動作内容は、基本的に（Ｎ＋１）チャンネル処理時と同じなので、説明は省略する。
【００８４】
第２の実施の形態では、このようにしてマスターチャンネル処理時のデータ（ＦＬＰ、ＥＳＴＰＭ）をＦ／Ｆ（レジスタ）３０６、及び１００４により保持するようにしている。それにより、ＲＡＭ２０２に格納させるデータ量を低減させている。また、第１の実施の形態と比較すると、コンパレータ３１５等を不要にすることによって、波形読み取りアドレス発生部２０３の回路規模をより小さくできるという効果もある。
【００８５】
なお、第２の実施の形態においても、マスターチャンネルでループさせたときには、その際の飛び越しステップをスレーブチャンネルのループスタートアドレスＡＤＬに加算して、そのスレーブチャンネルでのループを行うようにしているが、必ずしもそうしなくて良い。
【００８６】
また、本実施の形態（第１及び第２の実施の形態）では、チャンネル間のループの同期を行うことを前提としているが、それを前提としなくても良い。波形読み取りアドレス発生部２０３に、単に波形データを読み出すアドレスを生成させるようにしても良い。当然のことながら、それらを行えるようにしても良い。
【００８７】
【発明の効果】
以上、説明したように本発明は、生成用波形データを読み出すアドレスを生成するアドレス生成部分と、それを管理・制御する制御部分とに分け、アドレスを生成するための演算等をアドレス生成部分に行わせる。このため、ソフトウェアを実行する制御部分の負荷を軽減させることができる。
【図面の簡単な説明】
【図１】第１の実施の形態による楽音発生装置を搭載した電子楽器の構成図である。
【図２】楽音発生装置の回路構成図である。
【図３】波形読み取りアドレス発生部の回路構成図である。
【図４】楽音発生装置内のＲＡＭに格納された内容を説明する図である。
【図５】制御信号発生部、及び波形読み取りアドレス発生部の動作を示すタイミングチャートである。
【図６】Ｍチャンネル処理時における制御信号発生部、及び波形読み取りアドレス発生部の動作を示すタイミングチャートである。
【図７】Ｎチャンネル処理時における制御信号発生部、及び波形読み取りアドレス発生部の動作を示すタイミングチャートである。
【図８】Ｋチャンネル処理時における制御信号発生部、及び波形読み取りアドレス発生部の動作を示すタイミングチャートである。
【図９】波形読み取りアドレス発生部が読み出す波形データによって生成・発音される楽音波形を説明する図である。
【図１０】波形読み取りアドレス発生部の回路構成図である（第２の実施の形態）。
【図１１】楽音発生装置内のＲＡＭに格納された内容を説明する図である（第２の実施の形態）。
【図１２】制御信号発生部、及び波形読み取りアドレス発生部の動作を示すタイミングチャートである（第２の実施の形態）。
【図１３】Ｎチャンネル処理時における制御信号発生部、及び波形読み取りアドレス発生部の動作を示すタイミングチャートである（第２の実施の形態）。
【図１４】（Ｎ＋１）チャンネル処理時における制御信号発生部、及び波形読み取りアドレス発生部の動作を示すタイミングチャートである（第２の実施の形態）。
【図１５】（Ｎ＋２）チャンネル処理時における制御信号発生部、及び波形読み取りアドレス発生部の動作を示すタイミングチャートである（第２の実施の形態）。
【図１６】（Ｎ＋３）チャンネル処理時における制御信号発生部、及び波形読み取りアドレス発生部の動作を示すタイミングチャートである（第２の実施の形態）。
【符号の説明】
１０１    ＣＰＵ
１０２、２０２    ＲＡＭ
１０３、１０６    ＲＯＭ
１０５    楽音発生装置
１０７    ＤＡコンバータ
２０１    制御信号発生部
２０３    波形読み取りアドレス発生部
２０４    波形生成部
３０１〜３０３、１００１、１００２    セレクタ（ＳＬ）
３０４〜３１３、１００３、１００４    フリップフロップ（Ｆ／Ｆ）
３１４    加減算器
３１５    コンパレータ
３１６    アドレスインクリメンタ
【図１】
0004144090.tif 000002
【図２】
0004144090.tif 000003
【図３】
0004144090.tif 000004
【図４】
0004144090.tif 000005
【図５】
0004144090.tif 000006
【図６】
0004144090.tif 000007
【図７】
0004144090.tif 000008
【図８】
0004144090.tif 000009
【図９】
0004144090.tif 000010
【図１０】
0004144090.tif 000011
【図１１】
0004144090.tif 000012
【図１２】
0004144090.tif 000013
【図１３】
0004144090.tif 000014
【図１４】
0004144090.tif 000015
【図１５】
0004144090.tif 000016
【図１６】
0004144090.tif 000017