(57)【特許請求の範囲】
【請求項１】
演奏情報に基づいて演算により波形データを生成して出力する演算ステップと、
該演算ステップにより得られた前記波形データを波形メモリに記憶する波形データ記憶ステップと、
を少なくとも有する第１の演奏ステップと、
前記演奏情報に基づいて前記波形メモリから、該演奏情報に対応する波形データを読み出す読み出しステップと、
前記演奏情報に対応する波形データの一部が演算生成されずに前記波形メモリに記憶されていない場合に、演算生成されなかった該演奏情報に対応する波形データを演算生成して出力する再生演算ステップと、
を少なくとも有する第２の演奏ステップと、
を備えるようにしたことを特徴とする楽音発生方法。
【請求項２】
演奏情報を発生する演奏情報発生部と、
該演奏情報発生部で発生された前記演奏情報に基づいて演算により波形データを生成する演算部と、
該演算部の演算により得られた前記波形データが記憶される波形メモリとを少なくとも備え、
前記演奏情報発生部から演奏情報が発生されたときに、前記演算部により波形データを生成して該波形データを前記波形メモリに記憶する第１の演奏ステップが実行され、
該第１の演奏ステップの終了後に、前記演奏情報を読み出して前記波形メモリから、該演奏情報に対応する波形データを読み出すと共に、前記演奏情報に対応する波形データの全てが演算生成されずに前記波形メモリに一部しか記憶されていない場合に、該演奏情報に対応する波形データを前記演算部により演算生成する第２の演奏ステップが実行されることにより、
前記演奏情報に基づく複数の音の同時発生が指示されたときに、前記第１の演奏ステップにおいて指示された複数の音の一部が発音できなくても、前記第２の演奏ステップにおいて指示された複数の音を発音できるようにしたことを特徴とする楽音発生装置。
【請求項３】
前記第２の演奏ステップにおいて、前記演算部が演算生成した波形データを前記波形メモリに記憶することにより、前記演奏情報に基づく複数の音の同時発生が指示されたときに、前記第２の演奏ステップを実行してもすべての音の発生ができない場合には、前記第２の演奏ステップを繰り返し実行することにより、前記演奏情報で指示されたすべての音を発音するようにしたことを特徴とする請求項２記載の楽音発生装置。
【請求項４】
前記演奏情報に基づく同時発音数と、波形データに基づく同時発音数とが一致しないときは、出力をミュートして音を出さないようにしたことを特徴とする請求項２記載の楽音発生装置。
【請求項５】
あらかじめ前記演奏情報を読み出して、前記演算部により波形データを生成して該波形データを前記波形メモリに記憶する処理を、ミュートした状態で前記演奏情報に基づく同時発音数と波形データに基づく同時発音数が同一になるまで行うことにより、前記演奏情報の発音指示が行われたときに、前記演奏情報に指示されたすべての音を発音できるようにしたことを特徴とする請求項２記載の楽音発生装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演算により波形データを生成するようにした楽音発生方法および楽音発生装置に関するものである。
【０００２】
【従来の技術】
従来の楽音発生装置は、ＭＩＤＩ（Musical Instrument Digital Interface）、鍵盤、あるいはシーケンサ等からの演奏情報を入力する演奏入力部と、楽音波形を生成する音源部と、入力された演奏情報に応じて前記音源部を制御するマイクロプロセッサ（ＣＰＵ）等から構成されていた。ＣＰＵは、入力された演奏情報に応じて、チャンネルアサイン、パラメータ変換等の音源ドライバ処理を実行し、音源部の割り当てたチャンネルに変換した音源パラメータ情報と発音開始指示（ノートオン）情報を供給する。音源部は、ＬＳＩ（Large Scale Integrated circuit）等の電子回路（ハードウェア）で構成され、供給された音源パラメータ情報に基づいて楽音波形を生成するようにしている。
【０００３】
このため、楽音発生装置は楽音を生成するための専用機器となってしまい、楽音を生成する時には専用の楽音発生装置を用意する必要があった。
そこで、これを解決するために、ＣＰＵによりアプリケーションプログラムを実行し、アプリケーションプログラムに基づいて楽音を生成するソフトウェア音源装置が提案されている。このソフトウェア音源装置は、楽音を生成するアプリケーションプログラムのほかに、ゲーム等の他のアプリケーションプログラムを実行させることができる汎用の演算処理装置により実現することができるものである。
【０００４】
このようなソフトウェア音源を備える楽音発生装置の概略構成を図７に示す。図７において、中央処理装置（ＣＰＵ）１００は、発音指示等が行われた際に、音源プログラム１０１に従って演算を行うことにより、波形データを生成してバッファ１０２に一時格納する。デジタル／アナログ変換器（Ｄ／Ａ）１０３は、所定のＤ／Ａ変換タイミングごとにバッファ１０２から、波形データを読み出してアナログ波形信号に変換する。変換されたアナログ波形信号は、サウンドシステム１０４に供給されて楽音が発音されるようになる。
【０００５】
【発明が解決しようとする課題】
しかしながら、ソフトウェア音源を備える楽音発生装置の場合、発音される楽音の同時発音数は、ＣＰＵ１００の演算速度と、１サンプルデータを生成するための演算量およびサンプリング周波数ｆｓとに関係がある。たとえば、サンプリング周波数ｆｓ＝４８ｋＨｚとすると、１サンプル周期は２０．８ｍｓｅｃとなり、このサンプル周期内において必要とするすべての波形データの演算を行う必要がある。しかし、実際にはオペレーションシステム（ＯＳ）が使用する時間や、他のアプリケーションが動作中の場合は、そのアプリケーションを実行する時間が必要であり、２０．８ｍｓｅｃの時間をすべて使用することはできない。
【０００６】
しかも、モノフォニックの場合は１サンプル周期において、１サンプルの波形データの演算を行えばよいが、ポリフォニックの場合は、割り当てられた時間内において発音されているチャンネル数と同数とされたサンプル数の波形データの演算を行う必要がある。このようにポリフォニックの場合は、１サンプルの波形データを生成するのに割り当てられる演算時間が減少するようになる。
ところが、一般には複数の発音チャンネルを使用して演奏されるため、１発音チャンネルに割り当てられる演算時間が短縮されるようになり、その演算時間内で演算を行うには、単純な演算しか行うことができず、音質の向上を望めないという問題点があった。
また、ソフトウェア音源における音源アルゴリズムを開発する際には、モノフォニックではなくポリフォニックで楽音を確認したい場合がある。しかしながら、音源アルゴリズムを複雑にすると割り当てられた演算時間内では複数の発音チャンネルの演算を終了することができず、ポリフォニックでの確認ができないおそれが生じるという問題が生じる。
【０００７】
そこで、本発明は演奏時の処理時間内では複数の発音チャンネルの演算を終了することができない場合でも、再生時にポリフォニックの楽音を発生することができるようにした楽音発生方法および楽音発生装置を提供することを目的としている。
【０００８】
【課題を解決するための手段】
前記目的を達成するために、本発明の楽音発生方法は、演奏情報に基づいて演算により波形データを生成して出力する演算ステップと、該演算ステップにより得られた前記波形データを波形メモリに記憶する波形データ記憶ステップとを少なくとも有する第１の演奏ステップと、前記演奏情報に基づいて前記波形メモリから、該演奏情報に対応する波形データを読み出す読み出しステップと、前記演奏情報に対応する波形データの一部が演算生成されずに前記波形メモリに記憶されていない場合に、演算生成されなかった該演奏情報に対応する波形データを演算生成して出力する再生演算ステップとを少なくとも有する第２の演奏ステップとを備えるようにしている。
【０００９】
次に、前記目的を達成することのできる本発明の楽音発生装置は、演奏情報を発生する演奏情報発生部と、該演奏情報発生部で発生された前記演奏情報に基づいて演算により波形データを生成する演算部と、該演算部の演算により得られた前記波形データが記憶される波形メモリとを少なくとも備え、前記演奏情報発生部から演奏情報が発生されたときに、前記演算部により波形データを生成して該波形データを前記波形メモリに記憶する第１の演奏ステップが実行され、該第１の演奏ステップの終了後に、前記演奏情報を読み出して前記波形メモリから、該演奏情報に対応する波形データを読み出すと共に、前記演奏情報に対応する波形データの全てが演算生成されずに前記波形メモリに一部しか記憶されていない場合に、該演奏情報に対応する波形データを前記演算部により演算生成する第２の演奏ステップが実行されることにより、前記演奏情報に基づく複数の音の同時発生が指示されたときに、前記第１の演奏ステップにおいて指示された複数の音の一部が発音できなくても、前記第２の演奏ステップにおいて指示された複数の音を発音できるようにしている。
【００１０】
また、前記楽音発生装置において、前記第２の演奏ステップにおいて、前記演算部が演算生成した波形データを前記波形メモリに記憶することにより、前記演奏情報に基づく複数の音の同時発生が指示されたときに、前記第２の演奏ステップを実行してもすべての音の発生ができない場合には、前記第２の演奏ステップを繰り返し実行することにより、前記演奏情報で指示されたすべての音を発音するようにしている。
さらに、前記演奏情報に基づく同時発音数と、波形データに基づく同時発音数とが一致しないときは、出力をミュートして音を出さないようにしてもよい。
さらにまた、あらかじめ前記演奏情報を読み出して、前記演算部により波形データを生成して該波形データを前記波形メモリに記憶する処理を、ミュートした状態で前記演奏情報に基づく同時発音数と波形データに基づく同時発音数が同一になるまで行うことにより、前記演奏情報の発音指示が行われたときに、前記演奏情報に指示されたすべての音を発音できるようにしてもよい。
【００１１】
このような本発明によれば、演奏時の処理において演算生成されたすべてのチャンネルの波形データを波形メモリに記憶しておき、再生時の処理において、演奏情報に対応する波形データが波形メモリに記憶されている場合は、波形メモリからその波形データを読み出し、演奏情報に対応する波形データが波形メモリに記憶されていない、すなわち、波形データが演奏時の処理において演算生成されていない場合は、再生時の処理において波形データを演算生成するようにしている。
したがって、演奏情報により複数の音の同時発音が指示されて、演奏時の処理においてすべての音の波形データを演算生成することができなかった場合でも、再生時の処理を実行することにより、演奏時の処理において演算生成された波形データの音に加えて、再生時の処理において演算生成された波形データの音を発音することができるようになり、発音が指示された複数の発音チャンネルの楽音を同時に発音することが可能となる。
【００１２】
【発明の実施の形態】
本発明の楽音発生方法を実行することのできる本発明の楽音発生装置の実施の形態の構成例を示すブロック図を図１に示す。
この図において、１はプログラムメモリ５に記憶されているプログラムを実行することにより、楽音波形データを演算により生成したり、エフェクトが与えられた楽音波形データの演算処理や制御を行う処理部であり、中央処理装置（ＣＰＵ）により構成される。なお、処理部１は、楽音波形データの演算生成やエフェクトが与えられた楽音波形データの演算処理等を行う演算部２と、演算部２における演算を演奏情報等により制御する制御部３とより構成されている。
また、４は演算部２が演算により生成した楽音波形データが書き込まれると共に、読み出された楽音波形データを演算部２に供給する波形メモリであり、その書き込みおよび読み出しは制御部３により制御されている。
【００１３】
５は処理部１が実行するプログラムを格納しているプログラムメモリであり、６は演奏情報発生部７から発生されたすべての演奏情報が書き込まれる演奏情報記憶部であり、再生時の処理において記憶されている演奏情報が制御部３の制御の基で読み出されて、その演奏情報に基づいた処理が演算部２で行われるように演算部２に供給される。
さらに、７は鍵盤やシーケンサ、あるいはＭＩＤＩ入力部等の演奏情報発生部である。８は演算部２により生成された楽音波形データが一時格納されるバッファである。９はデジタル・アナログ変換器（ＤＡＣ）であり、サンプリング周期ごとにバッファ８にデータを要求して、バッファ８から供給された楽音波形データをアナログ楽音波形信号に変換してサウンドシステム１０に供給している。
【００１４】
このように構成された楽音発生装置の動作を説明すると、演奏情報発生部７から制御部３に演奏情報が入力されると、演奏時の処理が開始され、その演奏情報が演奏情報記憶部６に記憶されると共に、演奏情報に基づいて演算部２が制御部３により制御される。例えば、演奏情報がノートオンイベントの際には、演算部２において演算を行うことにより所定サンプル数の波形データを生成する処理が行われるようになる。この際に、演奏情報により同時に複数の発音が指示されている場合は、割り当てられた演算時間内において生成可能なサンプル数の波形データの生成演算が実行され、演算時間内においては生成することのできない波形データの生成演算は行わないようにされる。従って、複数の発音が指示されていてもすべての発音指示に対応する波形データの生成が行われない場合もある。
【００１５】
このようにして演算部２において生成された波形データは、バッファ８に送られて格納されると共に、波形メモリ４に供給されて、波形メモリ４にも記憶されるようになる。バッファ８からは、デジタル・アナログコンバータ（ＤＡＣ）９の要求により波形データが読み出され、読み出された波形データはＤＡＣ９においてサンプリング周期毎にアナログ信号に変換されてサウンドシステム１０に供給され、サウンドシステム１０から発音されるようになる。
以上の演奏時の処理は、演奏情報発生部７が演奏を継続している際には繰り返し行われ、演奏が終了したときには、演奏情報のすべてが演奏情報記憶部６に記憶されるようになると共に、演算部２において生成された波形データのすべてが波形メモリ４に記憶されるようになる。
【００１６】
このような状態において、再生時の処理が引き続いて行われると、演奏情報記憶部６から演奏情報が順次読み出され処理部１に供給されるようになる。そして、処理部１においては波形メモリ４に記憶されている波形データを利用して波形データの生成等の処理が行われる。たとえば、演奏情報がノートオンイベントの際には、演奏情報に対応する波形データがすでに波形メモリ４に記憶されているか否かを判断し、記憶されていると判断した場合には当該波形データを波形メモリ４から読み出してバッファ８に送る。また、波形データが波形メモリ４に記憶されていない場合には、演算部２において波形データの生成処理を行い、生成された波形データをバッファ８に送るようにする。なお、この波形データの生成処理では、割り当てられた演算時間内において生成可能なサンプル数の波形データの生成演算が実行され、演算時間内においては生成することのできない波形データの生成演算は行わないようにされる。
このように、再生時の処理においては、演奏時に波形データの生成が行われなかった演奏情報に対する波形データの生成演算が実行される。
【００１７】
従って、再生時の処理では演奏時に波形データの生成が行われた演奏情報に対しては、波形メモリ４から波形データを読み出す処理だけを行えばよいことから、処理量が軽くなる。そして、その結果生じた演算余裕時間を演奏時に波形データの生成が行われなかった演奏情報用の波形データ生成処理に割り当てるようにしている。この結果、複数の発音の指示が行われた際に、再生時において複数の発音に対応する波形データの生成を行うことができ、複数の発音を行うことができるようになる。
なお、再生時の処理において指示されている複数の発音に対応するすべての波形データの生成を終了することができない場合は、２回目の再生時の処理を行い、この再生時の処理において、生成されていない波形データの生成処理を実行するようにすればよい。すなわち、指示されている複数の発音に対応するすべての波形データの生成が終了するまで再生処理を繰り返すようにする。
従って、最終の再生時の処理が実行されると指示されている複数の発音に対応するすべての波形データの生成が終了することになり、この際には指示されている複数の発音をすべて行えるようになる。
【００１８】
このような処理部１の実行する再生時の処理における演算部２の動作をハードウェア的に図２に示す。図２において２−１は、波形メモリ４から読み出された複数チャンネル分の楽音波形データと、音源演算部２−２により演算された楽音波形データとを混合する加算器である。この加算器２−１よりの複数チャンネル分の楽音波形データはバッファ８へ供給されて一時記憶される。
音源演算部２−２は、供給された演奏情報に基づいてＦＭ音源演算、あるいは物理モデル音源演算を実行して楽音波形データを生成したり、楽音波形データにエフェクトを与える演算処理を実行したりして、処理された楽音波形データを加算器２−１に供給している。
ただし、実際には演算部２は時分割にて各チャンネルの演算を実行しており、１チャンネルの楽音波形データが生成されるごとに、すでに演算された他のチャンネルの楽音波形データに足し込むようにして加算を行っている。
【００１９】
次に、このように構成された本発明の楽音発生装置の動作を図３に示すフローチャートを参照して詳細に説明する。
図３に示すフローチャートは、所定周期毎に起動されて実行される処理部１におけるメインルーチンのフローチャートであり、スタートされるとステップＳ１０にて演奏が開始されたか否かが判定される。演奏開始されていないと判定された（NO）場合は、演奏開始されるまでこの処理が循環して行われる。そして、演奏開始されたと判定された（YES）場合は、ステップＳ１１にて後述する演奏時の処理が実行される。この演奏時の処理は、ステップＳ１２にて演奏が終了したと判定されるまで繰り返し実行される。
【００２０】
そして、演奏が終了されたと判定されると、ステップＳ１２からステップＳ１３に進み後述する再生時の処理が行われるようになる。この再生時の処理は、発音が指示されているすべての楽音の波形データが生成されるまで繰り返し行われる。ここで、発音が指示されているすべての楽音の波形データが生成されたか否かをフラグ（flag）により示すようにしている。すなわち、フラグが”１”の場合は、未だ発音が指示されているすべての楽音の波形データが生成されていない時であり、フラグが”０”の場合は、発音が指示されているすべての楽音の波形データが生成されている時である。したがって、フラグが”０”になったとステップＳ１４にて判定されたときは、発音が指示されているすべての楽音の波形データの生成が終了しており、この時はステップＳ１４からステップＳ１５に進むようになる。
そして、ステップＳ１５にて表示パネルに「全チャンネル発音」等の表示を行い、メインルーチンは終了する。
【００２１】
次に、前記ステップＳ１１にて実行される演奏時の処理を、図４に示す演奏時処理のフローチャートと、図１に示す楽音発生装置を参照しながら説明する。
演奏情報発生部７から各種演奏情報が発生されると、演奏時の処理が起動され、ステップＳ２１にてこの演奏情報がその発生時を示す時間データと共に演奏情報記憶部６に記憶される。ついで、ステップＳ２２にて取り込まれた演奏情報がノートオンイベントか否かが判定される。ここで、ノートオンイベントと判定された（YES）場合は、ステップＳ２３に進み発音数contが演算による最大同時発音数Ｎを越えているか否かが判定される。この発音数contは現時点での演算時の処理において演算中（発音中）の発音数を示しており、そのデフォルト値は”０”とされる。従って、この場合には発音数contは”０”とされているのでYESと判定されてステップＳ２４に進む。
【００２２】
ステップＳ２４では発音数contが１だけインクリメントされ、ステップＳ２５においてノートオンイベントに基づいて演算部２により音源演算が実行されて、生成された波形データが外部にあるバッファ８に出力される。そして、ステップＳ２６にて波形メモリ４に生成された波形データが記憶されて、リターンされる。
ここで、例えば演算による最大同時発音数Ｎが「２」であるときに、演奏情報発生部７から同時に発音する３つのノートオンイベントが発生されたとする。この時は、上記説明したように１つ目のノートオンイベントが取り込まれて、その波形データがステップＳ２５にて演算により生成され、バッファ８に記憶されると共に、波形メモリ４に記憶される。この時、発音数contは”１”となる。そして、図３に示すステップＳ１２にリターンするが、演奏は終了していないので、再び演奏時の処理が起動されて、２つ目のノートオンイベントが取り込まれて、その波形データがステップＳ２５にて演算部２により演算により生成され、バッファ８に記憶されると共に、波形メモリ４に記憶される。この時、発音数contは”２”となる。
【００２３】
さらに、図３に示すステップＳ１２にリターンするが、演奏は終了していないので、再び演奏時の処理が起動されて、３つ目のノートオンイベントが取り込まれる。しかしながら、演算による最大同時発音数Ｎが「２」とされているのでステップＳ２３にてNOと判定されて、波形データが演算生成されることなくそのままリターンされるようになる。
すなわち、演奏時の処理においては２つの発音数の楽音が発音されるようになる。
【００２４】
ところで、ステップＳ２２にてノートオンイベントと判定されなかった場合は、ステップＳ２７に分岐してノートオフイベントか否かが判定される。そして、ノートオフイベントと判定される（YES）と、そのノートオンイベントが演算中の音に対するものであるか否かがステップＳ２８にて判定される。ステップＳ２８にて演算中の音と判定される（YES）とステップＳ２９に進み、当該演算中の音にノートオフ処理が実行されてリターンされ、演算中の音でないと判定される（NO）と、ステップＳ２９の処理がスキップされてリターンされる。
【００２５】
さらにまた、ステップＳ２７にてノートオフイベントと判定されなかった（NO）場合は、ステップＳ３０に分岐して個別の発音チャンネルのデータか発音チャンネル共通のデータかが判定される。そして、個別のデータと判定される（YES）と、その個別のデータが演算中の音に対するものか否かがステップＳ３１にて判定される。ステップＳ３１にて演算中の音と判定される（YES）と、ステップＳ３２に進み当該演算中の音に個別のデータを反映させるように音源演算部（演算部２）に個別のデータが送られてリターンされる。演算部２は送られた個別のデータに基づいて波形データを生成するようになる。また、ステップＳ３１にて演算中の音でないと判定される（NO）と、ステップＳ３２の処理がスキップされてリターンされる。
【００２６】
さらにまた、ステップＳ３０にて共通のデータと判定される（NO）とステップＳ３３に分岐して、共通のデータが音源演算部（演算部２）に送られて、演算中の全ての音に反映されるようになる。
なお、音源演算部は演算部２において実行されるソフトウェア音源であり、ハードウェア表現を行うと図６に示すように、供給された演奏情報に基づいて波形データを演算生成し、生成された波形データを波形メモリ４およびバッファ８に送るものとして表せるものである。
【００２７】
次に、前記ステップＳ１３にて実行される再生時の処理を、図５に示す再生時処理のフローチャートと、図１に示す楽音発生装置を参照しながら説明する。
演奏が終了したとき、あるいは、フラグ（flag）が「１」の時に再生時の処理が起動され、ステップＳ４０にてフラグが「０」にリセットされる。ついで、ステップＳ４１にて、演奏情報記憶部６に記憶されている発音時刻に達した演奏情報が順次１つづつ読み出され、その演奏情報がノートオンイベントが否かがステップＳ４２にて判定される。そして、ノートオンイベントと判定される（YES）とステップＳ４３にて、当該ノートオンイベントの演奏情報に対応した波形データがすでに波形メモリ４に記憶されているか否かが判定される。この時、演奏時の処理により波形データが生成されて波形メモリ４に記憶されている場合は、YESと判定されてステップＳ４４に進み、その波形データの波形メモリ４からの読み出しが指示される。
【００２８】
ついで、ステップＳ５７にて演奏情報記憶部６から全演奏情報の読み出しが終了したか否かが判定され、読み出しが終了していればリターンされ、読み出しが終了していなければ、前記ステップＳ４１に戻り、ステップＳ４１以降の処理が再度実行される。
【００２９】
また、演算による最大発音数Ｎ以上の音の発生が指示されて全ての波形データの生成が行われていない場合、すなわち、前述した同時に発音する３つのノートオンイベントが発生された場合における３つ目のノートオンイベントのように、対応する波形データの生成が行われていない場合は、ステップＳ４３にてNOと判定されてステップＳ４５に分岐するようになる。そして、ステップＳ４５にて発音数contが演算による最大同時発音数Ｎを越えているか否かが判定される。この発音数contは現時点での演算時の処理において演算中（発音中）の発音数を示しており、そのデフォルト値は”０”とされる。再生時の処理が開始された直後には発音数contはデフォルト値である”０”とされているのでYESと判定されてステップＳ４６に進む。
【００３０】
ステップＳ４６では発音数contが１だけインクリメントされてステップＳ４７に進み、ステップＳ４７において当該ノートオンイベントに基づいて演算部２により音源演算が実行されて、生成された波形データが外部にあるバッファ８に出力される。そして、ステップＳ４８にて波形メモリ４に生成された波形データが記憶されて、ステップＳ５７に進む。ステップＳ５７では演奏情報記憶部６から全演奏情報の読み出しが終了したか否かが判定され、読み出しが終了していればリターンされ、読み出しが終了していなければ、前記ステップＳ４１に戻り、ステップＳ４１以降の処理が再度実行される。
また、ステップＳ４５にて発音数contが演算による最大同時発音数Ｎを越えると判定された場合は、ステップＳ４９に分岐してフラグが「１」にセットされてステップＳ５７に進むようになる。
【００３１】
ここで、例えば演算による最大同時発音数Ｎが「２」であるときに、演奏時に演奏情報発生部７から同時に発音する３つのノートオンイベントが発生されていたとする。このときは前述したように１つ目と２つ目のノートオンイベントに対応する音の波形データは演奏時の処理により波形メモリ４に記憶されている。従って、演奏情報記憶部６から読み出された１つ目のノートオンイベントと２つ目のノートオンイベントに対応する波形データは、繰り返し実行される前記したステップＳ４４にて波形メモリ４から読み出され、３つ目のノートオンイベントの演奏情報が演奏情報記憶部６から読み出されたときは、前記ステップＳ４３にてNOと判定されステップＳ４７にて、当該ノートオンイベントに対応する波形データの生成が行われて、バッファ８および波形メモリ４に記憶されるようになる。
【００３２】
これにより、再生時の処理においては、演奏時に指示された３つの同時に発音する音を同時に３つ発音することができるようになる。なお、この例では演算による同時最大発音数Ｎを「２」としたが、本発明では「２」に限定されるものではなく、同時最大発音数Ｎを「３」以上とすることができる。
ところで、例えば、演算による同時最大発音数Ｎが「２」とされているときに、演奏時に４つの音の同時発音が指示されたときは、１つ目と２つ目のノートオンイベントに対応する音の波形データは演奏時の処理により演算生成されて波形メモリ４に記憶され、３つ目のノートオンイベントと４つ目のノートオンイベントに対応する音の波形データは再生時の処理により演算生成されてバッファ８および波形メモリ４に記憶されるようになる。従って、再生時の処理において指示された４つの音の同時発音を可能とすることができる。
【００３３】
さらに、演奏時に５つの音の同時発音が指示されたときは、１つ目と２つ目のノートオンイベントに対応する音の波形データは演奏時の処理により演算生成されて波形メモリ４に記憶され、３つ目のノートオンイベントと４つ目のノートオンイベントに対応する音の波形データは再生時の処理により演算生成されてバッファ８および波形メモリ４に記憶されるようになる。しかしながら、５つ目のノートオンイベントが読み出されたときには、ステップＳ４５にてNOと判定されるため、その波形データの生成を行うことができない。ただし、フラグは「１」にセットされて、リターンされる。従って、図３に示すステップＳ１４にリターンされたときに、YESと判定されて再び再生時の処理が実行されるようになる。この場合には、発音数contはデフォルト値となっているため、５つ目のノートオンイベントが演奏情報記憶部６から読み出されたときに、ステップＳ４７において当該ノートオンイベントの波形データが演算生成されるようになる。
これにより、２回目に実行される再生時の処理において指示された５つの音の同時発音を可能とすることができるようになり、再生時の処理を複数回実行することにより、多数の音の同時発音を可能とすることができる。
【００３４】
また、ステップＳ４２にてノートオンイベントでないと判定された場合は、ステップＳ５０に分岐するが、ステップＳ５０ないしステップＳ５６の処理は、前記した図４に示す演奏時の処理におけるステップＳ２７ないしステップＳ３３と同様であるので、ここではその説明は省略するが、ステップＳ５０ないしステップＳ５６の処理では、ノートオフ処理、発音チャンネル個別の処理や、発音チャンネル共通の処理が実行される。
なお、本発明の楽音発生方法および楽音発生装置においては、楽音発生演算処理の空き時間を利用して他のアプリケーションソフトから依頼された発音指示を含む処理を行うことができる。他のアプリケーションソフトとしては、ゲームソフト、通信ソフト、事務処理ソフト等がある。
【００３５】
さらに、以上説明した本発明において、演奏情報発生部７から指示される同時発音数と実際に再生される音の数（波形メモリ読み出しによる発音数と演算による発音数の合計）が一致しないときは、再生音をサウンドシステム１０から放音したときにユーザーが違和感を持つおそれがある。そこで、同時発音数と実際に再生される音の数が一致しない場合には、サウンドシステム１０の出力をミュートして楽音を出さないようにしてもよい。
また、あらかじめ演奏情報がわかっている場合には、これをあらかじめ読み出して音をミュートした状態で本発明を実行させるようにし、この際に、再生する同時発音数と発音指示する同時発音数が一致できるところまで処理を進めるようにする。このような前処理をあらかじめ実行しておくことにより、ユーザーの操作に基づいてアプリケーションソフト等から楽音を出力するよう指示されたときには、指示された同時発音数を満足する状態で再生を行うことができるようになる。
【００３６】
以上においては、前記図１に示す楽音発生装置にて実行されるプログラムとして本発明の楽音発生方法の説明を行った。また、本発明の楽音発生方法を記録媒体に記録しておき、記録媒体からWindows （米マイクロソフト社のパソコン用ＯＳ）やその他のオペレーティングシステムの動作する汎用コンピュータ上にインストールすることにより、１つのアプリケーションプログラムとして、他のアプリケーションプログラムと並列実行させるようにしてもよい。
【００３７】
【発明の効果】
本発明は以上のように、演奏時の処理において演算生成されたすべてのチャンネルの波形データを波形メモリに記憶しておき、再生時の処理において、演奏情報に対応する波形データが波形メモリに記憶されている場合は、波形メモリからその波形データを読み出し、演奏情報に対応する波形データが波形メモリに記憶されていない、すなわち、波形データが演奏時の処理において演算生成されていない場合は、再生時の処理において波形データを演算生成するようにしている。したがって、演奏情報により複数の音の同時発音が指示されて、演奏時の処理においてすべての音の波形データを演算生成することができなかった場合でも、再生時の処理を実行することにより、演奏時の処理において演算生成された波形データの音に加えて、再生時の処理において演算生成された波形データの音を発音することができるようになり、発音が指示された複数の発音チャンネルの楽音を同時に発音することが可能となる。
【図面の簡単な説明】
【図１】  本発明の楽音発生装置の一実施例の構成を示すブロック図である。
【図２】  本発明の音源演算部の動作を説明するための図である。
【図３】  本発明の楽音発生方法におけるメインルーチンのフローチャートである。
【図４】  本発明の楽音発生方法における演奏時の処理のフローチャートである。
【図５】  本発明の楽音発生方法における再生時の処理のフローチャートである。
【図６】  本発明の楽音発生方法における音源演算部をハートウェア的に示す図である。
【図７】  従来の楽音発生装置の構成の一例を示すブロック図である。
【符号の説明】
１  処理部、２  演算部、３  制御部、４  波形メモリ、５  プログラムメモリ、６  演奏情報記憶部、７  演奏情報発生部、８  バッファ、９  ＤＡＣ、１０サウンドシステム
【図１】
0003799711.tif 000002
【図２】
0003799711.tif 000003
【図３】
0003799711.tif 000004
【図４】
0003799711.tif 000005
【図５】
0003799711.tif 000006
【図６】
0003799711.tif 000007
【図７】
0003799711.tif 000008