(57)【要約】【課題】  演算処理装置上で所定のソフトウエアを実行することにより楽音を生成する際、演算処理装置の負荷が増大したなどの理由で波形生成ができなかったときでも、波形出力をとぎれさせ、あるいはノイズを発生するようなことのない楽音発生方法及び装置を提供することを目的とする。【解決手段】  楽音発生指示を受け取り、受け取った楽音発生指示に基づいて演算処理手段で波形生成ソフトウェアを実行することにより、複数チャンネルで楽音波形データをそれぞれ生成し、該複数チャンネルで生成された楽音波形データをパート毎に累算し、幾つかのパートの楽音信号とし、それらの楽音信号をミキサに供給する。【選択図】  図１
2005292858.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアを実行する演算処理手段と、前記演算処理手段で実行するための楽音波形生成ソフトウェアを格納した記憶手段と、複数の入力端子から入力した楽音波形信号を任意にミキシングして出力端子から出力するミキサとを備えた装置による楽音発生方法であって、
前記演算処理手段が、楽音発生指示を受け取るステップと、
前記演算処理手段が、受け取った楽音発生指示に基づいて前記楽音波形生成ソフトウェアを実行することにより、複数の各チャンネルの楽音波形データをそれぞれ生成出力するステップと、
前記演算処理手段が、前記各チャンネルで生成された楽音波形データをパート毎に累算し、幾つかのパートの楽音信号とするステップと、
前記演算処理手段が、前記幾つかのパートの楽音信号を前記ミキサに供給するステップと
を備えたことを特徴とする楽音発生方法。
【請求項２】
ソフトウェアを実行する演算処理手段と、
前記演算処理手段で実行するための楽音波形生成ソフトウェアを格納した記憶手段と、
楽音発生指示を受け取る手段と、
受け取った楽音発生指示に基づいて前記演算処理手段で前記楽音波形生成ソフトウェアを実行することにより、複数の各チャンネルの楽音波形データをそれぞれ生成する手段と、
前記各チャンネルで生成された楽音波形データをパート毎に累算し、幾つかのパートの楽音信号として出力する手段と、
前記幾つかのパートの楽音信号を前記ミキサに供給する手段と
を備えたことを特徴とする楽音発生装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、演算処理装置上で所定のソフトウエアを実行することにより楽音を生成する楽音発生方法及び装置に関する。
【背景技術】
【０００２】
従来より、ＣＰＵなどの汎用の演算処理装置上で所定のソフトウエアを実行することにより楽音を生成する楽音発生方法が知られている。これは、いわゆるソフトウエア音源あるいはソフト音源と呼ばれる方式のものである。ソフト音源では、所定時間ごとに生成プログラムを実行し、与えられた楽音制御データに基づいた複数チャンネル分の楽音を生成する。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、ソフト音源を実現するリアルタイムシステムでは、プロセッサの負荷が増大したなどの理由で波形生成ができなくなった場合に、音がとぎれる、あるいはノイズを発生する、という問題点がある。
【０００４】
また、プロセッサの負荷が増大したなどの理由で、演奏データが発生あるいは入力したタイミングで当該演奏データの処理ができなかった場合、当該演奏データは処理されないで済まされてしまうか、あるいは後で処理を行なった場合に不自然な楽音制御になってしまう、という問題点があった。
【０００５】
この発明は、上述の従来技術における問題点に鑑み、プロセッサの負荷が増大したなどの理由で波形生成ができなかったときでも、波形出力をとぎれさせ、あるいはノイズを発生するようなことのない楽音発生方法及び装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
この目的を達成するため、請求項１に係る発明は、ソフトウェアを実行する演算処理手段と、前記演算処理手段で実行するための楽音波形生成ソフトウェアを格納した記憶手段と、複数の入力端子から入力した楽音波形信号を任意にミキシングして出力端子から出力するミキサとを備えた装置による楽音発生方法であって、前記演算処理手段が、楽音発生指示を受け取るステップと、前記演算処理手段が、受け取った楽音発生指示に基づいて前記楽音波形生成ソフトウェアを実行することにより、複数の各チャンネルの楽音波形データをそれぞれ生成出力するステップと、前記演算処理手段が、前記各チャンネルで生成された楽音波形データをパート毎に累算し、幾つかのパートの楽音信号とするステップと、前記演算処理手段が、前記幾つかのパートの楽音信号を前記ミキサに供給するステップとを備えたことを特徴とする。
【０００７】
請求項２に係る発明は、ソフトウェアを実行する演算処理手段と、前記演算処理手段で実行するための楽音波形生成ソフトウェアを格納した記憶手段と、楽音発生指示を受け取る手段と、受け取った楽音発生指示に基づいて前記演算処理手段で前記楽音波形生成ソフトウェアを実行することにより、複数の各チャンネルの楽音波形データをそれぞれ生成する手段と、前記各チャンネルで生成された楽音波形データをパート毎に累算し、幾つかのパートの楽音信号として出力する手段と、前記幾つかのパートの楽音信号を前記ミキサに供給する手段とを備えたことを特徴とする。
【発明の効果】
【０００８】
以上説明したように、この発明によれば、いわゆるソフト音源で生成した複数チャンネルの楽音波形信号を適宜パート毎に累算して幾つかのパートの楽音信号としミキサに供給するので、プロセッサの負荷が増大したなどの理由で波形生成ができなかったときでも、波形出力をとぎれさせ、あるいはノイズを発生するようなことが防止される。
【発明を実施するための最良の形態】
【０００９】
以下、図面を用いてこの発明の実施の形態を説明する。
【００１０】
図１は、この発明の一実施形態に係る電子楽器の構成を示す。この電子楽器は、中央処理装置（ＣＰＵ）１０１、タイマ１０２、ＨＯＳＴ（ホスト）−ＰＣＩ（Peripheral Component Interconnect）ブリッジ１０３、リードオンリメモリ（ＲＯＭ）１０４、ランダムアクセスメモリ（ＲＡＭ）１０５、表示用入出力（Ｉ／Ｏ）インタフェース１０６、表示器１０７、キーボードＩ／Ｏインターフェース１０８、キーボード１０９、ローカルバス１１０、ＰＣＩバス１１１、ネットワークＩ／Ｏインターフェース１１２、ＳＣＳＩ（Small Computer System Interface）１１４、ハードディスク１１５、ＭＩＤＩ（Musical Instruments Digital Interface）入出力インターフェース１１６、および音声入出力ボード１２０を備えている。
【００１１】
ＣＰＵ１０１は、この装置全体の動作を制御する。タイマ１０２は、所定時間間隔でタイマ割り込み信号を発生するためのタイマである。ホスト−ＰＣＩブリッジ１０３は、ＣＰＵやメモリを接続するローカルバス１１０と周辺機器を接続するためのＰＣＩバス１１１との間で各種信号の授受を制御する。ＲＯＭ１０４は、ＢＩＯＳ(BASIC INPUT/OUTPUT SYSTEM)などを格納した記憶装置である。ＲＡＭ１０５は、ＣＰＵ１０１が実行するプログラムをロードしたり各種バッファ領域を確保する記憶領域である。ＲＡＭ１０５には、再生用バッファであるＰＣバッファ（後に詳述する）などが設けられる。表示器１０７は、インターフェース１０６を介して受け取った各種のデータを表示する。キーボード１０９は、インターフェース１０８を介して各種の情報を入力するために用いるタイピングキーボードである。ユーザは、キーボード１０９および表示器１０７を用いてこの装置に対し各種の設定操作や指示操作を行なうことができる。ローカルバス１１０は、ＣＰＵの専用バスと周辺Ｉ／Ｏなどを接続するためのローカルＰＣＩバスとの２つのバスにより構成するようにしてもよい。
【００１２】
ＰＣＩバス１１１には、各種の周辺機器が接続される。ネットワークＩ／Ｏカード１１２を介して外部のネットワーク１１３に接続することができる。また、ＳＣＳＩ１１４を介してハードディスク１１５が接続されている。音声入出力ボード１２０は、転送回路１２１、ＲＡＭ１２２、転送回路１２３、ミキサ１２４、マルチＤＳＰ（デジタルシグナルプロセッサ）１２５、アナログ／デジタル（Ａ／Ｄ）変換器１２６、デジタル／アナログ（Ｄ／Ａ）変換器１２８、タイミング発生器１３０、カウンタ１３１、およびレジスタ群１３２を備えている。なお、図１に図示しているように、ＲＡＭ１０５をＲＡＭ１と、転送回路１２１を転送回路１と、ＲＡＭ１２２をＲＡＭ２と、転送回路１２３を転送回路２と、それぞれ、呼ぶものとする。
【００１３】
転送回路１は、ＰＣＩバス１１１をいわゆるバースト的に使って複数サンプルを一辺に高速にＲＡＭ２に転送するための回路である。ＲＡＭ２は、再生用バッファであるＰバッファ、および録音用バッファであるＲバッファを含む。これらのバッファは、複数設定されている再生トラック（本例では４トラック）の各トラックに対応して設けられている。１トラックのＰバッファは、２個のバッファからなり、いわゆるダブルバッファ的になっている。トラックごとに、一方のバッファが空いたとき転送回路１を経由して該バッファへのサンプルの転送を開始し、そのとき他方のバッファは転送回路２を経由してサンプル出力用に用いる。転送回路２によるサンプルの出力は、サンプリング周期ごとに継続的に行なわれる。転送回路２は、ＲＡＭ２のＰバッファからサンプルをミキサ１２４に転送し、あるいはミキサ１２４から出力された録音用のサンプルをＲＡＭ２のＲバッファに転送する機能を有する。該録音用サンプルのＲバッファへの転送も、サンプリング周期毎に行なわれる。ＲＡＭ２は、転送回路１と転送回路２により、時分割アクセスされる。１ＤＡＣサイクル（例えば、44.1kHz）を半分に分けて、その前半を転送回路１が使用し、後半を転送回路２が使用する。
【００１４】
なお、ＲＡＭ２上にある再生用のＰバッファおよび録音用のＲバッファに対する転送回路１のアクセスは、ＣＰＵ１０１のアクセスより優先度が高い。すなわち、転送回路１がアクセスをしようとしたときにＣＰＵ１０１がアクセスをしていたら、該ＣＰＵ１０１のアクセスが中断され、転送回路１によるアクセスが先に行なわれる。ただし、転送回路１による転送動作は１ＤＡＣの半分の期間は必ず休みになるので、ＣＰＵ１０１は最悪でも残りの期間を使用してアクセスすることができる。
【００１５】
転送回路１および転送回路２は、タイミング発生器１３０から出力されるタイミング信号に応じて転送を実行する。タイミング発生器１３０は、カウンタ１３１から出力されるカウント出力に応じてタイミング信号を発生する。レジスタ群１３２は、転送アドレスなどの各種データを保持するレジスタから構成されている。
【００１６】
ミキサ１２４は、３６系統の入力端子と２４系統の出力端子を備え、それぞれの入力を適宜ミキシングして、それぞれの出力端子に出力することができる。どの入力を用いてどの出力端子の出力信号を生成するかは、ＣＰＵ１０１から指示することができる。マルチＤＳＰ１２５は、複数のマイクロプログラムが動作するようになっており、楽音波形サンプルに対してエフェクト付与などの処理を行なう。Ａ／Ｄ変換器１２６には、外部マイク１２７が接続される。Ａ／Ｄ変換器１２６は、外部音を入力しアナログ／デジタル変換してミキサ１２４に出力する。ミキサ１２４からＤ／Ａ変換器１２８に出力された楽音波形は、デジタルアナログ変換されてサウンドシステム１２９により放音される。転送回路２以降のミキサ１２４側の各部は、サンプリング周期ごとの処理で動作する。
【００１７】
なお、本例では、ＣＰＵ１０１は１６チャンネル分の楽音波形生成を行ない、それら１６チャンネル分の楽音波形データをＲＡＭ１上で４トラックにまとめ、その４トラック分の楽音波形データを転送回路１経由でＲＡＭ２に転送する。具体的には、ＲＡＭ１上に４つのトラックに対応してＰＣバッファを設けてあり、１６チャンネル分の楽音波形データを４つの各トラックのＰＣバッファにまとめる。各トラックのＰＣバッファの楽音波形データを、転送回路１経由でＲＡＭ２上の４つの各トラック対応のＰバッファに転送する。４つの各トラック対応のＰバッファの楽音波形データを転送回路２経由でミキサ１２４に入力する。ミキサ１２４は、転送回路２から１６系統入力可能であるが、ここでは４系統のみ使用することになる。
【００１８】
図１０に、ミキサ１２４とＤＳＰ１２５によるミキサ／エフェクト設定の一例を示す。ＰＣＢ１００１〜１００４は、ＲＡＭ１上に設けられた４トラックのＰＣバッファを示す。各ＰＣバッファ１００１〜１００４の楽音波形信号は、（転送回路１、ＲＡＭ２上のＰバッファ、および転送回路２経由で）ミキサ１２４に入力する。１０１１〜１０１３は、ミキサ１２４に設定されている３つの個別のミキサである。コーラスエフェクト１０２１およびリバーブエフェクト１０２２は、ＤＳＰ１２５で実現されているエフェクト付与回路である。ＤＡＣ１０３１は、Ｄ／Ａ変換器１２８に相当する。本実施の形態では、ミキサの出力チャンネル数が充分あるので、各ラインはステレオ信号としてＬ／Ｒ別に処理することができる。
【００１９】
各レジスタその他について簡単に説明する。なお、以下のレジスタで添字ｘを使っているもの（すなわち［ｘ］が付いているもの）は、そのｘはトラック番号を示すものとする。
（ａ）ＳＡ［ｘ］：ＲＡＭ１上に設けられる再生バッファであるＰＣバッファのスタートアドレスを格納するレジスタである。
（ｂ）ＥＡ［ｘ］：ＲＡＭ１上に設けられる再生バッファであるＰＣバッファのエンドアドレスを格納するレジスタである。
（ｃ）ＴＰ［ｘ］：ＰＣバッファ上の波形データを読み出してＲＡＭ２上のＰバッファに転送するときの、ＰＣバッファ読み出しアドレスを格納するレジスタ（アドレスカウンタ）である。
（ｄ）ＴＷＰ［ｘ］：ＰＣバッファ上の波形データを読み出してＲＡＭ２上のＰバッファに転送するときの、Ｐバッファ書き込みアドレスを格納するレジスタ（アドレスカウンタ）である。
（ｅ）ＡＰＰ［ｘ］：サンプリング周期でＰバッファ上の波形データを読み出してミキサ１２４に出力するときの読み出しアドレスを格納するレジスタ（読み出しカウンタ）である。
（ｆ）ミキサデータ：ミキサ１２４に設定するデータである。１６トラックのミキシング比、Ａ／Ｄ変換器１２６から入力する４トラックのミキシング比、ＤＳＰ１２５から入力する１６トラックのミキシング比などを規定する。
（ｇ）ＤＳＰデータ：ＤＳＰ１２５に設定するデータである。ＤＳＰで実行するマイクロプログラムや入出力関係などを規定する。
【００２０】
なお、上記レジスタ類などの記号は、その記憶領域そのものを示すとともに、その記憶領域に記憶されたデータをも示すものとする。例えば、ＳＡ［ｘ］は、スタートアドレスを格納するレジスタを示すとともに、該レジスタに格納されているスタートアドレスのデータをも示すものとする。
【００２１】
図２に、再生用バッファの構成およびデータの流れを示す。上述したように、再生用バッファとして、ＲＡＭ１上に４つのトラックに対応するＰＣバッファを設け、ＲＡＭ２上に４つのトラックに対応するＰバッファを設けている。１トラック分（ｘ＝０，１，２，３としてｘトラック）のバッファの利用方法について説明する。ＲＡＭ１上のＰＣバッファは、スタートアドレスＳＡ［ｘ］からエンドアドレスＥＡ［ｘ］の範囲となる。スタートアドレスＳＡ［ｘ］とエンドアドレスＥＡ［ｘ］は、ＣＰＵ１０１から指定することが可能であり、したがってＲＡＭ１上の任意の位置にＰＣバッファを置くことができる。そのサイズも任意である。ＣＰＵ１０１は、このＰＣバッファ上に波形データを先行生成する。ＰＣバッファには、時間フレームで複数フレーム分の波形データが先行生成される。ＴＰ［ｘ］は、ＰＣバッファ上で、転送回路１がＲＡＭ２上のＰバッファへと転送開始するアドレスを示す。
【００２２】
ＰＣバッファのＴＰ［ｘ］位置から転送されたデータは、Ｐバッファの書き込みアドレスＴＷＰ［ｘ］に書き込まれる。ＲＡＭ２上のＰバッファは、波形データの１２８サンプル（ただし、バッファのサイズは任意）を格納するバッファを２個つなげた形になっている。Ｐバッファの波形データは、読み出しアドレスＡＰＰ［ｘ］から読み出され、ミキサ１２４に出力される。Ｐバッファのまん中と末尾には割込み位置が設定されている。サンプリング周期ごとに読み出しアドレスＡＰＰ［ｘ］を進めながら波形サンプルを読み出していくとき、当該読み出しアドレスＡＰＰ［ｘ］が、この割込み位置に至ったとき、いま読み出していたＰバッファのうちの半分が空になったということだから、波形生成のトリガになるハード割込が発生する。このハード割込を契機として、ＣＰＵ１０１は、いま空になったＰバッファのうちの半分に、次に再生すべきＰＣバッファの所定の楽音波形データを転送する。
【００２３】
なお、リアルタイム演奏に使用できるためには、演奏から楽音出力までの時間を10msec程度に抑えないといけない。サンプリング周波数44.1kHzの場合、10msecは４４１サンプルに相当する。ソフト音源では、大体、２フレーム程度の時間遅れが発生する。そこで、本実施の形態では、例えば、１フレームを１２８サンプルとする。つまり、Ｐバッファのサイズは、１２８サンプル×２＝２５６サンプルである。
【００２４】
ＰＣバッファには、先行して生成される楽音波形が記憶される。先行して記憶できる楽音波形のサンプル数が多いほど、ソフト音源のノイズ防止効果が大になる。本実施の形態では、ＰＣバッファのサイズを、例えば、６４フレーム分＝１２８サンプル×６４＝８ｋサンプル分とする。
【００２５】
図３は、ＣＰＵ１０１の制御プログラムのうちソフト音源に係るメインルーチンの処理手順を示す。このメインルーチンは、ソフト音源のドライバとしてオペレーティングシステムに登録されているものである。ソフト音源を使用した楽音生成を行う際には、まずこのドライバ、すなわち図３の処理を起動し、ソフト音源に係るＡＰＩを有効にしておく。
【００２６】
図３において、ステップ３０１で、各種の初期設定を行う。この初期設定で、上述のＰＣバッファおよびＰバッファをゼロクリアする。次に、ステップ３０２で何らかの起動要因があるか否かチェックし、ステップ３０３で起動要因があればステップ３０４に進む。起動要因がなければ再びステップ３０２に戻る。ステップ３０２〜３０４の起動要因の受付が、ソフト音源に係るＡＰＩに対する指示受付に相当する。
【００２７】
ステップ３０４では、発生している起動要因の種類を判別しそれぞれの処理に分岐する。起動要因としては、（１）ＭＩＤＩデータを受信したとき（ＭＩＤＩ−Ｉ／Ｏ割り込み）、（２）ＲＡＭ１上のＭＩＤＩデータを格納するバッファ（以下、Ｍバッファと呼ぶ）にＭＩＤＩデータがあるとき、（３）１フレーム分（１２８サンプル）の楽音生成処理が終了（すなわち、Ｐバッファの２つのバッファのうちの１つについて波形データの読み出し再生が終わった）したとき（Ｐバッファ割り込み）、（４）空き時間があるとき、（５）何らかのスイッチ操作があった場合などその他の場合、（６）終了ボタンがクリックされたときがある。以下、これらの起動要因ごとに実行する処理を説明する。なお、図中の丸数字は括弧付き数字で表記する。
【００２８】
起動要因が（１）ＭＩＤＩインタフェース１１６を介してＭＩＤＩデータを受信した場合のときは、ステップ３０５のＭＩＤＩ受信イベント処理を行い、その後再びステップ３０２に戻る。ＭＩＤＩデータの受信およびステップ３０５のＭＩＤＩ受信イベント処理が、演奏入力の受付に相当する。ステップ３０４で起動要因が（２）ＭバッファにＭＩＤＩデータがある場合のときは、ステップ３０６のＭＩＤＩ制御イベント処理を行い、その後再びステップ３０２に戻る。
【００２９】
ステップ３０２で起動要因が（３）フレーム割り込み（１フレーム再生完了）であるときは、ステップ３０７の楽音生成処理を行い、その後再びステップ３０２に戻る。フレーム割り込みは、音源ボードが１フレーム再生完了する毎に発生するハードウェア割り込みである。楽音生成処理では、一度に１フレーム分の波形データ（Ｐバッファの大きさの半分に相当する数の波形サンプル）を生成し、ＰＣバッファに書き込む。
【００３０】
ステップ３０４で起動要因が（４）空き時間ありであるとき（実行すべき処理がないとき）は、ステップ３０８で空き時間処理を行い、その後再びステップ３０２に戻る。ステップ３０４で起動要因が（５）スイッチ操作などのその他の場合は、ステップ３０９でその他の処理を行い、再びステップ３０２に戻る。ステップ３０４で起動要因が（６）ソフト音源の終了要求であったときは、ステップ３１０で終了処理を行った後、処理を終了する。
【００３１】
なお、上述した（１）〜（６）の起動要因は、（１）＞（３）＞（２）＞（５）＞（６）＞（４）の優先度を設定している。
【００３２】
図４は、図３のステップ３０５のＭＩＤＩ受信イベント処理の処理手順を示す。ＭＩＤＩ受信イベント処理では、ステップ４０１でＭＩＤＩインタフェース１１６からイベントデータＥＤを取り出し、ステップ４０２でＲＡＭ１上のＭバッファにイベントデータＥＤと受信時刻ＪＴを書き込み、処理を終了する。
【００３３】
図５は、図３のステップ３０６のＭＩＤＩ制御イベント処理の処理手順を示す。ＭＩＤＩ制御イベント処理では、まずステップ５０１でＭバッファよりイベントデータＥＤと受信時刻ＪＴを取り出し、ステップ５０２でイベントデータＥＤのデータ種別に応じて分岐する。イベントデータＥＤがノートオンであったときは、ステップ５０３でノートオン処理を行う。イベントデータＥＤがノートオフであったときは、ステップ５０４でノートオフ処理を行う。イベントデータＥＤがトラックのレベルデータであったときは、ステップ５０５でトラックレベル制御処理を行う。イベントデータＥＤがエフェクトレベルデータであったときは、ステップ５０６でエフェクトレベル制御処理を行う。イベントデータＥＤがピッチベンドデータであったときは、ステップ５０７でピッチベンド制御処理を行う。イベントデータＥＤがその他のデータであったときは、ステップ５０８でその他の制御処理を行う。ステップ５０３〜５０８の各処理の後、処理を終了する。
【００３４】
上述のステップ５０３〜５０７の処理は、以下の３つのタイプに分けることができる。タイプ１の処理は、ノートオン処理である。タイプ１の処理では、ＰＣバッファ上に先行生成されている楽音波形データに、新たに発音開始する楽音波形を追加する。タイプ２は、ノートオフ処理、ピッチベンドレベル制御処理、およびビブラートレベル処理（その他制御処理５０８中）である。タイプ２の処理では、先行生成されている楽音波形を破棄し、生成し直す。タイプ３の処理は、トラックレベル制御処理、エフェクトレベル制御処理、およびエフェクト切り替え処理（その他制御処理５０８中）である。タイプ３の処理では、先行生成されている楽音波形自体は何の変更も加える必要がない。ミキサ１２４に設定する混合比を変更することにより、トラック別の音量やエフェクトレベルを制御することができる（これらを制御するための制御データが「トラック制御データ」である）。ＤＳＰ１２５のプログラムを変更することで、エフェクトの切り替えができる。
【００３５】
図６は、図５のステップ５０３のノートオン処理の処理手順を示す。ノートオン処理に入ってきたときは、Ｍバッファより取り出したイベントデータＥＤとその受信時刻ＪＴは分かっている。まずステップ６０１で、発音チャンネルの割り当てを行う。次にステップ６０２で、現在時刻ＧＴと先行時刻ＳＴとを比較し、先行時刻ＳＴの方が時刻が進んでいるときはステップ６０５に進み、そうでないとき（作り置きしてある波形データがないとき）はステップ６０３に進む。先行時刻ＳＴとは、ＰＣバッファ上に先行生成してある波形データについて、いつの時点まで先行生成してあるかを示すデータである。
【００３６】
現在時刻ＧＴより先行時刻ＳＴがあとのときは、先行生成してあるデータがあるということだから、ステップ６０５で、当該ノートオンの前のノートオンが来ていて先行生成してある波形にさらに後追いの波形を追加中か否か（すなわち、該前のノートオンに応じて今回割り当てたのとは別の発音チャンネルに関して既にステップ６０６，６０７が実行され、波形の追加が実行中であるか否か）判定する。これは、いったん追加を始めたらそれを続けないと音が連続しないので、そちらを優先して実行するための判別処理である。追加中であるときは、ステップ６０８で、イベントデータＥＤと受信時刻ＪＴと発音割り当てしたチャンネル番号とをＴバッファに格納し、追加発音開始待ちに設定する。これは、先に追加実行中の波形を処理しなくてはいけないからである。なお、Ｔバッファとは、追加発音開始待ち状態のデータを格納しておくＲＡＭ１上のバッファである。ステップ６０８の後、処理を終了する。
【００３７】
ステップ６０５で追加中でないときは、ステップ６０６で、今回のノートオンの波形を追加する。すなわち、発音割り当てしたチャンネルの発音制御レジスタに、立ち上がりからの発音制御データの設定（時間遅れが小のとき）、または持続部以降の発音制御データの設定（時間遅れが大のとき）を行う。次にステップ６０７で、そのチャンネルに追加の発音開始を指示する。このとき、追加時刻ＴＴには現在時刻ＧＴをセットし、レジスタｋにチャンネル番号をセットする。追加時刻ＴＴとは、先行生成してある波形データに対して新たな波形を追加開始する時点を示すデータである。ｋはチャンネル番号を格納するワークレジスタである。ステップ６０７の後、処理を終了する。
【００３８】
ステップ６０２で先行生成してある波形データがないときは、ステップ６０３で、今回のノートオンの波形を追加する。すなわち、発音割り当てしたチャンネルの発音制御レジスタに、立ち上がりからの発音制御データの設定（時間遅れが小のとき）、または持続部以降の発音制御データの設定（時間遅れが大のとき）を行う。次にステップ６０４で、割り当てたチャンネルに通常の発音開始を指示し、処理を終了する。
【００３９】
なお、発音割り当てしたチャンネルの発音制御レジスタに発音制御データを設定する場合の時間遅れの判定は、現在時刻ＧＴと受信時刻ＪＴ（発音開始すべき時刻といってもよい）とを比較し、例えば受信時点から100msec程度以上遅れたら時間遅れ大とし、そうでなければ小とする、などの方式を採ればよい。
【００４０】
図７は、図５のステップ５０４のノートオフ処理の処理手順を示す。ステップ７０１で、発音中のチャンネルからノートオフすべきチャンネルを検出する。ステップ７０２でノートオフすべきチャンネルが有るか否か判定し、無かったときは、入力したノートオフを無視して処理を終了する。有ったときは、ステップ７０３で、そのチャンネルの発音制御レジスタにノートオフを書き込む。次にステップ７０４で、現在時刻ＧＴと先行時刻ＳＴとを比較する。先行して生成してある波形データがあるときは、その先行生成波形についても当該チャンネルをノートオフした波形に変更しなければならないので、ステップ７０５で当該チャンネルの波形を足し込んであったトラックのＰＣバッファの現在時刻ＧＴ＋１以降の波形をキャンセルし、波形の再形成を指示して処理を終了する。ステップ７０４で先行生成している波形がないときは、そのまま処理を終了する。
【００４１】
図８は、図３のステップ３０８の空き時間処理の処理手順を示す。まずステップ８０１で、追加があるか否か（すなわち、図６のステップ６０７の指示があるか否か）判定する。追加があるときは、ステップ８０２で追加時刻ＴＴに１加算する。次にステップ８０３で、追加するチャンネルであるｋチャンネルの時刻ＴＴの楽音波形を生成し、ステップ８０４で、そのチャンネルの楽音波形を足し込むべきトラックのＰＣバッファの時刻ＴＴの位置に足し込む。ステップ８０５で、追加時刻ＴＴと先行時刻ＳＴとが一致しているか否か判定し、一致しているときは以降の波形生成の必要がないので、ステップ８０６で、Ｔバッファを参照して追加発音開始待ち（ステップ６０８で設定）があるか否か判定する。
【００４２】
ステップ８０６で追加発音開始待ちがあるときは、ステップ８０７で、追加待ちのイベントデータＥＤと現在時刻ＧＴとチャンネル番号とをＴバッファから取り出し、現在時刻ＧＴを追加時刻ＴＴに、チャンネル番号をレジスタｋに、それぞれセットする。追加発音待ちがないときは、次回のステップ８０１で「追加なし」と判断されるように設定を行ない、ステップ８０９へ進む。ステップ８０７の後、ステップ８０８で、ｋチャンネルの発音制御レジスタに、立ち上がりからの発音制御データの設定（時間遅れ小のとき）、または持続部以降の発音制御データの設定（時間遅れ大のとき）の処理を行う。次にステップ８０９で、空き時間があるか否か判定し、空き時間があるときはステップ８０１に戻って、空き時間処理を継続する。空き時間がないときは、そのまま処理を終了する。
【００４３】
ステップ８０１で追加がないときは、ステップ８１１で、ノートオフでのキャンセル指示（ステップ７０５の指示）があるか否か判定する。キャンセルがあるときは、ステップ８１２で、キャンセルされたトラックに対応する複数チャンネルの波形を再形成し、同トラックのＰＣバッファに書き込む。この処理は、追加と同様に複数回の処理で行う。ステップ８１２の後、ステップ８０９に進む。
【００４４】
ステップ８１１でキャンセルがないときは、ステップ８１３で、先行時刻ＳＴ（現在作成中の時刻）までの全発音チャンネルの波形データが生成済か否か判定する。生成済であるときは、ステップ８１４で、ＰＣバッファに空きがあるか否か判定し、空きがないときは処理を終了する。ＰＣバッファに空きがあるときは、ステップ８１５で先行時刻ＳＴに１加算し、ステップ８１６で先行時刻ＳＴの曲データを再生する。これはイベントデータＥＤが再生された場合は対応する制御処理を実行するものであり、自動演奏を再生する処理である。例えば、ノートオンのイベントが再生されたら、発音チャンネルを割り当て、割り当てたチャンネルの発音制御レジスタに該ノートオンに応じた楽音の発音制御データを設定し、発音開始を指示する。また、ノートオフイベントが再生されたら、対応する楽音を生成中の発音チャンネルを検出して、検出されたチャンネルの発音制御レジスタにノートオフを書き込む。次にステップ８１７で先行時刻ＳＴの全トラックのＰＣバッファをクリアする。これは今から作る波形を書き込むためのバッファを全部ゼロクリアする処理である。ステップ８１７の後、ステップ８１８に進む。ステップ８１３で先行時刻ＳＴの全発音チャンネル生成済でないときは、ステップ８１８に進む。
【００４５】
ステップ８１８でレジスタｊに未生成のチャンネル番号をセットし、ステップ８１９でｊチャンネルの楽音波形を生成する。次にステップ８２０で、生成した楽音波形を、当該チャンネルの波形を足し込むべきトラックのＰＣバッファの先行時刻ＳＴの位置に足し込み、ステップ８０９に進む。
【００４６】
図９は、図３のステップ３０７の楽音生成処理の処理手順を示す。まずステップ９０１で、現在時刻ＧＴに１加算する。次にステップ９０２で、現在時刻ＧＴと先行時刻ＳＴとを比較する。現在時刻ＧＴが先行時刻ＳＴより進んでいるとき、すなわち先行波形が全くできていないときは、ステップ９０３で先行時刻ＳＴに現在時刻ＧＴをセットし、ステップ９１２で先行時刻ＳＴの曲データを再生し、ステップ９０４で全トラックのＰＣバッファの先行時刻ＳＴの位置をゼロクリアし、ステップ９０５に進む。なお、ステップ９１２は、ステップ８１６と同様の処理である。ステップ９０２で現在時刻ＧＴと先行時刻ＳＴとが一致しているときは、そのままステップ９０５に進む。
【００４７】
ステップ９０２で現在時刻ＧＴより先行時刻ＳＴが進んでいるときは、先行して波形が作ってあるということだから、ステップ９１０に進み、追加キャンセル（図７のステップ７０５の指示）があるか否か判定する。追加キャンセルがあれば、先行時刻ＳＴは進んでいるが、まだ手直しが必要ということであるから、手直し分を作るためステップ９０５に進む。ステップ９１０で追加キャンセルがなければ、先行波形は完成されているということだから、そのまま再生するためステップ９１１に進む。
【００４８】
ステップ９０５では、波形データを先行生成する時間があるか否か判定する。生成する時間があるときは、ステップ９０６で、現在時刻ＧＴの全発音チャンネル生成済か否か判定する。ステップ９０５で生成時間がないとき、またはステップ９０６で現在時刻ＧＴの全発音チャンネルが生成済であったときは、ステップ９１１に進み、現在時刻ＧＴの全トラックのＰＣバッファの再生許可を行ない、処理を終了する。ステップ９０６で現在時刻ＧＴの全発音チャンネル生成済でないときは、ステップ９０７でレジスタｉに未生成のチャンネル番号をセットし、ステップ９０８でｉチャンネルの楽音波形を生成し、ステップ９０９で生成した楽音波形をそのチャンネルの波形を足し込むべきＰＣバッファの現在時刻ＧＴの位置に足し込み、ステップ９０５に戻る。ステップ９１１の再生許可により、ＰＣバッファの現在時刻ＧＴの波形データが空になったＰバッファに転送され次の再生に用いられる。
【００４９】
上記実施の形態において、曲データに基づく自動演奏は、図８のステップ８１６に示されている。一方、図６および図７には、リアルタイムに入力するＭＩＤＩデータに基づくノートオン／ノートオフ処理が示されている。図９のステップ９０５〜９０９の処理、図８のステップ８１２、ステップ８０３〜８０４、ステップ８１８〜８２０の処理は、それぞれ、それらのノートオン等のイベントに応じて発音制御レジスタに設定された発音チャンネルの発音制御データに基づいて、対応する楽音波形データを形成する処理である。
【００５０】
上記実施の形態では、空き時間処理で先行して波形生成を行ない、Ｐバッファのうちの半分のバッファが空になったときに先行生成してある波形を楽音生成処理でＰバッファに転送し、再生することができる。この際、例えば空き時間処理では空き時間が足りなくても必要なチャンネルの波形生成ができない事態が発生しても、処理できる限りのチャンネルについては波形生成してＰＣバッファに足し込むので、その時点で先行生成してある波形データで再生される。したがって、波形生成ができなくなっても、音が途切れるあるいはノイズを発生すると言うことはない。また、既に先行生成されている波形に対して、追加の発音制御データが発生した場合、その追加分について波形生成して既に先行生成されている波形に足し込むので、追加の発音も適正に処理される。
【００５１】
さらに、例えば追加が指示されているときにさらに次の追加が来たときなど、ノートオンの処理ができない事態が発生した場合は、その時刻とノートオンを追加発音開始待ちとしてＴバッファに格納して待機しておき、後に処理可能になったときに、そのノートオンを処理する。したがって、ノートオンの処理ができない事態が発生した場合でも、後でできる限りの追加分の処理が為される。
【００５２】
また、発音開始指示においては楽音の発生開始すべき時刻からの遅れを検出し、遅れが小さい場合は立ち上がり部から開始する楽音を生成し、遅れが大きい場合は持続部から開始する楽音を生成しているので、不自然な楽音にならない。
【図面の簡単な説明】
【００５３】
【図１】この発明の一実施形態に係る電子楽器の構成図
【図２】再生用バッファの構成およびデータの流れを示す図
【図３】ソフト音源に係るメインルーチンの処理手順を示すフローチャート図
【図４】ＭＩＤＩ受信イベント処理の処理手順を示すフローチャート図
【図５】ＭＩＤＩ制御イベント処理の処理手順を示すフローチャート図
【図６】ノートオン処理の処理手順を示すフローチャート図
【図７】ノートオフ処理の処理手順を示すフローチャート図
【図８】空き時間処理の処理手順を示すフローチャート図
【図９】楽音生成処理の処理手順を示すフローチャート図
【図１０】ミキサ／エフェクト設定の一例を示す図
【符号の説明】
【００５４】
１０１…ＣＰＵ（中央処理装置）、１０２…タイマ、１０３…、ＨＯＳＴ（ホスト）−ＰＣＩ（Peripheral Component Interconnect）ブリッジ、１０４…リードオンリメモリ、１０５…ランダムアクセスメモリ（ＲＡＭ）、１０６…表示用入出力（Ｉ／Ｏ）インタフェース、１０７…表示器、１０８…キーボードＩ／Ｏインターフェース、１０９…キーボード、１１０…ローカルバス、１１１…ＰＣＩバス、１１２…ネットワークＩ／Ｏインターフェース、１１４…ＳＣＳＩ（Small Computer System Interface）、１１５…ハードディスク、１１６…ＭＩＤＩインターフェース。
【図１】
2005292858.tif 000003
【図２】
2005292858.tif 000004
【図３】
2005292858.tif 000005
【図４】
2005292858.tif 000006
【図５】
2005292858.tif 000007
【図６】
2005292858.tif 000008
【図７】
2005292858.tif 000009
【図８】
2005292858.tif 000010
【図９】
2005292858.tif 000011
【図１０】
2005292858.tif 000012