(57)【要約】【課題】波形サンプルの演算に伴う負荷が大となっても、再生曲の品質低下を抑える。【解決手段】ＲＡＭ３におけるＡＢＵＦに格納された波形サンプルの個数により、波形サンプルを生成する発音チャンネルの負荷状態の判断する。負荷が高いと判別したとき、発音チャンネルがまとめて生成する波形サンプルの個数を減少させるように制御する。【選択図】      図１
2004191665.tif 000002
【特許請求の範囲】
【請求項１】
楽音信号の波形サンプルを複数個まとめて生成する生成手段と、
生成された波形サンプルに基づいて楽音を発生させる発生手段と、
前記生成手段における負荷を判別する判別手段と、
前記判別手段によって判別された負荷の小大に応じて、まとめて生成する波形サンプルの個数を増減させるように制御する制御手段と
を具備することを特徴とする楽音生成装置。
【請求項２】
前記発生手段は、
前記生成手段により生成された波形サンプルが書き込まれる一方、書き込まれた波形サンプルが一定周期で読み出されるバッファを備え、
前記判別手段は、前記バッファに格納された波形サンプルの個数に応じて、前記負荷を判別する
ことを特徴とする請求項１に記載の楽音生成装置。
【請求項３】
前記制御手段は、
前記判別手段によって負荷が小であると判別されたとき、前記生成手段に対し、まとめて生成する波形サンプルの個数を元の値に復帰するように制御する
ことを特徴とする請求項１に記載の楽音生成装置。
【請求項４】
前記制御手段は、
波形サンプルの個数を減少させる制御から前記復帰への制御に切り替える際にヒステリシス特性を持たせた
ことを特徴とする請求項３に記載の楽音生成装置。
【請求項５】
前記生成手段は、
まとめて生成する波形サンプルの個数を減少させたとき、サンプル点が隣接する２つの波形サンプルの一方をコピーし、両サンプル点の間に配置させるとともに、生成した波形サンプルおよびコピーした波形サンプルの両者を合わせて、生成した波形サンプルとして前記発生手段に供給する
ことを特徴とする請求項１に記載の楽音生成装置。
【請求項６】
波形サンプルに基づき楽音を生成するコンピュータに対し、
楽音信号の波形サンプルを複数個まとめて生成する生成手段、
生成された波形サンプルに基づき楽音を発生させる発生手段、
前記生成手段における負荷を判別する判別手段、および、
前記判別手段によって判別された負荷の小大に応じて、まとめて生成する波形サンプルの個数を増減させるように制御する制御手段
として機能させることを特徴とする楽音生成プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、楽音を生成する楽音生成装置、及び、コンピュータに対し楽音生成させる楽音生成プログラムに関する。
【０００２】
【従来の技術】
一般に、電子的な楽音生成装置は、演算処理装置（Central Processing Unit、以下「ＣＰＵ」とする）によって制御され、例えば、ＭＩＤＩ（Musical Instrument Digital Interface）規格等に準拠した楽音データに従って楽音を生成する構成となっている。ここで、楽音生成装置は、大別すると、音源ＬＳＩ等の電子回路で構成されたハードウェア音源と、ＣＰＵ等がアプリケーションプログラムを実行することによって、演奏パートに相当する発音チャンネルなるものを複数構築し、この発音チャンネルによって楽音データを生成して、音源機能を代替するソフトウェア音源とに分けることができる。このうち、ソフトウェア音源は、汎用のＣＰＵ等を用いることによって、楽音生成処理以外のアプリケーションプログラムをも実行することができる。さらに、ソフトウェア音源は、専用のハードウェアを必要としないので、例えば携帯電話に代表されるように、実装スペースに制限がある場合に広く用いられている。従来のソフトウェア音源については、例えば特許文献１に開示されている。
【０００３】
【特許文献１】
特開平０９−０４４１６０号公報
【０００４】
【発明が解決しようとする課題】
一方、ソフトウェア音源を携帯電話に適用した構成を考えると、ＣＰＵは、ごく限られた演算処理能力の中で、楽音生成のほかに、通信処理や画面表示などの他の演算処理をも実行する必要がある。したがって、楽音生成以外の通信エラー回復処理や動画再生処理の実行などによって、ＣＰＵが偶発的に過負荷状態に陥ると、楽音生成処理が間に合わず、音飛びやノイズなどが発生する、という不都合がある。このような不都合を解消するには、ＣＰＵの処理能力を向上させるのが有効な方法ではあるが、上述した携帯電話のような機器にあっては、コスト上の問題があって実現は難しい。また、一般的にＣＰＵの処理能力向上に伴って、別の演算処理が実行される傾向もあり、本質的な問題解決にはなり得ない。
【０００５】
そこで、従来のソフトウェア音源では、ＣＰＵの負荷が大であると判断される場合、上記特許文献１にも記載されているように、主メロディ以外のメロディ生成を担当する発音チャンネルや、時間的に最も古い楽音の生成を担当する発音チャンネルなどを強制的に消去して、ＣＰＵの負荷を低減するという手法が採られる。
【０００６】
しかしながら、上記手法によると、いずれの発音チャンネルが主メロディの生成を担当しているのかが判らなければ、主メロディを偶然消去してしまう可能性がある。このように主メロディを消去してしまうと、再生される曲のイメージが変わってしまう。このことは、時間的に最も古い楽音の生成を担当する発音チャンネルを消去する手法についても同様である。そもそも、いずれかの発音チャンネルを強制的に消去することは、再生される曲の演奏パートが１つ欠けることになり、曲品質低下に直結する。
本発明は、上記事情に鑑みてなされたものであり、その目的とするところは、波形サンプルの演算に伴う負荷が大となったときに、再生曲の品質低下を抑えつつ、その負荷を低減させることが可能な楽音生成装置、及び、楽音生成プログラムを提供することにある。
【０００７】
【課題を解決するための手段】
上記課題を解決するために、本発明に係る楽音生成装置は、楽音信号の波形サンプルを複数個まとめて生成する生成手段と、生成された波形サンプルに基づいて楽音を発生させる発生手段と、前記生成手段における負荷を判別する判別手段と、前記判別手段によって判別された負荷の小大に応じて、まとめて生成する波形サンプルの個数を増減させるように制御する制御手段とを具備することを特徴としている。本発明によれば、波形サンプルを生成する生成手段の負荷が例えば大となったとき、まとめて生成する波形サンプルの個数が減少されるので、生成手段の負荷が低減される。
【０００８】
【発明の実施の形態】
以下、図面を参照して、本発明の実施形態について説明する。
【０００９】
＜第１実施形態＞
図１は、本発明の第１実施形態に係る楽音生成装置の構成を示すブロック図である。この図において、ＣＰＵ１は、バス１２を介して接続された各部を制御するとともに、楽音を生成するための楽音生成プログラムの実行により発音チャンネルを１以上構築し、各発音チャンネルにおいて異なる（または同一）楽音の波形サンプルを生成する。ＲＯＭ２は、基本プログラム等を記憶する。ＲＡＭ３は、ワークメモリや、入力バッファ、チャンネルレジスタ、Ｃバッファ（以降「ＣＢＵＦ」とする）、Ａバッファ（以降「ＡＢＵＦ」とする）など、各種の記憶領域を有する。このうち、ＣＢＵＦは、混合サンプルを後述する１フレーム分記憶することができる。ここで、混合サンプルとは、複数の発音チンャネルによって生成された波形サンプルのうち、サンプル点が同一であるものをすべて混合（加算）したサンプルをいう。なお、発音チャンネル数が「１」であるときの混合サンプルとは、１の発音チャンネルにより生成された波形サンプルそのものである。尚、ＡＢＵＦについては後述する。
【００１０】
タイマ４は、時刻を指示すると共に、タイマ割り込み処理のタイミングをＣＰＵ１に指示する。ＭＩＤＩインターフェース５は、ＭＩＤＩイベントが入力されると共に、生成されたＭＩＤＩイベントを出力するためのインターフェースである。キーボード６は、英字、かな、数字、矢印等のキーを備えた入力装置であり、ユーザが、キー操作によって各種の指示を入力する。
表示部７は、各種情報を表示するための装置である。ハードディスク（ＨＤＤ）８は、楽音を生成するための楽音生成アプリケーションプログラムがインストールされていると共に、生成された楽音波形データ等を記憶するための記録媒体である。
【００１１】
ＤＭＡ９は、ＣＰＵ１による割り込み指示によって起動し、ＡＢＵＦに記憶された混合サンプルを、ＣＰＵ１を介することなく直接的に、一定のサンプリング周期（例えば、サンプリング周波数を２４ｋＨｚとすると、その逆数である４１．７μｓ）毎に読み出して、デジタルアナログ変換器（ＤＡＣ）１０に供給する。
ＤＡＣ１０は、読み出された混合サンプルをアナログ信号に変換して楽音信号として出力する。サウンドシステム１１は、増幅器やスピーカなどからなり、楽音信号を適切な増幅率で増幅して外部に放音する。
このような構成は、通常のコンピュータ装置と同等であり、また、ＨＤＤ８をフラッシュメモリなどに置き換えるとともに、基地局と各種信号を送受する通信部を付加すれば、携帯電話などとも同等である。
【００１２】
次に、ＲＡＭ３における各種の記憶領域について説明する。まず、入力バッファには、演奏すべき曲の内容を規定するＭＩＤＩデータが格納される。ここで、ＭＩＤＩデータは、主にノートオンやノートオフなどの各種イベントの内容を規定するイベントデータとイベント間の時間間隔を示すデュレーションデータとが時系列的に交互配置した形式となっている。したがって、あるイベントデータを処理した場合、次に配置するデュレーションデータで示される時間間隔が経過したときが、その次のイベントデータの実行タイミングとなる。
【００１３】
続いて、チャンネルレジスタについて説明する。チャンネルレジスタは、発音チャンネルと１対１に設けられ、対応する発音チャンネルによって波形サンプルを生成する際に必要となる制御データを記憶する。
ここで説明の便宜上、本実施形態では発音チャンネル数を「８」とすると、図２に示されるように、各発音チャンネル（ｃｈ）に対応して、１ｃｈ、２ｃｈ、…、８ｃｈのチャンネルレジスタが用意される。なお、各チャンネルレジスタは、例えば、音高を指定するノートナンバや、用いるべき波形データを指定するデータ（波形指定Ｄ）、ビブラート等をかけるときに使用する低周波発振器（ＬＦＯ）を制御するためのデータ（ＬＦＯ制御Ｄ）、フィルタをかけるときに用いるフィルタエンベロープを制御するためのデータ（ＦＥＧ制御Ｄ）、振幅を制御する際に用いるエンベロープを制御するためのデータ（ＡＥＧ制御Ｄ）、ノートオンデータ、その他のデータ（その他Ｄ）などのように波形サンプルを生成するのに必要な情報を記憶するためのエリアと、ＣＰＵ１がプログラム実行時に使用するワークエリアとを有する。
【００１４】
最後にＡＢＵＦについて説明する。そのため、まず前述のフレームの概念について説明する。本実施形態では、ＣＰＵ１は一定条件下で波形サンプルを例えば６４個まとめて演算・生成する。この、波形サンプルを６４個まとめて生成する処理をフレーム処理、また、まとめて生成された６４個のサンプルを１フレーム分の波形サンプル、と表現することにする。
【００１５】
ＡＢＵＦはリングバッファ形式をもち、ＣＢＵＦに記憶された混合サンプルを先入れ先出し形式にてバッファリングする。図３はＡＢＵＦの模式図である。同図に示すように、ＡＢＵＦはＡＢＵＦ［Ｎ］（Ｎ＝０，１，２，３）で表される４領域に分かれている。各領域には１フレーム分の波形サンプルを格納することができ、従ってＡＢＵＦは最大で４フレーム分の波形サンプルを格納することができる。
また同図においてＷとＲは、それぞれ書き込みポインタ、読み出しポインタであり、値Ｎ（Ｎ＝０，１，２，３）をとる。このＮは前述のＡＢＵＦ［Ｎ］と一対一に対応しており、例えばＮ＝１ならばＡＢＵＦ［１］の先頭アドレスを表す。
【００１６】
次に、本実施形態の動作について説明する。図４は、本実施形態に係る楽音生成装置における主動作（メインルーチン）を示すフローチャートである。
まず、曲の再生開始が指示されると、ＣＰＵ１は、初期設定動作を実行する（ステップＳ１０）。この初期設定の例としては、タイマ４のリセットや、ＣＢＵＦ、ＡＢＵＦのゼロクリア、全発音チャンネルのクリアなどが挙げられる。続いてＣＰＵ１は、前述の１フレーム分の波形サンプルを演算・生成し、ＣＢＵＦ、更にはＡＢＵＦに書き込む音源処理タスクの起動を指示する（ステップＳ２０）。尚、音源処理タスクは一旦起動を指示されると、メインルーチンとは異なるタスクとして動作する。次に、ＣＰＵ１は、キーボード６の操作状態に応じた処理を実行する（ステップＳ３０）。
【００１７】
更にＣＰＵ１は、ＭＩＤＩイベントに応じたＭＩＤＩ処理を実行する（ステップＳ４０）。最後にＣＰＵ１は、例えば画面表示や携帯電話における振動発生制御等、楽音発生に付随する処理である、その他の処理を実行する（ステップＳ５０）。その後、ＣＰＵ１は処理手順をステップＳ３０に戻して、ステップＳ３０からＳ５０までの処理を繰り返して実行する。尚、ステップＳ３０からステップＳ５０までの繰り返し周期は、タイマ４の指示により一定周期になるよう制御される。
尚、メインルーチンには組み込まれていないが、前述の曲再生開始指示に伴い、波形サンプルの読み出し処理（以降「読み出し処理」とする）が、割込み処理として起動する。該処理については後述する。
【００１８】
ここで、メインルーチンのステップＳ４０におけるＭＩＤＩ処理について図５のフローチャートを参照して簡単に説明する。なお、ステップＳ３０からＳ５０までの繰り返し周期は一定間隔であるから、このＭＩＤＩ処理も一定間隔で実行される。
まず、ＭＩＤＩ処理において、ＣＰＵ１は、入力バッファに未処理のイベントデータが存在するか否かを判別し（ステップＳ４０１）、存在しなければそのままＭＩＤＩ処理を終了させる一方、存在すれば、今回のＭＩＤＩ処理の実行タイミングが、当該未処理のイベントデータの実行タイミングに一致するか否かを判別する（ステップＳ４０２）。具体的には、未処理のイベントデータが先頭１番目であれば、無条件に実行タイミングであり、また、２番目以降のイベントデータであれば、前回のイベントデータを処理してから、次に配置するデュレーションデータで示される時間間隔が経過したときが、その実行タイミングである。また、ＭＩＤＩ処理は一定間隔で実行されるので、その実行間隔と実行回数との積がデュレーションデータで示される時間間隔に一致するか否かによって、イベントデータの実行タイミングであるか否かを判別することができる。
【００１９】
ＣＰＵ１は、今回のＭＩＤＩ処理の実行時刻が当該未処理のイベントデータの実行タイミングに一致していなければ、今回のＭＩＤＩ処理をそのまま終了させる一方、一致していれば、当該未処理のイベントデータの種類を判別する（ステップＳ４０３）。
そして、ＣＰＵ１は、当該イベントデータがノートオンイベントである場合、ノートオン処理（ステップ４０４）を実行し、ノートオフイベントである場合、ノートオフ処理（ステップＳ４０５）を実行し、それら以外のデータ（例えばコントロールチェンジ）である場合、そのデータの種類に応じた処理（ステップＳ４０６）を実行する。これらのいずれかの処理後、ＣＰＵ１は、今回のＭＩＤＩ処理を終了させる。
【００２０】
ここで、ステップＳ４０４のノートオン処理について詳述すると、ＣＰＵ１は、第１に、空き状態となっている発音チャンネルをサーチして、当該ノートオンに対応して楽音を発生させるための発音チャンネルを１つ割り当て、第２に、ノートオンのイベントデータに含まれるノートナンバや、ベロシティ、発生時刻などのデータを加工するなどして、波形サンプルを生成するのに必要な制御データ（図２における各種Ｄ）を取得し、これらの制御データを割り当てた発音チャンネルに対応したチャンネルレジスタに記憶させる。
一方、ステップＳ４０５のノートオフ処理について詳述すると、ＣＰＵ１は、第１に、当該ノートオフのイベントデータに含まれるノートナンバにて発音中の発音チャンネルをサーチし、第２に、サーチした発音チャンネルを空き状態にセットする。
【００２１】
ここで、本実施形態における音源処理タスクについて説明する。本実施形態において、波形サンプルを１フレーム分生成するのに要する時間は、ＡＢＵＦにおける混合サンプルの読出周期の４１．７μｓ（サンプリング周波数２４ｋＨｚの逆数）の６４倍である２．６７ｍｓよりも十分短くなるように設計されている。
【００２２】
ところで、楽音生成プログラムは、他のタスク、例えば通信エラー回復処理や動画再生処理などとともにマルチタスクで実行されるので、ＣＰＵ１の負荷状態によっては（負荷大であれば）、フレーム処理に要する時間が設計よりも長くなってしまう場合がある。この場合、なんらの措置を講じないと、ＡＢＵＦに格納される混合サンプルが減少し、最悪であればカラとなって、音切れが発生することになる。一方、ＣＰＵ１の負荷が大である場合に、特定の発音チャンネルを強制的に消去させると、その分、ＣＰＵ１の負荷が改善されて、ＡＢＵＦに格納される混合サンプルが増加傾向に転じて、音切れについては防止することができる。ただし、従来の技術で述べたように、この手法は、再生曲の品質低下に直結するので、採用することができない。
【００２３】
そこで、本実施形態では、ＡＢＵＦに格納される波形サンプル数から、ＣＰＵの負荷状態を判別し、その負荷が大でなければ、原則通り、一度に波形サンプルを６４個まとめて生成する通常生成処理を実行する一方、判別した負荷が大であれば、一度に波形サンプルをまとめて生成する個数を例えば「３２」に減少させ、これによりＣＰＵ１の負荷を低減させる負荷低減生成処理を実行する。ただし、本実施形態ではＡＢＵＦの読出周期が４１．７μｓで一定であるので、後述する擬似的な補間によって、不足する３２個の波形サンプルを補うこととする。
【００２４】
以上を踏まえて、読み出し処理と、音源処理タスクについて、その詳細を説明する。図６は、読み出し処理の内容を示すフローチャートである。同図を用いて読み出し処理を説明する。
【００２５】
初めに、ＣＰＵ１は、読み出しポインタＲの情報を取得し、Ｒを「１」カウントアップする（ステップＳ６０１）。Ｒには初期設定において「０」が与えられている。従って、例えば読み出し処理開始時にはＲは「１」となる。またＡＢＵＦはリングバッファであるから、Ｒが「３」の状態からカウントアップされると、「０」に戻るようになっている。
【００２６】
次に、ＣＰＵ１は、ＡＢＵＦ［Ｒ］にある１フレーム分の波形サンプルの読み出しをＤＭＡ９に指示する（ステップＳ６０２）。ここで、前述のＡＢＵＦ［Ｎ］同様、ＡＢＵＦ［Ｒ］は、読み出しポインタＲによって先頭アドレスが指定された、１フレーム分の波形サンプルを格納するＡＢＵＦ上の領域である。ステップＳ６０２が終了すると、ＤＭＡ９によってＡＢＵＦ［Ｒ］にある１フレーム分の波形サンプルが読み出され、読み出し処理が終了する。
【００２７】
尚、読み出し処理は、曲の再生が中止または中断されない限り、ＡＢＵＦ［Ｒ］の最後の波形サンプルに続いてＡＢＵＦ［Ｒ＋１］の先頭の波形サンプルが読み出されるように、タイマ４によって指示された一定の時間間隔で常に割り込み、実行される。
【００２８】
次に音源処理タスクの詳細について、図７を用いて説明する。
【００２９】
最初に、ＣＰＵ１は、書き込みポインタＷ、及び読み出しポインタＲの情報を取得してＲとＷが等しくないかを判定する（ステップＳ２０１）。判定結果が否定的な場合、ＣＰＵ１は該判定結果が肯定的となるまで該ステップを繰り返す。従ってＲ＝Ｗである限り、音源処理タスクは一時停止状態となる。Ｗは初期設定により「０」が与えられている。例えば音源処理タスク起動開始時には、前述の読み出し処理によってＲは「１」にカウントアップされているから、ステップＳ２０１による判別の結果は肯定的となる。
【００３０】
ステップＳ２０１による判別の結果が肯定的であれば、ＣＢＵＦに格納されている１フレーム分の波形サンプルが、ＡＢＵＦ［Ｗ］へ書き込まれる（ステップＳ２０２）。尚、ＡＢＵＦ[Ｗ]もＡＢＵＦ［Ｒ］と同様、書き込みポインタＷによって先頭アドレスが指定された、１フレーム分の波形サンプルを格納するＡＢＵＦ上の領域である。
【００３１】
次に、ＣＰＵ１は、現時点でのＷの、Ｒに対する先行量を求める（ステップＳ２０３）。例えばＷ＝０、Ｒ＝１の場合、ＷはＲの３カウント先にあるので、先行量は「３」となる。本実施形態では該先行量を便宜的に「余裕フレーム値」と称し、Ｘで表すことにする。Ｘは、０，１，２，３のいずれかの値をもつ。
ここで、余裕フレーム値Ｘを算出するため、ＣＰＵ１は下記（１）式で示す演算を実行する。説明を簡素化するために、最上位桁が「０」なら正、「１」なら負を表す３桁の２進数で考えると、前述のＷ＝０、Ｒ＝１の場合、Ｗ−Ｒは、「−１」となり、２進数表現で「１１１」、「３」は「０１１」である。この２つの２進数に対する論理積は「０１１」となり、１０進数で「３」を表す。従って余裕フレーム値Ｘは「３」となる。
【００３２】
【数１】
Ｘ＝（Ｗ−Ｒ）＆３  ・・・（１）
【００３３】
ＣＰＵ１は、余裕フレーム値Ｘが予め定められたしきい値α1（例えば「２」）以上であるか否かを判別する（ステップＳ２０４）。ＣＰＵ１は、該判別結果が肯定的であれば、自己の負荷が小であるとして通常生成処理を実行する（ステップＳ２０５）一方、該判別結果が否定的であれば、自己の負荷が大であるとして負荷低減生成処理を実行する（ステップＳ２０６）。いずれかの処理を実行すると、ＣＰＵ１はＷを「１」カウントアップする（ステップＳ２０７）。ＷもＲと同様、「３」の次には「０」になるようカウントアップされる。Ｗがカウントアップされると、再び処理はステップＳ２０１に戻り、ステップＳ２０１からＳ２０７までの処理が繰り返される。このように、音源処理タスクは、メインルーチンのステップＳ２０で起動が指示されると、以降メインルーチンとは異なるタスクとして動作し、ループ処理をおこなう。
【００３４】
ここで、ステップＳ２０５の通常生成処理について詳述すると、ＣＰＵ１は、第１に、８ある発音チャンネルの各々に対し、対応するチャンネルレジスタに記憶された制御データに基づいて、楽音の波形サンプルを６４個まとめて算術的に生成させ、第２に、発音チャンネルの各々によってまとめて生成させた６４個の波形サンプルを、サンプル点毎に混合（加算）して、サンプル点毎に対応した６４個の混合サンプルを算出し、第３に、算出した６４個の混合サンプルを、サンプル点の順番で（先入れで）ＣＢＵＦに書き込む。
なお、通常生成処理において、１つの発音チャンネルによって生成される波形サンプルのイメージを図８（ａ）において「●」で示す。
【００３５】
一方、ステップＳ２０６の負荷低減生成処理について詳述すると、ＣＰＵ１は、第１に、８ある発音チャンネルの各々に対し、対応するチャンネルレジスタに記憶された制御データに基づいて、通常生成処理よりもサンプル間隔が２倍となるように、楽音の波形サンプルを３２個まとめて算術的に生成させる。ただし、このままでは、図８（ｂ）において示されるように、サンプル点の間隔がＡＢＵＦの読出周期に対し２倍となっているので、不足する３２個の波形サンプルを補間する必要がある。そこで、ＣＰＵ１は、図８（ｃ）に示されるように、不足する３２個の波形サンプルについては、生成された３２個の波形サンプルを、ＡＢＵＦのサンプリング周期である４１．７μｓだけ遅延した点がサンプル点となるように複写する。なお、ＣＰＵ１は、この複写を８ある発音チャンネルの各々において実行する。
ここで、不足する波形サンプルを求める手法としては、直線補間やスプライン補間なども考えられるが、演算処理の負荷を低減する観点から言えば、このような複写が望ましい。そして、ＣＰＵ１は、第３に、各発音チャンネルによって生成した３２個と不足分を補うため複写した３２個との計６４個の波形サンプルを、発音チャンネルによって生成された波形サンプルとみなして、サンプル点毎に混合して、サンプル点毎に対応した６４個の混合サンプルを算出し、第４に、算出した６４個の混合サンプルを、サンプル点の順番でＣＢＵＦに書き込む。
したがって、ステップＳ２０５の通常生成処理についても、ステップＳ２０６の負荷低減生成処理についても、１回の処理によってＣＢＵＦに書き込まれるサンプルの数が「６４」である点において変わりはない。
【００３６】
ここで、余裕フレーム値Ｘが図９に示されるような時間的推移を示すとき、ステップＳ２０３の実行タイミングで余裕フレーム値Ｘがしきい値α1（図９では「２」）未満であった場合には（図中時刻Ｔ1，Ｔ3，Ｔ5）、ＣＰＵ１の負荷が大であるとして、負荷低減生成処理が実行される。これにより、ＣＰＵ１の負荷が低減されるので、余裕フレーム値Ｘが増加する。したがって、余裕フレーム値Ｘがゼロ（Ｒ＝Ｗとなるから書き込みが行われず、いずれＡＢＵＦの波形サンプルがカラになる）ことが防止されるので、音切れなどが発生しない。
ＣＰＵ１の負荷が低減されて、フレーム値Ｘがしきい値α1以上となる（図中Ｔ2，Ｔ4，Ｔ6）と、ＣＰＵ１の負荷が小であるとして、通常生成処理が実行されることになる。ここで、他のタスクの実行状態などによって、ＣＰＵ１の負荷が高まると、余裕フレーム値Ｘがしきい値α1未満になって、再び、負荷低減生成処理が実行されることになる。
【００３７】
このように本実施形態に係る楽音生成装置によれば、ＣＰＵ１の負荷が高まると、負荷低減処理が実行されて、ＣＰＵ１の負荷が低減される方向に制御される。このため、従来のように発音チャンネルを強制的に消去させないで済むので、曲品質の低下を防止することができる。
また、負荷低減処理では、実際に発音チャンネルによって生成されるサンプル数は、通常生成処理の１／２の「３２」であるので、ある程度の品質が低下するが、比較的演算の負担が軽い複写によって、不足分の波形サンプルを補っているので、サンプリング周波数が１／２になる程度の品質低下は発生しない。
【００３８】
＜第２実施形態＞
上述した第１実施形態では、余裕フレーム値Ｘがしきい値α1未満であるか否かによって、負荷低減生成処理または通常生成処理のいずれかを選択する構成となっている。このため、例えば余裕フレーム値Ｘがしきい値α1を中心に変動すると、余裕フレーム値Ｘがしきい値α1を頻繁に跨ぐことになる。余裕フレーム値Ｘがしきい値α1を跨ぐと、負荷低減生成処理または通常生成処理のいずれか一方から他方へと切り替わる。第１実施形態では、通常生成処理に対する負荷低減生成処理の楽音品質の低下は、複写という手法上、ある程度避けられないので、余裕フレーム値Ｘがしきい値α1を跨ぐ頻度が高くなると、それだけ楽音品質が変化する頻度も高くなり、聴覚的にも違和感を与えることになる。
そこで、余裕フレーム値Ｘの変動に伴って、聴覚的な違和感を与えにくい第２実施形態について説明する。
【００３９】
この第２実施形態に係る楽音生成装置は、第１実施形態とは、構成的には同じであるが、動作的には、図７に示した音源処理タスクを、図１０に示す内容に置き換えたものとなっている。
すなわち、ＣＰＵ１は、ステップＳ２０３において余裕フレーム値Ｘを求めた後、当該余裕フレーム値Ｘが予め定められたしきい値α1以上か否かを判別する（ステップＳ２０４）。ＣＰＵ１は、該判別結果が肯定的であれば、さらに、当該余裕フレーム値Ｘが予め定められたしきい値α2（α2＞α1）以上か否かを判別する（ステップＳ２２０）。
ステップＳ２２０の判別結果が肯定的であるとき、ＣＰＵ１は、フラグＦを「０」にクリアして（ステップＳ２２１）、上述した通常生成処理（ステップＳ２０５）を実行する。ここで、フラグＦは、負荷低減生成処理から通常生成処理に切り替える際にヒステリシス特性を持たせるためのものであり、上記初期設定（ステップＳ１０）において初期値として「０」にリセットされている。
【００４０】
一方、ステップＳ２２０における判別結果が否定的であれば、ＣＰＵ１は、フラグＦが「０」であるか否かを判別する（ステップＳ４２３）。ＣＰＵ１は、該判別結果が肯定的であれば、上述した通常生成処理（ステップＳ２０５）を実行する一方、上述した判別結果が否定的であれば、上述した負荷低減成処理（ステップＳ２０６）を実行する。
また、ステップＳ２０４における判別結果が否定的であれば、ＣＰＵ１は、フラグＦを「１」にセットして（ステップＳ２２３）、上述した負荷低減生成処理（ステップＳ２０６）を実行する。
【００４１】
ここで、ＣＰＵ１は、余裕フレーム値ＸがＸ＜α1であるために、自己の負荷が高いと判別した場合、上記第１実施形態と同様に、負荷低減生成処理を実行する。ただ、この場合、初期値が「０」であるフラグＦに「１」がセットされて、今回の音源処理では、負荷低減生成処理を実行したことが記録される（ステップＳ２２３）。
ＣＰＵ１の負荷が低減して、余裕フレーム値Ｘが増加し、α1≦Ｘ＜α2になった場合（ステップＳ２０４の判別結果が肯定的となったが、ステップＳ２２０の判別結果が未だ否定的である場合）に、フラグＦに「１」がセットされているとき（ステップＳ２２２の判別結果が否定的であるとき）、この状況は、前回の音源処理においては負荷低減生成処理が実行されたことを意味する。したがって、この状況において負荷低減生成処理から通常生成処理に切り替えると、比較的短期間のうちに、再度、余裕フレーム値ＸがＸ＜α1となってしまう可能性が高い。本実施形態では、ステップＳ２２２の判別結果が否定的であるときには、前回と同様に負荷低減生成処理を実行するので、短期間で楽音品質が変化することが防止されることになる。
【００４２】
余裕フレーム値Ｘがα1≦Ｘ＜α2の範囲にある場合に、フラグＦに「０」がセットされているとき（ステップＳ２２２の判別結果が肯定的であるとき）、この状況は、前回の音源処理においては通常生成処理が実行されたことを意味する。したがって、この状況において通常生成処理を実行しても、余裕フレーム値ＸがＸ＜α1となってしまう可能性は低く、また、短期間のうちに楽音品質が変化することを防止する必要もある。本実施形態では、ステップＳ２２２の判別結果が肯定的であるときには、前回と同様に通常生成処理が実行される。
なお、余裕フレーム値ＸがＸ≧α2（＞α1）である場合に、無条件に通常生成処理が実行される。ただ、この場合、フラグＦに「０」がセットされて、今回の音源処理では、通常生成処理を実行したことが記録される（ステップＳ２２１）。
【００４３】
このように第２実施形態では、一旦、負荷低減生成処理が実行されると、ある程度の期間、その負荷低減生成処理が繰り返し実行されるので、図１１に示されるように、第１実施形態（図９参照）と比較して、比較的短期間で負荷低減生成処理から通常生成処理に切り替わることが防止される。このため、楽音品質の変化が少なくなって、聴覚的な違和感をユーザに与えにくくなる。
【００４４】
＜第３実施形態＞
前述の第１又は第２の実施形態においては、余裕フレーム値Ｘの取りうる値は整数に限定される。しかしながら、このように限定されない方が、ＣＰＵの負荷をより適切に判別できる場合がある。そこで、余裕フレーム値Ｘが、整数以外の値をとりうる第３の実施形態について説明する。
【００４５】
第３の実施形態は、前述の第２実施形態と構成的には同じであるが、動作的に、図１０に示した音源処理タスクにおいて、余裕フレーム値Ｘの算出手順を変更したものとなっている。第３の実施形態に係る音源処理タスクのフローチャートを図１２に示し、余裕フレーム値Ｘの算出手順について説明する。
【００４６】
初めに、ＣＰＵ１は、書き込みポインタＷを、Ｗに応じたサンプル数Ｗsmpに変更する（ステップＳ２０３ａ）。具体的には、Ｗをフレームサンプル数である「６４」倍する（ステップＳ２０３ａ）。例えばＷ＝２の場合、Ｗsmp＝１２８となる。
次に、ＣＰＵ１は、Ｗと同様、読み出しポインタＲを、Ｒに応じたサンプル数であるＲsmpに変更する（ステップＳ２０３ｂ）。Ｒsmpは、ＤＭＡ９によって、現在、ＡＢＵＦ［Ｒ］上の何個目のサンプルが転送されているかを示す値である。具体的には、第１にＣＰＵ１は、Ｗと同様Ｒを６４倍する。第２に、ＣＰＵ１は、ＤＭＡ９が１フレーム中の何番目のサンプルを読み出しているかを示す値であるＤsmpを取得する。例えば、１番目のサンプルが読み出されているなら、Ｄsmpは「０」、６４番目のサンプルが読み出されているなら、Ｄsmpは「６３」である。第３にＣＰＵ１は、６４倍されたＲにＤsmpを加算して、Ｒsmpを算出する。例えば、Ｒ＝２で、ＤＭＡ９がＡＢＵＦ［２］の１番目のサンプルを読み出しているなら、Ｒsmp＝１２８となる。
【００４７】
次に、ＣＰＵ１は、下記（２）式で示される演算を行い、余裕フレーム値Ｘを算出する（ステップＳ２０３ｃ）。ここで、Ｗ＝１、Ｒ＝２で、ＡＢＵＦ［２］の１番目のサンプルが読み出されている場合について説明する。
【００４８】
【数２】
（（Ｗsmp−Ｒsmp）＆０ｘＦＦ）／６４  ・・・（２）
【００４９】
この場合、Ｗsmp＝６４、Ｒsmp＝１２８である。Ｗsmp−Ｒsmpは、「−６４」であるから、２進数で「１１０１１１１１１」と表される。また「ＦＦ」、即ち「２５５」は、２進数で「０１１１１１１１１」である。ＣＰＵ１は、上記２つの２進数について論理積をとり、その結果である、「０１０１１１１１１」、即ち「１９１」を、「６４」で除し、演算結果である「２．９８４３７５」を余裕フレーム値Ｘとする。
更に例を挙げれば、Ｗsmp＝６４、Ｒsmp＝１９１の場合、余裕フレーム値Ｘは、「２」となる。
【００５０】
上記のように、余裕フレーム値Ｘを算出すると、Ｘは整数以外の値もとることができる。前述の第２実施形態においては、Ｗ＝1、Ｒ＝２であれば余裕フレーム値は［３］とされていたが、本実施形態においては、上述のようにその値は「２」から「２.９８４３７５」まで変化する。従って、ＣＰＵ１の負荷をより詳細に判別することが可能となる。
【００５１】
＜変形例＞
なお、本発明は、上述した第１実施形態、第２実施形態、及び第３実施形態に限られず、種々の応用変形が可能である。
例えば、実施形態では、負荷低減生成処理において、発音チャンネルによってまとめて生成する波形サンプルの個数を、通常生成処理に対して１／２としたが、１／３、１／４というように、１／ｎ（ｎは整数）としても良い。
【００５２】
また、実施形態では、負荷低減生成処理にあっては、発音チャンネルによってまとめて生成する波形サンプルの個数を、通常生成処理の半分とするとともに、不足する波形サンプルを補っていたが、これを補うことなく、ＡＢＵＦの読出周期も半分としても良い。すなわち、文字通りサンプリング周波数を低下させても良い。
また、負荷が大のときに、発音チャンネルによってまとめて生成する波形サンプルの個数を低下させる方向とは逆に、負荷が小のときに、まとめて生成する波形サンプルの個数を増加させても良い。
【００５３】
さらに、第１実施形態や第２実施形態では、ＣＰＵ１が、余裕フレーム値Ｘによって自己の負荷状態を判別したが、ＣＰＵが１フレーム分の音源処理タスクを実行するのに要する時間をタイマ４により取得し、この実行時間により判別しても良い。
このようなタイマ４により取得した時間を用いてＣＰＵ１の負荷状態を判別する場合、ある１フレーム分の音源処理タスクに要した時間Ｔと、その直前１フレーム分の音源処理タスクに要した時間Ｔ’とを比較して、Ｔ＞Ｔ’（Ｔ≦Ｔ’）であれば、負荷大（負荷小）であると判別しても良い。また、マージンを示すβを規定して、Ｔ−Ｔ’＞β（Ｔ−Ｔ’≦β）であれば、負荷大（負荷小）であると判別しても良い。
【００５４】
【発明の効果】
以上説明したように本発明によれば、波形サンプルの演算に伴う負荷が大となっても、再生曲の品質低下を抑えつつ、その負荷を低減させることが可能となる。
【図面の簡単な説明】
【図１】本発明の第１実施形態に係る楽音生成装置の構成を示すブロック図。
【図２】同楽音生成装置におけるチャンネルレジスタの構成を示す図。
【図３】同楽音生成装置におけるＡバッファの構成を示す模式図。
【図４】同楽音生成装置の主動作を示すフローチャート。
【図５】同メインルーチンにおけるＭＩＤＩ処理を示すフローチャート。
【図６】同楽音生成装置の読み出し処理を示すフローチャートである。
【図７】同楽音生成装置の音源処理タスクを示すフローチャート。
【図８】同音源処理における波形生成を説明するための図。
【図９】同楽音生成装置において余裕フレーム値Ｘの時間的変動と、負荷低減生成処理、通常生成処理との関係を示す図。
【図１０】本発明の第２実施形態に係る楽音生成装置の音源処理タスクを示すフローチャート。
【図１１】同楽音生成装置において余裕フレーム値Ｘの時間的変動と、負荷低減生成処理、通常生成処理との関係を示す図。
【図１２】本発明の第３実施形態に係る楽音生成装置の音源処理タスクを示すフローチャート。
【符号の説明】
１…ＣＰＵ、２…ＲＯＭ、３…ＲＡＭ、４…タイマ、５…ＭＩＤＩインターフェース、６…キーボード、７…表示部、８…ハードディスク、９…ＤＭＡ、１０…ＤＡＣ、１１…サウンドシステム、１２…バス。
【図１】
2004191665.tif 000003
【図２】
2004191665.tif 000004
【図３】
2004191665.tif 000005
【図４】
2004191665.tif 000006
【図５】
2004191665.tif 000007
【図６】
2004191665.tif 000008
【図７】
2004191665.tif 000009
【図８】
2004191665.tif 000010
【図９】
2004191665.tif 000011
【図１０】
2004191665.tif 000012
【図１１】
2004191665.tif 000013
【図１２】
2004191665.tif 000014