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