(57)【特許請求の範囲】
【請求項１】
楽音の波形を示す波形データを用いて発音させるべき楽音を発音させる楽音発生装置において、
音色毎に波形データを一つ以上、記憶した第１の記憶手段と、
前記第１の記憶手段と比較して高速なアクセスが可能な第２の記憶手段と、
演奏対象とする楽曲を特定する楽曲特定手段と、
前記楽曲特定手段が特定した楽曲の演奏内容を示すとともに楽音を発音させるべき音色を示す音色データと、該楽音の音高及び発音時間を示す音符データとからなる曲データを参照して、該楽曲の演奏で発音される楽音の音色、及び該楽曲において発音させるべき楽音の発音時間の中から最大発音時間を特定する演奏内容特定手段と、
前記演奏内容特定手段により特定された楽音の音色に対応する波形データを、該演奏内容特定手段により特定された最大発音時間に対応する部分のみ前記第１の記憶手段から読み出して該第２の記憶手段に記憶させることにより、前記楽曲特定手段が特定した楽曲の演奏に必要な波形データを該第２の記憶手段上に用意するデータ転送手段と、
を具備することを特徴とする楽音発生装置。
【請求項２】
音色毎に波形データを一つ以上、記憶した第１の記憶手段と、前記第１の記憶手段と比較して高速なアクセスが可能な第２の記憶手段と、を有し、楽音の波形を示す波形データを用いて発音させるべき楽音を発音させる楽音発生装置として用いることが可能なコンピュータに実行させるプログラムであって、
演奏対象とする楽曲を特定する楽曲特定機能と、
前記特定された楽曲の演奏内容を示すとともに楽音を発音させるべき音色を示す音色データと、該楽音の音高及び発音時間を示す音符データとからなる曲データを参照して、該楽曲の演奏で発音される楽音の音色、及び該楽曲において発音させるべき楽音の発音時間の中から最大の発音時間を特定する演奏内容特定機能と、
前記特定された楽音の音色に対応する波形データを、前記特定された最大発音時間に対応する部分のみ前記第１の記憶手段から読み出して該第２の記憶手段に記憶させることにより、前記特定された楽曲の演奏に必要な波形データを該第２の記憶手段上に用意するデータ転送機能と、
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、楽音の波形を示す波形データを用いて発音させるべき楽音を発音させる楽音発生装置に関する。
【背景技術】
【０００２】
楽音発生装置のなかには、楽音の波形を示す波形データを用意し、その波形データを用いて、楽音を発音（発生）させるものがある。波形データを用いて楽音を発音させる従来の楽音発生装置としては、例えば特許文献１に記載されたものが挙げられる。
【０００３】
特許文献１に記載された従来の楽音発生装置では、ＣＤ−ＲＯＭ８に格納された波形データを読み出して楽音波形ストックメモリ１２に保存し、発音させるべき楽音の波高値を生成するトーンジェネレータ１５内の楽音波形メモリ１６には、選曲された楽曲によって特定される波形データを格納するようにしている。波形データの特定は、選曲された楽曲の自動演奏用の演奏情報を参照して行っている。そのようにして特定される波形データを楽音波形メモリ１６に用意することにより、選曲された楽曲の自動演奏を発音させるべき音色で行えるようになっている。
【０００４】
発音させるべき楽音の波高値を生成する上記トーンジェネレータ１５のような楽音生成手段がアクセスする楽音波形メモリ１６のようなワークメモリには、高速なアクセスが可能なことが求められる。そのワークメモリに格納する波形データを多くするほど、楽音をより様々な音色で発音させることが可能となる。しかし、波形データ（圧縮された波形データは解凍されてワークメモリに格納される）のデータ量は大きいのが普通であり、ワークメモリについては、その記憶容量が比較的に小さい、或いは他の用途にも用いる、といったようなことが考えられる。
【０００５】
楽音波形全体の形は、音高によって変化する。このことから、より高い音質で楽音を発音できるように、音色毎に複数の波形データを用意する場合がある。それにより、同一の音色において、音高域別に波形データを用意する場合がある。
【０００６】
そのように波形データを用意すると、音色毎の波形データのデータ量はより大きなものとなる。このため、特許文献１に記載された従来の楽音発生装置のように、演奏情報から特定した音色毎に波形データをワークメモリに格納すると、その波形データの格納に必要な記憶容量は膨大なものとなりやすい。それにより、記憶容量が比較的に小さいワークメモリでは、全ての波形データを格納できないということが生じやすくなる。その記憶容量が比較的に大きくとも、他の用途に用いている場合には、記憶容量全体で波形データの格納に用いる割合が高くなって、他の用途での利用に支障をきたす可能性が生じやすくなる。このようなことから、音色毎に複数の波形データを用意している場合には、ワークメモリに格納する波形データのデータ量をより抑えるようにすることも重要であると考えられる。
【０００７】
より高い音質で楽音を発音できるように、波形データとして、発音開始から発音終了までの楽音波形を示す波形データを用意する場合がある。そのような波形データのデータ量は一つでも非常に大きいのが普通である。このことから、そのような波形データを用意している場合にも、ワークメモリに格納する波形データのデータ量をより抑えるようにすることが重要であると考えられる。
【特許文献１】特許第３０４０５８３号公報
【特許文献２】特許第３０２９３３９号公報
【特許文献３】特許第３２１７７７２号公報
【特許文献４】特許第３５６０９３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明の課題は、発音させるべき楽音の波高値生成用に波形データをワークメモリに格納する場合に、そのデータ量をより抑えることが可能な楽音発生装置を提供することにある。
【課題を解決するための手段】
【０００９】
本発明の楽音発生装置は、楽音の波形を示す波形データを用いて発音させるべき楽音を発音させる楽音発生装置において、音色毎に波形データを一つ以上、記憶した第１の記憶手段と、前記第１の記憶手段と比較して高速なアクセスが可能な第２の記憶手段と、演奏対象とする楽曲を特定する楽曲特定手段と、前記楽曲特定手段が特定した楽曲の演奏内容を示すとともに楽音を発音させるべき音色を示す音色データと、該楽音の音高及び発音時間を示す音符データとからなる曲データを参照して、該楽曲の演奏で発音される楽音の音色、及び該楽曲において発音させるべき楽音の発音時間の中から最大発音時間を特定する演奏内容特定手段と、前記演奏内容特定手段により特定された楽音の音色に対応する波形データを、該演奏内容特定手段により特定された最大発音時間に対応する部分のみ前記第１の記憶手段から読み出して該第２の記憶手段に記憶させることにより、前記楽曲特定手段が特定した楽曲の演奏に必要な波形データを該第２の記憶手段上に用意するデータ転送手段と、を具備する。
【００１１】
本発明のプログラムは、音色毎に波形データを一つ以上、記憶した第１の記憶手段と、前記第１の記憶手段と比較して高速なアクセスが可能な第２の記憶手段と、を有し、楽音の波形を示す波形データを用いて発音させるべき楽音を発音させる楽音発生装置として用いることが可能なコンピュータに実行させるプログラムを前提とし、演奏対象とする楽曲を特定する楽曲特定機能と、前記特定された楽曲の演奏内容を示すとともに楽音を発音させるべき音色を示す音色データと、該楽音の音高及び発音時間を示す音符データとからなる曲データを参照して、該楽曲の演奏で発音される楽音の音色、及び該楽曲において発音させるべき楽音の発音時間の中から最大の発音時間を特定する演奏内容特定機能と、前記特定された楽音の音色に対応する波形データを、前記特定された最大発音時間に対応する部分のみ前記第１の記憶手段から読み出して該第２の記憶手段に記憶させることにより、前記特定された楽曲の演奏に必要な波形データを該第２の記憶手段上に用意するデータ転送機能と、を実現させる。
【発明の効果】
【００１２】
本発明は、演奏対象とする楽曲を特定し、その楽曲の演奏内容を示す曲データを参照して、その楽曲の演奏で発音される楽音の音色、及び楽音の種類を特定し、音色毎に波形データを一つ以上、記憶した第１の記憶手段から、特定した楽音の音色、及び楽音の種類によって特定される波形データを読み出し、その第１の記憶手段と比較して高速なアクセスが可能な第２の記憶手段に記憶させることにより、特定した楽曲の演奏に必要な波形データを第２の記憶手段上に用意する。そのようにして必要な波形データのみを第２の記憶手段に転送し記憶させるため、楽曲の演奏に不具合が生じるのを回避させつつ、第２の記憶手段に記憶させる波形データのデータ量をより抑えることができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図１は、本実施の形態による楽音発生装置の構成を説明する図である。
その楽音発生装置は、図１に示すように、例えば不図示の電源によって不揮発性化されているＲＡＭ１０１と、プログラムや制御データ等を格納したＲＯＭ１０２と、ワーク用のＲＡＭ１０３と、装置全体の制御を行う音源ＬＳＩ１０４と、ユーザーに必要な情報を表示するための液晶表示装置（ＬＣＤ）１０５と、各種スイッチを有するスイッチ（ＳＷ）部１０６と、二つのスピーカ１０８を有するサウンドシステム（ＳｏｕｎｄＳｙｓｔｅｍ）１０７と、を備えた構成となっている。
【００１４】
上記ＲＡＭ１０１には、楽曲の演奏内容を示す曲データＳＤが１つ以上、格納されている。本実施の形態による楽音発生装置は、その曲データＳＤに従った自動演奏を行えるものとして実現されている。そのＲＡＭ１０１は、不図示のインターフェース、或いは入力装置を介して取得したデータの格納に用いられる。
【００１５】
図２は、曲データの構成を説明する図である。
曲データＳＤは、処理内容を示すデータを処理すべき順序で並べた構成となっている。処理内容を示すデータとしては、楽音を発音させるべき音色を示す音色データや、その楽音の内容を示す音符データが存在する。その音符データは、その処理によって発音させるべき楽音の音高を示す音高データ、及びその楽音の発音時間を示す音符長データ、を有する構成となっている。
【００１６】
図２に構成を示す曲データＳＤでは、音符データの次に位置するデータは、その音符データを処理してからその音符データ中の音符長データに相当する時間が経過した後に処理するようになっている。しかし、その曲データＳＤの構成は図２に示すようなものでなくとも良い。例えば音符データ等の演奏上のイベントを示すイベントデータに、それを処理すべき時間データを付した構成であっても良い。或いはスタンダードＭＩＤＩファイルのような構成のものであっても良い。
【００１７】
上記音源ＬＳＩ１０４は、内部にＣＰＵ１１１、及びジェネレータ（Ｇｅｎｅｒａｔｏｒ）１１２を搭載したシステムＬＳＩである。ＣＰＵ１１１は、ＲＯＭ１０２に格納されたプログラムを実行することにより、装置全体の制御を行う。ジェネレータ１１２は、サウンドシステム１０７に出力すべき楽音の波高値の生成を行う。そのシステム１０７は、例えば２つのスピーカ１０８の他に、デジタルデータをアナログ信号に変換するＤ／Ａコンバータ、そのコンバータが出力するアナログ信号（オーディオ信号）の増幅を行うアンプ、などを備えたものである。２つのスピーカ１０８には、アンプが出力したオーディオ信号が入力される。
【００１８】
ＣＰＵ１１１は、スイッチ部１０６への操作に応じて制御を行う。そのスイッチ部１０６には、スイッチとして、自動演奏する曲の選択を行うための曲選択用スイッチ、自動演奏の開始を指示するためのスタートスイッチ、テンキー、及びその終了を指示するためのストップスイッチ、などが備えられている。曲選択は、例えば曲選択用スイッチを操作した後、テンキーを操作して行うようになっている。それにより、テンキーには曲選択用スイッチが操作された後、所定時間、曲を選択するための機能を割り当てるようになっている。ここでは便宜的に、曲選択用スイッチ、及びテンキーを曲選択スイッチと総称し、それらを操作して曲選択を行うことを曲選択操作と呼ぶことにする。スイッチ部１０６は、例えばスキャンして各スイッチの状態を検出し、その検出結果を前回の検出結果と比較することにより、状態が変化したスイッチ、及びその変化内容を特定し、その結果をＣＰＵ１１１に通知する。
【００１９】
ＣＰＵ１１１は、ＲＯＭ１０２に格納されたプログラムをＲＡＭ１０３に読み出して実行する。これは、ＲＡＭ１０３はＲＯＭ１０２と比較してより高速なアクセスが可能なためであり、ＣＰＵ１１１のワークに用いられる。そのＲＯＭ１０２には、ジェネレータ１１２が楽音の波高値の生成に用いる波形データ群ＷＤ１が格納されている。
【００２０】
ＲＯＭ１０２がフラッシュメモリであった場合、そのアクセスには比較的に非常に長い時間が必要となる。このことから、波形データ群ＷＤ１のなかで楽音の波高値生成用に必要な波形データはＲＡＭ１０３に格納している。それにより、ＲＡＭ１０３はジェネレータ１１２のワークにも用いている。ＲＡＭ１０３に示すＷＤ２は、ＲＯＭ１０２から読み出してＲＡＭ１０３に格納した波形データ群を表している。
【００２１】
図３は、ＲＯＭ１０２に格納された波形データ群ＷＤ１の構成を説明する図である。その図３において、音色Ａ〜Ｄはそれぞれ異なる音色を表している。音域（１）〜（３）もそれぞれ異なる音域（音高域）を表している。
【００２２】
図３に示すように波形データ群ＷＤ１は、音色毎に１つ以上の波形データを有する構成となっている。複数、波形データが存在する音色では、各波形データには対応する音域（音高域）が存在し、或る音高の楽音の波高値は、その音高が属する音域の波形データを用いて生成するようになっている。波形データは、定められたサンプリングレートで楽音をサンプリングすることにより得られた波高値をサンプリング順に並べた構成となっている。各波高値はそれぞれ１アドレスに格納されている。
【００２３】
音域別の波形データはそれぞれ、その音域に属する音高のうちの一つに該当する音高（以降「基準音高」と呼ぶ）の楽音をサンプリングしたものである。このため、基準音高に該当する音高の楽音は、順次、次のアドレスに格納された波高値を読み出していくことで発音させる。その基準音高に該当しない音高の楽音は、基準音高との音高差によって特定される速さ（歩進幅）で波高値を読み出していくことで発音させる。ジェネレータ１１２は、発音が指示された楽音の音高から、その波高値生成用の波形データを特定し、その特定後は、発音を終了させるタイミングとなるまで、その音高から特定した歩進幅で波高値を順次読み出し、その歩進幅に応じた波高値を生成する。サウンドシステム１０７には、そのように生成した波高値にエンベロープを付与する操作、例えば波高値にエンベロープ付加用の係数を乗算する操作を行ったものを出力する。そのような波高値を入力することにより、システム１０７はスピーカ１０８から楽音を放音させる。
【００２４】
ＣＰＵ１１１は、曲選択が行われると、つまり曲選択スイッチを対象とした曲選択操作をユーザーが行うと、その操作によって指定された曲の曲データ（以降、他と区別するために「指定曲データ」と呼ぶ）ＳＤをＲＡＭ１０１から読み出して参照し、音色データが示す音色、その音色で発音させる楽音の音高をそれぞれ確認し、それらの確認結果から特定される波形データを波形データ群ＷＤ１から抽出してＲＡＭ１０３に格納する。それにより、指定曲データＳＤに従った自動演奏を行ううえで必要な波形データのみからなる波形データ群ＷＤ２をＲＡＭ１０３上に用意する。楽音を発音させる音色に複数の波形データが存在していたとしても、そのなかで実際に用いるのみを抜粋する形でＲＡＭ１０３に格納する。そのようにＲＡＭ１０３に必要な波形データのみを用意するため、ＲＡＭ１０３に格納する波形データのデータ量はより抑えることができる。必要な波形データは全てＲＡＭ１０３に用意するため、自動演奏（その自動演奏中における楽音の発音）は適切に行うことができる。
【００２５】
音域別の波形データのサンプリング期間（基準となる楽音の発音時間）は、通常、楽譜に記譜される音符のなかで最も発音時間の長い種類の音符を想定したものとしている。その音符が示す発音時間は曲の拍子によって異なることから、そのサンプリング期間は曲の拍子を考慮して決定している。それにより波形データは、通常、考えられる長さの発音時間の発音が可能なものとしている。しかし、そのような波形データでは、そのサンプリング期間は自動演奏で実際に発音させる楽音の発音時間よりも短くなるのが普通である。このことから本実施の形態では、音色データが示す音色、その音色で発音させる楽音の音高をそれぞれ確認する他に、楽音の発音時間（音符長データ）を確認するようにしている。その発音時間を確認することにより、音色データが示す音色、及びその音色で発音させる楽音の音高によって特定される波形データは、その波形データを用いて発音させる楽音のなかで発音時間が最も長いものを発音できる部分のみ抽出してＲＡＭ１０３に格納するようにしている。それにより、自動演奏は適切に行えるようにしつつ、ＲＡＭ１０３に格納する波形データのデータ量をより抑えられるようにしている。
【００２６】
図４は、曲の選択によってＲＯＭ１０２からＲＡＭ１０３に転送される波形データを説明する図である。その図４は、選択された曲に対応する曲データＳＤによる自動演奏によってピアノ、ギター、及び電子的手法によって生成された音の各音色で楽音を発音させる場合のものである。電子的手法によって生成された音の音色は「シンセ音色」と表記している。
【００２７】
ピアノ音色では、波形Ａ〜Ｅの計５つの波形データが存在し、ギター音色では、波形Ａ〜Ｃの計３つの波形データが存在し、シンセ音色では一つの波形データのみが存在している。曲データＳＤを参照して音色、楽音の音高、及びその発音時間（音符長）を確認することにより、それらの波形データのなかで、ピアノ音色では波形Ａ、Ｅの一部、及び波形ＢのみがＲＡＭ１０３に転送されている。同様に、ギター音色では波形Ｃの一部のみ、シンセ音色では波形ＡがそれぞれＲＡＭ１０３に転送されている。そのように必要な波形データの必要な部分のみをＲＡＭ１０３に転送することにより、ＲＡＭ１０３に格納する波形データのデータ量を大幅に抑えられている。それにより、データ転送に要する負荷もより軽いものとなっている。
【００２８】
以降は図５〜図９に示す各種フローチャートを参照して、図４に示すようなデータ転送を実現させるＣＰＵ１１１の動作、及び発音させるべき楽音の波高値を生成するジェネレータ１１２の動作について詳細に説明する。ＣＰＵ１１１の動作は、そのＣＰＵ１１１がＲＯＭ１０２に格納されたプログラムを読み出して実行することで実現される。ジェネレータ１１２の動作は、その内部に搭載されたＲＯＭ、或いはＲＯＭ１０２に格納されたプログラムを実行することで実現される。
【００２９】
図５、及び図６は、全体処理のフローチャートである。始めに図５、及び図６を参照して、ＣＰＵ１１１の動作について詳細に説明する。その全体処理は、電源の投入後に実行される主な処理を抜粋してその流れを示したものである。ここでは、曲データＳＤを構成するデータとして、音色データ、及び音符データのみを想定している。
【００３０】
先ず、ステップ５０１では、電源の投入によりイニシャライズを行う。次のステップ５０２では、曲選択スイッチがオンされて曲選択操作が行われたか否か判定する。その曲選択操作をユーザーが行った場合、判定はＹＥＳとなってステップ５０３に移行し、そうでない場合には、判定はＮＯとなってステップ５０４に移行する。
【００３１】
ステップ５０３では、変数ＡＤに、ユーザーが曲選択操作によって選択した曲の曲データ（指定曲データ）ＳＤが格納されている開始（先頭）アドレスの値を代入する。続くステップ５０４では、スタートスイッチがオンしたか否か判定する。そのスイッチをユーザーが操作した場合、その旨がスイッチ部１０６からＣＰＵ１１１に通知されることから、判定はＹＥＳとなってステップ５０５に移行する。そうでない場合には、判定はＮＯとなって上記ステップ５０２に戻る。それにより、曲選択を行える状態を維持させる。
【００３２】
ステップ５０５では、それぞれが２次元の配列変数ＷＡＶＥ、ＬＥＮＧＴＨの各要素にそれぞれ０を代入する。次のステップ５０６では、指定曲データＳＤ中の変数ＡＤの値によって指定されるデータを読み出す。その次のステップ５０７では、読み出したデータが音色データか否か判定する。そのデータが音色データ（例えば音色番号）であった場合、判定はＹＥＳとなり、ステップ５０８で変数ＴＯＮＥに音色データを代入した後、ステップ５１０に移行する。そうでない場合には、つまり音符データであった場合には、判定はＮＯとなり、ステップ５０９でその音符データが示す楽音（音符）の内容を確認するための音符検査処理を実行した後、そのステップ５１０に移行する。
【００３３】
図７は、その音符検査処理のフローチャートである。ここで図７を参照して、その検査処理について詳細に説明する。
本実施の形態では、音色データが示す音色、その音色で発音させる楽音の音高、及び楽音の発音時間を確認するようにしている。確認した音色データは変数ＴＯＮＥに代入している。このことから、音符検査処理では、確認した音色で発音される楽音の音高、及び楽音の発音時間を、波形データの音域別に確認するための処理が行われる。上記配列変数ＷＡＶＥ、ＬＥＮＧＴＨはそれぞれ、楽音の音高、発音時間を音色、及び音域別に確認するために用意したものである。それにより、それらの確認結果により、配列変数ＷＡＶＥ、ＬＥＮＧＴＨの何れかの要素の値を必要に応じて更新するようになっている。
【００３４】
先ず、ステップ７０１では、変数ＮＯＴＥに、音符データ中の音高データを代入する。続くステップ７０２では、変数ＬＥＮＧに、音符データ中の音符長データを代入する。その次に移行するステップ７０３では、変数ＮＯＴＥに代入した音高データが示す音高の属する音域を特定し、その音域を示す値を変数ＲＡＮＧＥに代入する。ステップ７０４にはその後に移行する。音域の特定、及びその音域を示す値の特定は、例えばそれらの関係を定義したテーブルを参照して行う。
【００３５】
ステップ７０４では、配列変数ＷＡＶＥの変数ＴＯＮＥ、ＲＡＮＧＥの各値で指定される要素ＷＡＶＥ［ＴＯＮＥ］［ＲＡＮＧＥ］の値が０か否か判定する。その０の値は、変数ＴＯＮＥの値が示す音色で、且つ変数ＲＡＮＧＥの値が示す音域に属する音高の楽音の発音を指示する音符データが見つかっていないことを表している。１の値はそのような音符データが見つかっていることを表している。このことから、ステップ５０６で読み出した音符データがその楽音を示す初めてのものであった場合、判定はＹＥＳとなり、ステップ７０５で要素ＷＡＶＥ［ＴＯＮＥ］［ＲＡＮＧＥ］に１を代入した後、ステップ７０６に移行する。そうでない場合には、判定はＮＯとなり、そのステップ７０６に移行する。
【００３６】
ステップ７０６では、配列変数ＬＥＮＧＴＨの変数ＴＯＮＥ、ＲＡＮＧＥの各値で指定される要素ＬＥＮＧＴＨ［ＴＯＮＥ］［ＲＡＮＧＥ］の値が変数ＬＥＮＧの値より小さいか否か判定する。その関係が満たされている場合、判定はＹＥＳとなり、ステップ７０７で要素ＬＥＮＧＴＨ［ＴＯＮＥ］［ＲＡＮＧＥ］に変数ＬＥＮＧの値を代入した後、一連の処理を終了する。そうでない場合には、判定はＮＯとなり、ここで一連の処理を終了する。
【００３７】
上述したようなことから、要素ＬＥＮＧＴＨ［ＴＯＮＥ］［ＲＡＮＧＥ］には、変数ＴＯＮＥの値が示す音色で、且つ変数ＲＡＮＧＥの値が示す音域に属する音高の楽音の発音を指示するこれまでの音符データのなかで発音時間（音符長データが示す発音時間）が最大のものが代入される。それにより、配列変数ＬＥＮＧＴＨは、音色毎、及び音域毎に、楽音の最大発音時間の保持に用いている。
【００３８】
図５のステップ５１０以降の説明に戻る。
そのステップ５１０では、変数ＡＤの値をインクリメントし、指定曲データＳＤからデータを読み出す対象を次に進める。次のステップ５１１では、インクリメント後の変数ＡＤの値が最終アドレスの値より大きいか否か判定する。指定曲データＳＤから全てのデータを読み出して参照した場合、その関係が満たされることから、判定はＹＥＳとなり、ステップ５１２でＲＯＭ１０２から必要な波形データのみを読み出してＲＡＭ１０３に転送するための波形データ読み出し処理を実行した後、図６のステップ５１３に移行する。そうでない場合には、判定はＮＯとなって上記ステップ５０６に戻り、次のデータの読み出しを行う。
【００３９】
図８は、上記波形データ読み出し処理のフローチャートである。ここで図８を参照して、その読み出し処理について詳細に説明する。
上述したように、配列変数ＷＡＶＥの要素のなかで、確認された音色、その音色で発音させることが確認された楽音の音高が属する音域によって特定される要素には１が代入されている。その要素に対応する配列変数ＬＥＮＧＴＨの要素には、確認された楽音の発音時間のなかで最大のものが代入されている。このようなことから、ＲＯＭ１０２からの波形データの読み出しは、配列変数ＷＡＶＥの要素のなかで１が代入された要素に対応する波形データの最大の発音時間分のみを対象とする形で行われる。そのＲＯＭ１０２はフラッシュメモリを想定している。
【００４０】
先ず、ステップ８０１では、変数Ｎ、Ｍにそれぞれ０を代入する。続くステップ８０２では、要素ＷＡＶＥ［Ｎ］［Ｍ］の値が１か否か判定する。その値が１であった場合、つまり音色番号がＮで音域を示す値がＭの波形データが楽音の波高値生成に必要であった場合、判定はＹＥＳとなってステップ８０３に移行する。そうでない場合には、判定はＮＯとなってステップ８０８に移行する。
【００４１】
ステップ８０３では、その波形データを最初からＲＯＭ１０２に読み出させるためのコマンドを生成する。次のステップ８０４では、そのコマンドをＲＯＭ１０２に送付する。その送付後に移行するステップ８０５では、ＲＯＭ１０３からその波形データが読み出されるのを待つ。その読み出しが開始すると、ステップ８０５の判定がＹＥＳとなってステップ８０６に移行して、ＲＯＭ１０２から読み出された分の波形データをＲＯＭ１０３に転送してストアする。ステップ８０７にはその後に移行する。
【００４２】
ステップ８０７では、ＲＯＭ１０２から、要素ＬＥＮＧＴＨ［Ｎ］［Ｍ］の値分、波形データを読み出したか否か判定する。その値分の波形データをＲＡＭ１０３にストアした場合、判定はＹＥＳとなってステップ８０８に移行する。そうでない場合には、判定はＮＯとなってステップ８０５に戻り、ＲＯＭ１０２から次の波形データが読み出されるのを待つ。
【００４３】
ステップ８０８では、変数Ｍの値をインクリメントする。続くステップ８０９では、変数Ｍの値が配列変数ＷＡＶＥの要素を指定できる最大値より大きいか否か判定する。その値が最大値より大きい場合、判定はＹＥＳとなってステップ８１０に移行する。そうでない場合には、判定はＮＯとなって上記ステップ８０２に戻る。それにより、同じ音色番号Ｎで異なる音域の波形データが楽音の波高値生成に必要か否か確認する。
【００４４】
ステップ８１０では、変数Ｎの値をインクリメントし、変数Ｍに０を代入する。次のステップ８１１では、変数Ｎの値が配列変数ＷＡＶＥの要素を指定できる最大値より大きいか否か判定する。その値が最大値より大きい場合、判定はＹＥＳとなり、ここで一連の処理を終了する。そうでない場合には、判定はＮＯとなって上記ステップ８０２に戻る。それにより、楽音の波高値生成に必要な波形データの確認対象は別の音色のものに移行する。
【００４５】
このようにして、楽音の波高値生成に必要な波形データはその生成に必要な部分のみＲＯＭ１０２から読み出され、ＲＡＭ１０３に転送されてストアされる。それにより、図４に示すような波形データの転送が実現される。
【００４６】
図６のステップ５１３以降の説明に戻る。
上述の波形データ読み出し処理を図５のステップ５１２として実行することにより、指定曲データＳＤによる自動演奏を開始する準備が完了する。このことから、そのステップ５１０以降では、その指定曲データＳＤに従って自動演奏するための処理が行われる。
【００４７】
先ず、ステップ５１３では、変数ＡＤに、指定曲データＳＤの開始（先頭）アドレスの値を代入する。続くステップ５１４では、変数Ｔに所定値を代入する。その次に移行するステップ５１５では、タイマーをスタートさせる。そのタイマーは、例えばＣＰＵ１１１に内蔵のハードタイマーである。そのタイマーをスタートさせた後はステップ５１６に移行する。
【００４８】
音符長データが示す発音時間は、単位時間を基準にして、つまりその単位時間を表現可能な最小の時間として表したものである。ステップ５１６では、タイマーがその単位時間をカウントしたか否か判定する。ステップ５１５でタイマーをスタートさせてから、或いは前回その単位時間をカウントしたと判定してから、その単位時間が経過した場合、判定はＹＥＳとなり、ステップ５１７で変数Ｔの値をデクリメントした後、ステップ５１８に移行する。そうでない場合には、判定はＮＯとなってステップ５１９に移行する。
【００４９】
ステップ５１８では、変数Ｔの値が０か否か判定する。その値が０であった場合、判定はＹＥＳとなってステップ５２２に移行する。そうでない場合には、判定はＮＯとなってステップ５１９に移行する。
【００５０】
ステップ５１９では、ストップスイッチがオンされたか否か判定する。そのスイッチをユーザーが操作して自動演奏の終了を指示した場合、判定はＹＥＳとなり、ステップ８２０でジェネレータ（図中「音源」と表記）１１２に全ての楽音の消音を指示し、次のステップ８２１でタイマーを停止させた後、図５のステップ５０２に戻る。そうでない場合には、判定はＮＯとなって上記ステップ５１６に戻る。それにより、ユーザーが自動演奏の終了を指示しなければ、変数Ｔの値が０となるのを待つ。
【００５１】
ステップ５２２では、変数ＡＤの値で指定されるデータをＲＡＭ１０１から読み出す。次のステップ５２３では、読み出したデータの種類を判定する。そのデータが音色データであった場合、その旨が判定されてステップ５２７に移行する。そのデータが音符データであった場合には、その旨が判定されてステップ５２４に移行する。
【００５２】
ステップ５２４では、変数ＮＯＴＥに、読み出した音符データ中の音高データを代入する。次のステップ５２５では、変数Ｔに、その音符データ中の音符長データを代入する。その次に移行するステップ５２６では、ジェネレータ１１２に、変数ＮＯＴＥ、Ｔの各値を出力し、それらの値で指定される楽音の発音を指示する。その後はステップ５２８に移行する。
【００５３】
一方、ステップ５２７では、音色データで指定される音色への変更をジェネレータ１１２に指示する。その指示は、変更後の音色を示す音色番号を出力して行う。続くステップ５２８では、変数ＡＤの値をインクリメントして、指定曲データＳＤ中から読み出すデータを次に進める。その後に移行するステップ５２９では、インクリメント後の変数ＡＤの値が最終アドレスの値より大きいか否か判定する。指定曲データＳＤから全てのデータを読み出した場合、その関係が満たされることから、判定はＹＥＳとなり、上記ステップ５２０に移行する。そうでない場合には、判定はＮＯとなって上記ステップ５１６に戻る。それにより、自動演奏を継続させる。
【００５４】
ステップ５２２で読み出したデータが音色データであった場合、変数Ｔへの値の代入を行わない。このことから、特には図示していないが、直前に音色データを処理した場合には、ステップ５１６、５１８でＹＥＳと判定することにより、次のデータを直ちに処理するようにしている。そのようにして音色データの次に位置するデータは直ちに処理することから、音符長データのようなものは付さないようにしている。
【００５５】
図９は、ジェネレータ１１２が実行する音源処理のフローチャートである。その音源処理は、ＣＰＵ１１１の指示に従って、発音させるべき楽音の波高値を生成するためのものである。次に図９を参照して、その音源処理について詳細に説明する。
【００５６】
先ず、ステップ９０１では、全ての楽音の消音がＣＰＵ１１１から指示されたか否か判定する。上述したように、自動演奏を終了させる場合にその指示をＣＰＵ１１１は行う。このことから、その場合、判定はＹＥＳとなり、ステップ９０２で波高値の生成を終了させる停止処理を実行した後、一連の処理を終了する。そうでない場合には、判定はＮＯとなってステップ９０３に移行する。
【００５７】
ステップ９０３では、音色変更が指示されたか否か判定する。その指示をＣＰＵ１１１が行った場合、判定はＹＥＳとなり、その指示で指定された音色番号に対応する波形データ群をステップ９０４で波高値生成用に設定した後、ステップ９０８に移行する。そうでない場合には、判定はＮＯとなってステップ９０５に移行する。
【００５８】
ステップ９０５では、発音が指示されたか否か判定する。その指示をＣＰＵ１１１が行った場合、判定はＹＥＳとなってステップ９０６に移行する。そうでない場合には、判定はＮＯとなってそのステップ９０８に移行する。
【００５９】
ステップ９０６では、発音の指示でＣＰＵ１１１から入力した変数ＮＯＴＥの値に従って、設定中の波形データ群のなかで対象とすべき波形データを選択し、その値から歩進幅を決定する。ＣＰＵ１１１から入力した変数Ｔ、ＮＯＴＥの各値により、選択した波形データのなかで楽音のリリースを開始するまでの波高値の位置（アドレス）を特定する。そのようなことを行った後はステップ９０７に移行し、変数ＯＮＦに楽音を発音中であることを示す値の１を代入する。ステップ９０８にはその後に移行する。
【００６０】
ステップ９０８では、変数ＯＮＦの値が１か否か判定する。その値が１でない場合、つまり発音中の楽音が存在しないことを示す０であった場合、判定はＮＯとなって上記ステップ９０１に戻る。そうでない場合には、判定はＹＥＳとなってステップ９０９に移行し、発音中の楽音の全てでエンベロープを付与するための減衰レベルが０か否か判定する。その減衰レベルが０となっていない楽音が１つ以上、存在する場合、判定はＮＯとなってステップ９１１に移行する。そうでない場合には、判定はＹＥＳとなり、ステップ９１０で変数ＯＮＦに０を代入した後、上記ステップ９０１に戻る。
【００６１】
ステップ９１１では、発音中の楽音毎に、その波高値生成用の波形データから対応する波高値を読み出し、必要に応じて補間演算を行い、波形データから波高値を生成する。続くステップ９１２では、生成した波高値毎に、エンベロープを付与する操作を行う。その操作は、例えば減衰レベルを示す値を波高値に乗算することで行う。ステップ９１３では、そのような操作を行った後の波高値を加算してサウンドシステム１０７に出力する。上記ステップ９０１にはその後に戻る。
【００６２】
上記波形データからの波高値の読み出しは、ステップ９０６で決定した歩進幅に従って行う。そのステップ９０６で特定した波高値の位置まで読み出した場合、対応する楽音をリリースさせるためのエンベロープの付与を開始させる。そのようにして、ジェネレータ１１２は、音符データに従った楽音の発音を実現させる。
【００６３】
なお、本実施の形態では、自動演奏を想定してＲＯＭ１０２から必要な波形データをＲＡＭ１０３に転送するようにしているが、その転送はユーザーの演奏を想定して行うようにしても良い。つまり、演奏する曲の特定は、ユーザーが演奏する予定の曲を対象として行っても良い。転送する波形データはＲＯＭ１０２に格納されたものとしているが、その波形データはハードディスク装置、或いはＣＤ−ＲＯＭ等の記録媒体に格納されたものであっても良い。
【００６４】
上述したような波形データの転送を行う楽音発生装置は、ＣＰＵ１１１に実行させるプログラムをＲＯＭ１０２に格納することで実現させているが、そのようなプログラムは、ＣＤ−ＲＯＭ、ＤＶＤ、或いは着脱自在なフラッシュメモリ等の記録媒体に記録させて配布しても良い。公衆網等の通信ネットワークを介して、そのプログラムの一部、若しくは全部を配信するようにしても良い。そのようにした場合には、ユーザーはプログラムを取得して、楽音発生装置として用いることが可能なコンピュータにロードすることにより、そのコンピュータに本発明を適用させることができる。このことから、記録媒体は、プログラムを配信する装置がアクセスできるものであっても良い。
【図面の簡単な説明】
【００６５】
【図１】本実施の形態による楽音発生装置の構成を説明する図である。
【図２】曲データの構成を説明する図である。
【図３】ＲＯＭ１０２に格納された波形データ群ＷＤ１の構成を説明する図である。
【図４】曲の選択によってＲＯＭ１０２からＲＡＭ１０３に転送される波形データを説明する図である。
【図５】全体処理のフローチャートである。
【図６】全体処理のフローチャートである（続き）。
【図７】音符検査処理のフローチャートである。
【図８】波形データ読み出し処理のフローチャートである。
【図９】音源処理のフローチャートである。
【符号の説明】
【００６６】
１０１、１０３    ＲＡＭ
１０２    ＲＯＭ
１０４    音源ＬＳＩ
１０６    スイッチ部
１０７    サウンドシステム
１１１    ＣＰＵ
１１２    ジェネレータ
ＳＤ    曲データ
ＷＤ１、ＷＤ２    波形データ群
【図１】
0004438766.tif 000002
【図２】
0004438766.tif 000003
【図３】
0004438766.tif 000004
【図４】
0004438766.tif 000005
【図５】
0004438766.tif 000006
【図６】
0004438766.tif 000007
【図７】
0004438766.tif 000008
【図８】
0004438766.tif 000009
【図９】
0004438766.tif 000010