(57)【特許請求の範囲】
【請求項１】
複数の楽音データを対応するタイミングデータと共に第１記憶手段に記憶する第１のステップと、
前記第１記憶手段に記憶された楽音データを読み出して、該楽音データに対応する楽音波形を生成するための音源パラメータを生成し、該音源パラメータを対応するタイミングデータと共に第２記憶手段に記憶する第２のステップと、
前記第２記憶手段に記憶される前記音源パラメータと対応するタイミングデータに基づいてエンベロープ波形を生成し、生成された前記エンベロープ波形を第３記憶手段に記憶する第３のステップと、
前記第２記憶手段に記憶された前記音源パラメータと、対応するタイミングデータと、前記第３の記憶手段に記憶された前記エンベロープ波形に基づいて前記楽音波形を生成し、生成された前記楽音波形を第４記憶手段に記憶する第４のステップと、
前記第４記憶手段に記憶されている楽音波形を順次再生する第５のステップと、
前記タイミングデータに基づく発音タイミングに先行し、かつ該発音タイミングに応じて第１のタイミングを発生し、該第１のタイミングで前記第４のステップを起動する第６のステップと、
前記発音タイミングに先行し、かつ該発音タイミングとは独立した第２のタイミングを発生し、該第２のタイミングで前記第２のステップないし第３のステップを起動する第７のステップとを備え、
前記第２のタイミングを前記第１のタイミングに先行して発生するようにしたことを特徴とする楽音生成方法。
【請求項２】
前記楽音生成方法は、複数発音チャンネル分の楽音波形を生成する楽音生成方法であり、
前記第３のステップは、複数チャンネル分の前記エンベロープ波形を生成し、
前記第２のステップは、該複数チャンネル分の前記エンベロープ波形に基づいて発音チャンネル割り当てを行うと共に、割り当てた発音チャンネルの楽音パラメータを生成していることを特徴とする請求項１記載の楽音生成方法。
【請求項３】
前記第４のステップが起動されたときに、前記第１記憶手段に記憶された前記楽音データのうち、前記楽音波形の生成範囲に含まれるタイミングデータに対応した楽音データの音源パラメータがおよび同生成範囲のエンベロープ波形が生成済みであるか否かを判定し、生成済みでない場合には未生成の音源パラメータおよびエンベロープ波形を発生してから楽音波形を生成するようにしたことを特徴とする請求項１記載の楽音生成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサに楽音生成処理プログラムを実行させることにより音源波形を生成する場合に好適な楽音波形生成方法に関するものである。
【０００２】
【従来の技術】
従来の楽音生成装置は、通常、楽譜通りのタイミングでＭＩＤＩ（Musical Instrument Digital Interface）イベントを送出するプレーヤ（自動演奏プログラム）、ＭＩＤＩイベントが入力される毎に入力されたＭＩＤＩイベントに応じた音源パラメータを発生する音源ドライバ、発生された音源パラメータに基づいてエンベロープ波形および楽音波形を生成する音源から構成されている。なお音源ドライバは、入力されたＭＩＤＩイベントに応じて、チャンネルアサイン、音源パラメータ変換等の音源ドライバ処理を実行し、当該イベントに割り当てられたチャンネルに、変換した音源パラメータと発音開始指示（ノートオン）を供給する。
音源は、専用のＬＳＩ（Large Scale Integrated circuit）やＤＳＰ（Digital Signal Processor）等のハードウェアで構成（ハードウェア音源）されたり、楽音生成処理手順を記述したプログラムをＣＰＵに実行させるソフトウェア音源により構成されている。
【０００３】
このように楽音生成装置は、プレーヤ、音源ドライバ、音源により構成されているが、これらの処理負荷は一定ではなく大きく変動しているのが一般的である。
たとえば、ＭＩＤＩイベントが多いときにはプレーヤおよび音源ドライバで処理すべき負荷が大きくなる。特に、音源ドライバでは、ノートオンイベントが多いときに処理負荷が大きくなる。これは、ノートオンイベント時では、空きチャンネルをサーチして、ノートオンされた楽音を発生するチャンネルの発音割当処理が行われるが、この際に行われるサーチ処理およびトランケート処理は時間のかかる負荷の大きい処理であるからである。さらに、ノートオンイベント時には、キータッチに応じた音色設定処理等も行われる。このように、ノートオンイベントが多いときには音源ドライバ処理の負荷が大きくなる。
また、音源がソフトウェア音源で構成されている場合には、同時発音数が多いときに音源におけるエンベロープ波形生成処理および波形生成処理の負荷が大きくなる。
【０００４】
ここで、プレーヤ、音源ドライバ、および音源における処理のタイミングチャートを例示して具体的に説明する。図９は楽音生成装置の各処理タイミングを示すタイミングチャートの例であり、ＭＩＤＩ入力と記されているＭ１〜Ｍ４はＭＩＤＩイベントであり下向きの矢印で示すタイミングで入力されている。このＭＩＤＩイベントは、たとえば、プレーヤがＭＩＤＩファイル等を読み出して楽譜通りのタイミングで送出したＭＩＤＩイベントである。このＭＩＤＩイベントＭ１〜Ｍ４が受信される毎にＭＩＤＩ処理を起動する優先度の高い割り込みが発生し、起動されたＭＩＤＩ処理においてＭＩＤＩイベントＭ１〜Ｍ４は、受信された時刻と共に入力バッファに格納される。
【０００５】
音源ドライバと記されている処理ａ，ｂは、入力バッファに格納されたＭＩＤＩイベントを音源ドライバが受け取り、該ＭＩＤＩイベントに応じてチャンネルアサイン、音源パラメータの発生等を行う。ここで発生された音源パラメータは音源パラメータバッファに格納される。
また、波形生成と記されている処理Ａ，Ｂ，・・・，Ｅは、時刻ｔ１，ｔ２，・・・，ｔ５，・・の一定周期で起動されて音源で実行されるエンベロープ波形生成処理および波形生成処理の実行されるタイミングであり、音源パラメータバッファから読み出された音源パラメータに基づいて楽音波形サンプルを生成している。ここで、エンベロープ波形を音源において生成しているのは、エンベロープの各ステート毎の値は、ＭＩＤＩデータと同様に抽象度の高い情報であるため、これをパラメータの連続量に変換しながら波形計算を行っているからである。
【０００６】
なお、一定周期の単位を１フレームとしている。この波形生成処理では、たとえば、時刻ｔ１から時刻ｔ２のフレームにおいて発生された音源パラメータによる音源制御が、次のフレームである時刻ｔ２から時刻ｔ３のフレームにおいて実行され、該次のフレームでは、まず、該音源制御に応じたエンベロープ波形が生成され、さらに、そのエンベロープ波形により音量やピッチの制御されかつ該音源制御に応じた楽音波形サンプルが、１フレーム周期に対応するサンプル数分生成される。生成された各発音チャンネルの楽音波形サンプルは累算され、その結果得られた１フレーム分の楽音波形サンプルが、ＤＡＣ（デジタル・アナログコンバータ）等で構成される再生デバイスに再生予約される。
【０００７】
さらに、波形再生と記されているのは、再生デバイスが出力バッファからサンプリング周期毎に楽音波形サンプルを１サンプルづつ読み出して再生するタイミングを示している。たとえば、時刻ｔ２から時刻ｔ３のフレームにおいて波形生成された楽音波形サンプルは、次のフレームである時刻ｔ３から時刻ｔ４のフレームにおいて再生される。
従って、ＭＩＤＩイベントが入力されてから実際に発音されるまでの発音遅れ時間Δｔは最短で２フレーム後となり、次のフレームで再生するエンベロープ波形および楽音波形を、現時点のフレームの期間内に生成し終えるようにしなければならない。なお、１フレームは数ｍｓｅｃの周期とされている。
【０００８】
【発明が解決しようとする課題】
ところで、一般に音源ドライバはＣＰＵに音源ドライバプログラムを実行させることにより実現されており、音源ドライバ処理は、基本的にノートオンイベント，ノートオフイベント，プログラムチェンジ等のイベント発生時に起動される。このため、図９にイベントＭ１〜Ｍ３として示すようにイベントが同時刻に集中して入力されると、音源ドライバ処理が急激に増加する。従って、イベントの集中時には、音源ドライバ処理を実行するＣＰＵに大きな負担がかかり、同時にＣＰＵが実行している自動演奏プログラム、ゲームプログラム、あるいは、画像処理等の実行を行えなくなるおそれが生じる。
特に、音源がソフトウェア音源で構成されており、ソフトウェア音源で演算すべき発音数が多いときには、生成する楽音波形サンプル数が増加するためソフトウェア音源の負荷が多いことは当然であるが、発音数が多いことからイベントの発生も多く、音源ドライバおよびプレーヤで処理すべき負荷が大きくなることになる。従って、ソフトウェア音源において演算すべき発音数が多い時には、他の楽音生成のための処理も増加し演算可能な発音数が低下してしまうおそれがあった。
【０００９】
たとえば、ソフトウェア音源において通常３２音発音可能な場合でも、ノートオンイベントが集中して発生した際には、音源ドライバで実行されるノートオンイベント処理のためにＣＰＵの演算能力の大部分が費やされるようになり（図９ＭＩＤＩ入力および音源ドライバの処理タイミング参照）、ソフトウェア音源に割り当てられるＣＰＵの演算能力が減少し、３２音の楽音波形およびエンベロープ波形をソフトウェア音源で生成することができなくなる。
【００１０】
これを解決するために、ＣＰＵに余裕のあるときに音源ドライバの生成した音源パラメータに基づいて、発音タイミングより事前に楽音波形を音源において先行生成しておき、生成した音源波形を波形バッファに記憶しておくようにすることが考えられる。そして、発音タイミング時に波形バッファから音源波形を読み出して発音するようにする方法が提案されている。
しかしながらこの方法では、先行生成した音源波形を記憶するために大容量の波形バッファが必要になる。また、曲データの演奏途中において音量制御、パン制御、効果制御等の操作が行われた際には、すでに先行生成された楽音波形の各パートの楽音波形が合成されていることから、楽音波形を修正するのが困難となる。修正するには、たとえば１６パートの各パート別に独立して波形バッファに記憶させなければならず、さらに多くの波形バッファが必要となる。
【００１１】
また、音源ドライバ処理においては発音チャンネル割当処理が行われるが、通常、発音チャンネル割当を行うには、各チャンネルのエンベロープのレベル状態を検出してエンベロープレベルが小さい発音の進行したチャンネルをトランケート処理するようにしている。しかしながら、エンベロープ波形は音源処理において生成されるため、音源ドライバ処理時には生成されておらず、エンベロープ波形の状態を利用して発音チャンネル割当処理を行うことができないという問題点があった。
そこで、本発明はノートオンイベントのようなＣＰＵ負荷が急激に増加するイベントが集中して発生しても、演算可能な発音数が低下することがないと共に、各パート別に音量制御可能であって、エンベロープ波形の状態を検出して発音チャンネル割当を行うことのできる楽音生成方法を提供することを目的としている。
【００１２】
【課題を解決するための手段】
前記目的を解決するために、本発明の楽音生成方法は、複数の楽音データを対応するタイミングデータと共に第１記憶手段に記憶する第１のステップと、前記第１記憶手段に記憶された楽音データを読み出して、該楽音データに対応する楽音波形を生成するための音源パラメータを生成し、該音源パラメータを対応するタイミングデータと共に第２記憶手段に記憶する第２のステップと、前記第２記憶手段に記憶される前記音源パラメータと対応するタイミングデータに基づいてエンベロープ波形を生成し、生成された前記エンベロープ波形を第３記憶手段に記憶する第３のステップと、前記第２記憶手段に記憶された前記音源パラメータと、対応するタイミングデータと、前記第３の記憶手段に記憶された前記エンベロープ波形に基づいて前記楽音波形を生成し、生成された前記楽音波形を第４記憶手段に記憶する第４のステップと、前記第４記憶手段に記憶されている楽音波形を順次再生する第５のステップと、前記タイミングデータに基づく発音タイミングに先行し、かつ該発音タイミングに応じて第１のタイミングを発生し、該第１のタイミングで前記第４のステップを起動する第６のステップと、前記発音タイミングに先行し、かつ該発音タイミングとは独立した第２のタイミングを発生し、該第２のタイミングで前記第２のステップないし第３のステップを起動する第７のステップとを備え、前記第２のタイミングを前記第１のタイミングに先行して発生するようにしている。
このような楽音生成方法によれば、楽音データの演奏されるタイミングとは独立したタイミングで楽音データに応じた音源パラメータに基づいたエンベロープ波形の形成が行われるので、演奏データのタイミングが密であってもそのために音源パラメータの生成処理やエンベロープ波形の形成のためにプロセッサの能力が消費され、波形生成の処理が厳しくなることがない。
【００１３】
また、前記楽音生成方法における前記楽音生成方法は、複数発音チャンネル分の楽音波形を生成する楽音生成方法であり、前記第３のステップは、複数チャンネル分の前記エンベロープ波形を生成し、前記第２のステップは、該複数チャンネル分の前記エンベロープ波形に基づいて発音チャンネル割り当てを行うと共に、割り当てた発音チャンネルの楽音パラメータを生成するようにしてもよい。
このような楽音生成方法によれば、複数発音チャンネルの楽音を生成する場合に、かく発音チャンネルの音量データに基づいて発音チャンネル割り当てを行いつつ、音源パラメータの生成処理を分散的に行うことができる。
【００１４】
さらに、前記楽音生成方法において、前記第４のステップが起動されたときに、前記第１記憶手段に記憶された前記楽音データのうち、前記楽音波形の生成範囲に含まれるタイミングデータに対応した楽音データの音源パラメータがおよび同生成範囲のエンベロープ波形が生成済みであるか否かを判定し、生成済みでない場合には未生成の音源パラメータおよびエンベロープ波形を発生してから楽音波形を生成するようにしてもよい。
このような楽音生成方法によれば、分散処理による音源パラメータの生成ないしエンベロープ波形の生成が完了しないまま楽音生成のタイミングになった場合でも、その完了していない処理を先に終えてから楽音生成を行うので、生成する楽音に悪影響を与えないようになる。また、その場合にも一部の音源パラメータは分散的に処理されるようになる。
【００１５】
上記の本発明によれば、受け取った楽音データをバッファに記憶しておき、音源ドライバがバッファに記憶された楽音データを非同期で分散処理することにより音源パラメータを発生すると共に、楽音データに応じたエンベロープ波形を先行して生成するようにしている。従って、イベントが集中して発生しても、音源ドライバの処理は分散して実行されるため、ＣＰＵ負荷が急激に増加することがなく、さらに、エンベロープ波形の生成処理が発音タイミングより先行して実行されていることから、音源処理の負荷を軽くすることができる。したがって、一時的な処理の集中による発音数の減少を防止することができる。
【００１６】
また、エンベロープ波形を先行して生成しているため、音源ドライバ処理において、生成されたエンベロープ波形のレベル状態を検出することが可能となり、各チャンネルのエンベロープ波形のレベルをみる発音チャンネル割当処理を行うことができるようになる。
さらにまた、音源ドライバ処理およびエンベロープ波形生成処理までを先行して実行し、波形生成は発音タイミングになったときに実行するようにしているので、生成される楽音に対し、パート別の音量制御やパン制御等の処理をリアルタイムで行うことができる。
【００１７】
【発明の実施の形態】
本発明の楽音生成方法を実行することのできる処理装置の構成例を図１に示す。ただし、図１に示す処理装置は、パソコン、ワークステーション等の汎用の処理装置と同等であり、それらの上で本発明の楽音発生方法を実施することができる。
この図において、１はアプリケーションプログラム等を実行してファイルから読み出した演奏データに基づいて自動演奏を行うための各種演算処理を行うマイクロプロセッサ（ＣＰＵ）、２はＣＰＵ１の動作プログラムやプリセット音色データ等が記憶されているリードオンリメモリ（ＲＯＭ）、３はＣＰＵ１のワークメモリエリアや入力バッファエリア（Ｍバッファ）、音源パラメータエリア（Ｐバッファ）、パート設定データエリア、音源レジスタエリア、出力バッファエリア等の記憶エリアを有するランダムアクセスメモリ（ＲＡＭ）、４は時刻を指示すると共に、タイマ割り込み処理のタイミングをＣＰＵ１に指示するタイマ、５はＭＩＤＩイベントが入力されると共に、生成されたＭＩＤＩイベントを出力するＭＩＤＩインターフェースである。
【００１８】
６は楽音波形サンプルを生成するために使用する楽音波形データ等やオペレーションシステム（ＯＳ）、本発明の楽音生成方法にかかるプログラムや各種アプリケーションプログラム等が格納されるハードディスクであり、ＣＰＵ１による実行時に楽音生成方法にかかるプログラムはＲＡＭ３にロードされる。７は楽音波形サンプルを生成するために使用する楽音波形データ等やＯＳ、各種アプリケーションプログラム等が格納される光ディスクやハードディスク等の差し替え可能な記憶媒体がセットされるリムーバブルディスク、８はユーザが楽音生成装置と対話するためのディスプレイ（モニタ）、９は英字、かな、数字、記号などのキーを備えるいわゆるパソコン用のキーボードおよびポインティングデバイスの一種であるマウス、１０はＤＳＰ等が搭載されたサウンドボード等のハードウェア音源であり、ソフトウェア音源を有している場合は、必ずしも必要なものではない。１１はデータのやりとりを行うＣＰＵバスである。
なお、プログラムは、図示しないネットワークインターフェースを介して、外部のネットワークからダウンロードすることもできる。
【００１９】
前記したようにＲＡＭ３は種々のデータが記憶されるエリアを有しているが、そのエリアの内容の例を図２（ａ）に、そのうちのＰバッファエリアの内容の例を図２（ｂ）に、そのうちのＭバッファの内容の例を図２（ｃ）に示す。
図２（ａ）に示すようにＲＡＭ３には、Ｍバッファ、Ｐバッファ、パート設定データ、音源レジスタ、Ｅメモリバッファ、音源ワークエリアの各エリアが設定されている。ただし、出力バッファのエリアは示されていないが、必ずしもＲＡＭ３に設定される必要はなく、ハードディスク６やリムーバブルディスク７に出力バッファのエリアを設定するようにしてもよい。
【００２０】
Ｍバッファには、ハードディスク６やリムーバブルディスク７に格納されているＭＩＤＩファイルから読み出されたＭＩＤＩのフォームの曲データや、ＭＩＤＩインターフェース５を介して入力されるノートオン、ノートオフやプログラムチェンジ等の各種ＭＩＤＩイベントが、その受信時刻と共に書き込まれる。受信時刻はタイマ４の値を用いることができる。イベントが書き込まれたＭバッファの状態を図２（ｃ）に示しているが、デュレーションと受信されたＭＩＤＩイベントが組として書き込まれている。このデュレーションはその直前に受信されたＭＩＤＩイベントの受信時刻と、今回受信されたＭＩＤＩイベントの受信時刻との時間間隔を示している。なお、この図に示す例では、データ数を示す位置にデータ数が「２」と示されており、デュレーションとイベントとの組が２組分Ｍバッファに格納されていることが示されている。
【００２１】
また、Ｍバッファはリングバッファとして使用されており、その読出ポインタのアドレスと書込ポインタのアドレスとがＭバッファ内の所定位置に格納されている。これにより、音源ドライバがＭバッファの読出ポインタの位置から、音源ドライバ処理が未完のイベントデータを読み出して、音源ドライバ処理を実行できるようになる。すなわち、Ｍバッファの読出ポインタアドレスを読み出して、Ｍバッファの当該アドレス位置からデュレーションとイベントの組のデータを読み出して、そのイベントデータに応じた音源パラメータを発生する音源ドライバ処理を実行することができる。さらに、受信したＭＩＤＩイベントをＭバッファに書き込むＭＩＤＩ入力処理時には、Ｍバッファの書込ポインタアドレスを読み出して、Ｍバッファの当該アドレス位置からデュレーションとイベントの組のデータを書き込むようにすればよい。
【００２２】
Ｐバッファには、音源ドライバ処理により発生された音源パラメータがデュレーションデータと組とされて格納されている。このＰバッファの状態を図２（ｂ）に示しているが、このデュレーションの値はＭバッファに格納されていた時に音源ドライバ処理が行われたイベントと組とされていたデュレーションと同じ値である。なお、この図に示す例では、データ数を示す位置にデータ数が「３」と示されており、デュレーションとイベントとの組が３組分Ｐバッファに格納されていることが示されている。
また、Ｐバッファもリングバッファとして使用されており、その読出ポインタのアドレスと書込ポインタのアドレスとがＰバッファ内の所定位置に格納されている。これにより、発音タイミングとなったか否かを読出ポインタ位置のデュレーションをみて判定し、発音タイミングとなったときに、当該音源パラメータを音源レジスタに送ることができ、音源ドライバ処理で発生された音源パラメータのＰバッファへの格納は、書込ポインタ位置から書き込むことにより行えるようになる。
【００２３】
また、パート設定データエリアには、パート別の音色選択データ、音量データ、定位位置（パン）データ等が格納されている。発音開始時には、該音色選択データで指定された音色データ（図示せず）に基づいて楽音生成に使用する波形データ（図示せず）のアドレスパラメータや音量エンベロープの各種ＥＧパラメータ等が生成されると共に、該音量データや該定位位置データに基づいて音量パラメータが生成される。これらのパラメータは、これから発音を開始するチャンネルに対応した音源レジスタエリアの記憶領域に格納される。
さらにまた、音源ワークエリアには、ＣＰＵ１が楽音波形生成処理を実行する際に、発音チャンネルの波形生成演算に用いる各種レジスタ値等が格納される。
【００２４】
次に、本発明の楽音生成方法を図３に示すタイミングチャートに基づいて、図１に示す構成の処理装置が実行する場合の説明を行う。なお、図３（ａ）はＭＩＤＩ入力処理、エンベロープ波形生成処理と音源ドライバ処理、波形生成処理、波形再生処理のタイミングを示しており、図３（ｂ）はＭＩＤＩ入力に応じた従来と本発明における音源ドライバ処理量、および、波形生成処理量の変化を示している。
まず、図３（ａ）のＭＩＤＩ入力に示すように時刻ｔ１から時刻ｔ２までのフレームの期間内において、集中したＭＩＤＩイベントＭ１，Ｍ２，Ｍ３が連続して受信されたとする。このＭＩＤＩイベントＭ１，Ｍ２，Ｍ３は、順次受信時刻に応じたデュレーションと組とされてＭバッファに書き込まれる。
【００２５】
そして、図３（ａ）に示すように時刻ｔ２から始まる次のフレーム以降の期間において、音源ドライバ処理ａ〜ｇにおいてＭバッファからデュレーションとＭＩＤＩイベントの組からなるデータが読み出されてイベントに応じた音源ドライバ処理、およびエンベロープ波形生成処理が分散して実行される。図示する例では、ＭＩＤＩイベントＭ１，Ｍ２，Ｍ３に対応した音源ドライバ処理、およびエンベロープ波形生成処理は、処理ａないし処理ｇの７回に分散されて実行される。この際、エンベロープ波形生成処理が優先して実行され、生成されたエンベロープ波形データはＥメモリバッファに格納されるようになる。そして、所定時間分のエンベロープ波形が生成されてから、音源ドライバ処理が行われる。
【００２６】
また音源ドライバ処理では、イベントがノートオンイベントの際に発音チャンネル割当処理が行われるが、この発音チャンネル割当処理ではＥメモリバッファに格納されている各チャンネルのエンベロープ波形のレベルを比較して消音すべきチャンネルを決定することによりトランケート処理を行う。さらに、音源ドライバ処理では、イベントに応じた音源パラメータが発生されてデュレーションデータと共にＰバッファに書き込まれるようになる。そして、波形生成処理で生成する楽音波形サンプルの時刻がＰバッファに格納された音源パラメータと組とされているデュレーションの時刻に達したときに、Ｐバッファから音源レジスタに当該音源パラメータが送られ、その音源パラメータに基づいて音源において楽音波形生成処理が実行される。図示する例では、時刻ｔｎ−１から始まるフレームの期間内において、実行される楽音波形生成処理Ｂにおいて、ＭＩＤＩイベントＭ１，Ｍ２，Ｍ３に応じて生成されＰバッファに記憶されている音源パラメータが、それぞれ対応するデュレーションで指定される時刻位置で音源レジスタに導入され、そのタイミングで変化する音源レジスタの内容およびＥメモリバッファに格納されたエンベロープ波形データに応じて楽音波形サンプルが生成される。各波形生成処理Ａ、Ｂ・・・の終わりには、生成した１フレーム分の複数楽音波形サンプルを収納した出力バッファが再生デバイスに再生予約される。
【００２７】
そして、時刻ｔｎから始まる次のフレームにおいて、サンプリング周期毎に１サンプルづつ出力バッファから読み出され、ＤＡＣでアナログの楽音波形とされて発音される波形再生処理が行われるようになる。
従って、この際の制御遅れ時間Δｔは時刻ｔ１と時刻ｔｎとの時間間隔となる。たとえば、制御遅れ時間Δｔは１ｓｅｃ程度とすることができる。なお、１フレームは数ｍｓｅｃの周期とされている。
また、時刻ｔ３から時刻ｔ４までのフレームの期間中において、ＭＩＤＩイベントＭ４が入力されているが、この場合も同様にＭＩＤＩイベントＭ４は受信時刻に応じたデュレーションと組とされてＭバッファに書き込まれる。
【００２８】
そして、図３（ａ）の音源ドライバの処理として示すように時刻ｔ４から始まる次のフレーム以降の期間において、ＭバッファからデュレーションとＭＩＤＩイベントの組からなるデータが読み出されて、エンベロープ波形データが生成されると共に、発音チャンネル割当処理や音源パラメータ発生処理等のイベントに応じた音源ドライバ処理が分散して実行される。図示する例では、ＭＩＤＩイベントＭ４に対応したエンベロープ波形生成処理および音源ドライバ処理は、処理ｈ，ｉの２回に分散されて実行されて、処理が実行される毎に生成されたエンベロープ波形データはＥメモリバッファに、発生された音源パラメータはＰバッファに書き込まれるようになる。そして、波形生成処理で生成する楽音波形サンプルの時刻がＰバッファに格納された音源パラメータと組とされているデュレーションの時刻に達したときに、Ｐバッファから音源レジスタに当該音源パラメータが送られ、音源パラメータに基づいて楽音波形生成処理が音源で実行される。この結果、生成処理Ｃでは、時刻ｔｎ＋１から始まるフレームの途中で、ＭＩＤＩイベントＭ４に対応して変化をする楽音波形サンプルが生成され、再生デバイスに再生予約される。
【００２９】
ところで、従来の楽音生成方法ではＭＩＤＩイベントが入力されると、リアルタイムで音源ドライバ処理が実行されるため、ＭＩＤＩイベントが集中して入力された際に音源ドライバ処理の負荷が急激に増加するようになる。この様子を図３（ｂ）に示すが、ＭＩＤＩイベントＭ１，Ｍ２，Ｍ３が集中して入力されたときの音源ドライバ処理量は、急激に負荷が増加することが破線で示されている音源ドライバ処理量Ｊｄ’１となる。また、ＭＩＤＩイベントＭ４が入力されたときの音源ドライバ処理量は、瞬間的に負荷が増加することが破線で示されている音源ドライバ処理量Ｊｄ’２となる。
【００３０】
このように、従来では音源ドライバの処理量が急激に増大するために、音源に割り当てられる処理量が減少し発音数に影響を与えるが、本発明の楽音生成方法では、音源ドライバ処理は分散して実行されるため、その音源ドライバ処理量は、図３（ｂ）に示すように少量づつ分散された処理量Ｊｄ１から処理量Ｊｄ６となる。さらに、処理量Ｊｄ１から処理量Ｊｄ６には、従来、音源において処理されていたエンベロープ波形処理の処理量が含まれており、エンベロープ波形生成処理が音源ドライバ処理と同様に分散されて音源処理に先行して実行されるため、音源処理の負荷が軽減されて発音数が減少するおそれを極力防止することができるようになる。
【００３１】
このように本発明の楽音生成方法において、ＭＩＤＩイベントＭ１，Ｍ２，Ｍ３が集中して入力されたときは、図３（ｂ）に示す処理量Ｊｄ１から処理量Ｊｄ４の少量づつ分散されたエンベロープ波形生成処理量を含む音源ドライバ処理量となり、音源ドライバ処理量が急激に増加しないことからイベントが集中して入力されても、音源処理には十分な処理量が割り当てられると共に、先行して実行されるエンベロープ波形生成処理の分音源処理が軽減されるので、発音数に影響を与えないことが理解される。また、ＭＩＤＩイベントＭ４が入力されたときは、図３（ｂ）に示すように少量づつ分散されたエンベロープ波形処理および音源ドライバ処理の処理量Ｊｄ５、Ｊｄ６となり、この処理量Ｊｄ５、Ｊｄ６は急激に増加せず発音数に影響を与えない。
なお、音源で実行される波形生成の処理量Ｊｗは、発音数に応じて変動するが、音の持続性から急激に変動することはなく、その処理量は大きいが図３（ｂ）に示すように緩やかに変動するようになる。
【００３２】
次に、本発明の楽音生成方法が自動演奏のアプリケーションソフト（音楽ソフト）として、図１に示す処理装置で実行される場合のフローチャートを図４に示す。
音楽ソフト処理が起動されると、まず、ステップＳ１において各種レジスタのクリアや、表示器８に表示する画面の準備処理などの初期設定が行われる。ついで、ステップＳ２において起動要因が存在するか否かのチェックが行われる。起動要因としては、（１）再生中の曲データのイベントタイミングとなったこと、（２）ＭＩＤＩイベントが入力されたタイミングであること、（３）ＣＰＵ１の能力に余裕ができたこと（空き時間）が検出された、あるいは、一定期間、例えば１フレーム分の時間の経過がソフトウェアタイマにより検出されたこと、（４）１フレームが終了したタイミングであること、（５）曲データの再生ボタンのダブルクリック、パート音量制御操作のされたタイミングであること、（６）終了ボタンがダブルクリックされたタイミングであることの６通りの要因が存在している。
なお、起動要因（３）において、「空き時間の検出」の方法を採用すれば、ＣＰＵ１の負荷が重くないときに音源ドライバ処理を分散して実行することができる。また、「一定期間の経過検出」の方法を採用すれば、音源ドライバ処理を一定期間を単位として分散することができる。該一定期間の長さをパラメータで変化すれば、処理の分散の程度を制御することができる。
【００３３】
そこで、ステップＳ２において前記６通りのうちの１つでも起動要因があるか否かがステップＳ３で判定され、起動要因が発生していることが検出されたときにはステップＳ４に進み、起動要因が１つも検出されないときにはステップＳ２に戻って、起動要因の発生を待つようになる。
ステップＳ４では、前記起動要因（１）が検出されたときに、ステップＳ５にて自動演奏処理が実行されて、ステップＳ２に戻る。この自動演奏処理では、ＭＩＤＩファイルから読み出された曲データに応じて楽譜通りのタイミングでＭＩＤＩのフォームのイベントを発生する処理が行われる。なお、起動要因（１）に応じて発生したＭＩＤＩフォームのイベントも、入力イベントとして起動要因（２）の要因となる。
【００３４】
また、前記要因（２）が検出されたときは、ステップＳ４からステップＳ６に進みＭＩＤＩ入力処理が行われ、ステップＳ２に戻る。このＭＩＤＩ入力処理のフローチャートを図５に示すが、ＭＩＤＩ入力処理が起動されるとステップＳ２１にて発生されたＭＩＤＩイベントが受け取られる。ついで、ステップＳ２２にて受け取ったＭＩＤＩイベントを、受信時刻と共にＭバッファに書き込む処理が行われる。これにより、入力されたＭＩＤＩイベントは順次Ｍバッファに書き込まれていくようになる。
【００３５】
さらに、起動要因（３）が検出されたときには、ステップＳ４からステップＳ７に進み音源ドライバ処理１が実行され、ステップＳ２に戻る。この音源ドライバ処理１のフローチャートを図６に示すが、音源ドライバ処理１が起動されると、ステップＳ３１にてＭバッファ内に音源ドライバ処理が終了していない未完のイベントがあるか否かが判定される。ここで、音源ドライバ処理が未完のイベントが検出されると、ステップＳ３２に分岐してエンベロープ（ＥＧ）波形が所定時間分作成されているか否かが判定される。そして、ＥＧ波形の作成が未完と検出されると、ステップＳ３４に進んで所定サンプル数分のＥＧ波形を生成するＥＧ波形生成処理が実行され、生成されたＥＧ波形サンプルが図２（ａ）に示すＥメモリバッファに格納される。
【００３６】
また、ステップＳ３４のエンベロープを生成する処理が複数回実行されてＥＧ波形の作成が完了していると検出された場合は、ステップＳ３３に分岐して所定演算量の部分的な音源ドライバ処理が行われる。さらに、ステップＳ３１にてＭバッファ内に音源ドライバ処理が終了していない未完のイベントがないと検出された場合には、ステップＳ３５に進んでＥＧ波形が所定時間分作成されているか否かが判定される。そして、ＥＧ波形の作成が未完と検出されると、ステップＳ３４に分岐して所定サンプル数分のＥＧ波形を生成するＥＧ波形生成処理が実行され、生成されたＥＧ波形サンプルが図２（ａ）に示すＥメモリバッファに格納される。
また、ＥＧ波形の作成が完了している場合には、音源ドライバ処理１は終了する。
【００３７】
このような音源ドライバ処理１は、空き時間あるいは１フレーム以上の所定周期のタイミングとなる毎（起動要因（３））に起動されて、ＥＧ波形は所定サンプル数分だけ生成され、音源パラメータは部分的にだけ発生されるため、図３（ｂ）に示すように、音源ドライバ処理量ＪＤ１〜ＪＤ６は少量づつの処理量となるのである。
なお、音源ドライバ１の処理では先行して所定時間分のＥＧ波形を作成しておくようにしているが、この所定時間は調節可能である。すなわち、リアルタイム性を重視する場合には、Ｅバッファメモリのエリアを小さくして短い時間分のＥＧ波形を作成するようにすればよく、ＣＰＵ１の負荷を分散させて安定な動作を重視する場合には、Ｅバッファメモリのエリアを大きくして長い時間分のＥＧ波形を作成するようにすればよい。
【００３８】
また、音源ドライバ処理１の際の未完のイベントの検出は、前記図２（ｃ）に示すＭバッファ内の格納データ数が１以上であることを検出すればよい。すなわち、格納データ数が書かかれている部分をアクセスすることにより未完のイベントの有無を検出することができ、未完のイベントがあるときは、その読出ポインタ位置からデータを読み出してエンベロープ波形生成処理あるいは音源パラメータ発生処理を行えばよい。なお、Ｍバッファに表示された格納データ数は音源ドライバ処理が終了していない未完のデータ数であり、このデータ数は書込ポインタと読出ポインタとの間のデータ数に相当し、イベントの音源ドライバ処理が終了する毎に読出ポインタは次のイベントのデュレーションのアドレス位置に移動されて、データ数は「１」だけデクリメントされる。
【００３９】
次に、ステップＳ３３にて行われる音源ドライバ処理の一例としてイベントがノートオンの際に行われる音源ドライバ処理（ノートオン）のフローチャートを図７に示す。
音源ドライバ処理（ノートオン）が起動されると、ステップＳ４１にて発音開始の準備を行うためにイベント中に含まれているパートナンバ情報、ノートコード情報、および、ベロシティ情報を受け取る。ついで、ステップＳ４２にて発音すべきチャンネルの発音割当がＥＧレベルを比較することで行われる。このＥＧレベル比較は、各チャンネルのエンベロープデータを比較することで行われ、もっともエンベロープが進行していてそのレベルが小さいチャンネルがトランケートされる。この処理のために、ＥＧ波形生成処理が音源ドライバ処理に優先して実行されるのである。ただし、ベース音の音色選択データが設定されているパートについてはＥＧレベル比較処理の対象とせず最後まで発音させるのが好適である。
【００４０】
ついで、ステップＳ４３にて指定パートの音色に従って、音源パラメータを発生すると共に、発生された音源パラメータをＰバッファに書き込む処理が行われる。
なお、図７に示す例ではステップＳ４２及びステップＳ４３の処理を、１回の音源ドライバ処理（ノートオン）で実行するようにしているが、１回の音源ドライバ処理（ノートオン）において、ステップＳ４２の処理あるいはステップＳ４３の処理のいずれかの処理を行うようにして、２回の音源ドライバ処理（ノートオン）で２つの処理を行うようにしてもよい。また、ステップＳ４３において発生する全音源パラメータの１／ｎづつを、１回毎の音源ドライバ処理（ノートオン）において発生するようにしてもよい。
【００４１】
図４に示すフローチャートに戻り、前記起動要因（４）が検出されたときは、ステップＳ４からステップＳ８に進み楽音波形サンプルを生成する音源エンジン処理が行われステップＳ２に戻る。この音源エンジン処理のフローチャートを図８（ａ）に示すが、各フレームの開始時に音源エンジン処理が起動され、ステップＳ５１にてＰバッファから読み出された音源パラメータの再生が行われ、発音タイミングが到来した音源パラメータが、Ｐバッファから音源レジスタに送られる。ついで、ステップＳ５２にて、波形生成すべき楽音波形のフレーム（現フレーム）の時刻範囲に関し、Ｍバッファに格納されているイベントの音源ドライバ処理およびエンベロープ波形生成処理が未完か否かが判定される。これは、エンベロープ波形生成処理および音源ドライバ処理が分散して行われるため、発音タイミングに達しているにもかかわらず、波形生成に必要なすべてのエンベロープ波形あるいは音源パラメータが得られていないことを検出するために行われる。
【００４２】
ここで、当該イベントに対する音源ドライバ処理が未完と検出された場合は、ステップＳ５３に分岐して前記時刻範囲で未生成のエンベロープ波形の生成、あるいは、前記時刻範囲で未完のイベントに対応する音源パラメータを発生するための音源ドライバ処理２が行われ、エンベロープ波形が生成された場合はＥバッファメモリに格納され、音源パラメータが発生された場合は音源レジスタに送られる。これにより、楽音波形を生成するためのすべてのエンベロープ波形および音源パラメータが用意されたことになる。また、エンベロープ波形生成処理および音源ドライバ処理が未完のイベントはないと検出されたときは、ステップＳ５３の処理はスキップされる。そして、ステップＳ５４にてＥバッファメモリに記憶されているエンベロープ波形により音量やピッチが制御され、かつ、音源レジスタに格納されている音源パラメータに応じた楽音波形サンプルが１フレーム周期に対応するサンプル数分形成され、それらを複数チャンネル分混合した１フレーム分の楽音波形サンプルが出力バッファに格納される。ついで、ステップＳ５５にて出力バッファに格納されている各チャンネルの楽音波形サンプルが足し込まれた楽音波形サンプルに、エフェクト処理が施されて再度出力バッファに格納される。そして、ステップＳ５６にて出力バッファの楽音波形サンプルが再生デバイスに再生予約される。
これにより、次フレームにおいてサンプリング周期毎に出力バッファから１サンプルづつ読み出されて、ＤＡＣ等の再生デバイスによりアナログの楽音信号に変換されて発音されるようになる。
【００４３】
図４に示すフローチャートに戻り、前記起動要因（５）が検出されたときは、ステップＳ４からステップＳ９に進みその他の処理が行われステップＳ２に戻る。その他の処理としては、曲データの再生ボタンがダブルクリックされて再生が指示されたときに行われる再生処理、あるいは、パート別の音量を設定する操作子が操作されてパート別音量設定が行われたとき行われるパート音量制御処理等がある。再生処理は、曲データの再生ボタンがダブルクリックされて再生が指示されたときに起動され、指定された曲データをハードディスク６やリムーバブルディスク７等に記憶されているＭＩＤＩファイルにアクセスして得る処理等の、再生にかかる処理が行われ、前記ステップＳ５に関して説明された自動演奏がスタートされる。また、パート別の音量を設定する操作子が操作された時は、図８（ｂ）に示すフローチャートのパート音量制御処理が起動されて、パート別の音量制御処理が実行される。
【００４４】
図８（ｂ）に示すフローチャートにおいて、パート音量制御処理が起動されると、ステップＳ６１にて音量操作されたパートのパートナンバと、そのパートに設定された音量データを受け取る。ついで、ステップＳ６２にて音量操作された指定パートの音量の設定データが、ユーザが操作した操作子の操作量に応じて書き換えられる。この設定データは、前記図２（ａ）に示すＲＡＭ３のパート設定データエリアに格納されている。続いて、ステップＳ６３にて指定パートの発音中あるいは待機中のチャンネルがあるか否かが判定される。ここで、発音中のチャンネル、あるいは、まだＰバッファに音源パラメータが格納されている待機中のチャンネルが検出されたときは、ステップＳ６４に進む。
【００４５】
このステップＳ６４にて、発音中のチャンネルが検出されたときは、音源レジスタ内の検出されたチャンネルに対応する音量データが操作子の操作量に応じて書き換えられる。また、待機中のチャンネルが検出されたときには、Ｐバッファ内の検出されたチャンネルに対応する音量データが操作子の操作量に応じて書き換えられる。なお、指定されたパートの発音中あるいは待機中のチャンネルが検出されないときは、ステップＳ６４の処理はスキップされる。
なお、図３（ａ）に示す時間Δｔが１ｓｅｃ以内に設定されているときは、待機中のチャンネルの音量データの書き換えを行わず、Δｔが１ｓｅｃを越えて設定されているときだけ音量データの書き換えを行うようにしてもよい。その場合、新たに設定された音量データは、その後に発生するＭＩＤＩイベントのみに対して作用する。
このように、エンベロープ波形および音源パラメータを発音タイミングより先行して分散生成するようにしても、楽音波形は発音タイミングとなるまで生成しないためパート別の音量制御をリアルタイムで行うことができる。
【００４６】
図４に示すフローチャートに戻って起動要因（６）が検出されたときは、ステップＳ４からステップＳ１０に進み、音源ソフト処理を終了させるための関連する画面の表示を消去する等の所定の終了処理が行われ、音楽ソフト処理が終了される。
なお、前記起動要因において、起動要因（１）および（２）の優先度が一番高く、ついで起動要因（４）の優先度とされ、ついで起動要因（５）の優先度が高く、最も優先度の低い起動要因は起動要因（３）および（６）とされる。
【００４７】
以上の説明では、ＭバッファはＲＡＭ３に設定されていたが、必ずしもＲＡＭ３に設定することなく、すでにハードディスク６やリムーバブルディスク７に記憶されている再生中の曲データ上の、再生位置の少し先の領域をＭバッファと見なすようにしてもよい。また、Ｐバッファに格納されている音源パラメータは、組とされたデュレーションの時刻に達したときに音源レジスタに転送されたが、デュレーションの時刻に達したときに音源がＰバッファ上の音源パラメータに基づいて楽音波形サンプルを生成することにより、Ｐバッファを音源レジスタとして使用するようにしてもよい。
【００４８】
なお、エンベロープ波形データは、楽音波形サンプルの８サンプルに１回更新されるようにしたが、本発明はこれに限ることはなく、１６サンプル、３２サンプル等の任意の数のサンプル毎に１回更新されるようにしてもよい。このサンプル数が多くなるにつれてエンベロープ波形生成処理の負荷は軽くなる。
また、図３に示す「制御遅れ時間Δｔ」は、時間フレーム単位の遅れではなく「ａフレーム（ａは０を含む正の整数）と３分の２」等の遅れでもよい。
さらに、以上の説明では楽音データはＭＩＤＩフォームで表されるとしたが、これに限らず楽音の発生／停止、音色、音量等を指示することのできるデータであればいかなるデータで楽音データを表わすようにしてもよい。
【００４９】
さらに、本発明においては、音源エンジンを起動する楽音生成タイミングとして起動要因（４）１フレーム毎の例が示されているが、１フレーム毎に限ることはなく２フレームに１回とか１フレームに３回とかとしてもよい。さらにまた、音源エンジンが１回起動される毎に生成する楽音波形データの量も、１フレーム分に限ることはない。つまり固定した時間長のフレームを単位とした動作を、必ずしも行う必要はない。
【００５０】
さらにまた、本発明においては、音源エンジンが起動されたとき、まずステップＳ５２で音源パラメータの生成が完了しているか否か判定して生成できていない音源パラメータを生成するようにしていたが、この処理を省略するようにしてもよい。その場合、該起動の時点で生成されていた音源パラメータだけが楽音生成に使用され、未生成の音源パラメータは無視される。音源パラメータが分散生成できないのは全体として処理が重くなっている場合であり、この省略により処理の削減を図ることができる。
さらにまた、本発明の楽音生成方法を、Windows （米マイクロソフト社のパソコン用ＯＳ）やその他のオペレーティングシステムの動作する汎用コンピュータ上で、１つのアプリケーションプログラムとして、ゲームソフトやカラオケソフト等の他のアプリケーションプログラムと並列実行させてもよい。
【００５１】
【発明の効果】
本発明は以上のように構成されているので、受け取ったＭＩＤＩのフォームとされた楽音データをバッファに記憶しておき、音源ドライバがバッファに記憶された楽音データを非同期で分散処理することにより音源パラメータを発生すると共に、楽音データに応じたエンベロープ波形を先行して生成するようにしている。従って、イベントが集中して発生しても、音源ドライバの処理は分散して実行されるため、ＣＰＵ負荷が急激に増加することがなく、さらに、エンベロープ波形の生成処理が発音タイミングより先行して実行されていることから、音源処理の負荷を軽くすることができる。したがって、一時的な処理の集中による発音数の減少を防止することができる。
【００５２】
また、エンベロープ波形を先行して生成しているため、音源ドライバ処理において、生成されたエンベロープ波形のレベル状態を検出することが可能となり、各チャンネルのエンベロープ波形のレベルをみる発音チャンネル割当処理を行うことができるようになる。
さらにまた、音源ドライバ処理およびエンベロープ波形生成処理までを先行して実行し、波形生成は発音タイミングになったときに実行するようにしているので、生成される楽音に対し、パート別の音量制御やパン制御等の処理をリアルタイムで行うことができる。
【図面の簡単な説明】
【図１】  本発明の楽音生成方法が実行される処理装置の構成例を示すブロック図である。
【図２】  本発明のＲＡＭ上に設定された各種バッファエリアを示す図である。
【図３】  本発明の楽音生成方法の各処理を行うタイミングを示すタイミングチャート、および、本発明と従来の音源ドライバ処理量と波形生成処理量の変動を示す図である。
【図４】  本発明の楽音生成方法における音楽ソフト処理のフローチャートである。
【図５】  本発明の楽音生成方法におけるＭＩＤＩ入力処理のフローチャートである。
【図６】  本発明の楽音生成方法における音源ドライバ処理１のフローチャートである。
【図７】  本発明の楽音生成方法における音源ドライバ処理（ノートオン）のフローチャートである。
【図８】  本発明の楽音生成方法における音源エンジン処理、および、パート音量制御処理のフローチャートである。
【図９】  従来の楽音生成装置におけるタイミングチャートを示す図である。
【符号の説明】
１  ＣＰＵ、２  ＲＯＭ、３  ＲＡＭ、４  タイマ、５  ＭＩＤＩインターフェース、６  ハードディスク、７  リムーバブルディスク、８  表示器、９  キーボード＆マウス、１０  音源、１１  ＣＰＵバス
【図１】
0003637578.tif 000002
【図２】
0003637578.tif 000003
【図３】
0003637578.tif 000004
【図４】
0003637578.tif 000005
【図５】
0003637578.tif 000006
【図６】
0003637578.tif 000007
【図７】
0003637578.tif 000008
【図８】
0003637578.tif 000009
【図９】
0003637578.tif 000010