(57)【特許請求の範囲】
【請求項１】
汎用の処理装置をソフトウェアに基づいて動作させることにより第１の音源手段を構成する音源処理と、
供給された演奏情報が自動演奏によるものか演奏者の演奏によるものかを判別する判別処理と、
前記判別処理により供給された演奏情報が自動演奏によるものと判別された場合には、供給された演奏情報に基づき前記音源処理にて楽音信号を生成させ、前記判別処理により供給された演奏情報が演奏者の演奏によるものと判別された場合には、供給された演奏情報に基づいて前記汎用の処理装置とは独立した専用のハードウェア音源により構成される第２の音源手段により楽音信号を生成させる演奏制御処理と
を行うことを特徴とする演奏情報処理方法。
【請求項２】
前記判別処理は、前記汎用の処理装置のシーケンサのプログラムから供給された演奏情報を自動演奏によるものと判別し、演奏情報入力インターフェースから供給された演奏情報を演奏者の演奏によるものと判別する請求項１記載の演奏情報処理方法。
【請求項３】
請求項１記載の演奏情報処理方法において、
さらに、演奏者の指示に応じて前記第１の音源手段と前記第２の音源手段とに共通の制御情報を供給する処理と
を行うことを特徴とする演奏情報処理方法。
【請求項４】
汎用の処理装置をソフトウェアに基づいて動作させることにより第１の音源手段を構成する音源処理と、
供給された演奏情報が自動演奏によるものか演奏者の演奏によるものかを判別する判別処理と、
前記判別処理により供給された演奏情報が自動演奏によるものと判別された場合における処理のモードとして、第１のモードと第２のモードとを設定する設定処理と、
前記判別処理により供給された演奏情報が自動演奏によるものと判別された場合であって前記設定処理により前記第１のモードが設定されている場合には、供給された演奏情報に基づき前記音源処理にて楽音信号を生成させ、前記判別処理により供給された演奏情報が自動演奏によるものと判別された場合であって前記設定処理により前記第２のモードが設定されている場合には、供給された演奏情報の一部に基づいて前記音源処理にて楽音信号を生成させ、前記判別処理により供給された演奏情報が演奏者の演奏によるものと判別された場合には、供給された演奏情報に基づいて前記汎用の処理装置とは独立した専用のハードウェア音源により構成される第２の音源手段により楽音信号を生成させる演奏制御処理と
を行うことを特徴とする演奏情報処理方法。
【請求項５】
汎用の処理装置をソフトウェアに基づいて動作させることにより第１の音源手段を構成する音源処理と、
供給された演奏情報が自動演奏によるものか演奏者の演奏によるものかを判別する判別処理と、
前記判別処理により供給された演奏情報が演奏者の演奏によるものと判別された場合における処理のモードとして、第１のモードと第２のモードとを設定する設定処理と、
前記判別処理により供給された演奏情報が自動演奏によるものと判別された場合には、供給された演奏情報に基づき前記音源処理にて楽音信号を生成させ、前記判別処理により供給された演奏情報が演奏者の演奏によるものと判別された場合であって前記設定処理により前記第１のモードが設定されている場合には、供給された演奏情報に基づいて前記汎用の処理装置とは独立した専用のハードウェア音源により構成される第２の音源手段により楽音信号を生成させ、前記判別処理により供給された演奏情報が演奏者の演奏によるものと判別された場合であって前記設定処理により前記第２のモードが設定されている場合には、供給された演奏情報に基づいて前記音源処理にて楽音信号を生成させる演奏制御処理と
を行うことを特徴とする演奏情報処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演奏情報処理方法に関し、さらに詳細には、パーソナルコンピュータやワークステーションなどの汎用のコンピュータ上でソフトウェアによりシンセサイザを構築する際に用いて好適な演奏情報処理方法に関する。
【０００２】
【発明の背景および発明が解決しようとする課題】
従来、楽音を生成するためには、楽音生成用の専用のハードウェア、所謂、電子楽器を用いることが必要であった。
【０００３】
しかしながら、近年、汎用のコンピュータに高性能のＣＰＵおよびＣＰＵが処理したデータをアナログ信号として外部へ出力するためのＤ／Ａ変換器（デジタル−アナログ変換器）が搭載されるようになってきたことに伴い、専用のハードウェアを用いることなしに、汎用のコンピュータ上で楽音をリアルタイムに生成することができる可能性が検討されてきている。
【０００４】
具体的には、楽音のデータは正確にサンプリング周期毎にＤ／Ａ変換器に出力しなければならないため、タイマに応じてサンプリング周期毎に楽音のデータを生成する処理を行うことが検討されている。
【０００５】
この処理を実現するためには、サンプリング周期毎に発生するタイマインタラプトに応じて、インタラプトルーチンの中で楽音のデータを生成する処理を行うことが考えられるが、楽音のデータを生成する処理は複雑であり、こうした複雑な処理をインタラプトルーチンの中で行うのは困難であるという問題点が指摘されていた。
【０００６】
あるいはまた、上記した処理を実現するためには、サンプリング周期毎に起動されるタスクで楽音のデータを生成する処理を行うことも考えられるが、これによると、サンプリング周期毎という複雑なタイミングでタスクを切り換える処理を行う必要があり、タスク切り換えのためのオーバーヘッドが増大することになり、ＣＰＵが実際に処理することができる時間が短くなってしまうという問題点が指摘されていた。
【０００７】
ところで、一般に、一つのソフトウェアを様々な汎用のコンピュータで使用することが可能であるが、これら様々な汎用のコンピュータにそれぞれ搭載されているＣＰＵの能力は区々であり、低い能力のＣＰＵに合わせてソフトウェアを作成すると、能力の高いＣＰＵが搭載されたコンピュータではＣＰＵの能力を使いきることができないという問題点があった。
【０００８】
また、汎用のコンピュータにおいては、複数のソフトウェアを同時に実行させるという使用方法が一般的に行われているが、楽音を生成する処理とともに、楽音を生成する処理以外の他の処理も同時に行う場合には、他の処理の処理状況に応じてＣＰＵの負荷は刻々と変化することとなる。このため、ＣＰＵの負荷が最も重い状態に合わせてソフトウェアを作成すると、負荷が軽い場合にＣＰＵの能力を使いきることができないという問題点があった。
【０００９】
さらに、一般に、ＣＰＵによる楽音を生成する処理の少なくとも一部は、一定の時間間隔で繰り返し行われることになるが、例えば、ＭＩＤＩ情報のノートオン（発音開始）／ノートオフ（発音終了）を示す指示は、使用者（ユーザー）の所望のタイミングに応じてこの繰り返し間隔とは非同期で発生する。即ち、ノートオン／ノートオフを示す指示に応じて楽音を生成する処理にデータを受け渡し、データを受け渡された楽音を生成する処理においては、受け渡されたデータに基づいて楽音を生成する処理を行うこととなるが、ノートオン／ノートオフを示す指示は上記繰り返し間隔とは非同期であるため、楽音を生成する処理をしている最中に、ノートオン／ノートオフを示す指示に応じてデータを書き換えてしまったり、あるいはノートオン／ノートオフを示す指示に応じてデータを書き換えている最中に楽音を生成する処理を行うと、生成中の楽音にノイズが生じるという問題点があり、データの受け渡し方法を改良する必要性が指摘されていた。
【００１０】
このため、本願出願人は、汎用のコンピュータに適した処理を行うことにより上記した種々の問題点の解決を図り、汎用のコンピュータ上で楽音をリアルタイムで効率的に生成することのできる楽音生成処理方法を、平成８年特許願第１４７８２０号（出願日：平成８年５月２０日）「楽音生成処理方法」として既に特許出願している。
【００１１】
この平成８年特許願第１４７８２０号「楽音生成処理方法」においては、楽音生成用の専用のハードウェアを用いることなしに、汎用のコンピュータ上で楽音をリアルタイムで効率的に生成する、即ち、汎用のコンピュータ上でソフトウェアによりシンセサイザを構築するようになされている。
【００１２】
ここで、平成８年特許願第１４７８２０号「楽音生成処理方法」に関して説明すると、平成８年特許願第１４７８２０号「楽音生成処理方法」は、１０ｍｓ分の楽音信号を記憶可能なウェーブバッファを４本以上設けており、１０ｍｓ毎に起動される音源タスクは、１０ｍｓ分の楽音信号を生成するとこれをウェーブバッファに記憶し、１０ｍｓ分の楽音信号を記憶したウェーブバッファを出力タスクに渡すのと同時に新しいウェーブバッファを受け取るようになされている。
【００１３】
出力タスクは、音源タスクより１０ｍｓ分の楽音信号を記憶したウェーブバッファ受け取ると、空いているウェーブバッファを音源タスクに返し、オーディオデータ出力デバイスへの記憶内容の転送が済んでいないウェーブバッファのうち転送の順番が１番のもの、即ち、最も古く楽音信号を受け取ったウェーブバッファの記憶内容を、時間的に古い順にオーディオデータ出力デバイスからの割り込みに応じてオーディオデータ出力デバイスが必要とする所定サンプル分だけオーディオデータ出力デバイスにＤＭＡ転送するようになされている。
【００１４】
オーディオデータ出力デバイスは、出力するオーディオデータを一時記憶するためのバッファを内蔵しており、サンプリング周期毎に一時記憶しているオーディオデータを１サンプリング分づつ出力し、内蔵バッファに残っているオーディオデータが所定量より少なくなると出力タスクに割り込みをかけるようになされている。そして、オーディオデータ出力デバイスから出力されたオーディオデータは、楽音として放音されることになる。
【００１５】
なお、上記した出力タスクへの割り込みは、通常は数ｍｓ程度の周期でかかるものである。
【００１６】
上記した４本以上のウェーブバッファのうち常に１つは出力タスクがオーディオデータ出力デバイスに出力を行い、１つは音源タスクが処理に用い、１つは空いており、１つはオーディオデータ出力デバイスへの出力待ちとなっており、残りのものは空いているか、オーディオデータ出力デバイスへの出力待ちとなっているという、ローテーションを繰り返すようになされている。
【００１７】
以上において説明したように、平成８年特許願第１４７８２０号「楽音生成処理方法」においては、ウェーブバッファやオーディオデータ出力デバイスの内蔵バッファを介して楽音信号を出力するように構成されている。このため、音源タスクは楽音信号の生成処理を１０ｍｓ分まとめて行うことができるとともに、音源タスク以外の他のタスクの処理のために音源タスクの起動タイミングが多少遅れても、楽音信号が途切れることなく出力されるという優れた効果を奏するものである。
【００１８】
なお、音源タスクの起動タイミングの遅れの許容量を増したい場合には、上記のウェーブバッファの本数を増やすことにより、オーディオデータ出力デバイスへの出力待ち状態となっているウェーブバッファの本数を増やせばよい。
【００１９】
ところで、平成８年特許願第１４７８２０号「楽音生成処理方法」においては、上記したようにウェーブバッファやオーディオデータ出力デバイスの内蔵バッファなどのバッファを介して楽音信号を出力するように構成されているので、ＭＩＤＩ情報としてノートオンを受け取ってから、受け取ったノートオンに対応する楽音が実際に放音されるまでには、少なくとも数１０ｍｓ以上の時間間隔を要することとなっていた。このため、ＭＩＤＩ情報がシーケンサ（自動演奏）により供給されるものである場合には、演奏全体における発音タイミングがそれぞれ数１０ｍｓづつ遅延することになるが、演奏全体として捉えた場合には演奏開始および演奏終了が数１０ｍｓ遅延するのみで、何らの問題を生ずることもない。しかしながら、ＭＩＤＩ情報が演奏者の鍵盤演奏などによるリアルタイム演奏により供給されるものである場合には、演奏者が鍵盤を押鍵することによりノートオンが供給されてから当該ノートオンに対応する楽音が実際に放音されるまでに数１０ｍｓという遅延が生じるために、その遅延の時間が大きすぎてしまって演奏者による演奏と放音される楽音との追従性に劣り、演奏者が自然な演奏を行うことができないという問題点があった。特に、こうした問題点は、演奏者がリアルタイムで演奏した演奏データをシーケンスデータとしてシーケンサに入力する場合に、極めて憂慮すべきものとなっていた。
【００２０】
出力待ち状態となっているウェーブバッファの本数を増やした場合には、この遅延量はより大きなものとなり、こうした問題点はより大きなものとなっていた。
【００２１】
本発明は、上記したような問題点に鑑みてなされたものであり、その目的とするところは、パーソナルコンピュータやワークステーションなどの汎用のコンピュータ上でソフトウェアによりシンセサイザを構築する際において、演奏者のリアルタイム演奏に対応して放音すべき楽音を、発音指示から大きな遅延時間を要することなく迅速に放音することができるようにした演奏情報処理方法を提供しようとするものである。
【００２２】
【課題を解決するための手段】
上記目的を達成するために、本発明による演奏情報処理方法は、近年の汎用のコンピュータの中には、汎用のコンピュータとは独立した専用のハードウェア音源として、例えば、楽音信号を生成するための専用のハードウェアから構成される音源ボードが搭載されているものがあるということに着目してなされたものである。
【００２３】
上記した音源ボードは安価であって、またコンピュータゲームの音源用として用いられるため、かなり多くの汎用のコンピュータに搭載されていることが知られている。即ち、多くの汎用コンピュータは、使用者が購入した時点で既に音源ボードが搭載されていることになる。
【００２４】
ところで、こうした音源ボードは、上記したように、安価なものであってコンピュータゲームの音源用として用いられることを主な用途としているため、生成される楽音信号の品質は、平成８年特許願第１４７８２０号「楽音生成処理方法」の汎用のコンピュータ上でソフトウェアによりシンセサイザを構築することにより生成されるものと比較すると、音楽的には満足できるものでは勿論ないが、専用のハードウェアから構成されているために、ノートオンが供給されてから当該ノートオンに対応する楽音信号が外部に出力されるまでの遅延時間、即ち、ノートオンが供給されてから当該ノートオンに対応する楽音が実際に放音されるまでの遅延時間が短く、演奏者によるリアルタイム演奏にも十分追従可能である。本発明による演奏情報処理方法においては、汎用のコンピュータとは独立した専用のハードウェア音源として、例えば、こうした音源ボードを使用して、演奏者によるリアルタイム演奏に基づく楽音信号を当該音源ボードにより生成しようとするものである。
【００２５】
即ち、本発明のうち請求項１に記載の演奏情報処理方法は、汎用の処理装置をソフトウェアに基づいて動作させることにより第１の音源手段を構成する音源処理と、供給された演奏情報が自動演奏によるものか演奏者の演奏によるものかを判別する判別処理と、上記判別処理により供給された演奏情報が自動演奏によるものと判別された場合には、供給された演奏情報に基づき上記音源処理にて楽音信号を生成させ、上記判別処理により供給された演奏情報が演奏者の演奏によるものと判別された場合には、供給された演奏情報に基づいて上記汎用の処理装置とは独立した専用のハードウェア音源により構成される第２の音源手段により楽音信号を生成させる演奏制御処理とを行うようにしたものである。
【００２６】
従って、本発明のうち請求項１に記載の演奏情報処理方法によれば、演奏者の演奏により供給された演奏情報は、汎用の処理装置とは独立した専用のハードウェア音源により構成される第２の音源手段により楽音信号の生成が行われるので、演奏者の演奏に対応して放音すべき楽音を、発音指示から大きな遅延時間を要することなく迅速に放音することができる。
【００２７】
ここで、上記判別処理は、例えば、本発明のうち請求項２に記載の演奏情報処理方法のように、上記汎用の処理装置のシーケンサのプログラムから供給された演奏情報を自動演奏によるものと判別し、演奏情報入力インターフェースから供給された演奏情報を演奏者の演奏によるものと判別する処理であってもよい。
【００２８】
また、本発明のうち請求項３に記載の演奏情報処理方法のように、請求項１記載の演奏情報処理方法において、さらに、演奏者の指示に応じて上記第１の音源手段と上記第２の音源手段とに共通の制御情報を供給する処理とを有するようにしてもよい。
【００２９】
従って、本発明のうち請求項３に記載の演奏情報処理方法によれば、第１の音源手段と第２の音源手段とにおいて、調律や音色の共通化を図ることができるようになる。
【００３０】
また、本発明のうち請求項４に記載の演奏情報処理方法は、汎用の処理装置をソフトウェアに基づいて動作させることにより第１の音源手段を構成する音源処理と、供給された演奏情報が自動演奏によるものか演奏者の演奏によるものかを判別する判別処理と、上記判別処理により供給された演奏情報が自動演奏によるものと判別された場合における処理のモードとして、第１のモードと第２のモードとを設定する設定処理と、上記判別処理により供給された演奏情報が自動演奏によるものと判別された場合であって上記設定処理により上記第１のモードが設定されている場合には、供給された演奏情報に基づき上記音源処理にて楽音信号を生成させ、上記判別処理により供給された演奏情報が自動演奏によるものと判別された場合であって上記設定処理により上記第２のモードが設定されている場合には、供給された演奏情報の一部に基づいて上記音源処理にて楽音信号を生成させ、上記判別処理により供給された演奏情報が演奏者の演奏によるものと判別された場合には、供給された演奏情報に基づいて上記汎用の処理装置とは独立した専用のハードウェア音源により構成される第２の音源手段により楽音信号を生成させる演奏制御処理とを行うようにしたものである。
【００３１】
従って、本発明のうち請求項４に記載の演奏情報処理方法によれば、例えば、自動演奏による演奏の特定のパートに関しては第１の音源手段で楽音の生成を行わず、当該特定パートを演奏者が演奏することにより第２の音源手段で楽音の生成を行うようにすることができる。
【００３２】
また、本発明のうち請求項５に記載の演奏情報処理方法は、汎用の処理装置をソフトウェアに基づいて動作させることにより第１の音源手段を構成する音源処理と、供給された演奏情報が自動演奏によるものか演奏者の演奏によるものかを判別する判別処理と、上記判別処理により供給された演奏情報が演奏者の演奏によるものと判別された場合における処理のモードとして、第１のモードと第２のモードとを設定する設定処理と、上記判別処理により供給された演奏情報が自動演奏によるものと判別された場合には、供給された演奏情報に基づき上記音源処理にて楽音信号を生成させ、上記判別処理により供給された演奏情報が演奏者の演奏によるものと判別された場合であって上記設定処理により上記第１のモードが設定されている場合には、供給された演奏情報に基づいて上記汎用の処理装置とは独立した専用のハードウェア音源により構成される第２の音源手段により楽音信号を生成させ、上記判別処理により供給された演奏情報が演奏者の演奏によるものと判別された場合であって上記設定処理により上記第２のモードが設定されている場合には、供給された演奏情報に基づいて上記音源処理にて楽音信号を生成させる演奏制御処理とを行うようにしたものである。
【００３３】
従って、本発明のうち請求項５に記載の演奏情報処理方法によれば、モードの切り換えによって、演奏者の演奏により供給された演奏情報を第１の音源手段に供給し、第１の音源手段により楽音の生成を行うことができる。
【００３４】
なお、上記したように、音源ボードは既に多くの汎用のコンピュータに搭載されているものであるので、汎用の処理装置とは独立した専用のハードウェア音源により構成される第２の音源手段として音源ボードを用いる場合には、使用者がハードウェアに新たな投資を行う必要はないという効果がある。
【００３５】
また、上記したように、音源ボードで生成される楽音信号の品質は音楽的には満足できるものでは勿論ないが、演奏者がリアルタイムで演奏した演奏データをシーケンスデータとしてシーケンサに入力する場合には、シーケンサへの演奏データの入力が目的であるため、音源ボードで生成される楽音信号の品質が音楽的に満足できるものでなくて何らの不都合も生じない。即ち、音源ボードにより生成される楽音を聴取しながら入力されたシーケンスデータをシーケンサにより再生する場合には、音源ボードを用いて楽音信号を生成するのではなくて、平成８年特許願第１４７８２０号「楽音生成処理方法」の汎用のコンピュータ上でソフトウェアによりシンセサイザを構築することにより楽音信号を生成すれば良く、シーケンスデータの再生時には音楽的に満足できる品質の楽音信号を得ることが可能となる。
【００３６】
なお、コンピュータに上記した請求項１乃至請求項５に記載された演奏情報処理を実行させるためのプログラムを記録した媒体も、本発明の範囲に属するものである。
【００３７】
【発明の実施の形態】
以下、添付の図面を参照しながら、本発明の演奏情報処理方法の実施の形態の一例を詳細に説明する。
【００３８】
図１は、本発明の演奏情報処理方法によるプログラムを搭載可能な、典型的な汎用のコンピュータのハードウェア構成を示すブロック図である。
【００３９】
この図１に示す汎用のコンピュータは、極めて一般的な構成を備えており、バス１０を介して、ＣＰＵ１２と、メモリ１４と、ディスクコントローラ１６と、ビデオカード１８と、Ｉ／Ｏカード２０と、サウンドカード２２と、ＭＩＤＩインターフェース３２と、当該汎用のコンピュータとは独立したハードウェアにより構成される音源ボード３４とが接続されており、さらに、ディスクコントローラ１６にはハードディスク２４が接続され、ビデオカード１８にはディスプレイ装置２６が接続され、Ｉ／Ｏカード２０にはキーボード２８およびマウス３０が接続され、ＭＩＤＩインターフェース３２には鍵盤などの他の電子楽器３６が接続されている。そして、この汎用のコンピュータにおいては、サウンドカード２２と音源ボード３４とから、適宜楽音信号が出力されることになる。
【００４０】
即ち、この汎用のコンピュータにおいては、図２に示すように、振り分けプログラムによって、汎用のコンピュータにおける楽音生成処理のプログラム（以下、「シンセサイザプログラム」と称する。）と同時に起動されるシーケンサのプログラムから供給されるＭＩＤＩ情報と、他の電子楽器３６から供給されるＭＩＤＩ情報とを、サウンドカード２２と音源ボード３４とに適宜振り分けるようになされている。
【００４１】
具体的には、シーケンサのプログラムから供給されるＭＩＤＩ情報は、振り分けプログラムによりシンセサイザプログラムへ供給されて楽音信号が生成され、当該楽音信号はサウンドカード２２を介して出力されることになる。
【００４２】
一方、他の電子楽器３６から供給されるＭＩＤＩ情報は振り分けプログラムにより音源ボード３４へ供給され、音源ボード３４は供給されたＭＩＤＩ情報に応じて楽音信号を生成して出力することになる。つまり、この汎用のコンピュータにおいては、他の電子楽器３６からＭＩＤＩ情報がＭＩＤＩインターフェース３２に入力されると、この入力に応じてＭＩＤＩインターフェース３２はＣＰＵ１２に割り込みをかけ、ＣＰＵ１２はこの割り込み応じて音源ボード３４から楽音信号を出力するための処理、即ち、音源ボード３４がＭＩＤＩインターフェース３２に供給されたＭＩＤＩ情報に応じて楽音信号を生成して出力する処理を実行するものである。
【００４３】
図３には、振り分けプログラムの処理内容を示すフローチャートが示されており、シーケンサのプログラムからＭＩＤＩ情報が供給された場合、あるいは他の電子楽器３６からＭＩＤＩインターフェース３２を介してＭＩＤＩ情報が供給された場合には、まずこの振り分けプログラムが起動されることになる。
【００４４】
振り分けプログラムが起動されると、まず、供給されたＭＩＤＩ情報がシーケンサのプログラムからのものであるか、ＭＩＤＩインターフェース３２からのものであるかを判断する（ステップＳ３０２）。
【００４５】
ステップＳ３０２において、供給されたＭＩＤＩ情報がＭＩＤＩインターフェース３２からのものであると判断された場合には、そのＭＩＤＩ情報を音源ボード３４へ供給し（ステップＳ３０４）、この振り分けプログラムを終了する。
【００４６】
そして、音源ボード３４は、供給されたＭＩＤＩ情報に応じて楽音信号を生成して、生成した楽音信号を出力する。
【００４７】
一方、ステップＳ３０２において、供給されたＭＩＤＩ情報がシーケンサのプログラムからのものであると判断された場合には、そのＭＩＤＩ情報をシンセサイザプログラムへ供給して（ステップＳ３０６）、この振り分けプログラムを終了する。
【００４８】
次に、シンセサイザプログラムの処理内容を説明するが、図４はシンセサイザプログラムの全体構成を示し、制御タスク、音源タスクおよび出力タスクより構成されている。
【００４９】
即ち、制御タスクは制御プログラムを実行し、シーケンサのプログラムとの間でＭＩＤＩ情報のやりとりを行うとともに、音源タスク側へイベントフラグ、発音パラメータ、定常処理パラメータ、エフェクトパラメータを引き渡し、音源タスク側からボイス解放情報を受け取る。
【００５０】
音源タスクは、複数のボイス（楽音生成チャンネル）ならびにエフェクトに関する処理を行い、ウェーブバッファへ生成した楽音信号を記憶させて出力タスクへ引き渡す。即ち、複数のボイスのそれぞれの処理を行い、後述する発音パラメータのエフェクト送り量に応じて各ボイスの出力をエフェクトへ引き渡し、エフェクトを付加されていない各ボイスの出力とエフェクトを付加された各ボイスの出力とを最終的にミキシングしてウェーブバッファへ記憶し、出力タスクへ引き渡すことになる。
【００５１】
出力タスクにおいては、ウェーブバッファを用いてウェーブ出力処理を行い、外部へ楽音信号を出力する。そして、出力タスクにおいて使用されたウェーブバッファは、音源タスク側へ戻される。
【００５２】
上記したように、制御タスクと音源タスクとがやりとりする情報には、イベントフラグ、発音パラメータ、定常処理パラメータ、エフェクトパラメータおよびボイス解放情報がある。以下、これらの情報に関して説明する。
【００５３】
（１）イベントフラグ
イベントフラグはボイス数分用意されていて、音源タスクは制御タスクからイベントフラグにより各ボイスの発音開始および発音終了の情報（フラグ）を受ける。イベントフラグは、制御タスクと音源タスクとの両方からアクセス可能な共有メモリに記憶される。
【００５４】
（２）発音パラメータ
後述するように、音源タスクは起動される度にイベントフラグの内容をサーチし、発音開始フラグを見つけると、発音パラメータに従って発音を開始するが、発音パラメータには、ボイス毎に以下の（ａ）乃至（ｉ）に示す情報が含まれている。
（ａ）波形読み出し関係パラメータ
（波形開始アドレス、ループ関係アドレス、ピッチ）
（ｂ）ピッチＬＦＯ関係パラメータ
（波形、周期、遅延など）
（ｃ）フィルタＬＦＯ関係パラメータ
（波形、周期、遅延など）
（ｄ）アンプＬＦＯ関係パラメータ
（波形、周期、遅延など）
（ｅ）ピッチエンベロープ関係パラメータ
（アタック、ディケイ、サスティン、リリースなどの各時間やレベル）
（ｆ）ＴＶＦ（Ｔｉｍｅ  Ｖａｒｉａｂｌｅ  Ｆｉｌｔｅｒ：時変フィルタ）          エンベロープ関係パラメータ
（アタック、ディケイ、サスティン、リリースなどの各時間やレベル）
（ｇ）ＴＶＡ（Ｔｉｍｅ  Ｖａｒｉａｂｌｅ  Ａｍｐｌｉｆｉｅｒ：時変アンプ）エンベロープ関係パラメータ
（アタック、ディケイ、サスティン、リリースなどの各時間やレベル）
（ｈ）パン
（ｉ）エフェクト送り量
これらの情報を含む発音パラメータは、制御タスクと音源タスクとの両方からアクセス可能な共用メモリに記憶される。そして、発音パラメータを記憶するメモリ空間は、ボイス毎に２面づつ設けられている。即ち、音源タスクがイベントフラグに発音開始のフラグを見つけると、音源タスクはこれ以後に音源タスクが参照するメモリ空間を今まで参照していた面からもう一つの面に切り換えるとともに、今まで参照していた面を制御タスクに渡す。従って、制御タスクは、同じボイス番号の発音パラメータを設定する場合でも、音源タスクから渡された現在処理中の面とは異なるもう一面の新しいメモリ空間を用いることによって、音源タスク側で発音時に参照される現在処理中の面のパラメータエリアを壊すことなしに、音源タスクへ発音パラメータの引き渡し行うことができる。逆に、制御タスク側で書き換えている途中のパラメータエリアを音源タスクが参照するという事態の発生を防ぐこともできる。
【００５５】
（３）定常処理パラメータ
定常処理パラメータは、ボイス毎に以下の（ａ）乃至（ｃ）に示す情報が含まれている。
（ａ）ピッチオフセット
（ｂ）フィルタオフセット
（ｃ）アンプオフセット
これらの定常処理パラメータは、制御タスクと音源タスクとの両方からアクセス可能な共用メモリに記憶され、ピッチベンダやホイルなどの操作子などから得られた情報をサービスするためのものである。
【００５６】
これらの定常処理パラメータは、音源タスクが起動される度に読み込まれ、発音中に音源タスク内部で生成されるエンベロープやＬＦＯなどと合成されることになり、こうして合成されたデータを発音サービスパラメータと称する。
【００５７】
発音サービスパラメータは、波形読み出しのピッチや、ＴＶＦのカットオフ周波数、ＴＶＡのアンプリチュード（増幅度）を制御する。
【００５８】
（４）エフェクトパラメータ
エフェクトパラメータは、制御タスクと音源タスクとの両方からアクセス可能な共用メモリに記憶されたエフェクト制御用の情報であり、エフェクトに渡される。このエフェクトパラメータは、音源タスクが起動される度に読み込まれ、前回読み込んだ内容と異なるパラメータがあれば、それをエフェクトに反映することになる。
【００５９】
なお、エフェクトパラメータは、エフェクトの具体的内容によってパラメータが異なるものであり、エフェクトの具体的内容は本発明の要旨から外れるものであるので、その詳細な説明は省略する。
【００６０】
（５）ボイス開放情報
ボイス開放情報は、音源タスクから制御タスクへ返されるものであり、発音が終了したボイスの番号を示す。なお、各ボイスの発音終了は、ＴＶＡのエンベロープにより判断する。このボイス開放情報はメモリ空間を用いるのではなく、イベントによって制御タスクへ渡される。
【００６１】
ここで、イベントフラグ、発音パラメータ、定常処理パラメータおよびエフェクトパラメータが共有メモリを用いて受け渡しが行われるのに対して、ボイス開放情報がイベントで渡されるというタスク間の通信方法の違いは、音源タスクはタイマにより起動されるため、制御タスク側から非同期なイベント情報を受け取ることができないためである。
ところで、上記した制御タスク、音源タスクおよび出力タスクには優先度（プライオリティ：ｐｒｉｏｒｉｔｙ）が設けられていて、他のタスクなどにより処理を中断されることが好ましくないタスクは、優先度を高くするようになされている。なお、この実施の形態においては、出力タスクの優先度が最も高く、次に音源タスクの優先度が高く、制御タスクの優先度が最も低くなされている。
【００６２】
以下、図４および図５を参照しながら、制御タスク、音源タスクおよび出力タスクを詳細に説明する。
【００６３】
（１）制御タスク
制御タスクはＭＩＤＩ情報を得て音源タスクを制御するものであり、シーケンサのプログラムからのＭＩＤＩ情報や音源タスクからのボイス解放情報を受け取ることにより起動される。
【００６４】
ここで、制御タスクは、各ボイスに関して、当該ボイスが発音中か空いているかを示すボイス情報を常に管理しているものであり、ＭＩＤＩ情報としてノートオンを受け取ると、ボイス情報を参照して適当な空いているボイスを指定し、当該ボイスを用いて当該ノートオンを発音するように、当該ボイスに対して当該ノートオンに必要な発音パラメータを設定するとともにその後にイベントフラグに発音開始を設定し、指定したボイスのボイス情報を更新する処理を行う。そして、音源タスクにおいては、上記した制御タスクの処理に応じて、指定されたボイスで新たな発音を開始する。
【００６５】
また、制御タスクは、ＭＩＤＩ情報としてノートオンを受け取ったときに、ボイス情報を参照して空きボイスが無い場合には、発音中のレベルが小さいボイスを選択したり、あるいは最も過去に発音開始されたボイスを選択したりするなど所定の選択基準により不必要と思われるボイスを選択し、当該ボイスを用いて当該ノートオンを発音するように、当該ボイスに対して当該ノートオンに必要な発音パラメータを設定するとともにその後にイベントフラグに発音開始を設定する処理を行う。そして、音源タスクにおいては、上記した制御タスクの処理に応じて、すばやく選択されたボイスの現在の発音をミュートしてから、選択されたボイスにより新たな発音を開始する。
【００６６】
上記したように、制御タスクにおいては、ＭＩＤＩ情報としてノートオンを受け取ると、ボイスの割り当て、所謂、アサイン処理を行うことになる。
【００６７】
一方、制御タスクは、ＭＩＤＩ情報としてノートオフを受け取ると、当該ノートオフに対応する発音中のボイスに対して発音を終了するように、イベントフラグに発音終了を設定する処理を行う。そして、音源タスクにおいては、上記した制御タスクの処理に応じて、当該ノートオフに対応する発音中のボイスを消音する。
【００６８】
なお、後述するように、音源タスク中のボイスの処理に関しては、発音していないボイスに対しては行われない。従って、発音ボイス数に応じて、音源タスクの演算量が増減することになる。このため、本発明においては、最大発音可能な発音数は、コンピュータの能力に応じて予め設定できるとともに、適宜変更することができるようになされている。
【００６９】
また、制御タスクは、ＭＩＤＩ情報として定常処理パラメータ、エフェクトパラメータの値を変更するメッセージを受け取ると、対応する定常処理パラメータ、エフェクトパラメータを音源タスクに引き渡す処理を行う。
【００７０】
さらに、制御タスクは、音源タスクから制御タスクへボイス解放情報が渡された場合には、渡されたボイス解放情報に応じて指定したボイスのボイス情報を更新する。
【００７１】
（２）音源タスク
音源タスクは１０ｍｓ（ミリ秒）毎にタイマによって起動され、１０ｍｓ分の波形読み出し、ＴＶＦ、ＴＶＡ、パン、エンベロープ、ＬＦＯ、エフェクト処理をまとめてなるべく短時間で行う。上記したように、音源タスクは１０ｍｓ分の処理を行うものであるので、サンプリング周波数を３２ＫＨｚとすると、３２０サンプル分の処理を行うことになる。
【００７２】
そして、音源タスクは起動される度にイベントフラグの内容をサーチし、発音開始フラグを見つけると、発音パラメータに従って発音を開始する。この際に、発音パラメータを記憶するメモリ空間は、ボイス毎に２面づつ設けられており、音源タスクがイベントフラグに発音開始のフラグを見つけると、音源タスクはこれ以後に音源タスクが参照するメモリ空間を今まで参照していた面からもう一つの面に切り換えるとともに、今まで参照していた面を制御タスクに渡す。従って、制御タスクは、同じボイス番号の発音パラメータを設定する場合でも、音源タスクから渡された現在処理中の面とは異なるもう一面の新しいメモリ空間を用いることによって、音源タスク側で発音時に参照される現在処理中の面のパラメータエリアを壊すことなしに、音源タスクへ発音パラメータの引き渡し行うことができる。
【００７３】
ここで、各ボイスにおける処理を説明すると、音源タスクにおいては、共有のメモリに記憶される発音パラメータおよび定常処理パラメータは、音源タスクが起動される度に取り込まれ、エンベロープやＬＦＯの演算およびそれに定常処理パラメータを反映し、発音サービスパラメータを生成する演算を行う。こうして生成された発音サービスパラメータにより、波形読み出しのピッチや、ＴＶＦのカットオフ周波数、ＴＶＡのアンプリチュード（増幅度）が制御され、発音パラメータのエフェクト送り量に応じてボイスの出力をエフェクトへ引き渡し、エフェクトを付加されていないボイスの出力は発音パラメータのパンによりパンポットを制御されてステレオ出力される（図５（ａ））。
【００７４】
そして、エフェクトパラメータによって制御されたエフェクトを付加された各ボイスの出力とエフェクトを付加されていない各ボイスの出力とが、ミキシングされてステレオ出力され（図５（ｂ））、最終的にウェーブバッファへ記憶されて出力タスクへ引き渡される。
【００７５】
図６には、発音サービスパラメータの生成の処理を示すフローチャートが示されており、最初のボイスからボイス毎に順次処理が行われる。
【００７６】
まず、イベントフラグが発音開始を示しているかチェックし（ステップＳ６０２）、イベントフラグが発音開始を示していない場合には、イベントフラグが発音終了を示しているかチェックする（ステップＳ６０４）。
【００７７】
ステップＳ６０４でイベントフラグが発音終了を示していない場合には、発音中を示すフラグであるｖｏｉｃｅＡｃｔｉｖｅに「１」がセットされていて、発音中であることを示しているかをチェックする（ステップＳ６０６）。
【００７８】
一方、ステップＳ６０４でイベントフラグが発音終了を示している場合には、それを受けてエンベロープをリリース処理へ進め（ステップＳ６０８）、前回処理の際の発音サービスパラメータの計算値ｎ１をｎ０にセット（ステップＳ６１０）した後に、エンベロープ、ＬＦＯおよび定常処理パラメータを反映させた演算を行い発音サービスパラメータを生成して計算値ｎ１にセットする（ステップＳ６１２）。即ち、前回処理からの１０ｍｓの時間経過に応じてエンベロープ、ＬＦＯの値を変化させ新たなエンベロープ、ＬＦＯおよび定常処理パラメータを合成（加算あるいは乗算）して発音サービスパラメータを生成する。なお、発音サービスパラメータは、波形読み出しのピッチ、ＴＶＦ、ＴＶＡそれぞれについて独立に演算する。
【００７９】
また、ステップＳ６０６でｖｏｉｃｅＡｃｔｉｖｅに「１」がセットされていて、発音中である場合にも、前回処理の際の発音サービスパラメータの計算値ｎ１をｎ０にセット（ステップＳ６１０）した後に、エンベロープ、ＬＦＯおよび定常処理パラメータを反映させた演算を行い発音サービスパラメータを生成して計算値ｎ１にセットする（ステップＳ６１２）。なお、発音サービスパラメータは、波形読み出しのピッチ、ＴＶＦ、ＴＶＡそれぞれについて独立に演算する。ところで、ステップＳ６０２でイベントフラグが発音開始である場合には、制御タスク、音源タスクの使用する発音パラメータエリアを示すポインタを、もう一面の発音パラメータエリアを示すものに更新し（ステップＳ６１４）、ｖｏｉｃｅＡｃｔｉｖｅに「１」がセットされていて、発音中であることを示しているかをチェックする（ステップＳ６１６）。
【００８０】
ステップＳ６１６でｖｏｉｃｅＡｃｔｉｖｅに「１」がセットされていて、発音中である場合には、現在発音中のボイスを急速にミュートしてから（ステップＳ６１８）、エンベロープ、ＬＦＯおよび定常処理パラメータを反映させた演算を行い発音開始時の発音サービスパラメータを生成して計算値ｎ０にセットする（ステップＳ６２０）。なお、発音サービスパラメータは、波形読み出しのピッチ、ＴＶＦ、ＴＶＡそれぞれについて独立に演算する。
【００８１】
一方、ステップＳ６１６でｖｏｉｃｅＡｃｔｉｖｅに「１」がセットされておらず、発音中でない場合には、そのままステップＳ６２０へ進み、エンベロープ、ＬＦＯおよび定常処理パラメータを反映させた演算を行い発音開始時の発音サービスパラメータを生成して計算値ｎ０にセットする。
【００８２】
上記のようにして、ステップＳ６２０でエンベロープ、ＬＦＯおよび定常処理パラメータを反映させた演算を行い発音開始時の発音サービスパラメータを生成して計算値ｎ０にセットし、それからｖｏｉｃｅＡｃｔｉｖｅに「１」をセットして発音中であることを示し（ステップＳ６２２）た後に、発音開始からの１０ｍｓの時間経過に応じてエンベロープ、ＬＦＯおよび定常処理パラメータを反映させた演算を行い発音サービスパラメータを生成して計算値ｎ１にセットする（ステップＳ６１２）。なお、発音サービスパラメータは、波形読み出しのピッチ、ＴＶＦ、ＴＶＡそれぞれについて独立に演算する。
【００８３】
そして、ステップＳ６１２でエンベロープ、ＬＦＯおよび定常処理パラメータを反映させた演算を行い発音サービスパラメータを生成して計算値ｎ１にセットすると、必要に応じて補間処理を行う際に用いるために、今回の発音サービスパラメータの計算値ｎ１と前回の発音サービスパラメータの計算値ｎ０との差分ｄを求め（ステップＳ６２４）、ＴＶＡのエンベロープが最後まで来ているかをチェックする（ステップＳ６２６）。
【００８４】
ステップＳ６２６でＴＶＡのエンベロープが最後まで来ていない場合には、そのままイベントフラグをクリアし（ステップＳ６２８）、ステップＳ６２６でＴＶＡのエンベロープが最後まで来ている場合には、制御タスクにボイス解放情報を返し（ステップＳ６３０）、ｖｏｉｃｅＡｃｔｉｖｅに「０」をセットして発音中でないことを示してから（ステップＳ６３２）、イベントフラグをクリアする（ステップＳ６２８）。
【００８５】
また、ステップＳ６０６でｖｏｉｃｅＡｃｔｉｖｅに「１」がセットされておらず発音中でない場合には、そのままイベントフラグをクリアする（ステップＳ６２８）。
【００８６】
そして、イベントフラグをクリアすると（ステップＳ６２８）、それから全ボイスの処理が終わったかチェックする（ステップＳ６３４）。ステップＳ６３４でのチェックにより全ボイスの処理が終わったならば、このフローチャートの処理を終了するが、ステップＳ６３４でのチェックにより全ボイスの処理が終わっていないならば、ステップＳ６０２へ戻り以降の処理を繰り返して次のボイスの処理を行う。即ち、全ボイスの処理が終わるまで、このフローチャートの処理を繰り返すことになる。
【００８７】
なお、発音サービスパラメータを受けて行われる波形読み出し、ＴＶＦ、ＴＶＡ、パンおよびエフェクトへの送り量の処理は、音源タスクが起動される度にこれらの処理をまとめて１０ｍｓ分行い、その後に、エフェクト処理を１０ｍｓ分まとめて行うものであり、図７にはこの処理のフローチャートが示されている。即ち、図７のフローチャートにおいては、最初のボイスからボイス毎に順次処理が行われる。
【００８８】
まず、ｖｏｉｃｅＡｃｔｉｖｅに「１」がセットされていて、発音中であることを示しているかをチェックし（ステップＳ７０２）、ステップＳ７０２でｖｏｉｃｅＡｃｔｉｖｅに「０」がセットされていて、発音中でない場合には、全ボイスの処理が終わったかをチェックするステップＳ７１４へジャンプして進み、次のボイスの処理へ移る。つまり、このフローチャートにおいては、発音されていないボイスの処理は行わないことになる。
【００８９】
一方、ステップＳ７０２でｖｏｉｃｅＡｃｔｉｖｅに「１」がセットされていて、発音中である場合には、発音サービスパラメータの示すピッチで発音するように波形読み出しを行う（ステップＳ７０４）。ここで、発音サービスパラメータは、図６に示すフローチャートのステップＳ６２４で求めた差分ｄを用いて、必要な精度まで直線補間される。即ち、サンプリング周波数３２ＫＨｚとすると、図６に示すフローチャートのステップＳ６１０あるいはステップＳ６２０で求めた計算値ｎ０にセットされた発音サービスパラメータとステップＳ６２４で求めた差分ｄを用いて、
ｎ０＋ｄ×ｋ／３２０
なる演算を行い補間値とする。なお、３２０はサンプリング周波数３２ＫＨｚ時の１０ｍｓ分のサンプル数であり、ｋは３２０サンプルのうちの何番目のサンプルであるかを示しており、最初の処理では‘０’、以後処理の度に‘１’、‘２’、・・・とされる値である。
【００９０】
次に、ステップＳ７０４の波形読み出しの出力をＴＶＦによりフィルタリングする（ステップＳ７０６）。ここで、ＴＶＦのカットオフ周波数は発音サービスパラメータによって制御され、発音サービスパラメータは、図６に示すフローチャートのステップＳ６２４で求めた差分ｄを用いて、必要な精度に直線補間して用いる。
【００９１】
さらに、ステップＳ７０６のフィルタリングされた出力のアンプリチュードを、ＴＶＡにより発音サービスパラメータに従って制御する（ステップＳ７０８）。ここで、発音サービスパラメータは、図６に示すフローチャートのステップＳ６２４で求めた差分ｄを用いて、必要な精度に直線補間して用いる。
【００９２】
さらに次に、発音パラメータによって、パンおよびエフェクトへの送り量を制御するとともに図５（ｂ）に示される他のボイスの楽音信号との加算混合処理を行い（ステップＳ７１０）、その後に、１０ｍｓ分の処理を終えたかチェックされ（ステップＳ７１２）、１０ｍｓ分の処理を終わっていなければ、ステップＳ７０４へ戻って次のサンプルに関してステップＳ７０４以降の処理を行う。即ち、ステップＳ７０４乃至ステップＳ７１０の処理は、サンプル毎の処理であり、１０ｍｓ分のサンプル個数の処理が行われる。
【００９３】
一方、１０ｍｓ分の処理を終わったならば、全ボイスの処理が終わったかチェックする（ステップＳ７１４）。このチェックにより、全ボイスの処理が終わったならば、エフェクトの処理を１０ｍｓ分まとめて行い（ステップＳ７１６）、上記した処理の行われた１０ｍｓ分の楽音信号を記憶したウェーブバッファを出力タスクに渡し（ステップＳ７１８）、このフローチャートの処理を終了する。ここで、上記した処理の行われた楽音信号を記憶したウェーブバッファを出力タスクに渡すと同時に、新しいウェーブバッファを受け取り、新しいウェーブバッファは、次回のステップＳ７０２乃至ステップＳ７１６の処理に用いる。
【００９４】
一方、ボイスの処理が終わっていないならば、ステップＳ７０２へ戻り以降の処理を繰り返して次のボイスの処理を行う。即ち、全ボイスの処理が終わるまで、このフローチャートの処理を繰り返すことになる。
【００９５】
（３）出力タスク
出力タスクは、音源タスクより受け取ったウェーブバッファの記憶内容を、オーディオデータ出力デバイス（図１に示すコンピュータにおいては、サウンドカード２２である。）にＤＭＡ転送する。このＤＭＡ転送は、オーディオデータ出力デバイスからの割り込みによって開始される。
【００９６】
ここで、サウンドカード２２などのオーディオデータ出力デバイス（以下、「出力デバイス」と称す。）は、出力するオーディオデータを一時記憶するためのバッファを内蔵しており、サンプリング周期毎に一時記憶しているオーディオデータを１サンプリング分づつ出力する。そして、内蔵バッファに残っているオーディオデータが所定量より少なくなると出力タスクに割り込みをかけ、この割り込みに応じて、出力タスクは出力デバイスが必要とする所定サンプル分のオーディオデータを出力デバイスにＤＭＡ転送するものである。
【００９７】
なお、上記した出力タスクへの割り込みは、通常は、数ｍｓ程度の周期でかかるものである。
【００９８】
即ち、図１に示すコンピュータにおいては、出力タスクは、サウンドカード２２からの割り込みと音源タスクからのウェーブバッファを受け取るときに起動される。
【００９９】
そして、出力タスクは、音源タスクから１０ｍｓ分のウェーブバッファを受け取ると、空いているウェーブバッファを音源タスクに返す。ウェーブバッファは４本以上あり、常に１つは出力タスクが出力デバイスに出力を行い、１つは音源タスクが処理に用い、１つは空いており、１つは出力デバイスへの出力待ちとなっており、残りのものは空いているか、出力デバイスへの出力待ちとなっているという、ローテーションを繰り返すようになされている。
【０１００】
なお、コンピュータ本体とサウンドカード２２とに別々にその動作速度を決定する源発振器である水晶が搭載されており、両者の動作速度の同期がなされていない場合には、水晶の発振周波数の誤差の分だけ両者の動作速度に誤差が生じることとなる。
【０１０１】
この場合、音源タスクが楽音信号を生成する速さと出力デバイスが楽音信号を出力する速さとが異なることとなる。音源タスクの速度の方が速い場合には、出力待ち状態とされているウェーブバッファの上に音源タスクが新たなデータを上書きしてしまいノイズ発生の原因となり、音源タスクの速度の方が遅い場合には、出力待ち状態とされているウェーブバッファのデータを出力デバイスが全て出力してしまい音が途切れることとなる。
【０１０２】
このようなことを防ぐために、ウェーブバッファの空き具合を常に監視し、空いているウェーブバッファの数が所定量よりも少ない場合には、音源タスクの起動周期を長くし（例えば、１１ｍｓとする。）、空いているウェーブバッファの数が所定量よりも多い場合には、起動タスクの起動周期を短くする（例えば、９ｍｓとする。）。勿論この場合であっても、音源タスクの一度の起動により生成する楽音信号のサンプル数は一定（例えば、１０ｍｓ分）としておく。このような処理を行うことにより、ウェーブバッファには常に一定量の出力待ち状態の楽音信号が蓄えられるようになるため、上記したようなノイズの発生や音切れを防ぐことができる。
【０１０３】
ところで、このシンセサイザプログラムにおいては、音源タスクとそれを制御する制御タスクとの通信をメモリ空間を共有することで実現するようにしている。
【０１０４】
即ち、図８に示すように、音源タスクと制御タスクとが共有するメモリ空間は２面（図８におけるメモリ空間Ａおよびメモリ空間Ｂ）設けられていて、それらを交互に用いるようになされている。
【０１０５】
具体的には、制御タスク側は発音に必要なパラメータをメモリ空間Ａの発音パラメータエリアに用意し、発音パラメータが用意できた旨をフラグを立てることによって音源タスク側に知らせる。そして、音源タスク側においては、メモリ空間Ａの発音パラメータエリアを取り込むと、もう一面（メモリ空間Ｂ）の発音パラメータエリアを制御タスク側に渡す。制御タスク側は、新たに同じボイスで発音する場合には、新しく渡されたメモリ空間Ｂの発音パラメータエリアに対してパラメータを用意する。
【０１０６】
これによって、音源タスク側が発音中で発音パラメータを使用していても、制御タスク側はそれを気にすることなく新しい発音パラメータを設定することができる。
【０１０７】
なお、２面のメモリ空間の管理方法として１つのポインタのみを設けるようにした場合には、制御タスクはこのポインタの指し示す片方のメモリ空間に新たなパラメータを記憶するとともに、音源タスクは他方のメモリ空間に記憶されたパラメータを参照する。あるいは、制御タスクがパラメータを書き込むメモリ空間を指し示すポインタと、音源タスクがパラメータを参照するメモリ空間を指し示すポインタとを別々に設けるようにした場合には、これらのポインタの指し示すメモリ空間を互いに逆とすればよい。
【０１０８】
なお、この汎用のコンピュータにおいては、使用者はキーボード２８を介して、音源ボード３４ならびにシンセサイザプログラムに対して種々の指示を行うことが可能となされている。そして、キーボード２８から何らかの指示がなされた場合には、当該指示の種類に応じた処理のプログラムが起動されて、当該指示に応じた制御情報が音源ボード３４ならびにシンセサイザプログラムへ供給され、音源ボード３４ならびにシンセサイザプログラムは当該制御情報に応じてその設定状態が変化される。
【０１０９】
ここで、上記した設定状態には、例えば、調律（キーボード２８の中央Ｃを指定したときに生成される楽音の音高の設定）や生成される楽音の音色（「ピアノ」、「オルガン」、「バイオリン」、「トランペット」などのそれぞれの自然楽器に対応する音色の指定）などがある。
【０１１０】
ところで、上記した設定状態に関しては、音源ボード３４とシンセサイザプログラムとが同一の設定状態になっている方が、演奏上は好都合である。即ち、音源ボード３４とシンセサイザプログラムとで調律が異なっていると、同じキーボード２８の中央Ｃを指定したとしても、音源ボード３４とシンセサイザプログラムとで異なる音高の楽音が生成されることとなってしまい、演奏上不都合を生じさせることとなる。このため、設定状態の変更して調律の変更が指示された場合には、図９に示す調律指示処理プログラムが起動され、音源ボード３４とシンセサイザプログラムとに同じ音高指定値たる調律値に対応する音高制御情報が同時に供給されるようになされている。
【０１１１】
即ち、調律指示処理プログラムが起動されると、シンセサイザプログラムに指示された調律値に対応する音高制御情報を供給し（ステップＳ９０２）、さらに、音源ボード３４に指示された調律値に対応する音高制御情報を供給してから（ステップＳ９０４）、この調律指示処理プログラムの処理を終了する。
【０１１２】
また、この汎用のコンピュータにおいては、音源ボード３４とシンセサイザプログラムとでは音源が異なるので、音源ボード３４とシンセサイザプログラムとで全く同じ音色が生成されることはなく、音源ボード３４とシンセサイザプログラムとにおいて同一の音色の名称で示される音色といえども、実際には両者で類似した音色が生成されることになる。従って、この汎用のコンピュータにおいては音色は音色番号により指定するので、音源ボード３４とシンセサイザプログラムとでは、同一の音色の名称で示される音色に対してそれぞれ異なる音色番号が対応することになる。
【０１１３】
そこで、この汎用のコンピュータにおいては、音源ボード３４あるいはシンセサイザプログラムのいずれかに対して音色の変更を指示した場合には、図１０に示す音色指示処理プログラムが起動されて、指示した音色と類似の音色が、音色の変更を指示されていない音源ボード３４あるいはシンセサイザプログラムにも設定されるようになっている。即ち、メモリ１４には、音源ボード３４およびシンセサイザプログラムの各音色に関して、それぞれ相手方の類似の音色の対応表が記憶されており、音源ボード３４あるいはシンセサイザプログラムのいずれかに対して音色の変更の指示がなされた場合には、上記した対応表を参照して、相手方にも指定した音色と類似の音色への音色の変更が指示されることになる。
【０１１４】
図１０に示す音色指示処理プログラムの処理を、より詳細に説明すると、まず音色指示処理プログラムが起動されると、音源ボード３４とシンセサイザプログラムとのいずれの音色の変更が指示されたかを判断する（ステップＳ１００２）。
【０１１５】
ステップＳ１００２において、音源ボード３４の音色の変更が指示されたと判断された場合には、指示された音色への変更を示す音色変更制御情報を音源ボード３４へ供給し（ステップＳ１００４）、さらに、上記した対応表を参照して指示された音色と類似の音色への変更を示す音色変更制御情報をシンセサイザプログラムへ供給して（ステップＳ１００６）、この音色指示処理プログラムの処理を終了する。
【０１１６】
一方、ステップＳ１００２において、シンセサイザプログラムの音色の変更が指示されたと判断された場合には、指示された音色への変更を示す音色変更制御情報をシンセサイザプログラムへ供給し（ステップＳ１００８）、さらに、上記した対応表を参照して指示された音色と類似の音色への変更を示す音色変更制御情報を音源ボード３４へ供給して（ステップＳ１０１０）、この音色指示処理プログラムの処理を終了する。
【０１１７】
なお、上記した実施の形態においては、シーケンサのプログラムから供給されたＭＩＤＩ情報は全てシンセサイザプログラムにより楽音信号を生成するようにしているが、シンセサイザプログラムが複数チャンネルのＭＩＤＩ情報を受け取り、各チャンネルに対応する複数のパートで異なる音色の楽音を同時に生成可能となされている場合、即ち、シンセサイザプログラムにより、所謂、マルチティンバ音源の動作が実現される場合には、シーケンサのプログラムから供給される特定のチャンネルのＭＩＤＩ情報は、シンセサイザプログラムに供給しないようにしてもよい。
【０１１８】
このように、シーケンサのプログラムから供給される特定のチャンネルのＭＩＤＩ情報をシンセサイザプログラムに供給しないようにした場合には、当該特定のチャンネルに対応するパートに関しては、他の電子楽器３６による演奏者の演奏により音源ボード３４で楽音信号を生成することができる。つまり、演奏者はシーケンサのプログラムによる自動演奏を聴取しながら、特定のパートに関しては演奏者自らが演奏を行うことができるようになる。
【０１１９】
こうした場合に、全てのパートでシーケンサのプログラムに基づいてシンセサイザプログラムにより楽音信号を生成するモードと、演奏者により指定された特定のパートに関しては音源ボード３４により演奏者の演奏による楽音信号を生成させ、その他のパートに関してはシーケンサのプログラムに基づいてシンセサイザプログラムにより楽音信号を生成するモードとを、任意に切り換えることができるようにしてもよい。
【０１２０】
また、上記した実施の形態においては、他の電子楽器３６から供給されたＭＩＤＩ情報は全て音源ボード３４により楽音信号を生成するようにしているが、他の電子楽器３６から供給されたＭＩＤＩ情報により音源ボード３４で楽音信号を生成するモードと、他の電子楽器３６から供給されたＭＩＤＩ情報によりシンセサイザプログラムで楽音信号を生成するモードとを設定し、これらのモードを任意に切り換えることができるようにしてもよい。
【０１２１】
さらに、上記した実施の形態においては、シンセサイザプログラム、音源ボードのいずれで楽音信号を生成させるかを、これらのいずれにＭＩＤＩ情報を供給するかにより制御しているが、他の方法により制御してもよい。例えば、シンセサイザプログラム、音源ボードのいずれにもＭＩＤＩ情報を供給するが、楽音信号を生成させない方には、音量を０に設定する音量制御信号も供給するようにすればよい。
【０１２２】
【発明の効果】
以上において説明したように、本発明による演奏情報処理方法は、パーソナルコンピュータやワークステーションなどの汎用のコンピュータ上でソフトウェアによりシンセサイザを構築する際において、演奏者のリアルタイム演奏に対応して放音すべき楽音を、発音指示から大きな遅延時間を要することなく迅速に放音することができるという優れた効果を奏する。
【図面の簡単な説明】
【図１】本発明の演奏情報処理方法によるプログラムを搭載可能な、典型的な汎用のコンピュータのハードウェア構成を示すブロック図である。
【図２】本発明の演奏情報処理方法の概念図である。
【図３】振り分けプログラムの処理内容を示すフローチャートである。
【図４】シンセサイザプログラムの全体構成を示す概念図である。
【図５】音源タスクにおける処理を示す概念図であり、（ａ）は１ボイス分の処理を示し、（ｂ）はボイスおよびエフェクトのミキシングを示す。
【図６】音源タスクにおける発音サービスパラメータの生成の処理を示すフローチャートである。
【図７】音源タスクにおける発音サービスパラメータを受けて行われる波形読み出し、ＴＶＦ、ＴＶＡ、パンおよびエフェクトへの送り量の処理を示すフローチャートである。
【図８】音源タスクと制御タスクとが共有するメモリ空間が２面設けられていて、それを交互に使用する状態を示した説明図である。
【図９】調律指示処理プログラムの処理内容を示すフローチャートである。
【図１０】音色指示処理プログラムの処理内容を示すフローチャートである。
【符号の説明】
１０              バス
１２              ＣＰＵ
１４              メモリ
１６              ディスクコントローラ
１８              ビデオカード
２０              Ｉ／Ｏカード
２２              サウンドカード
２４              ハードディスク
２６              ディスプレイ装置
２８              キーボード
３０              マウス
３２              ＭＩＤＩインターフェース
３４              音源ボード
３６              他の電子楽器
【図１】
0003735172.tif 000002
【図２】
0003735172.tif 000003
【図３】
0003735172.tif 000004
【図４】
0003735172.tif 000005
【図５】
0003735172.tif 000006
【図６】
0003735172.tif 000007
【図７】
0003735172.tif 000008
【図８】
0003735172.tif 000009
【図９】
0003735172.tif 000010
【図１０】
0003735172.tif 000011