(57)【特許請求の範囲】
【請求項１】
１または複数の指定された楽音を発生するための１または複数の発生命令を受け取る第１のステップと、
前記発生命令に応答して、各指定された楽音を複数の発音チャンネルのうちの各１つに割り当て、該指定された楽音の制御データを各指定された楽音が割り当てられた各発音チャンネルに対応するチャンネルレジスタに書き込む第２のステップと、
演算開始命令を順次発行する第３のステップと、
各演算開始命令に応答して、前記チャンネルのチャンネルレジスタに記憶された制御データに基づき各発音チャンネル毎に複数サンプル分の波形データを生成する第４のステップと、
前記第４のステップで各発音チャンネルにつき生成された波形データを、前記複数サンプルの各サンプル毎に混合し、混合サンプルデータを生成する第５のステップと、
前記第５のステップで前記複数サンプルの各々についての新たな混合サンプルデータの生成が完了したとき、それ以前に生成された前記混合サンプルデータの再生が完了した後に、該新たな混合サンプルデータの再生が行われるように予約する第６のステップと、
各サンプリング周期毎に順次サンプル点の前記混合サンプルデータを、前記第６のステップの予約にしたがって順次出力する第７のステップと
を具備することを特徴とする音生成方法。
【請求項２】
複数の指定楽音を発生するための発生命令を発行する第１のステップと、
各指定楽音を複数の発音チャンネルの中から指定されたいずれかの発音チャンネルに割り当て、該指定楽音の制御データを各指定された発音チャンネルのチャンネルレジスタに書き込んで記憶させる第２のステップと、
所定時間間隔で演算開始命令を発行する第３のステップと、
前記第３のステップで発行された各演算開始命令に応じて各チャンネルの楽音生成演算を順次実行し、前記チャンネルのチャンネルレジスタに記憶された制御データに基づき各指定された発音チャンネル毎に複数サンプル分の波形データを算術的に生成する第４のステップと、
前記第４のステップで指定された発音チャンネルにつき生成された波形データを、各サンプル毎に混合し、混合サンプルデータを生成する第５のステップと、
前記複数サンプルの各々についての前記混合サンプルデータを、サンプリング周期毎にアナログ信号に変換する第６のステップとからなり、
前記第４のステップの楽音生成演算においては、各指定された発音チャンネル毎に、前記チャンネルレジスタからの１回の制御データの読出しに基づいて、該制御データの読み出された発音チャンネルの複数サンプル分の波形データを生成し、該波形データ生成後に前記チャンネルレジスタに制御データを書き込むようにしたことを特徴とする音生成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演算処理装置を備える汎用処理装置により楽音を生成できるようにした音生成方法に関するものである。
【０００２】
【従来の技術】
従来の楽音生成装置は、通常、ＭＩＤＩ（Ｍｕｓｉｃａｌ  Ｉｎｓｔｒｕｍｅｎｔ  Ｄｉｇｉｔａｌ  Ｉｎｔｅｒｆａｃｅ）、鍵盤、あるいはシーケンサ等からの演奏情報を入力する演奏入力部、楽音波形を生成する音源部、入力した演奏情報に応じて前記音源部を制御するマイクロプロセッサ（ＣＰＵ）等から構成されていた。ＣＰＵは、入力した演奏情報に応じて、チャンネルアサイン、パラメータ変換等の音源ドライバ処理（演奏処理）を実行し、音源部の割り当てたチャンネルに変換したパラメータと発音開始指示（ノートオン）を音源部に供給する。音源部は、ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）等の電子回路（ハードウェア）で構成され、供給されたパラメータに基づいて楽音波形を生成する。
このため、楽音生成装置は楽音を生成するための専用機器となってしまい、楽音を生成する時には専用の楽音生成装置を用意する必要があった。
【０００３】
そこで、これを解決するために、ＣＰＵによりアプリケーションプログラムを実行し、アプリケーションプログラムに基づいて楽音を生成する楽音生成方法が提案されている。この楽音生成方法においては、楽音を生成するアプリケーションプログラムのほかに他のアプリケーションプログラムを実行させることができ、他の機能も実行させることのできる汎用の演算処理装置により実行することができるものである。
【０００４】
【発明が解決しようとする課題】
ところで、演算処理装置（ＣＰＵ）を備える汎用の装置によりアプリケーションプログラムを実行させて楽音を生成する場合、従来は１サンプリング周期（デジタル・アナログ変換器の変換タイミング）毎に各チャンネルの楽音波形サンプルを発音チャンネル分演算生成するようにしている。従って、ＣＰＵは各発音チャンネルの処理を行う場合、まず、前回の当該発音チャンネルの演算に用いた各種レジスタ値をメモリからＣＰＵのレジスタに読み出す等の準備処理が行われる。また、当該発音チャンネルの楽音生成処理後には次回の処理のため、前記レジスタ値をメモリに書き込む必要がある。
すなわち、各発音チャンネルの楽音波形サンプルの演算処理を１サンプルずつ生成するようにしていたため、楽音を生成する楽音生成処理以外の、準備処理に多くのＣＰＵの演算時間が費やされ（オーバヘッドが大きくなる）、演算効率が悪くなり応答や楽音生成処理が遅くなるという問題点があった。
【０００５】
また、上記楽音生成方法において、演奏処理とは、入力した演奏情報に基づき、生成される楽音を制御する制御情報を作成する処理である。他方、音源処理とは、作成された制御情報に基づき楽音の波形データを生成する処理である。
例えば、通常は押鍵検出等の演奏処理を実行し、この演奏処理に対して各サンプリング周期で音源処理を割り込み実行して、１サンプル分の波形データを生成した後、演奏処理に復帰するようにしている。
【０００６】
演奏情報（ＭＩＤＩ）は、演奏者の演奏操作やシーケンサでのイベントの再生により発生し、演奏情報が発生した場合には演奏処理により演奏情報が処理される。つまり、演奏情報の発生した時点では、ＣＰＵは、通常の音源処理に加えて演奏処理を実行しなければならないため、非定期的に発生する演奏情報により、演算量が一時的に増加することになる。しかしながら、従来の楽音生成方法においてはこれに対応しておらず、音源処理は、演奏情報のあるなしにかかわらず定期的に優先実行され、場合によっては演奏処理が遅れてしまうという問題点があった。
なお、このような演奏処理の遅れを防止するために、演奏処理の優先度を上げることが考えられるが、このようにすると今度は、一時的に発音数が減少したり、楽音波形が途切れてしまうという問題が発生することになる。
【０００７】
そこで、本発明は上記した問題点を解決することのできる音生成方法を提供することを目的としている。
【０００８】
【課題を解決するための手段】
前記目的を解決するために、本発明の音生成方法は、１または複数の指定された楽音を発生するための１または複数の発生命令を受け取る第１のステップと、前記発生命令に応答して、各指定された楽音を複数の発音チャンネルのうちの各１つに割り当て、該指定された楽音の制御データを各指定された楽音が割り当てられた各発音チャンネルに対応するチャンネルレジスタに書き込む第２のステップと、演算開始命令を順次発行する第３のステップと、各演算開始命令に応答して、前記チャンネルのチャンネルレジスタに記憶された制御データに基づき各発音チャンネル毎に複数サンプル分の波形データを生成する第４のステップと、前記第４のステップで各発音チャンネルにつき生成された波形データを、前記複数サンプルの各サンプル毎に混合し、混合サンプルデータを生成する第５のステップと、前記第５のステップで前記複数サンプルの各々についての新たな混合サンプルデータの生成が完了したとき、それ以前に生成された前記混合サンプルデータの再生が完了した後に、該新たな混合サンプルデータの再生が行われるように予約する第６のステップと、各サンプリング周期毎に順次サンプル点の前記混合サンプルデータを、前記第６のステップの予約にしたがって順次出力する第７のステップとを具備するようにしたものである。
【０００９】
また、前記目的を達成することのできる本発明の他の音生成方法は、複数の指定楽音を発生するための発生命令を発行する第１のステップと、各指定楽音を複数の発音チャンネルの中から指定されたいずれかの発音チャンネルに割り当て、該指定楽音の制御データを各指定された発音チャンネルのチャンネルレジスタに書き込んで記憶させる第２のステップと、所定時間間隔で演算開始命令を発行する第３のステップと、前記第３のステップで発行された各演算開始命令に応じて各チャンネルの楽音生成演算を順次実行し、前記チャンネルのチャンネルレジスタに記憶された制御データに基づき各指定された発音チャンネル毎に複数サンプル分の波形データを算術的に生成する第４のステップと、前記第４のステップで指定された発音チャンネルにつき生成された波形データを、各サンプル毎に混合し、混合サンプルデータを生成する第５のステップと、前記複数サンプルの各々についての前記混合サンプルデータを、サンプリング周期毎にアナログ信号に変換する第６のステップとからなり、前記第４のステップの楽音生成演算においては、各指定された発音チャンネル毎に、前記チャンネルレジスタからの１回の制御データの読出しに基づいて、該制御データの読み出された発音チャンネルの複数サンプル分の波形データを生成し、該波形データ生成後に前記チャンネルレジスタに制御データを書き込むようにしたものである。
【００１０】
このような本発明によれば、複数サンプルの各々についての新たな混合サンプルデータの生成が完了したとき、それ以前に生成された混合サンプルデータの再生が完了した後に、新たな混合サンプルデータの再生が行われるように予約するようにしたので、途切れることなく楽音を再生を行うことができる。
また、チャンネルレジスタからの１回の制御データの読出しに基づいて、制御データの読み出された発音チャンネルの複数サンプル分の波形データを生成し、波形データ生成後に前記チャンネルレジスタに制御データを書き込むようにしたので、複数の楽音波形サンプルの演算について１回だけ各発音チャンネルの準備処理を行えば良く、オーバヘッドが小さくすることができる。このため、生成された楽音の質を向上することができると共に、同時発音チャンネル数を増加することができる。
【００１１】
【発明の実施の形態】
本発明の楽音生成方法の各実施の形態を実行することのできる楽音生成装置の構成を図１に示す。
この図において、１はアプリケーションプログラム等を実行して楽音波形サンプルの生成等の各種制御を行うマイクロプロセッサ（ＣＰＵ）、２はプリセット音色データ等が記憶されているリードオンリメモリ（ＲＯＭ）、３はＣＰＵ１のワークメモリエリアや音色データエリア、入力バッファエリア、チャンネルレジスタエリア、出力バッファエリア等の記憶エリアを有するランダムアクセスメモリ（ＲＡＭ）４は時刻を指示すると共に、タイマ割り込み処理のタイミングをＣＰＵ１に指示するタイマ、５はＭＩＤＩイベントが入力されると共に、生成されたＭＩＤＩイベントを出力するＭＩＤＩインターフェース、６は英字、かな、数字、記号などのキーと備えるいわゆるパソコン用のキーボードである。
【００１２】
７はユーザが楽音生成装置と対話するためのディスプレイ（モニタ）、８は楽音を生成するプログラム等のアプリケーションプログラムがインストールされていると共に、楽音波形サンプルを生成するために使用する楽音波形データ等が記憶されているハードディスク（ＨＤＤ）、９はＲＡＭ３の一部のＣＰＵにより指定されたエリアに記憶されている楽音波形サンプルのデータをＣＰＵ１を介することなく直接に受渡を行い、一定のサンプリング周期（例えば、４８ｋＨｚ）毎にデジタル・アナログ変換器（ＤＡＣ）１０に供給する再生部（ＤＭＡ；Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）、１０は楽音波形サンプルのデータを受け取りアナログ信号に変換するデジタル・アナログ変換器（ＤＡＣ）、１１はＤＡＣ１０から出力されたアナログ信号に変換された楽音信号を放音するサウンドシステムである。
以上の構成はパソコン、ワークステーション等と同等であり、それらの上で本発明の楽音発生方法を実施することができる。
【００１３】
前記したようにＲＡＭ３は種々のデータが記憶されるエリアを有しているが、その内の音色データが記憶されるエリアを図２に、入力バッファのエリアを図３に、チャンネルレジスタのエリアを図４に、出力バッファのエリアを図５に示す。
図２に示すエリアにおいて、ＰＤ１，ＰＤ２，・・・，ＰＤ１６は１６種類分の音色データであり、それぞれの音色データは各音域の波形を指定するデータ（各音域波形指定）、ビブラート等をかける時に使用するＬＦＯ（Ｌｏｗ  Ｆｒｅｑｕｅｎｃｙ  Ｏｓｃｉｌｌａｔｏｒ）制御用のデータ（ＬＦＯ制御ＯＤ）、音色フィルタ特性を制御するフィルタエンベロープの発生制御用のデータ（ＦＥＧ制御ＯＤ）、振幅を制御するエンベロープの発生制御用のデータ（ＡＥＧ制御ＯＤ）、ベロシティにより楽音の立ち上がりの速さ等を変えるタッチ制御用のデータ（タッチ制御ＯＤ）、その他のデータ（その他ＯＤ）からなっている。
【００１４】
なお、ＯＤはオリジナルデータであることを示しており、発音指示時のタッチデータ，音高データ等に応じてこれらのオリジナルデータに加工を施して音源が使用する発音用のデータを作成するようにしている。
また、ＷＤ１，ＷＤ２，・・・，ＷＤｎは波形データであり、入力される音高データに応じて、ＰＤ１，ＰＤ２，・・・，ＰＤ１６の音色データにおける各音域波形指定データによりいずれかの波形データが指定される。
【００１５】
次に図３に示す入力バッファのエリアにはＭＩＤＩインターフェース５を介して入力されるノートオン、ノートオフや各種イベントのＭＩＤＩイベントデータＩＤ１，ＩＤ２，ＩＤ３，・・・が順次書き込まれ、このＭＩＤＩイベントデータＩＤ１，ＩＤ２，ＩＤ３，・・・が読み出されることによりそのイベント処理が楽音生成装置内において実行される。
このＭＩＤＩイベントデータＩＤ１，ＩＤ２，ＩＤ３，・・・は、ＭＩＤＩイベントのデータ内容（例えば、データ１内容）と、そのデータの発生時刻（データ１発生時刻）とにより構成される。この発生時刻はＭＩＤＩイベントデータ受信時にタイマ４の現在時刻を取り込むことにより知ることができる。
【００１６】
次に図４に示すエリアは、それぞれ互いに独立した複数の楽音の生成を制御するためのデータを記憶するチャンネル（ｃｈ）レジスタとして使用され、この例では１ｃｈ，２ｃｈ，・・・，３２ｃｈの３２チャンネル分のエリアが用意されている。各チャンネルのエリアはノートナンバ、波形指定データ（波形指定Ｄ）、ＬＦＯ制御データ（ＬＦＯ制御Ｄ）、フィルタエンベロープ制御データ（ＦＥＧ制御Ｄ）、振幅エンベロープ制御データ（ＡＥＧ制御Ｄ）、ノートオンデータ、その他のデータ（その他Ｄ）、およびＣＰＵ１がプログラム実行時に使用するワークエリアからなっている。
この波形指定Ｄ、ＬＦＯ制御Ｄ、ＦＥＧ制御Ｄ、ＡＥＧ制御Ｄは前記したオリジナルデータに加工が施された発音用のデータである。
【００１７】
次に図５に示すエリアは複数の出力バッファ用のエリアであり、順次交代して発音波形生成用の出力バッファＸとして使用されている。この出力バッファは、後述するように演算処理により生成された各発音チャンネルの楽音波形サンプルデータＳＤ１，ＳＤ２，ＳＤ３，・・・が生成される毎にチャンネル累算され格納される。出力バッファのいずれかが発音波形生成用の出力バッファＸとして指定され、波形生成演算に使用される。この出力バッファＸは２つ以上用意される。最も簡単な構成としては出力バッファＸを２個とし、片方に格納されているデータを再生部（ＤＭＡ）９に渡して再生している間に、もう片方に演算した次の楽音波形サンプルのデータを格納するダブルバッファ構成とすることができる。
【００１８】
なお、出力バッファのサイズは、１００ワード、５００ワード、１Ｋワード、５Ｋワード等任意に設定することができるが、サイズを大きくすると発音に遅れを生じ、サイズを小さくすると時間的マージンが減少し、一時的な演算量の増加時に応答が悪くなることになる。
そこで、リアルタイム性が要求されない、例えばシーケンサ演奏等の場合は、演奏タイミングを前にずらすことにより発音遅れを吸収できるため、出力バッファのサイズを大きくすることができる。一方、リアルタイムの演奏が必要とされる、例えば鍵盤演奏等の場合は、発音遅れを防止するため、バッファサイズは１００〜２００ワードとするのが好適である。
以上は、再生のサンプリング周波数が４０ｋＨｚ〜５０ｋＨｚの場合であり、サンプリング周波数を低く設定する場合は、発音遅れを防止するためもっと小さいサイズにする必要がある。
【００１９】
次に、本発明の楽音生成方法の第１の実施の形態ないし第５の実施の形態を説明するが、各実施の形態は前記図１に示す楽音生成装置によりそれぞれ実行することができるものである。
本発明の第１の実施の形態の楽音生成方法は、ＣＰＵ１が楽音を生成するアプリケーションプログラムを実行する各発音チャンネルの楽音生成処理において、複数楽音波形サンプル、例えば１００楽音波形サンプルまとめて生成するようにしたものである。すなわち、各発音チャンネルの処理において、ＤＡＣ１０のサンプリング周期の例えば１００サイクル分まとめて楽音波形サンプルが生成されるようになる。
【００２０】
そして、所定の計算時刻毎に全発音チャンネル分の楽音生成処理が実行され、生成された複数の楽音波形サンプルが１００サンプルとされた場合は、ＤＡＣ１０の１００サンプリング周期分のチャンネル累算値として順次累算され、前記した出力バッファに記憶される。出力バッファに記憶された楽音波形サンプルは、全発音チャンネル分の累算完了後に再生部（ＤＭＡ）９により、前記サンプリング周期毎に１サンプルずつ読み出され、ＤＡＣ１０に供給されてサウンドシステム１１から発音される。
なお、計算時刻は、複数の出力バッファを交代して用いて楽音生成処理を実行した場合に、楽音波形サンプルが途切れず読み出し再生できる間隔で発生されるように制御されている。
【００２１】
この第１の実施の形態の楽音生成方法によれば、各発音チャンネルの準備処理は、まとめて生成される複数の楽音波形サンプルの演算について１回だけ行えば良いため、全体の演算時間の内でこの準備処理に費やされる演算時間の割合が減少し、オーバヘッドを小さくすることができる。このため、生成される楽音波形サンプルの質の向上や同時発音数を増加することができる。
なお、計算時刻間の１区間（出力バッファのサイズに相当）をさらにｎ等分して、それに対応する時間間隔で発音波形演算を行い、最後のｎ個目の演算で完成した１区間分の楽音波形サンプルを単位として、再生部（ＤＭＡ）９が読み出すようにしてもよい。
【００２２】
次に、本発明の第２の実施の形態の楽音生成方法の説明を行う。
本発明の第２の実施の形態の楽音生成方法は、前記第１実施例と同様にＣＰＵ１が楽音を生成するアプリケーションプログラムを実行する各発音チャンネルの楽音生成処理において、複数の楽音波形サンプルをまとめて生成するようにしているが、さらに加えて入力データ、この例ではＭＩＤＩイベントがＭＩＤＩインターフェース５において受信される毎に、その時点までの発音波形演算を行うようにしている。そして、所定の計算時刻には予め定められた複数の楽音波形サンプル（１つの出力バッファ分のサンプル）の内、未演算の楽音波形サンプルのみの発音波形演算を行うようにしたものである。
【００２３】
これは、各発音波形演算では発音している発音チャンネルについての演算を行うのであるが、その中の入力データに応じて発音態様が変化するキーオンイベントあるいはキーオフイベント（ピッチベンド，音量変化）等がある発音チャンネルにおいては、対応を変化させずに発音を継続する発音チャンネルに比べて多くの演算処理が必要となる。
この場合、一定時間おきの計算時刻とすると、入力データが増加した時に、演算時間が発音態様が変化する発音チャンネルに多く占められてしまうため、結果的に演算できる発音チャンネル数が減少してしまうことになる。
特に、発音を開始する発音チャンネルについては、アドレスカウンタ、各種エンベロープ発生器の初期設定、Ｆナンバ発生等多くの初期設定処理が必要であり、演算処理時間が多くかかる。
【００２４】
この第２の実施の形態を図１２に示すタイミングチャートを参照しながらさらに説明すると、出力バッファは前記したダブルバッファ構成とされており、この２つの出力バッファがＡ，Ｂとされてその読み出しタイミングが同図（ｅ）に示されている。そして、各バッファＡ，Ｂの再生に要する時間がＴＡ  およびＴＢ  とされており、ＴＡ  ＝ＴＢ  とされている。
まず、出力バッファＡ用の計算対象となる時刻範囲ｔ０  〜ｔ１  において、同図（ａ）に示すように時刻ｔａ  でＭＩＤＩイベントを２つＭＩＤＩ受信部が受信すると、同図（ｂ）に示すように音源ドライバ部で処理が行われ、さらに同図（ｃ）に示すように音源部によりｔ０  〜ｔａ  間の楽音波形サンプルＡ１  が計算される。
【００２５】
なお、ＭＩＤＩ受信部は入力されたＭＩＤＩイベントを受信するＭＩＤＩインターフェース５を含み、前記したようにＭＩＤＩイベントのデータを入力バッファに発生時刻と共に書き込む。音源ドライバ部は入力バッファのデータあるいはパソコンキーボード６よりの入力を受け取り、音源チャンネルアサインおよび入力に従ってボイシングパラメータから音源パラメータへの変換を行う。また、音源部は音源パラメータを受け取り、波形データを加工して実際に発音する楽音波形サンプルを生成する。ＬＰＦ部は生成された楽音波形サンプル中の折り返しノイズ成分を除去する。そして、ＬＰＦ部の出力が出力バッファＡ，Ｂに書き込まれる。
なお、音源ドライブ、音源部、ＬＰＦ部はＣＰＵ１がアプリケーションプログラムを実行することにより実現される機能である。
【００２６】
次いで、時刻時刻ｔｂ  でＭＩＤＩイベントが１つＭＩＤＩ受信部において受信されると、同様に音源ドライバ部で処理が行われ、さらに音源部によりｔａ  〜ｔｂ  間の楽音波形サンプルＡ２  が計算される。
その後、時刻ｔ１  に達すると音源部によりｔｂ  〜ｔ１  間の楽音波形サンプルＡ３  が計算される。この場合、時刻ｔａ  ，ｔｂ  においてキーオンイベントが入力されると、その発音初期処理も含めてこの時刻ｔ１  において演算処理される。さらに、ＬＰＦ部においてフィルタ処理が行われて出力バッファＡ用の楽音波形サンプルの生成が終了する。
【００２７】
次に、出力バッファＢ用の計算対象となる時刻範囲ｔ１  〜ｔ２  において、同図（ａ）に示すように時刻ｔｃ  で新たなＭＩＤＩイベントを３つＭＩＤＩ受信部が受信するが、音源部は楽音波形サンプルＡ３  を計算中なので、入力データは計算時間が割り当てられるまで入力バッファにおかれる。そして、楽音波形サンプルＡ３  の計算が終了し、さらにＬＰＦ部のフィルタ処理も完了すると、入力バッファ中のデータが音源ドライバ部で処理されて、音源部によりｔ１  〜ｔｃ  間の入力に対応する楽音波形サンプルＢ１  が計算される。この場合、計算処理が遅れても入力データの発生時刻も入力バッファに書き込まれているため、発音タイミングには影響しないようになる。
【００２８】
同様に、楽音波形サンプルＢ１  の計算時間中に新たなＭＩＤＩイベントを４つ受信するが、この入力データも楽音波形サンプルＢ１  の計算終了後に計算される。
これにより、楽音波形サンプルＢ２  はｔｃ  〜ｔｄ  間の入力に対応する楽音波形サンプルとなり、楽音波形サンプルＢ３  はｔｄ  〜ｔｅ  間の入力に対応する楽音波形サンプルとなり、楽音波形サンプルＢ４  はｔｅ  〜ｔ２  間の入力に対応する楽音波形サンプルとなる。
さらに、楽音波形サンプルＡ５  はｔ２  〜ｔ３  間の入力に対応する楽音波形サンプルとなる。
【００２９】
このように第２の実施の形態は入力データが発生した場合は、その時点までの発音波形演算をその時点で実行するようにしているため、楽音波形サンプルの計算時間が分散される。従って、所定時間毎に行われる計算時間における処理が増加しないため、キーオンイベント等の発音態様を変化させる入力データが多く発生しても、同時発音数が減少する等の不都合が生じることを防止することができる。
【００３０】
次に、本発明の第３の実施の形態の楽音波形生成方法の説明を行う。
ところで、所定のタイミングで計算時刻を発生し、所定数の楽音波形サンプルをまとめて演算生成するようにした場合、連続的に楽音を発生するためには、過去に生成した波形サンプルの生成終了以前に、それに続く該所定数の波形サンプルを供給する必要がある。すると、処理すべき発音チャンネル数が多くその発音波形演算量が多過ぎる場合、全チャンネル分演算を実行すると、その楽音波形サンプルの供給が間に合わず、楽音が途切れてしまうという欠点が生じる。
【００３１】
この第３の実施の形態の楽音波形生成方法はこの欠点を解決しようとするものであって、楽音波形サンプルの供給がＤＡＣ１０の変換タイミングに間に合うか否かを判定し、間に合わないと判定された場合は、重要度の低い発音チャンネルから消音する発音チャンネルを選定する。そして、選定された発音チャンネルについては演算時に、該所定数の波形サンプルのうちの初期期間に対応するダンプ波形サンプルのみが短時間で演算される。
このように、選定された消音される発音チャンネルにおける楽音波形サンプルは、短期間のダンプ波形しが演算しないので、この発音チャンネルの演算時間が短縮され、全体として楽音波形サンプルの供給がＤＡＣ１０の変換タイミングに間に合うようになる。
【００３２】
なお、重要な音とは、
（１）その時点で音量の大きい音。
（２）アタック部再生中の発音を開始したばかりの音。
（３）複数パート音演奏されている場合、一番低い音（ベース音）。
（４）複数パート演奏されている場合、一番高い音（リード音）。
（５）複数パート音演奏されている場合におけるソロのパート音。
とするのが一般的である。
【００３３】
また、前記第３の実施の形態の変形例を説明すると、演算する発音チャンネルを発音波形演算に先立って重要な音から順位付けし、その順位に従って重要な音から順番に発音演算を行うようにし、発音波形演算が間に合わない場合に、発音波形演算を途中で打ち切って、その時点までに生成された楽音波形サンプルのみで発音を行うようにしたものである。
このようにすれば、万が一演算打ち切りをする必要が生じた場合でも、それによって音の消えてしまうチャンネルは、重要度の低い比較的影響の少ない楽音を生成しているチャンネルと云うことになる。
なお、第３の実施の形態およびその変形例において、入力データが発生する毎に発音波形演算を行うようにしてもよい。
【００３４】
さらに、入力データが発生する毎に発音波形演算を行なわず、最後に１区間分まとめて発音波形演算をするようにしてもよい。この場合、入力データの数に応じて計算時刻を早めるようにトリガをかけるのが好適である。
または、計算時刻間の１区間をさらにｎ等分して、それに対応する時間間隔で発音波形演算を行い、最後のｎ個目の演算で完成した１区間分の楽音波形サンプルを単位として、再生部（ＤＭＡ）９が読み出すようにしてもよい。
【００３５】
ところで、所定のタイミングで計算時刻を発生し、複数の楽音波形サンプルをまとめて演算生成するようにした場合、あるいは入力データが発生する毎に発音波形演算を行なう場合、連続的に楽音を発生するためには、過去に生成した波形サンプルの生成終了以前に、それに続く波形サンプルを供給する必要がある。すると、処理すべき発音チャンネル数が多くその発音波形演算量が多過ぎる場合や、楽音生成処理以外の処理（シーケンサ処理等）に時間が費やされた等の理由でその楽音波形サンプルの供給が間に合わなかった場合、処理途中の楽音波形サンプルが読み出されノイズが発音される可能性があった。
そこで、本発明の第４の実施の形態の楽音発生方法においては、次のようにしてこれを解決している。
【００３６】
本発明の第４の実施の形態において、再生部（ＤＭＡ）９にはＣＰＵ１が出力バッファのデータを渡す指令を出すようにしている。この場合、生成した所定数の楽音サンプルを記憶する出力バッファ自体のアドレスを、一回の読み出し区間として再生部に９に設定したり、繰り返し読み出される繰り返し読み出し区間として設定をすることができるが、さらに加えて、該アドレスを現在すでに読み出し中の読み出し区間に続けて読み出せるよう読み出し区間の予約を設定することができる。
本実施の形態では、この読み出し区間の予約により、楽音波形演算サンプルが生成された後に出力バッファに予約登録が行われ、すでに読み出し中の波形に続けてて読み出される。楽音波形サンプルの演算が終了しなかった場合は、その予約登録が行われないので、処理途中の楽音波形サンプルが発音されることによるノイズの発生を防止することができる。
【００３７】
この場合、発音は一時途切れることになるが、途切れる時間は、例えば４４．１ｋＨｚのサンプル周波数における数サンプル時間に抑えれば影響は小さい。数サンプル時間に抑えるには、前述したように発音されているチャンネル数を制御すればよい。さらに、処理が完了すると予約登録が行われて発音されるようになる。
なお、入力データが発生する毎に発音波形演算を行なわず、最後に１区間分まとめて発音波形演算をするようにしてもよい。この場合、入力データの数に応じて計算時刻を早めるようにトリガをかけるのが好適である。
または、計算時刻間の１区間をさらにｎ等分して、それに対応する時間間隔で発音波形演算を行い、最後のｎ個目の演算で完成した１区間分の楽音波形サンプルの発音予約を行うようにしてもよい。
【００３８】
前述したように、所定のタイミングで計算時刻を発生し、複数の楽音波形サンプルをまとめて演算生成するようにした場合、あるいは入力データが発生する毎に発音波形演算を行なう場合、連続的に楽音を発生するためには、過去に生成した波形サンプルの生成終了以前に、それに続く波形サンプルを供給する必要がある。
ところで、この計算時刻は、過去に生成した楽音波形サンプルの終了タイミングに基づいて、発音波形の生成を実行するのに必要な時間分、その終了タイミングより早いタイミングが指定される。この終了タイミングは、ＣＰＵ１が再生部（ＤＭＡ）９の状態（フラグ）を確認し、楽音波形サンプルの再生区間が次の区間に移行したことを検知するようにして検出しているため、再生部（ＤＭＡ）９の状態（フラグ）が変化してからＣＰＵ１がそのことを検知するまでに時間遅れが生じることになる。さらに、この時間遅れはＣＰＵ１が上述した検知を実行するタイミングによるため、そのタイミングに応じて不均一な時間遅れとなる。
【００３９】
すると、この不均一な時間遅れの生じているタイミングに基づいて計算時刻を発生するようにすると、正確な計算時刻が発生することができないこととなる。
特に、１度だけ大きく遅れたタイミングが検出されると、それに基づいて発生された計算時刻は演算開始時刻から発音波形供給までの演算時間が短いことになるため、この場合は同時発音数が一時的に減少してしまうことになる。
そこで、本発明の第５の実施の形態の楽音生成方法においては次のようにしてこれを解決している。
【００４０】
ＣＰＵ１は過去に再生部（ＤＭＡ）９の状態変化が検出された時刻を複数記憶しておく。この複数の時刻の時刻間の平均を取ることにより、次の検出時刻を予測するようにする。この予測された時刻は、再生部（ＤＭＡ）９における真の終了タイミングからの検出遅れが平均化されたものとされるので、予測されたタイミングより所定時間前のタイミングを、ほぼ正確な終了タイミングとして検出することができる。そして、この終了タイミングに基づいて計算時刻を発生するようにする。
このように、検出される終了タイミングは平均化されたものとなり、ばらつきが少なくなるので、毎計算時刻に確保される演算時間も均一化され、安定した楽音生成動作が実行されるようになる。
【００４１】
なお、入力データが発生する毎に発音波形演算を行なわず、最後に１区間分まとめて発音波形演算をするようにしてもよい。この場合、入力データの数に応じて計算時刻を早めるようにトリガをかけるのが好適である。
または、計算時刻間の１区間をさらにｎ等分して、それに対応する時間間隔で発音波形演算を行い、最後のｎ個目の演算で完成した１区間分の楽音波形サンプルの発音予約を行うようにしてもよい。
【００４２】
次に、前記した本発明の第１の実施の形態ないし第５の実施の形態の要素を１まとめにした楽音生成方法および装置の動作をフローチャートを参照しながら説明する。
図６はメインルーチンのフローチャートを示す図であり、メインルーチンがスタートされるとステップＳ１０にて初期設定が行われる。初期設定ではタイマ４やＤＭＡの設定、全発音チャンネルのクリアや、音色データおよび波形データ等の準備が行われる。次いで、ステップＳ２０にてキーボード６からの入力が処理されるキーボード処理が行われ、ステップＳ３０にて入力されたＭＩＤＩイベントに応じた処理が行われるＭＩＤＩ処理が行われる。さらに、ステップＳ４０にて楽音波形サンプルが生成される発音波形演算等が行われる音源処理が行われ、ステップＳ５０にてその他の処理が行われ、ステップＳ２０に戻り、ステップＳ２０ないしステップＳ５０の処理が循環して繰返し行われる（定常ループ）。
これらの処理は、マルチタスクの方法を用いて他のソフトと同時に実行される。
【００４３】
次に、ＣＰＵ１の実行するＭＩＤＩ受信割込処理のフローチャートを図７に示す。この処理は、ＭＩＤＩインタフェース５が外部より何らかのＭＩＤＩイベントを受信した際に割込により起動される。このＭＩＤＩ受信割込処理は、他の処理より優先して行われる処理である。このＭＩＤＩ受信割込処理が開始されると、ステップＳ１００にてＭＩＤＩインターフェース５により受信された受信データが取り込まれ、ステップＳ１１０にてその受信データは受信された時点の時刻データと組にして図３に示されるような形式で前述した入力バッファに書き込まれるようにされて、割込発生時の処理へリターンされる。これにより、受信したＭＩＤＩデータは、順次、受信時刻と共に入力バッファに書き込まれるようになる。
【００４４】
次に、メインルーチンの定常ループでステップＳ３０として実行されるＭＩＤＩ処理の詳細フローチャートを図８に示す。
ＭＩＤＩ処理が開始されるとステップＳ２００にて入力バッファを読みに行き、未処理の受信データがあるかどうかの確認を行う。未処理の受信データがあるとステップＳ２１０にて判断されると、ステップＳ２２０に進み、受信データの内容に応じた分岐を行う。受信データがノートオンイベントの場合は、ステップＳ２３０に分岐されてノートオン処理が実行される。また、受信データがノートオフの場合は、ステップＳ２４０に分岐されてノートオフ処理が実行され、受信データがその他のデータの場合は、ステップＳ２５０に分岐されてその他処理が実行される。そして、これらのいずれかの処理が終了すると、ＭＩＤＩ処理は終了する。なお、受信データがないとステップＳ２１０にて判断されると、そのままＭＩＤＩ処理を終了する。
【００４５】
次に、前述したＭＩＤＩ処理において、受信データがノートオンイベントの場合にステップＳ２３０にて実行されるノートオン処理のフローチャートを図９（ａ）に示す。
ノートオン処理が開始されると、ステップＳ３００にて、入力バッファ中のそのノートオンイベントのノートナンバがＮＮとして、ベロシティがＶＥＬとして、それぞれレジスタに取り込まれ、そのノートオンイベントの発生時刻がＴＭとしてレジスタに取り込まれる。次いで、ステップＳ３１０にてレジスタに取り込まれたノートナンバＮＮの発音割当処理が行われ、割り当てられたチャンネル（ｃｈ）の番号がｉとしてレジスタに取り込まれる。
【００４６】
さらに、ステップＳ３２０にて図４に示すｃｈレジスタのうちレジスタに取り込まれたｃｈ番号ｉのｃｈレジスタに、前記ノートナンバＮＮ，ベロシティＶＥＬに応じた楽音制御データを設定する。設定される楽音制御データは、図２に示す１６音色分の音色データのうち、前記ノートオンイベントを受信したＭＩＤＩチャンネルに対応した音色データ（各種ＯＤ）を、前記ノートナンバＮＮ，ベロシティＶＥＬの値に応じて加工して得られる発音用データ（各種Ｄ）である。
ここで、発音用データの中の波形指定データＤは、図２に示す音色データ中の音域波形指定データをノートナンバＮＮで参照することにより求められ、該ノートナンバＮＮに対応した楽音生成に用いるべき波形として、波形データＷＤ１から波形データＷＤｎのうちのいずれか１つを指定する。前記楽音制御データの設定後、ステップＳ３３０にてｉｃｈのノートオンフラグを立てるようにする。
【００４７】
次に、ステップＳ３４０にて発音波形の演算生成を実行するが、この場合の演算生成は、現在準備中のバッファＸに書き込むべき全波形のうち、時刻ＴＭ以前で、かつ、未計算の波形（部分波形）について実行され、算出された該部分波形を出力バッファＸに書き込むようにする。ここで、部分波形は、ステップＳ２１０において新たな受信データが検出された時点で（データが確定し）演算生成が可能になる範囲の発音波形に相当する。生成する波形は、受信したノートオンイベントの発生時刻ＴＭの時点までの発音波形であり、該ノートオンに応じて発音開始する楽音波形は、該発音波形に含まれず、以後に生成される発音波形の方に含まれる。この処理の詳細については、後述する図１１に示されている。
【００４８】
このステップＳ３４０およびステップＳ３５０の処理は、先に図１２に関連して説明した楽音波形Ａ１  あるいはＡ２  等の演算生成処理に対応するが、ステップＳ３５０では、前述したステップＳ３２０でｃｈレジスタに設定されたｉｃｈの楽音制御データに基づき、ｉｃｈにおける発音の初期設定をｃｈレジスタのワークエリアに対して行う。ここで、このワークエリアは、各発音ｃｈの楽音生成に必要な、アドレス現在値、各種エンベロープ現在値および現在ステート、ＬＦＯ波形現在値等、各ｃｈの波形生成に必要な複数のデータ現在値を記憶する。この発音初期処理が終了すれば、ノートオン処理は終了する。
なお、初期設定においては、波形読み出しアドレス現在値へのスタートアドレスの設定、ノートナンバＮＮに応じたＦナンバの発生、およびＬＦＯ、フィルタＥＧ、音量ＥＧ、補間演算、フィルタ演算等の各初期設定が行われる。この初期設定は前記したように演算時間を要する処理である。
【００４９】
次に、前述したＭＩＤＩ処理において、受信データがノートオフイベントの場合にステップＳ２４０にて実行されるノートオフ処理のフローチャートを図９（ｂ）に示す。
ノートオフ処理が開始されると、ステップＳ４００にて、入力バッファ中のそのノートオフイベントのノートナンバがＮＮとしてレジスタに取り込まれ、ノートオフイベントの発生時刻がＴＭとしてレジスタに取り込まれる。次いで、ステップＳ４１０にてノートナンバＮＮで発音されている発音チャンネル（ｃｈ）がサーチされ、見つかった発音ｃｈの番号がｉとしてレジスタに取り込まれる。
【００５０】
次に、ステップＳ４２０にてｉｃｈのノートオンフラグを倒し、ステップＳ４３０にて発音波形の演算生成が実行される。この場合の演算生成処理は、前述したステップＳ３４０と同様の処理であり、時刻ＴＭ以前の未計算波形（部分波形）を算出して出力バッファＸに書き込むようにする。さらに、ステップＳ４４０にてｉｃｈのリリース開始処理が行われてノートオフ処理は終了する。ここで、ｉｃｈのリリース開始処理とは、ワークエリア中のｉｃｈの各種エンベロープのステート等を書き換え、ｉｃｈにおける楽音生成の状態をリリース状態に変化させる処理である。
【００５１】
次に、メインルーチンの定常ループでステップＳ４０として実行される音源処理の詳細フローチャートを図１０を参照しながら説明する。
音源処理が開始されると、ステップＳ５００にて再生部（ＤＭＡ）９の再生状態をチェックし、再生区間が次に進んでいたらステップＳ５１０に進み、再生区間が進んでいない場合はステップＳ５２０に進む。
ＤＭＡ９は、ＣＰＵ１により指定されたＲＡＭ３上の特定エリアの波形サンプルを再生エリアとして、所定のサンプリング周期毎にその特定エリアの最初のサンプルから１サンプルづつ順次読み出し、ＤＡＣ１０に供給し再生する。さらに、ＤＭＡ９はその特定エリアを再生しつつ、ＣＰＵ１から次に再生すべき別のエリアを指定する予約を受け付ける。予約された別の特定エリアの波形サンプルは、再生中の特定エリアの再生が完了した後、引き続いてＤＭＡ９により同様に１サンプルづつ順次読み出され、ＤＡＣ１０に供給され再生される。ここで、再生区間が次に進むというのは、先に特定エリアとして指定した再生区間の再生が完了し、次の特定エリアとして予約された別の再生区間に再生が移ったことを意味する。なお、一度に複数の特定エリアを再生予約することが可能であり、その場合、複数の特定エリアは予約した順に順次再生される。
【００５２】
ステップＳ５１０にて今回進行が検出された時刻（現在時刻）と過去に検出された時刻から次回の検出時刻を予測し、予測された検出時刻より所定時間前の時刻を次回の計算時刻として指定する。次回の検出時刻の予測の仕方としては、現在時刻と過去の検出時刻を含む複数回の検出時刻に基づき最小二乗法で誤差の少ない近似値を求めて予測する方法や、複数回の検出時刻の変化の様子を２次関数等、別の関数で近似して予測する方法がある。ＤＭＡ９では進行が発生してからステップＳ５１０で検出されるまでの時間は、その時々の処理ステップ位置、状況の違い等により、一定でない時間遅れが生じ、複数回の検出時刻には、一定でないばらつきが含まれている。従って、前記近似関数の算出には、複数回の検出時刻のばらつきを平均化する処理が含まれる。
【００５３】
前記所定時間は、楽音波形を生成するために確保される時間であり、どのくらいの長さにするかは、確保したい発音数、演算のクォリティ等、その演算生成に必要な演算量に基づいて決定される。前記所定時間の長さは、固定値でもよいが、キーボード６で設定できるようにしたり、同時に走る複数の処理プログラムとの兼ね合いでＣＰＵ１が自動的に決定するようにしてもよい。
【００５４】
次に、ステップＳ５２０にて次回の計算時刻とタイマ４が指示する現在時刻とを比較することにより、計算時刻に達したか否かが判断され、計算時刻に達したと判断された場合はステップＳ５３０ないしステップＳ５８０の処理を実行する。
まず、ステップＳ５３０にて現在発音中の発音チャンネルを、どの順番で演算するか決定する。後述するステップＳ５５０の波形演算生成処理では、発音中のチャンネルについて、１チャンネルづつ複数サンプル分の発音波形を生成していくわけであるが、その時のチャンネルの処理順をここで決めているわけである。
【００５５】
ここでは、前記した第３の実施の形態の方法に従って、音楽的に重要な楽音、消えてしまっては困る楽音から順番に演算を行うように順番付けをする。次いで、ステップＳ５４０にて発音中の全発音チャンネルを、予定した演算時間（ステップＳ５１０で説明した所定時間）内に演算可能か否かが判定され、不可能の場合は演算順序が最後の発音チャンネルから消音すべき発音チャンネルを１ないし複数チャンネル分指定し、予定した演算時間内に演算可能になるよう演算量を削減する。この処理は、前記した第３の実施の形態の楽音生成方法に基づく具体的な処理である。
次いで、ステップＳ５５０にて発音波形の演算が行われる。ここでは、現在準備中の出力バッファＸが発音波形データで満たされ、準備完了となるように、バッファＸの未計算分について楽音波形サンプルが演算されて発音波形が算出され、出力バッファＸに書き込まれる。この処理は、先に図１２に関連して説明した発音波形Ａ３  等の演算生成処理に対応する。
【００５６】
発音波形で満たされ準備完了となったバッファＸの各サンプルは、さらに、ステップＳ５６０にてローパスフィルタ（ＬＰＦ）処理が施され、高域成分がカットされる。次いで、ステップＳ５７０にて波形再生部（ＤＭＡ）９に、ＬＰＦ処理済の発音波形を記憶する出力バッファＸのエリアが、続いて再生すべき再生波形を記憶する特定エリアとして予約登録される。これにより、現在再生中の特定エリアおよび既に予約されている特定エリアの発音波形が再生完了した後に再生されるよう予約される。そして、ステップＳ５８０にて、それまでバッファＸとして使用していた出力バッファとは別の新規の出力バッファ領域が確保され、全てのサンプル値がゼロにクリアされて、次の区間の発音波形を作成し準備するための出力バッファＸとして新たに設定され、音源処理が終了する。
なお、ステップＳ５２０にて計算時刻に達していないと判断された場合は、そのまま終了する。
【００５７】
次に、ノートオン処理、ノートオフ処理および音源処理にて実行される発音波形演算処理のフローチャートを図１１に示す。この処理が行われる場合には、既に説明したように前もって発音波形が演算される発音波形の時間範囲が定められている。すなわち、ノートオン処理等のＭＩＤＩデータ受信時の処理として本フローを実行する場合は、前記時間範囲とは前述した部分波形のことであり、音源処理中で本フローを実行する場合は、バッファＸの全サンプルのうち、未計算部分の発音波形サンプルのことである。なお、ＭＩＤＩデータ受信時には、直前の音源処理で決定した演算順序に基づいて演算を行うため、発音チャンネルの演算順序を新たに決定していない。新たなノートオンがあった場合は、他の全発音チャンネルの順位を１つ繰り下げ、その新たなノートオンのチャンネルを演算順序の第１番に順次加えていく。
【００５８】
発音波形演算処理が開始されると、ステップＳ６００にて演算順序の１番の発音チャンネル（ｃｈ）の最初の楽音波形サンプルの演算準備が行われる。演算準備処理とは、前回の読み出しアドレス、各種ＥＧ値、各種ＥＧのステート（アタックやリリース等の状態）、ＬＦＯ値等のデータを、ただちに演算に使えるようにアクセス準備したりＣＰＵ１の内部レジスタにロードしたりする処理のことである。そして、ステップＳ６１０にてＬＦＯ、フィルタＧ、音量ＥＧの波形演算を行い、指定された前記時間範囲の演算に必要なＬＦＯ波形、ＦＥＧ波形、ＡＥＧ波形のサンプルを生成する。ＬＦＯ波形はＦナンバ、ＦＥＧ波形、ＡＥＧ波形に加算され、各データを変調する。また、ステップＳ５４０で消音すべきチャンネルとして指定された発音チャンネルに関しては、音量ＥＧとして前記範囲内で急速に減衰するダンプ用のＡＥＧ波形が演算生成される。
【００５９】
次いで、ステップＳ６２０にて上記前回の読み出しアドレスを初期値としてＦナンバを繰り返し加算し前記時間範囲内の各サンプルの読み出しアドレスを発生し、この読み出しアドレスの整数部に基づいて音色データ内の波形記憶領域ＷＤより波形サンプルを読み出すと共に、この読み出しアドレスの小数部に基づいて読み出された波形サンプル間の補間を行い、前記時間範囲内の全補間サンプルを算出するようにする。例えば、前記時間範囲が１００サンプル分の時間に相当する場合、１００サンプル分まとめてこのステップにより処理が行われる。ここで、前記時間範囲内の複数サンプル分の処理は、読み出しアドレスに対するＦナンバの加算と、加算により生成されたアドレスに基づく読み出しから補間の処理までの処理を単位処理として、この単位処理を繰り返して行うようになっているため、読み出しアドレスのＣＰＵレジスタへの読み込みが全体として１回で済み、処理が高速化されている。
【００６０】
さらに、ステップＳ６３０にて前記時間範囲内の補間サンプルに対し音色フィルタ処理が行われ、前記ＦＥＧ波形に基づいて音色制御が行われ、ステップＳ６４０にて、フィルタ処理済の前記時間範囲内のサンプルに対し振幅制御処理が行われ、前記ＡＥＧおよび音量データに基づいて楽音波形サンプルの振幅制御が行われると共に、振幅制御処理された前記時間範囲分の楽音波形サンプルがそれぞれ出力バッファＸの対応するサンプルに足し込まれる累算書込処理が実行される。この処理においては、前記時間範囲内の各サンプルについて、振幅制御とバッファＸの対応サンプルへの足し込みを連続して行うようになっているので、サンプルのＣＰＵレジスタへの取り込み回数が少なくて済み、処理速度が向上している。
【００６１】
上述したように、ステップＳ６２０からステップＳ６４０にかけての楽音波形サンプルの演算生成処理は、基本的には前記所定時間範囲内の全サンプルを生成するように行われるわけであるが、ステップＳ６１０における音量ＥＧの波形演算の結果、ＡＥＧ波形のレベルが下がり音量が十分減衰した範囲については、演算の対象からはずされ、その分処理を少なくするようになっている。特に、ステップＳ５４０の指示により、ダンプ用ＡＥＧ波形を生成した発音チャンネルに関しては、前記所定時間範囲の途中で十分な減衰が得られる場合が多い。
【００６２】
そして、ステップＳ６５０にて、波形演算処理をこのまま続行したい場合にＤＭＡ９に対し期限内に波形を供給できそうか否か判定されて、演算を打ち切るか否かの判断が行われる。ここで、期限内に波形を供給するというのは、先に生成された発音波形を記憶する特定エリアを再生中のＤＭＡ９が、そのエリアの再生を終了してしまう前に、バッファＸにそれに引き続く発音波形を準備し、そのバッファＸのエリアを再生予約できることである。そのまま続行すると間に合わなくなる場合は、演算を打ち切ると判断され、ステップＳ６７０にて打ち切り処理が実行されて、この発音波形演算処理は終了する。
【００６３】
また、また演算を続行しても大丈夫と判定された場合、演算を打ち切る必要がないと判断され、続くステップＳ６６０にて演算すべき全発音チャンネル分の楽音波形の演算生成が終了したか否かが判断され、全発音チャンネルの演算が終了したと判断されない場合は、ステップＳ６８０にて次の演算順序を付与された発音チャンネルの最初の楽音波形サンプルが指定され、次順の発音チャンネルの楽音チャンネルの楽音波形の演算生成準備が行われる。準備が完了したら、処理はステップＳ６１０に戻り、その発音チャンネルのついて先程と同様にステップＳ６１０ないしステップＳ６４０に渡る楽音生成の処理が実行される。このようにして、全発音チャンネルの演算が終了するまでステップＳ６１０ないしステップＳ６６０の処理が繰り返し行われるようになる。各発音チャンネルの処理毎に、生成された前記所定時間範囲分のサンプルは、ステップＳ６４０にてバッファＸの対応するサンプルに順次足し込まれる。
【００６４】
ステップＳ６６０で演算生成処理が終了したと判定された場合、本発音波形演算を終了する。この時、バッファＸには、演算すべき全発音チャンネルの生成された楽音波形サンプルを累算した累算値が、前記時間範囲に対応するサンプル数分、新たに記憶されている。
一方、ステップＳ６５０で打ち切りを行うと判断され、ステップＳ６７０の打ち切り処理を経て発音波形演算が終了した場合、バッファＸには、演算すべき全発音チャンネルの内、その時点までに演算生成を完了した発音チャンネルについての楽音波形サンプルの累算値が、前記時間範囲に対応するサンプル数分、新たに記憶されている。
【００６５】
打ち切り以降の演算順序を付与された発音チャンネルについては楽音の演算生成が行われず、結果的にそのチャンネルの楽音が消えてしまうわけであるが、ステップＳ５３０の処理により、消えてしまった場合に影響の少ないチャンネルほど後ろの演算順序とされているので、打ち切りによる悪影響は最小限に抑えられる。なお、ステップＳ６７０の打ち切り処理では、一旦演算できなかったチャンネルについて、次回以降の発音波形演算においても消音したままになるよう、ｃｈレジスタを設定している。
【００６６】
以上説明した発音波形演算処理が図９（ａ）にフローチャートを示すノートオン処理のステップＳ３４０にて実行された場合には、上述した発音波形演算処理が終了すると、該フローチャートのステップＳ３５０の処理が続けて実行されて、ノートオン処理が終了する。
また、発音波形演算処理が図９（ｂ）にフローチャートを示すノートオフ処理のステップＳ４３０にて実行された場合には、上述した発音波形演算処理が終了すると、該フローチャートのステップＳ４４０の処理が続けて実行されて、ノートオフ処理が終了する。
【００６７】
さらに、発音波形演算処理が図１０にフローチャートを示す音源処理のステップＳ５５０にて実行された場合には、上述した発音波形演算処理が終了すると、該フローチャートのステップＳ５６０以降の処理が続けて実行されて、ステップＳ５８０の処理が終了すると音源処理が終了する。
これらのノートオン処理、ノートオフ処理、および音源処理は、図６に示す定常ループ内において循環して繰り返し行われ、発音される楽音波形サンプルが順次生成されるようになる。
【００６８】
なお、本発明の楽音生成方法において、いうまでもないことであるが、例えば複数の楽音の発生を指示するステップと、所定時間時間間隔で演算開始を指示するステップのように、互いに独立したデータを扱うステップについては、前記説明した順番で処理を行う必要はなく、その処理の順番を入れ替えて実行するようにしてもよい。
また、本発明の楽音生成方法においては、前記した楽音生成演算処理の空き時間を利用して他のアプリケーションソフトから依頼された発音指示を含む処理を行うことができる。他のアプリケーションソフトとしては、ゲームソフト、通信ソフト、事務処理ソフト等がある。
【００６９】
以上においては、前記図１に示す楽音生成装置にて実行されるプログラムとして本発明の楽音生成方法の説明を行った。また、本発明の楽音生成方法を、Ｗｉｎｄｏｗｓ  （米マイクロソフト社のパソコン用ＯＳ）やその他のオペレーティングシステムの動作する汎用コンピュータ上で、１つのアプリケーションプログラムとして、他のアプリケーションプログラムと並列実行させてもよい。
【００７０】
【発明の効果】
本発明は以上のように構成されて、複数サンプルの各々についての新たな混合サンプルデータの生成が完了したとき、それ以前に生成された混合サンプルデータの再生が完了した後に、新たな混合サンプルデータの再生が行われるように予約するようにしたので、途切れることなく楽音を再生を行うことができる。
また、チャンネルレジスタからの１回の制御データの読出しに基づいて、制御データの読み出された発音チャンネルの複数サンプル分の波形データを生成し、波形データ生成後に前記チャンネルレジスタに制御データを書き込むようにしたので、複数の楽音波形サンプルの演算について１回だけ各発音チャンネルの準備処理を行えば良く、オーバヘッドが小さくすることができる。このため、生成された楽音の質を向上することができると共に、同時発音チャンネル数を増加することができる。
また、楽音波形サンプルの演算をＭＩＤＩイベントが入力される毎に行うようにすると、演算が分散されるようになり、発音初期処理による発音数の減少を防止することができる。
【００７１】
さらにまた、演奏情報の発生時に演奏情報の受入処理を行い、受け入れた演奏情報に基づく楽音制御あるいは波形生成は、該受入処理の空き時間に実行されるメインステップに含まれるようにしたので、演奏情報が発生した時点での処理の増加分を前記空き時間内に分散させることができ、一時的な処理の増加を防止することができる。
【図面の簡単な説明】
【図１】本発明の楽音生成方法を実行できる楽音生成装置の構成を示すブロック図である。
【図２】ＲＡＭ上の音色データエリアを示す図である。
【図３】ＲＡＭ上の入力バッファエリアを示す図である。
【図４】ＲＡＭ上のｃｈレジスタエリアを示す図である。
【図５】ＲＡＭ上の出力バッファエリアを示す図である。
【図６】本発明の楽音生成方法のメインルーチンのフローチャートを示す図である。
【図７】本発明の楽音生成方法のＭＩＤＩ受信割込処理のフローチャートを示す図である。
【図８】メインルーチンにおけるＭＩＤＩ処理のフローチャートを示す図である。
【図９】ＭＩＤＩ処理におけるノートオン処理およびノートオフ処理のフローチャートを示す図である。
【図１０】メインルーチンにおける音源処理のフローチャートを示す図である。
【図１１】本発明の楽音生成方法の発音波形演算処理のフローチャートを示す図である。
【図１２】本発明の第２の実施の形態におけるタイミング図を示す図である。
【符号の説明】
１  ＣＰＵ、２  ＲＯＭ、３  ＲＡＭ、４  タイマ、５  ＭＩＤＩインターフェース、６  キーボード、７  ディスプレイ、８  ハードディスク、９  再生部、１０  ＤＡＣ、１１  サウンドシステム
【図１】
0003627590.tif 000002
【図２】
0003627590.tif 000003
【図３】
0003627590.tif 000004
【図４】
0003627590.tif 000005
【図５】
0003627590.tif 000006
【図６】
0003627590.tif 000007
【図７】
0003627590.tif 000008
【図８】
0003627590.tif 000009
【図９】
0003627590.tif 000010
【図１０】
0003627590.tif 000011
【図１１】
0003627590.tif 000012
【図１２】
0003627590.tif 000013