(57)【特許請求の範囲】
【請求項１】
波形データを記憶した波形メモリから各発音チャンネル毎に波形データを読み出し、読み出した波形データに基づき生成される楽音信号に対して各発音チャンネル毎に更に音量エンベロープ付与制御を行う音源において、新たな楽音の発音が指示されたときに、該新たな楽音を割り当てる発音チャンネルを選定する発音割り当て方法であって、前記波形メモリに記憶された波形データは当該波形データ自体が音量変化するものであり、
前記波形メモリに記憶された波形データの音量変化を示すエンベロープ情報を記憶した記憶手段を各発音チャンネル毎の前記波形データの発音開始からの経過時間により参照し、該エンベロープ情報に基づいて各発音チャンネルにおいて前記波形メモリから読み出されている波形データの現在の音量を示す模擬エンベロープ値情報を取得するステップと、
各発音チャンネルで生成する楽音信号に対して付与される前記音量エンベロープの現在値を示す音量エンベロープ値情報を取得するステップと、
各発音チャンネル毎に前記模擬エンベロープ値情報と前記音量エンベロープ値情報とを合成し、各発音チャンネル毎の音量現在値を算出するステップと、
算出した各発音チャンネル毎の音量現在値に基づいて、前記新たな楽音を割り当てるべき発音チャンネルを選定するステップと
を具備する発音チャンネル割り当て方法。
【請求項２】
波形データを記憶する記憶手段であって、該記憶手段に記憶された波形データは当該波形データ自体が音量変化するものであるものと、
前記記憶手段から各発音チャンネル毎に波形データを読み出し、読み出した波形データに基づき生成される楽音信号に対して各発音チャンネル毎に更に音量エンベロープ付与制御を行う音源と、
前記記憶手段に記憶された波形データの音量変化を示すエンベロープ情報を記憶した記憶部を各発音チャンネル毎の前記波形データの発音開始からの経過時間により参照し、該エンベロープ情報に基づいて各発音チャンネルにおいて前記記憶手段から読み出されている波形データの現在の音量を示す模擬エンベロープ値情報を取得する第１のエンベロープ取得手段と、
各発音チャンネルで生成する楽音信号に対して付与される前記音量エンベロープの現在値を示す音量エンベロープ値情報を取得する第２のエンベロープ取得手段と、
各発音チャンネル毎に前記模擬エンベロープ値情報と前記音量エンベロープ値情報とを合成し、各発音チャンネル毎の音量現在値を算出する算出手段と、
算出した各発音チャンネル毎の音量現在値に基づいて、前記新たな楽音を割り当てるべき発音チャンネルを選定する選定手段と
を具備する発音チャンネル割り当て装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、押鍵に基づく発音指示に従って生成された音を複数発音チャンネルの中のいずれかの発音チャンネルに割り当てる発音チャンネル割り当て方法及び装置に関し、特に、波形メモリから読み出した複数周期波形自体が音量の時間変化（音量エンベロープ）を有する場合に、最も聴感に与える影響の少ない音を発音中の発音チャンネルを解放して新たな音を割り当てることのできるものに関する。
【０００２】
【従来の技術】
発音開始から終了までの1音の全波形の波形データ、あるいはアタック部などの波形の一部において全波形の波形データを波形メモリに記憶し、この波形データを基に楽音を生成し発音する波形メモリ音源が従来から知られている。波形メモリ音源は複数の発音チャンネルを有しており、当該音源では押鍵に基づく発音指示が発生した場合に発音チャンネルの割り当てを行って、該発音指示された楽音を該割り当てた発音チャンネルにて発音するようになっている。該発音割り当ての処理では、複数の発音チャンネルの中から、まず、現在発音に使用されていない空きチャンネルを捜し、それが見つかればその発音チャンネルに新たに発音する楽音の割り当てを行なう。一方、空きチャンネルが見つからない場合には現在発音に使用されている発音チャンネルの中から何れかの発音チャンネルを選択し、選択した発音チャンネルで発音中の楽音の音量を急速に減衰することによって当該発音チャンネルを強制的に解放し、当該発音チャンネルに新たに発音する楽音を割り当てる。
【０００３】
一般的に、この「何れかの発音チャンネルを選択して、当該発音チャンネルで発音中の楽音の音量を急速減衰させる」処理を「トランケート処理」と呼び、この「トランケート処理」で急速減衰させられる発音チャンネルを「トランケートチャンネル」と呼んでいる。この「トランケート処理」は既に公知であり、また、様々なタイプの「トランケート処理」が知られている。「トランケートチャンネル」の選択方法として従来から知られている方法としては、
（１）発音中の複数発音チャンネルの中から、最初に（つまり最も古く）ノートオフされた発音チャンネルを選択し、ノートオフされた発音チャンネルが無い場合は最初に（つまり最も古く）ノートオンされた発音チャンネルを選択する方法
（２）発音中の各発音チャンネル毎に音量の時間変化を疑似的に演算して疑似音量エンべロープを生成し、該疑似音量エンベロープの値が最も小さい発音チャンネルを選択する方法
（３）音源の各発音チャンネルから現在の音量エンベロープ値を読み出して、該音量エンベロープ値が最も小さい発音チャンネルを選択する方法
（４）さらに、上述したような各方法に「パート毎の優先度」あるいは「音高に応じた優先度」等を加味して選択する方法
等のいろいろな方法がある。
【０００４】
【発明が解決しようとする課題】
ところで、上述した波形メモリ音源においては、波形メモリから「ループ読み出し用ではない複数周期波形」（例えば、アタック部＋ループ部構成の波形データにおけるアタック部）が読み出され、その複数周期波形自体が音量の時間変化（音量エンベロープ）を有している場合がある。このような場合に、波形メモリ音源の発音チャンネルにおいて、当該波形メモリ音源のエンベロープ発生器で発生した音量エンベロープあるいは疑似的に生成される疑似音量エンベロープを用いて、該複数周期波形に対して更にエンベロープ制御を行なうと、その発音チャンネルで実際に発音される楽音の音量エンベロープは該エンベロープ発生器の発生する音量エンベロープあるいは疑似的に生成される疑似音量エンベロープとは異なる形状の音量エンベロープとなる。そうすると、上記「トランケート処理すべき発音チャンネルを選択する」場合に、波形メモリ音源の発音チャンネルから読み出した音量エンベロープや疑似的に生成される疑似音量エンベロープに基づいて発音チャンネルの選択を行なうことは適切でない。なぜなら、上記「トランケート処理すべき発音チャンネルを選択する」際に、波形メモリから読み出された波形自体が元々有していた音量エンベロープが考慮されていないからである。しかしながら、従来の波形メモリ音源では、実際に発音される楽音の所定の時間における音量エンベロープ現在値（実施例では、音量レベル現在値と呼んでいる）を求めることが困難であったために、実際に発音される楽音の音量エンベロープ現在値に基づく「トランケートチャンネル」の選択を行うことが困難であった。そのため、発音チャンネルの割り当てが適切に行われずに、消えるべきでない楽音が消音されてしまったり、先に消えても良い楽音が残ったりする、という問題点があった。
【０００５】
本発明は上述の点に鑑みてなされたもので、波形メモリから読み出された複数周期波形が音量の時間変化（音量エンベロープ）を有したものである場合であっても、適切にトランケート処理を行い発音チャンネルを割り当てることのできる発音チャンネル割り当て方法及び装置を提供しようとするものである。
【０００６】
【課題を解決するための手段】
本発明に係る発音チャンネル割り当て方法は、波形データを記憶した波形メモリから各発音チャンネル毎に波形データを読み出し、読み出した波形データに基づき生成される楽音信号に対して各発音チャンネル毎に更に音量エンベロープ付与制御を行う音源において、新たな楽音の発音が指示されたときに、該新たな楽音を割り当てる発音チャンネルを選定する発音割り当て方法であって、前記波形メモリに記憶された波形データは当該波形データ自体が音量変化するものであり、前記波形メモリに記憶された波形データの音量変化を示すエンベロープ情報を記憶した記憶手段を各発音チャンネル毎の前記波形データの発音開始からの経過時間により参照し、該エンベロープ情報に基づいて各発音チャンネルにおいて前記波形メモリから読み出されている波形データの現在の音量を示す模擬エンベロープ値情報を取得するステップと、各発音チャンネルで生成する楽音信号に対して付与される前記音量エンベロープの現在値を示す音量エンベロープ値情報を取得するステップと、各発音チャンネル毎に前記模擬エンベロープ値情報と前記音量エンベロープ値情報とを合成し、各発音チャンネル毎の音量現在値を算出するステップと、算出した各発音チャンネル毎の音量現在値に基づいて、前記新たな楽音を割り当てるべき発音チャンネルを選定するステップとを具備する。
【０００７】
この発明によれば、各発音チャンネルの音量現在値を算出し、この音量現在値に基づいて、新たな楽音を発音割り当てるべき発音チャンネルを選定することができるようになっている。波形データを記憶した波形メモリから各発音チャンネル毎に波形データを読み出し、読み出した波形データに基づき生成される楽音信号に対して各発音チャンネル毎に更に音量エンベロープ付与制御を行う音源において、新たな楽音の発音が指示されたときには該新たな楽音を発音チャンネルに割り当てる。波形メモリに記憶された波形データは当該波形データ自体が音量変化するものであり、いわば、音量変化に応じた振幅エンベロープが付与されているエンベロープ付の波形データを波形メモリに記憶している。発音チャンネル割り当ての際に、前記波形メモリに記憶された波形データの音量変化を示すエンベロープ情報を記憶した記憶手段を各発音チャンネル毎の前記波形データの発音開始からの経過時間により参照し、該エンベロープ情報に基づいて各発音チャンネルにおいて前記波形メモリから読み出されている波形データの現在の音量を示す模擬エンベロープ値情報を取得する。また、各発音チャンネルで生成する楽音信号に対して付与される前記音量エンベロープの現在値を示す音量エンベロープ値情報を取得する。こうして取得された各発音チャンネル毎の模擬エンベロープ値情報と音量エンベロープ値情報とを合成すると、音量現在値が得られる。この音量現在値は、各発音チャンネルから実際に発音される楽音の所定時間における音量値を示すものである。そこで、この各発音チャンネルの音量現在値に基づき、新たな楽音を発音割り当てすべき発音チャンネルを決定する。こうすると、実際に発音される音量で割り当て対象となる発音チャンネルを選定することができるので、不自然な発音がなされるような発音チャンネルの割り当てが行われることがない。
【０００８】
本発明は、方法の発明として構成し実施することができるのみならず、装置の発明として構成し実施することができる。また、本発明は、コンピュータまたはＤＳＰ等のプロセッサのプログラムの形態で実施することができるし、そのようなプログラムを記憶した記憶媒体の形態で実施することもできる。
【０００９】
【発明の実施の形態】
以下、この発明の実施の形態を添付図面に従って詳細に説明する。
【００１０】
図１は、この発明に係る発音チャンネル割り当て方法を適用した電子楽器のハードウエア構成の一実施例を示すブロック図である。ここに示された電子楽器のハードウエア構成例はコンピュータを用いて構成されており、そこにおいて、発音チャンネル割り当て処理は、コンピュータがこの発明に係る発音チャンネル割り当て方法を実現する所定のプログラム（ソフトウエア）を実行することにより実施される。勿論、この発音チャンネル割り当て処理はコンピュータソフトウエアの形態に限らず、ＤＳＰ（ディジタル・シグナル・プロセッサ）によって処理されるマイクロプログラムの形態でも実施可能であり、また、この種のプログラムの形態に限らず、ディスクリート回路又は集積回路若しくは大規模集積回路等を含んで構成された専用ハードウエア装置の形態で実施してもよい。また、本発明に係る発音チャンネル割り当て方法を適用する装置は電子楽器に限らず、カラオケ装置又は電子ゲーム装置、あるいはその他のマルチメディア機器又はパーソナルコンピュータ等、任意の製品応用形態をとっているものであってよい。
【００１１】
図1に示された電子楽器のハードウエア構成例においては、コンピュータのメイン制御部としてのＣＰＵ１に対して、バスライン１Ｄ（データあるいはアドレスバス等）を介してリードオンリメモリ（ＲＯＭ）２、ランダムアクセスメモリ（ＲＡＭ）３、表示器４、表示器スイッチ５、ハードディスク６、波形メモリ音源８、ＭＩＤＩインタフェース１０、演奏操作子１１、タイマ１２がそれぞれ接続されている。ＣＰＵ１は、後述する「ノートオンイベント処理」や「トランケートチャンネル決定処理」等の処理を所定のプログラムに基づいて実行する。これらのプログラムは、通信インタフェース（図示せず）を介したネットワーク等から供給されてハードディスク６に記憶される。そして、実行時にハードディスク６からＲＡＭ３にロードされる。あるいは、ＲＯＭ２に予めプログラムが記録されていてもよい。ＣＰＵ１には、タイマ割込み処理（インタラプト処理）における割込み時間や各種時間を計時するタイマ１２が接続されている。すなわち、タイマ１２は時間間隔を計数したり、自動伴奏演奏等のテンポを設定したりするためのテンポクロックパルスを発生するものである。このテンポクロックパルスの周波数は、表示器スイッチ５の中のテンポ設定スイッチ等によって調整される。このようなタイマ１２からのテンポクロックパルスはＣＰＵ１に対して処理タイミング命令として与えられたり、あるいはＣＰＵ１に対してインタラプト命令として与えられる。ＣＰＵ１はこれらの命令に従って、各種処理を実行する。
【００１２】
ＲＯＭ２は、ＣＰＵ１により実行あるいは参照される各種プログラムや各種データ等を格納するものである。ＲＡＭ３は、発音される楽音に関する各種情報やＣＰＵ１がプログラムを実行する際に発生する各種データを一時的に記憶するワーキングメモリとして、あるいは現在実行中のプログラムやそれに関連するデータを記憶するメモリとして使用される。ＲＡＭ３の所定のアドレス領域がそれぞれの機能に割り当てられ、レジスタやフラグ、テーブル、メモリなどとして利用される。表示器４は、後述の表示器スイッチ５から入力された楽音特性の設定及び制御に関するデータやその他のデータの設定内容等を表示する、例えば液晶表示パネル（ＬＣＤ）やＣＲＴ等のディスプレイである。表示器（パネル）スイッチ５は演奏時の楽音音量の設定指示や、あるいは演奏に関する各種の音楽条件を入力するための各種の操作子を含んで構成される。例えば、数値データ入力用のテンキーや文字データ入力用のキーボード、あるいはデータ設定用操作子等である。勿論、この他にも音高、音色、効果等を選択・設定・制御するための各種操作子を含んでいてよい。
【００１３】
演奏操作子１１は、発生すべき楽音を指定するために用いられる各種操作子、すなわち、演奏する楽音の音高、音色、効果等を選択・設定・制御するための各種操作子（例えば、鍵盤等）である。例えば、鍵盤は楽音の音高を選択するための複数の鍵を備えるもので、各鍵に対応してキースイッチを有しており、この鍵盤は楽音演奏のために使用できるのは勿論のこと、演奏する楽音の音高、音色、効果等を選択・設定・制御するための操作子として使用することもできる。この演奏操作子１１は機種に依存するものであり、当該電子楽器の機種がピアノやオルガンといったものであれば当該演奏操作子１１は上記鍵盤で構成される。ハードディスク６は、波形メモリ７に記憶される波形データに対応する音量エンベロープデータ（後述する波形のエンベロープテーブル等の各種データ）や、各種音色パラメータ等からなる音色データなどのような演奏に関する複数種類のデータを記憶したり、前記ＣＰＵ１が実行する各種プログラム等のような制御に関するデータを記憶したりするものである。前記ＲＯＭ２に制御プログラムが記憶されていない場合、このハードディスク６に制御プログラムを記憶させておき、それを前記ＲＡＭ３に読み込むことにより、ＲＯＭ２に制御プログラムを記憶している場合と同様の動作をＣＰＵ１にさせることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。なお、ハードディスク６（ＨＤ）のような外部記憶装置に限られず、フロッピィーディスク（ＦＤ）、コンパクトディスク（ＣＤ−ＲＯＭ・ＣＤ−ＲＡＭ）、光磁気ディスク（ＭＯ）、あるいはＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋの略）等の着脱自在な様々な形態の記憶媒体を利用する外部記憶装置であってもよい。
【００１４】
ＣＰＵ１は、ＭＩＤＩインタフェース１０、演奏操作子１１等から与えられる、あるいは、ＣＰＵ１の実行する自動演奏処理等で発生する演奏情報（ＭＩＤＩイベント等）に従って波形メモリ音源部８に楽音発生の指示を出す。具体的には、ＣＰＵ１は、楽音発生の開始を指示するノートオンイベントが与えられた、ないし、発生したのに応じて、後述する「ノートオンイベント処理」を行う。すなわち、演奏操作子１１等から入力した演奏情報及び設定情報に応じて、発音チャンネル割り当てや楽音制御パラメータ等の作成を行い、割り当てた発音チャンネルに対応して各種の楽音制御パラメータを音源レジスタ８Ａに対して設定する。波形メモリ音源８では、楽音データを生成するための楽音生成処理が行われる。すなわち、各発音チャンネルに対応して音源レジスタ８Ａに設定された各種楽音制御パラメータに基づいて、波形メモリ７から時分割で複数チャンネル分の波形データを読み出して補間し（読出処理部８Ｂ）、補間された波形データに各発音チャンネル別に楽音制御（すなわち、ＥＧ処理部８Ｃで生成された各発音チャンネルのエンベロープに基づく音量制御）を施し（ＥＧ処理部８Ｃ）、音量制御された複数チャンネル分の波形データ（楽音波形）を累算する（チャンネル累算部８Ｄ）。なお、波形メモリ７には複数の波形データが記憶されており、音源レジスタ８Ａには各発音チャンネル毎に、前記読出処理部８Ｂが波形メモリ７からどの波形データを読み出すかを指定するための波形データ指定情報が含まれている。ここで、読出処理部８Ｂから発生した楽音波形に音量エンベロープが付与されている場合は、ＥＧ処理部８Ｃで生成されるエンベロープによって更に音量エンベロープが制御されることになる。そして、累算結果に対して楽音制御パラメータに従って各種効果を付与して（ＥＦ処理部８Ｅ）、楽音データを生成する。こうして生成された楽音データは、ＤＡＣ９に出力される。ＤＡＣ９はディジタルアナログ変換器であって、ＤＡＣ９では波形メモリ音源８で生成され出力されたディジタル楽音データをアナログ楽音データに変換する。サウンドシステム９Ａでは、該アナログ楽音データに基づいて実際の楽音を放音する。
【００１５】
波形メモリ７には１つの音に関して１乃至複数周期の波形データが記憶されており、波形データは複数の音色及び音楽特性（音高又は音域に応じた特性や、ビブラート、スラー等の変調特性）に対応している。すなわち、波形メモリ音源８における楽音信号発生方式は、発生すべき楽音の音高に対応して変化するアドレスデータに応じて波形メモリに記憶した波形データ（楽音波形サンプル値データ）を順次読み出す波形メモリ読み出し方式である。勿論、波形メモリ音源８（読出処理部８Ｂ、ＥＧ処理部８Ｃ、チャンネル累算部８Ｄ、ＥＦ処理部８Ｅ）は専用のハードウェアを用いて音源回路を構成するものに限らず、ＤＳＰとマイクロプログラム、あるいはＣＰＵとソフトウェアを用いて音源回路を構成するようにしてもよい。さらに、１つの回路を時分割で使用することによって複数の発音チャンネルを形成するようなものであってもよいし、１つの発音チャンネルが１つの回路で形成されるようなものであってもよい。
【００１６】
ＭＩＤＩインタフェース（Ｉ／Ｆ）１０は、他のＭＩＤＩ機器等からＭＩＤＩ規格の演奏情報（ＭＩＤＩデータ）を当該電子楽器へ入力したり、あるいは当該電子楽器からＭＩＤＩ規格の演奏情報（ＭＩＤＩデータ）を他のＭＩＤＩ機器等へ出力するためのインタフェースである。なお、ＭＩＤＩインタフェース１０は専用のＭＩＤＩインタフェースを用いるものに限らず、ＲＳ２３２−Ｃ、ＵＳＢ（ユニバーサル・シリアル・バス）、ＩＥＥＥ１３９４（アイトリプルイー１３９４）等の汎用のインタフェースを用いてＭＩＤＩインタフェースを構成するようにしてもよい。この場合、ＭＩＤＩメッセージ以外のデータをも同時に送受信するようにしてもよい。
上述のような汎用のインタフェースを用いた場合、当該インタフェースを例えばＬＡＮやインターネットあるいは電話回線等の通信ネットワークに接続し、該通信ネットワークを介してサーバコンピュータと接続することによって、当該サーバコンピュータから制御プログラムや各種データを電子楽器側に取り込むようにしてもよい。すなわち、ＲＯＭ２やハードディスク６に制御プログラムや各種データが記憶されていない場合に、サーバコンピュータから制御プログラムや各種データをダウンロードする。クライアントとなる電子楽器は、通信ネットワークを介してサーバコンピュータへと制御プログラムや各種データのダウンロードを要求するコマンドを送信する。サーバコンピュータは、このコマンドを受け、要求された制御プログラムやデータを、通信ネットワークを介して本電子楽器へと配信し、電子楽器がこれらの制御プログラムや各種データを受信してハードディスク６に蓄積することにより、ダウンロードが完了する。
【００１７】
上述したように、図１に示した電子楽器において、発音チャンネルの割り当て方法はコンピュータがこの発明に係る発音チャンネル割り当て方法を実現する所定のプログラム（ソフトウエア）を実行することにより実施される。そこで、この発音チャンネルの割り当て方法を実現する所定のプログラム（ソフトウエア）について説明する。図２は、上述した電子楽器において実行される「ノートオンイベント処理」の一実施例を示すフローチャートである。当該処理は、所定の演奏操作子１１の操作や、ＭＩＤＩインタフェース１０からのノートオンの入力等に応じてノートオンイベントが発生した場合に実行される処理であり、これにより操作された演奏操作子１１に応じた楽音の発音が開始される。
ステップＳ１では、そのノートオンイベントに係る音（すなわち、発音指示された音）の音高を示す情報（例えば、ノート番号）、そのノートオンイベントに係る音のイニシャルタッチ強度を示す情報（例えば、ベロシティ）、ノートオンを入力したＭＩＤＩチャンネルを受信するパートの情報（例えば、パート番号）を各々に対応する所定のレジスタＮＮ（ノート番号を格納するレジスタ）、レジスタＶＬ（ベロシティを格納するレジスタ）、レジスタＰＴ（パート番号を格納するレジスタ）に格納する。そして、楽音を発音するために現在空いている（すなわち、割り当てられていない）発音チャンネル（これを空きチャンネルと呼ぶ）があるかないかを検出する（ステップＳ２）。この空きチャンネルには、ノートオフされた後に音量が減衰して音量レベルが「０」となって解放された発音チャンネルが含まれる。空きチャンネルがある場合には（ステップＳ３のＹＥＳ）、当該空きチャンネルに付されているチャンネル番号をレジスタＡＳに格納する（ステップＳ４）。
【００１８】
一方、全ての発音チャンネルが既に割り当てられており、空きチャンネルが全くない場合には（ステップＳ３のＮＯ）、後述する「トランケートチャンネル決定処理」（図３参照）を行うことによってトランケートチャンネル（すなわち、後述する急速減衰処理を行って発音中の楽音を強制的に消音して、空きチャンネルとする「トランケート処理」を行う対象の発音チャンネル）を決定し、トランケートチャンネルに選ばれた発音チャンネルに付されているチャンネル番号をレジスタＡＳに格納する（ステップＳ７）。そして、レジスタＡＳに格納されたチャンネル番号に基づいて、該当する発音チャンネルにおいて発音中の楽音に対して急速減衰処理を行う。この急速減衰処理では、トランケートチャンネルに選ばれた発音チャンネルで発音中の楽音が減衰されて消音される。
ステップＳ５では、上記レジスタＰＴ、レジスタＮＮ、レジスタＶＬに応じた楽音制御パラメータをレジスタＡＳに保持されたチャンネル番号に該当する発音チャンネルに設定する。そして、当該発音チャンネル（つまり、レジスタＡＳに保持されたチャンネル番号に該当する発音チャンネル）に対して発音開始を指示する（ステップＳ６）。
【００１９】
図３は、上述した「ノートオンイベント処理」で実行される「トランケートチャンネル決定処理」（図２のステップＳ７参照）の一実施例を示すフローチャートである。当該処理は、「トランケート処理」を行う発音チャンネル（トランケートチャンネル）を選択し決定する処理である。
ステップＳ１１では、サーチ対象のパートを決定する。すなわち、「トランケート処理」を行う対象となる発音チャンネルを特定の演奏パートの楽音を発音している発音チャンネルのいずれかから選択するために、全演奏パートの中から特定の演奏パートをサーチ対象の演奏パートとして絞り込みする。この演奏パートの絞り込みを行うことによって、「トランケート処理」が高速化されて発音チャンネルの割り当てが素早く実行されることから、当該ノートオンイベントに対して遅延することなく波形メモリ音源８に対して発音制御を行うことができる（すなわち、発音遅れが防止できる）。演奏パートの絞り込みの方法としては、例えば、「１以上の発音チャンネルで発音中の演奏パートであって、かつ、優先度の低い演奏パート」をサーチ対象のパートとする、あるいは「所定のリザーブ数（各パート毎に設定された最低限残しておくべきチャンネル数）以上の発音チャンネルを使用している演奏パート」をサーチ対象の演奏パートとする等の方法がある。演奏パートの絞り込み終了後、全ての発音チャンネルの中から、サーチ対象として絞り込まれた演奏パートに属する楽音が現在割り当てられている（楽音を生成中の）発音チャンネルを検出する（ステップＳ１２）。すなわち、絞り込みした演奏パートに属する楽音が割り当てられている発音チャンネルのリストを作成する。このリストの発音チャンネルの中から、後述の処理によって「トランケート処理」を行う対象となる発音チャンネルが決定される。そこで、まず、作成されたリストの１番目の発音チャンネル（すなわち、１番初めに検出された発音チャンネル）を後述のステップＳ１４〜ステップＳ１７で行う処理対象として指定する（ステップＳ１３）。
【００２０】
ステップＳ１４では、上記ステップＳ１３で指定された発音チャンネルにおける楽音の発音開始から現在までの経過時間を検出する。すなわち、各発音チャンネル毎に「ノートオンイベント処理」時に「当該発音チャンネルがノートオンされた時刻」を保持しておき、ここでは、現在時刻と前記「当該発音チャンネルがノートオンされた時刻」との差をとることにより「当該発音チャンネルの発音開始からの時間」（経過時間）を検出する。ステップＳ１５では、当該チャンネルで読出処理部８Ｂが波形メモリ７から読み出している波形データに対応した「波形のエンベロープテーブル」（詳細は後述する）を上記「経過時間」によって参照することにより、当該波形データの「エンベロープ現在値」を取得する。ステップＳ１６では、波形メモリ音源８の発音チャンネルから、「ＥＧ処理部８Ｃにおける当該チャンネルのエンベロープ生成処理により生成されたエンベロープ現在値」を読み出す。ステップＳ１７では、ステップＳ１５で取得した「波形データのエンベロープ現在値」と、ステップＳ１６で取得した「ＥＧ処理部８Ｃのエンベロープ現在値」とを加算する。上記各「エンベロープ現在値」をそれぞれ対数値（例えば、デシベル値）で表現した場合には、加算がリニア値での乗算に相当する。したがって、上記各「エンベロープ現在値」をそれぞれ対数値で表現した場合には、演算器として加算器を用いればよく、一方、これらをリニア値で表現した場合には、演算器として乗算器を用いればよい。
こうして加算（あるいは乗算）して得られた値が、当該発音チャンネルの「音量レベル現在値」である。この発音チャンネルの「音量レベル現在値」の算出については（ステップＳ１５〜ステップＳ１７参照）、後ほど具体的な例を用いて詳しく説明する。
【００２１】
「音量レベル現在値」の算出後、次の発音チャンネルがあるかないかを判定する（ステップＳ１８）。すなわち、ステップＳ１２で検出したサーチ対象として絞り込まれたパートに関して発音指示された楽音を生成中の発音チャンネルが複数あるかないかを判定する。複数ある場合、すなわち、次の発音チャンネルがある場合には（ステップＳ１８のＹＥＳ）、次の発音チャンネルを指定して（ステップＳ２０）、ステップＳ１４の処理へ戻り上記各処理を繰り返し行って、当該発音チャンネル毎の「音量レベル現在値」を算出する。一方、次の発音チャンネルがない場合には（ステップＳ１８のＮＯ）、音量レベルが最少である発音チャンネルを検出し、当該発音チャンネルに付されているチャンネル番号をレジスタＡＳに格納する。すなわち、「音量レベル現在値」が算出された発音チャンネルの中から、最も該音量レベルが小さい発音チャンネルをサーチし、そのチャンネル番号をレジスタＡＳに格納する。そして、当該「トランケートチャンネル決定処理」を終了して、「ノートオンイベント処理」へ処理を返す。そして、「ノートオンイベント処理」ではレジスタＡＳに格納したチャンネル番号を付された発音チャンネルに対して「トランケート処理」を行う（図２のステップＳ８参照）。
このようにして、「ノートオンイベント処理」及び「トランケートチャンネル決定処理」を行うことによって、演奏操作子１１の操作に応じたノートオンイベントの発生に従い、空きチャンネルをサーチし、サーチされた空きチャンネルにノートオンイベントに係る楽音を割り当てて楽音を発音する。あるいは、サーチした結果として空きチャンネルがなかった場合には、「トランケート処理」を行って急速減衰処理した楽音が割り当てられていた発音チャンネルを空きチャンネルとして、当該発音チャンネルにノートオンイベントに係る新たな楽音を割り当てて楽音を発音することができるようにしている。
【００２２】
なお、ステップＳ１１に記載の「トランケート処理」対象とする発音チャンネルを選択する範囲の絞り込み方法は、パート単位で行わなくてもよい。すなわち、パート単位で行う方法以外に、例えば音域単位、音色グループ単位等で絞り込みを行ってもよい。あるいは、全く絞り込みを行わず、全パートをサーチ対象のパートとしてもよい。また、ステップＳ１６において、波形メモリ音源８の各発音チャンネルからエンベロープ現在値を読み出す代わりに、計算で音量の時間変化をシミュレートして「疑似エンベロープ」を生成し、この生成された「疑似エンベロープ」の現在値を使用するようにしてもよい。この「疑似エンベロープ」は、波形メモリ７から各発音チャンネル毎に読み出された波形データに基づいて生成される楽音信号に付与するための、疑似的に生成される音量エンベロープを表わす。
【００２３】
ここで、波形メモリ７に記憶する波形データ毎の音量エンベロープについて簡単に説明する。上述したように、この電子楽器では、発生すべき楽音の音高に対応して変化するアドレスデータに応じて波形メモリ７に記憶した波形データを順次読み出す波形メモリ読み出し方式を採用している。波形メモリ７には、複数周期波形からなる様々な自然楽器の様々な演奏態様による波形データが記憶されている。この波形データは演奏全体の波形データであってもよいし、あるフレーズ、あるいは１音、あるいはアタック部やリリース部といった特徴のある演奏の一部の波形データだけであってもよい。この波形データの中には、波形データ自体が音量の時間変化（音量エンベロープ）を有しているものがある。この音量エンベロープは、各波形データ毎に波形のエンベロープテーブルとして波形メモリ７に波形データと共に記憶される。図４は、波形のエンベロープテーブルとして記憶する音量エンベロープ値の一例を示した概念図である。この実施例では、アタック部＋ループ部構成の波形データにおける波形のエンベロープテーブルを例に示した。なお、この図では縦軸に音量エンベロープ値を、横軸に時間を示している。
波形のエンベロープテーブルには、各波形データ毎に所定の時間分（この実施例では、波形データのスタート位置から約１０秒分の長さ）の疑似音量エンベロープ値を記憶する。該疑似音量エンベロープ値は、波形データから抽出された音量エンベロープを所定の時間間隔毎に（例えば、１０ミリ秒毎間隔に）サンプリングしたサンプル値である。本実施例に示した疑似音量エンベロープは、波形データのアタック部では該疑似音量エンベロープ値が時間の経過と共に低下するよう変化し、波形データのループ部に入ったところからは時間の経過に関わらず一定値のまま推移する形状である。
【００２４】
なお、本実施例では波形データのアタック部の長さに関わりなく所定の時間長さ分（約１０秒分の長さ）にわたって疑似音量エンベロープ値を波形のエンベロープテーブルとして記憶するようにしたが、波形メモリ７に記憶した各波形データのアタック部の時間長さに相当するだけの時間長さ分にわたって疑似音量エンベロープ値を波形のエンベロープテーブルとして記憶するようにしてもよい。例えば、波形データのアタック部の時間長さが５秒分（あるいは１５秒分）であれば、波形のエンベロープテーブルの時間長さも５秒分（あるいは１５秒分）記憶すればよい。ただし、上記したように各波形データのアタック部の長さに関わりなく所定の時間長さ分に波形のエンベロープテーブルを統一して構成すると、波形データがそれ以下の時間長さである場合には波形データのエンド位置を検出する必要がなくなるので、その分プログラム（ソフトウエア）を簡単に構成することができる、という利点がある。例えば、波形データのアタック部が５秒分の時間長さである場合には、波形のエンベロープテーブルは前半の５秒分にアタック部の疑似音量エンベロープ値を記憶し、後半の５秒分はループ部の疑似音量エンベロープ値を記憶する。このループ部の疑似音量エンベロープ値は時間経過に関わらず一定値であることから、特に波形データのエンド位置を検出して当該波形のエンベロープテーブルと整合をとる必要はない。
【００２５】
なお、複数の波形データに共通する疑似音量エンベロープ値の時間変化を波形のエンベロープテーブルとして記憶するようにしてもよい。また、波形のエンベロープテーブルは波形データから抽出された音量エンベロープを所定の時間間隔毎にサンプリングしたサンプル値そのものからなる疑似音量エンベロープでなく、一部のサンプル値を加工した疑似音量エンベロープであってもよい。例えば、実際のサンプル値からなる疑似音量エンベロープの先頭部分が下がっている場合に、当該先頭部分が下がらないように前記疑似音量エンベロープを加工した形状の波形のエンベロープテーブルを作成するとよい（点線図参照）。こうすると、先頭部分（すなわち、発音開始直後）に発音割り当てがなされた場合の不都合を回避することができる。すなわち、サンプル値のままである場合には、先頭部分で「トランケート処理」がなされて、当該波形データを基にして発音される楽音が発音開始後すぐに消音されることとなり非常に都合が悪い。そこで、先頭部分のサンプル値を加工してそのようなことが起こらないようにしている。勿論、絶対に加工しなければならないということではなく、加工した方がよい。すなわち、加工しなくてもよい。
なお、この波形のエンベロープテーブルは波形メモリ７に波形データと共に記憶するようにしてもよいし、あるいは波形メモリ７とは別のハードディスク６等の記憶装置やＦＤ等の外部記憶媒体に記憶するようにしてもよい。
また、本実施例では「アタック部＋ループ部構成の波形データ」に関する波形のエンベロープテーブルを示したが、波形データは「ループ読み出し用でない複数周期波形」構成であればどのような構成のものであってもよい。
【００２６】
次に、発音チャンネルの「音量レベル現在値」の算出（図３のステップＳ１５〜ステップＳ１７参照）について、具体例を参照しながら詳細に説明する。
図５は、発音チャンネルの「音量レベル現在値」の算出について説明するための図である。図５（Ａ）は、時間Ｔ０で発生したノートオンに応じて、１つの発音チャンネルでアタック部とループ部から構成される波形データを読み出している様子を示す概念図である。図５（Ｂ）は、図５（Ａ）の波形データが予め有している音量エンベロープ（すなわち、波形のエンベロープテーブルを基にして生成される音量エンベロープ）を示す図である。図５（Ｃ）は、エンベロープ発生器（ＥＧ処理部８Ｃ）で当該発音チャンネルの波形データの音量を制御するために生成されているエンベロープを示す図である。図５（Ｄ）は、所定の発音チャンネルにおける実際に発音される楽音の音量エンベロープ（これを「音量レベル」と呼んで、図５（Ｃ）に示すエンベロープ発生器（ＥＧ処理部８Ｃ）で生成された当該発音チャンネルの音量エンベロープと区別する）を示す図である。図５（Ｂ）から図５（Ｄ）までの各図では、縦軸に音量エンベロープ値を、横軸に時間を示している。
【００２７】
まず、ノートオンイベントを受信すると、波形メモリ７から該ノートオンイベントに対応した波形データを選択的に読み出す。この実施例では、時間の経過に従い、特徴のある複数周期波形からなるアタック部全体の波形データと、それに続く１周期波形からなるループ波形を複数回繰り返して読み出す。そして、読み出された波形データに対応するエンベロープテーブルを発音開始（ノートオン）からの経過時間で参照することにより、波形メモリ７中の当該波形データが有しているエンベロープに対応する波形の音量エンベロープ現在値を取得する（図３のステップＳ１５参照）。例えば、当該波形データに対応したエンベロープテーブルが図４に示したような形状である場合には、図５（Ｂ）に示すような音量エンベロープが生成される。この音量エンベロープのアタック部の形状は、波形のエンベロープテーブルと先頭部分の一部を除いて同様の形状となる。また、当該波形の音量エンベロープのループ部の形状は、波形データのループ部が繰り返し読出しされる限りにおいて、ループ部が読み出された以降（時間Ｔ１以降）で一定値を維持した形状となる。こうして生成される音量エンベロープの所定の時間における音量エンベロープ値が波形のエンベロープ現在値として取得される。
次に、図３のステップＳ１６で波形メモリ音源８から読み出される音量エンベロープ現在値、すなわち、ＥＧ処理部８Ｃが当該発音チャンネルの波形データの音量を制御するために生成しているエンベロープについて説明する。なお、ＥＧ処理部８Ｃでは、複数ステートの折れ線近似されたエンベロープを生成する。音源レジスタ８Ａには、該エンベロープを制御するための各ステート毎のエンベロープ目標値とエンベロープ変化速度が記憶されている。図５（Ｃ）では、アタック部（時間Ｔ０〜Ｔ１）では音量エンベロープ値は一定値を保ち、ループ部に入ると（時間Ｔ１以降）次第に音量エンベロープ値が減少する形状の音量エンベロープを示した。ただし、時間Ｔ１〜Ｔ２までと時間Ｔ２以降（ノートオフイベント受信後）とでは音量エンベロープ値の減衰速度が異なる。こうして生成される音量エンベロープの所定の時間における音量エンベロープ値がエンベロープ発生器（ＥＧ処理部８Ｃ）で読み出される所定の発音チャンネルのエンベロープ現在値として取得される。
さらに、取得した波形の音量エンベロープ（図５（Ｂ）参照）と波形メモリ音源８から読み出される音量エンベロープ（図５（Ｃ）参照）とを加算すると、図５（Ｄ）に示すような音量エンベロープ（音量レベル）が得られる。この音量レベルの所定の時間における音量エンベロープ値が発音チャンネルの「音量レベル現在値」として取得される（ステップＳ１７参照）。
【００２８】
こうして各発音チャンネル毎に「音量レベル現在値」を取得し、各チャンネル毎の「音量レベル」を相互に比較して「トランケートチャンネル」を決定する（図３のステップＳ１９参照）。従来では、この「音量レベル現在値」ではなく、例えばエンベロープ発生器（ＥＧ処理部８Ｃ）で読み出される発音チャンネルのエンベロープ現在値等を比較して「トランケートチャンネル」を決定していたために、適切に発音チャンネルの割り当てを行うことができなかった。すなわち、図５（Ｃ）と図５（Ｄ）とを比較すると明らかなように、エンベロープ発生器（ＥＧ処理部８Ｃ）で読み出される所定の発音チャンネルの音量エンベロープ（図５（Ｃ））は実際に発音される楽音の音量エンベロープ（音量レベル）とは大きく異なる形状である。したがって、発音開始から所定の時間経過時の音量エンベロープ現在値を、エンベロープ発生器（ＥＧ処理部８Ｃ）で読み出される所定の発音チャンネルの音量エンベロープ（図５（Ｃ））から求めると、実際に発音される楽音の音量エンベロープ（音量レベル）が充分に反映されず、大きく異なる音量エンベロープ値が取得される。しかし、本発明では実際に発音される楽音の音量エンベロープ（音量レベル）を生成し、これに従う「音量レベル現在値」で「トランケートチャンネル」を選択するようにしたので、適切に発音チャンネルの割り当てを行うことができるようになっている。
【００２９】
なお、上述したような発音チャンネル割り当て方法を電子楽器に適用した場合、電子楽器は鍵盤楽器の形態に限らず、弦楽器や管楽器、あるいは打楽器等どのようなタイプの形態でもよい。また、その場合に、波形メモリ音源８等を１つの電子楽器本体内に内蔵したものに限らず、それぞれが別々に構成され、ＭＩＤＩインタフェースや各種ネットワーク等の通信手段を用いて各構成部を接続するように構成されたものにも同様に適用できることはいうまでもない。また、パソコンとアプリケーションソフトウェアという構成であってもよく、この場合処理プログラムを磁気ディスク、光ディスクあるいは半導体メモリ等の記憶メディアから供給したり、ネットワークを介して供給するものであってもよい。
【００３０】
【発明の効果】
本発明によれば、波形データの有する音量エンベロ−プ値と発音チャンネルから読み出した音量エンベロープ値とを合成して、発音チャンネルの「音量レベル現在値」を算出し、この「音量レベル現在値」に基づいて「トランケートチャンネル」を決定するようにしたので、発音チャンネル割り当ての際に楽音に不自然さを与える「トランケート処理」を行うことがなく、かつ、適切な発音チャンネルの割り当てを行うことができるようになる、という優れた効果を奏する。
【図面の簡単な説明】
【図１】  この発明に係る発音チャンネル割り当て方法を適用した電子楽器のハードウエア構成の一実施例を示すブロック図である。
【図２】  図１に示す電子楽器において実行される「ノートオンイベント処理」の一実施例を示すフローチャートである。
【図３】  図２に示す「ノートオンイベント処理」で実行される「トランケートチャンネル決定処理」の一実施例を示すフローチャートである。
【図４】  波形のエンベロープテーブルで記憶する音量エンベロープの一例を示した概念図である。
【図５】  発音チャンネルの「音量レベル現在値」の算出について説明するための図である。
【符号の説明】
１…ＣＰＵ、２…リードオンリメモリ（ＲＯＭ）、３…ランダムアクセスメモリ（ＲＡＭ）、４…表示器、５…表示器スイッチ、６…ハードディスク、７…波形メモリ、８…波形メモリ音源、９…ＤＡＣ、９Ａ…サウンドシステム、１０…ＭＩＤＩインタフェース、１１…演奏操作子、１２…タイマ、１Ｄ…バスライン
【図１】
0003716701.tif 000002
【図２】
0003716701.tif 000003
【図３】
0003716701.tif 000004
【図４】
0003716701.tif 000005
【図５】
0003716701.tif 000006