以下、本発明を実施するための形態(以下「本実施形態」と記載する)について図面を参照しながら詳細に説明する。電子楽器において演奏者が音色選択を行うときには、演奏のために予め決まっている音色を呼び出すケースと、ある音色カテゴリの中から最も演奏したい楽曲に適したものをひとつ選び出すようなケースに大別できる。後者の場合、例えば最も演奏したい楽曲に適したピアノ音色を選びだそうという場合、演奏者がはまずピアノ音色の音色カテゴリを選択し、その中で複数用意されているピアノ音色を次々選択しては聴き比べるという操作を行うことが多い。すなわち、ある番号の音色が指定されているときに、それに対して音色番号増加ボタン、または音色番号減少ボタンを連続的に押しながら、隣り合う番号の音色を次々に選択してゆく動作をする場合が多い。そこで、本実施形態では、ある番号の音色用の波形エリアに、その前後の番号の音色用の波形エリアを加えた、合計3個の波形エリア(波形エリア1、波形エリア2、波形エリア3)が用意される。そして、演奏者が音色番号増加ボタンまたは音色番号減少ボタンを操作するごとに、指定された番号およびその前後の波形データを3つの波形エリアに格納することで、隣り合った音色移動を瞬時にできるようにすることで、無音状態を最小限に留めることができる電子楽器を実現するものである。
図1は、本発明による電子鍵盤楽器の実施形態の外観図である。本実施形態は、電子鍵盤楽器100として実施される。電子鍵盤楽器100は、演奏操作子としての複数の鍵からなる鍵盤101と、音色選択を行うための音色選択ボタン102、波形選択操作子としての音色番号増加ボタン(以下「Incボタン」(「Increment:増加」の略))106aと音色番号減少ボタン(以下「Decボタン」(Decrement:減少 の略)と呼ぶ)106b、および音色以外の各種機能選択を行うレジストレーション選択ボタン103からなるスイッチ・パネルと、ピッチベンドやトレモロ、ビブラート等の各種モジュレーション(演奏効果)を付加するベンダ/モジュレーション・ホイール104、音色や音色以外の各種設定情報を表示するLCD(Liquid Crystal Display:液晶ディスプレイ)105等を備える。また、電子鍵盤楽器100は、特には図示しないが、演奏により生成された楽音を放音するスピーカを裏面部、側面部、または背面部等に備える。
音色選択ボタン102は、図1に示されるように、ピアノ(図中「Piano」)、エレクトリックピアノ(図中「E.piano」)、オルガン(図中「Organ」)、ギター/ベース(図中「Guitar/Bass」)、ウインド(図中「Wind」)、ストリング(図中「String」)、シンセ(図中「Synth」)、またはパーカッション(図中「Percussion」)等の各種音色のカテゴリを選択するためのカテゴリボタン群(図中「Category」)と、各カテゴリ内の音色番号を選択するための例えば1〜8の音色番号ボタン群(図中「Number」)を備える。すなわち、演奏者は、まずいずれかのカテゴリボタンを押下することにより音色のカテゴリを選択し、そののちにいずれかの音色番号ボタンを押下することにより選択したカテゴリ内の音色番号を指定する。また、Incボタン106aは、現在選択されているカテゴリ内で音色番号を+1ずつアップさせてゆくボタンである。Decボタン106bは、現在選択されているカテゴリ内で音色番号を+1ずつダウンさせてゆくボタンである。
レジストレーション選択ボタン103は、所望の音色番号を含めて各種演奏状態を8種類記憶したレジストレーションメモリから、所望のものをワンタッチで呼び出すためのボタンであり、音色も連動して切り替えることができる。
図2は、図1の電子鍵盤楽器100の実施形態のハードウェア構成例を示す図である。図2において、電子鍵盤楽器100は、CPU(中央演算処理装置)201、ROM(リードオンリーメモリ)202、RAM(ランダムアクセスメモリ)203、大容量フラッシュ(Flash)メモリ204、波形メモリ206が接続される音源LSI(大規模集積回路)205、図1の鍵盤101と図1の音色選択ボタン102、Incボタン106a、Decボタン106b、およびレジストレーション選択ボタン103からなるスイッチ・パネルとが接続されるキー・スキャナ207、図1のベンダ/モジュレーション・ホイール104が接続されるA/Dコンバータ208、図1のLCD105が接続されるLCDコントローラ209、16bit(ビット)フリーランニング・タイマカウンタ212、およびMIDI(Musical Instrument Digital Interface)入力を受け付けるMIDI I/F(インタフェース)213が、それぞれシステムバス214に接続される構成を備える。また、音源LSI205から出力されるデジタル楽音波形データは、D/Aコンバータ210によりアナログ楽音波形信号に変換され、アンプ211で増幅された後に、特には図示しないスピーカまたは出力端子から出力される。
CPU201は、RAM203をワークメモリとして使用しながらROM202に記憶された制御プログラムを実行することにより、図1の電子鍵盤楽器100の制御動作を実行する。また、ROM202は、上記制御プログラムおよび各種固定データを記憶する。
大容量フラッシュメモリ204は、波形データ等の大容量データの格納領域であり、シーケンシャルアクセスにより順次アクセスされる。一方、音源LSI205には、波形データを展開するRAMで構成される波形メモリ206が接続され、発音される楽音の波形データは必ず、この波形メモリ206上に配置されている必要がある。CPU201は、大容量フラッシュメモリ204から波形データをシーケンシャルに読みだし、それを音源LSI205経由で波形メモリ206に転送することで、音色データを入れ替えることができる。
音源LSI205は、波形メモリ206に転送された対象となる音色の記憶領域から、波形データを演奏で指定された鍵の音高に対応する速度で読み出し、その読み出した波形データに対して演奏で指定されたベロシティの振幅エンベロープを付加し、その結果得られる波形データを出力楽音波形データとして出力する。
LCDコントローラ209は、LCD105を制御するIC(集積回路)である。キー・スキャナ207は、鍵盤101や音色選択ボタン102、Incボタン106a、Decボタン106b、またはレジストレーション選択ボタン103等のスイッチ・パネルの状態を走査して、CPU201に通知するICである。A/Dコンバータ208は、ベンダ/モジュレーション・ホイール104の操作位置を検出するICである。16bitフリーランニング・タイマカウンタ212は、イベントの時刻検出のための計時を行う。
図3は、波形メモリ206と大容量フラッシュメモリ204(図中では「Flashメモリ」と表示)との音色の配置関係の例を示す図である。図3に示されるように、大容量フラッシュメモリ204には、図1の音色選択ボタン102内のカテゴリボタン群で指定される音色カテゴリごとに、図1の音色選択ボタン102内の音色番号ボタン群、あるいは図1のIncボタン106aまたはDecボタン106bで指定される音色番号ごとの波形データがシーケンシャルに記憶されている。図3の例では、大容量フラッシュメモリ204に、Piano音色カテゴリに対してPiano1波形、Piano2波形、・・・、Piano20波形の波形データが記憶され、E.Piano音色カテゴリに対してE.Piano1波形、E.Piano2波形、・・・、E.Piano20波形の波形データが記憶されている例が示されている。1つの音色カテゴリ内では最大で20音色の波形データが連続する記憶エリアに順次記憶されており、さらに16の音色カテゴリ分がシーケンシャルに記憶されている。従って、大容量フラッシュメモリ204には、合計で、20×16=320音色分の波形データが、連続する記憶エリアに順次記憶されている。一方、波形メモリ206には、波形エリア1、波形エリア2、および波形エリア3の、合計3個の波形エリアが用意される。そして、演奏者が図1のIncボタン106aまたはDecボタン106bを連続的に押しながら隣り合う番号の音色を次々に選択してゆく動作をしている場合において、現在例えば図3に示されるPiano4音色の波形データが選択されているときに、その波形データが大容量フラッシュメモリ204から波形メモリ206上の1つの波形エリア(図3の例では波形エリア2)に転送される動作に連続して、Incボタン106aまたはDecボタン106bによってPiano4音色の前後に選択され得るPiano3音色とPiano5音色の各波形データがそれぞれ、大容量フラッシュメモリ204から波形メモリ206上の他の2つの波形エリア(図3の例では波形エリア1と3)に、発音処理に並行したバックグラウンド処理によって転送される。これにより、演奏者がIncボタン106aまたはDecボタン106bによって次の音色を指定したときに、音源LSI205は、波形メモリ206上で波形エリアを瞬時に切り換えて、切り換えられた音色の波形データを出力楽音波形データとして出力することが可能となり、無音状態を最小限に留めることができる。
図4は、図2のROM202に記憶されている、大容量フラッシュメモリ204上の波形データを管理するためのフラッシュメモリ音色情報テーブルのデータ構成例を示す図である。図4に例示されるように、フラッシュメモリ音色情報テーブルの各音色ごとのエントリには、音色番号を示す「番号」項目値と、「音色名」項目値と、大容量フラッシュメモリ204の波形記憶領域の先頭からの記憶アドレスのオフセット(16進数)を示す「波形アドレスオフセット」項目値と、その音色に含まれる波形データ群の全体の波形サイズ(16進数)を示す「波形サイズ」項目値が記憶されている。
本実施形態では、CPU201は、演奏者が音色選択のために音色の比較操作を順次行っている状態を検知した場合に、演奏者は図1のIncボタン106aまたはDecボタン106bを連続的に操作しながら音色選択を行う可能性が高いと判断し、次の波形データとして、現在選択されている音色番号の波形データに続いて、その音色番号に対して±1の各音色番号の各波形データを優先的に、大容量フラッシュメモリ204から波形メモリ206に転送する。このような状態を第2のモード状態、すなわち「順次音色比較状態」と呼ぶ。
このため、本実施形態では、順次音色比較状態を検出する処理が必要となる。本実施形態において、現在の状態が順次音色比較状態にあるか否かは、Incボタン106aまたはDecボタン106bの操作の有無と音色切替えの頻度とに基づいて判定する。通常の演奏状態と比較したときに、順次音色比較状態では、演奏者は、Incボタン106aまたはDecボタン106bを操作し、かつ複数の音色を短時間の間にいくつも選択しては比較する事が多い。そこで、本実施形態では、CPU201は、演奏者が或る音色を選択したときに、Incボタン106aまたはDecボタン106bによって音色の選択操作が行われ、それに先行する過去2回の音色選択がやはりIncボタン106aまたはDecボタン106bによって行われかつ30秒以内に発生していたとしたら、通常演奏とは考えづらいため、現在の状態が順次音色比較状態であると判定する。
以上の順次音色比較状態の判定および鍵域の決定を行うために、本実施形態では、CPU201は、過去2回の音色切替え時に操作されたボタンの情報と発生時刻を、常に取得する。なお、本実施形態では、上述の時刻の測定と管理は、タイマカウンタを使って行われる。このカウンタは、1秒毎にインクリメントし続ける、図2に示される16bitフリーランニング・タイマカウンタ212である。イベントが発生した時には、この値を読み込んで時刻を記録しておき、このタイマの現在値と比較して経過時間を計算する。このタイマは、最大値を超えた場合0に戻るが、経過時刻は現在の16bitのタイマ値の符号なし減算によって算出されるため、問題ない。
次に、本実施形態における波形切替え時の処理について説明する。まず、CPU201は、音色比較選択操作が発生した場合、現在の状態が順次音色比較状態であるか否かを判定する。CPU201は、順次音色比較状態であると判定した場合は、現在指定されている音色番号と、その音色番号に対して+1した音色番号と−1した音色番号を算出する。なお、現在指定されている音色番号が、ある音色カテゴリ内の20番目の音色番号である場合には、その音色番号に対して+1した音色番号としては、その音色カテゴリの次の音色カテゴリの1番目の音色番号が算出される。あるいは、現在指定されている音色番号が、ある音色カテゴリ内の1番目の音色番号である場合には、その音色番号に対して−1した音色番号としては、その音色カテゴリの前の音色カテゴリの20番目の音色番号が算出される。なお、音色番号としては、16の音色カテゴリ内のそれぞれ20音色に対して通しで番号付けされた番号が使用される。その後、CPU201はまず、ROM202内のフラッシュメモリ音色情報テーブル(図4参照)上で、現在選択されている音色番号の値を「番号」項目値に有するのエントリの「波形アドレスオフセット」項目値および「波形サイズ」項目値とから、その音色の波形データの大容量フラッシュメモリ204上での記憶領域を特定し、その領域から現在選択されている音色番号に対応する波形データを読み出し、その波形データを音源LSI205を介して波形メモリ206上の1つの波形エリアに転送する。波形メモリ206の波形エリアとしては、現在指定されている音色番号またはその音色番号に対して+1した音色番号または−1した音色番号に等しい波形データが既に読み込み済みか読み込み途中である波形エリア以外のものが指定される。
必要な波形データが大容量フラッシュメモリ204から波形メモリ206に読み込まれるまでに演奏が発生した場合は発音は行うことはできないが、読み込みが完了した音色の波形データの押鍵が発生した時には発音処理を行うことができる。
また、演奏中でも、CPU201は、バックグラウンド処理により、現在選択されている音色番号に対して+1した音色番号および−1した音色番号に対して2番目および3番目の優先順位を付け、ROM202内のフラッシュメモリ音色情報テーブル(図4参照)上で、それらの音色番号の値を「番号」項目値に有するのエントリの「波形アドレスオフセット」項目値および「波形サイズ」項目値とから、それらの音色番号に対応する波形データの大容量フラッシュメモリ204上での各記憶領域を特定し、それらの記憶領域からそれらの音色番号に対応する各波形データを読み出し、それらの波形データを音源LSI205を介して波形メモリ206上の1つの波形エリアに転送する。これにより、演奏者がIncボタン106aまたはDecボタン106bを押したときに、CPU201は、新たに指定された音色番号の波形データを波形メモリ206上に短時間で揃えることができ、その後、音源LSI205は新たに指定された音色番号の波形データに基づく発音処理を即座に実行することが可能となる。
CPU201は、現在の状態が順次音色比較状態ではないと判定した場合はまず、現在選択されている音色番号の値を「番号」項目値に有するのエントリの「波形アドレスオフセット」項目値および「波形サイズ」項目値とから、その音色の波形データの大容量フラッシュメモリ204上での記憶領域を特定し、その領域から現在選択されている音色番号に対応する波形データを読み出し、その波形データを音源LSI205を介して波形メモリ206上の1つの波形エリアに転送する。
図5は、図2のCPU201が実行する制御処理において使用するRAM203上の変数の一覧を示す図である。各変数については、後述する制御処理の詳細説明において詳述する。
以下に、上述の動作を実現するためにCPU201が実行する制御処理の詳細例について説明する。
図6は、CPU201が実行する制御処理の全体処理の例を示すメインルーチンのフローチャートである。この処理例は、CPU201がROM202に記憶された制御プログラムを実行する処理例である。
CPU201は、まずRAM203の内容初期化した後(ステップS601)、ステップS602からS611の一連の処理で示される定常ループ処理に入る。
定常ループ処理では、CPU201はまず、ユーザインタフェース処理(図中「ユーザI/F」と表示)を実行する(ステップS602)。ここでは、CPU201は、図2のキー・スキャナ207を介して図1の音色選択ボタン102、Incボタン106a、およびDecボタン106bの状態を取得する。次に、CPU201は、ステップS602の処理の結果、演奏者が音色選択ボタン102、Incボタン106a、またはDecボタン106bを操作することにより音色選択イベントが発生したか否かを判定する(ステップS603)。そして、CPU201は、音色切り替えが発生した場合(ステップS603の判定がYesの場合)は、音色切替え処理を実行する(ステップS604)。
次に、CPU201は、鍵盤処理を実行する(ステップS605)。ここでは、CPU201は、図2のキー・スキャナ207を介して図1の鍵盤101の押鍵状態を取得する。次に、CPU201は、ステップS605の処理の結果、演奏者が鍵盤101上のいずれかの鍵を押鍵することにより押鍵イベントが発生したか否かを判定する(ステップS606)。そして、CPU201は、押鍵イベントが発生した場合(ステップS606の判定がYesの場合)は、音源発音処理を実行する(ステップS607)。
続いて、CPU201は、ステップS605の処理の結果、演奏者が鍵盤101上のいずれかの押鍵中の鍵を離鍵することにより離鍵イベントが発生したか否かを判定する(ステップS608)。そして、CPU201は、離鍵イベントが発生した場合(ステップS608の判定がYesの場合)は、音源リリース処理を実行する(ステップS609)。
その後、CPU201は、音源定常サービス処理を実行する(ステップS610)。ここでは、例えば図1のレジストレーション選択ボタン103が押された場合に対応する処理や、図1のベンダ/モジュレーション・ホイール104が操作された場合に対応する処理等の、電子鍵盤楽器100に対する一般的な処理が実行される。
最後に、CPU201は、波形読み込み処理を実行する(ステップS611)。
その後、CPU201は、ステップS602の定常ループ処理の先頭に戻る。
これ以降、本実施形態に関係するステップS601の初期化処理、ステップS604の音色切替え処理、およびステップS611の波形読み込み処理について、詳細に説明してゆく。
図7は、図6のステップS601の初期化処理の詳細例を示すフローチャートである。
まず、CPU201は、RAM203上の図5に示される「変数」の値を全て「0
にする(以上、ステップS701)。
ただし、音色選択履歴バッファ中の音色選択ボタン要素TS_HIS[i].BUTTON(i=0,1)、波形メモリステータス中の音色通し番号WM_ST[i].TONE(i=1,2)、読み込み予定波形の音色番号RT[i](i=0,1,2)、および現在読み込み中の波形の番号READING_WAVEの各変数(図5参照)については、無効であることを意味する値「−1」を格納し直しておく。すなわち、CPU201は、以下の一連の処理を実行する。
まず、CPU201は、ステップS702で変数iに初期値「0」を格納した後、ステップS705で変数iの値を+1ずつインクリメントしながら、ステップS704で変数iの値が1になったと判定されるまで、各繰り返しごとに、ステップS703を実行する。ステップS703では、CPU201は、変数iで指定される音色選択履歴バッファ中の音色選択ボタン要素TS_HIS[i].BUTTON(図5参照)に、無効値「−1」を格納する。この処理が、変数iの値として0および1が指定される2回について実行されることにより、過去2回分の音色選択履歴バッファ中の音色選択ボタン要素TS_HIS[i].BUTTON[0].TONEおよびTS_HIS[i].BUTTON[1].TONEに、それぞれ無効値「−1」が格納される。
次に、CPU201は、ステップS706で変数iに初期値「1」を格納した後、ステップS709で変数iの値を+1ずつインクリメントしながら、ステップS708で変数iの値が2になったと判定されるまで、各繰り返しごとに、ステップS707を実行する。ステップS707では、CPU201は、変数iで指定される波形メモリステータス中の音色通し番号WM_ST[i].TONE(図5参照)に、無効値「−1」を格納する。この処理が、変数iの値として1と2が指定される2回について実行されることにより、波形メモリステータス中の音色通し番号WM_ST[1].TONEおよびWM_ST[2].TONEに、それぞれ無効値「−1」が格納される。
続いて、CPU201は、ステップS710で変数iに初期値「0」を格納した後、ステップS714で変数iの値を+1ずつインクリメントしながら、ステップS713で変数iの値が2になったと判定されるまで、各繰り返しごとに、ステップS712を実行する。ステップS712では、CPU201は、変数iで指定される読み込み予定波形の音色番号RT[i](図5参照)に、無効値「−1」を格納する。この処理が、変数iの値として0と1と2が指定される3回について実行されることにより、読み込み予定波形の音色番号RT[0]、RT[1]、およびRT[2]に、それぞれ無効値「−1」が格納される。
最後に、CPU201は、現在読み込み中の波形の番号READING_WAVE(図5参照)の変数に、無効値「−1」を格納する(ステップS715)。その後、CPU201は、図7のフローチャートで例示される図6のステップS601の初期化処理を終了する。
図8は、図6のステップS604の音色切替え処理の詳細例を示すフローチャートである。ここで、RAM203上の変数CCに、演奏者が音色選択ボタン102内のカテゴリボタンを操作して選択した音色カテゴリ番号が設定され、同じく変数CTに、演奏者が音色選択ボタン102内の音色番号ボタンを操作して選択した音色番号(音色カテゴリ内で指定される音色番号)が設定され、同じく変数Tに現在の16bitフリーランニング・タイマカウンタ212のタイマ値が設定され、同じく変数Bに、演奏者がIncボタン106aもしくはDecボタン106bを操作した情報(Incボタン106aが操作された場合B=1、Decボタン106bが操作された場合B=0)が設定されているとする。
まず、CPU201は、順次音色比較状態判断サブルーチンを実行する(図8のステップS801)。この結果、RAM203上の変数sに順次音色比較状態の有無が設定される。この値が「1」のときは、現在の状態が、演奏者が多数の音色を次々に切り換えて試し演奏をしながら好みの音色を選ぶ順次音色比較状態にあることを示し、「0」のときは順次音色比較状態にはない(通常モード状態である)ことを示す。
続いて、CPU201は、ステップS801で得られた変数sの値が1であるか否か、すなわち現在の状態が順次音色比較状態であるか否かを判定する(ステップS802)。
現在の状態が順次音色比較状態でない場合(ステップS802の判定がNoの場合)、CPU201は第1のモード状態、すなわち通常状態用読み込み音色番号決定サブルーチンを実行する(ステップS803)。ここでは、演奏者が通常の音色番号の選択を行った場合に対応する処理が実行される。
一方、現在の状態が順次音色比較状態でない場合(ステップS802の判定がNoの場合)、CPU201は、順次音色比較状態用読み込み音色番号決定サブルーチンを実行する(ステップS804)。ここでは、演奏者が音色選択を行うためにIncボタン106aまたはDecボタン106bを連続的に押しながら隣り合う番号の音色を次々に選択してゆく動作を行った場合に対応する処理が実行される。
ステップS803またはS804の処理の後、CPU201は、読み込み音色番号設定サブルーチンを実行する(ステップS805)。ここでは、ステップS803またはS804で決定された音色番号に対応する波形データを、大容量フラッシュメモリ204から波形メモリ206にバックグラウンド転送させるための、波形読み込みの優先度の設定等の準備設定処理が実行される。
最後に、CPU201は、音色切り替え履歴処理サブルーチンを実行する(ステップS806)。ここでは、直近過去2回分の音色選択における操作ボタンと選択時刻の履歴が記録される。
図9は、図8のステップS801の順次音色比較状態判断サブルーチンの詳細処理例を示すフローチャートである。
CPU201はまず、演奏者がIncボタン106aまたはDecボタン106bのいずれかが操作されたか否か、すなわちRAM203上の変数Bの値が「0」または「1」のいずれかであるか否かを判定する(ステップS901)。演奏者が音色選択のために、図1のIncボタン106aを押した場合にはB=1が設定され、Decボタン106bを押した場合にはB=0が設定され、それら以外のボタン(図1の音色選択ボタン102)を押した場合には例えばB=−1が設定される。
ステップS901の判定がNoの場合には、CPU201は、変数sに値「0」を設定することにより、現在の状態が通常状態であること設定する(ステップS910)。その後、CPU201は、図9のフローチャートで例示される図8のステップS801の順次音色比較状態判断サブルーチンを終了する。
ステップS901の判定がYesの場合には、CPU201は、RAM203上の変数T_OLDに、RAM203上の変数である音色選択履歴バッファ書き込みポインタTS_WPによって指定される過去2回の音色選択のうち古いほうの音色選択時の時刻要素TS_HIS[TS_WP].TIMEの値を格納する(ステップS902)。なお、音色選択履歴バッファ書き込みポインタTS_WPの値は、後述する図14のステップS1402〜S1404の処理によって、過去2回の音色選択のうち直近の音色選択でないほう、すなわち古いほうの音色選択時をポイントしている。
次に、CPU201は、RAM203上の変数T_CURに、現在の16bitフリーランニング・タイマカウンタ212のタイマ値を格納する(ステップS903)。
そして、CPU201は、変数T_CURの値から変数T_OLDの値を減算して得られる過去2回の音色選択のうち古いほうの音色選択から今回の音色選択までの経過時間が31秒よりも短いか否かを判定する(ステップS904)。
ステップS904の判定がNoならば、CPU201は、変数sに値「0」を設定することにより、現在の状態が通常状態であることを設定する(ステップS910)。その後、CPU201は、図9のフローチャートで例示される図8のステップS801の順次音色比較状態判断サブルーチンを終了する。
一方、ステップS904の判定がYesならば、CPU201は、ステップS905でRAM203上の変数iに値「0」を設定した後、ステップS907で変数iの値を+1ずつインクリメントしながら、ステップS908で変数iの値が1を越えたと判定するまで、ステップS906の判定処理を実行する。CPU201は、ステップS906の各繰り返し実行で、変数iの各値によって指示される過去2回分の、RAM203上の変数である音色選択履歴バッファ中の音色選択操作ボタン要素TS_HIS[i].BUTTONの値が「0」または「1」のいずれかであるか否か、すなわち過去2回の演奏者による音色選択操作がIncボタン106aまたはDecボタン106bのいずれかの操作によって行われたか否かを判定する。
ステップS906の判定がNoならば、CPU201は、変数sに値「0」を設定することにより、現在の状態が通常状態であることを設定する(ステップS910)。その後、CPU201は、図9のフローチャートで例示される図8のステップS801の順次音色比較状態判断サブルーチンを終了する。
変数i=0および1の両方に対応するステップS906の判定がYesとなった後に、ステップS907で変数iの値が「2」となってステップS908の判定がYesになると、CPU201は、変数sに値「1」を設定することにより、現在の状態が、演奏者が多数の音色をIncボタン106aまたはDecボタン106bにより次々に切り換えて試し演奏をしながら好みの音色を選ぶ順次音色比較状態にあることを設定する(ステップS909)。その後、CPU201は、図9のフローチャートで例示される図8のステップS801の順次音色比較状態判断サブルーチンを終了する。
図10は、図8のステップS803の通常状態用読み込み音色番号決定サブルーチンの詳細処理例を示すフローチャートである。
CPU201はまず、以下の(1)式に示されるように、RAM203上の変数CCに格納されている現在指定されている音色カテゴリ番号CCと、同じく変数CTに格納されている現在指定されている音色カテゴリ内での音色番号CTとに基づいて、大容量フラッシュメモリ204上での通しの音色番号(図4の説明参照)を算出し、その算出結果を、RAM203上の変数である読み込み予定波形の音色番号の1番目の要素RT[0]に格納する(ステップS1001)。
RT[0]=CC×20+CT ・・・(1)
続いて、CPU201は、RAM203上の変数である読み込み予定波形の音色番号の2番目と3番目の各要素RT[1]とRT[2]に、それぞれ無効値「−1」を格納する(ステップS1002、S1003)。その後、CPU201は、図10のフローチャートで例示される図8のステップS803の通常状態用読み込み音色番号決定サブルーチンの処理を終了する。
以上の通常状態用読み込み音色番号決定サブルーチンの処理により、演奏者が通常の音色選択操作を行った場合には、読み込み予定の波形データとしては、演奏者が選択した音色番号(通し番号)に対応する波形データのみを大容量フラッシュメモリ204から波形メモリ206に転送する設定のみが行われる。
図11は、図8のステップS804の順次音色比較状態用読み込み音色番号決定サブルーチンの詳細処理例を示すフローチャートである。
CPU201はまず、RAM203上の変数Bの値が0であるか否か、すなわち演奏者がDecボタン106bを押したかIncボタン106aを押したかを判定する(ステップS1101)。
CPU201は、ステップS1101の判定がNo、すなわち演奏者がIncボタン106aを押したと判定した場合は、まずRAM203上の音色カテゴリ内の音色番号を指定する変数CTの値を+1インクリメントする(ステップS1102)。
次に、CPU201は、ステップS1103からS1105の一連の処理により、読み込み予定波形の音色番号の1番目の要素値RT[0]に、新たに現在指定された音色番号(通し番号)を設定する。すなわち、CPU201はまず、ステップS1102でインクリメントされた変数CTの値が1つの音色カテゴリ内で指定可能な音色番号の最大値「19」を越えた値「20」になったか否かを判定する(ステップS1103)。ステップS1103の判定がYesならば、CPU201は、音色カテゴリ番号を示す変数CCの値を+1インクリメントするとともに、音色番号を示す変数CTの値を変数CCが示す音色カテゴリ内の最初の音色番号を示す値「0」に設定する(ステップS1104)。この処理により、ある音色カテゴリ内の最後の音色番号が指定されている状態でIncボタン106aが押されると、次の音色カテゴリ内の最初の音色番号が指定されることになる。なお、最後(16番目)の音色カテゴリ内の最後の音色番号が指定されている状態でIncボタン106aが押された場合には、例えば、ステップS1104の処理が実行されないようにしてそれ以上音色番号が進まないように制御されてよい。ステップS1103の判定がNoならば、CPU201は、ステップS1104の処理をスキップすることにより、ステップS1102で現在の音色カテゴリ内で単純に音色番号が+1された状態が維持される。その後、CPU201は、図10のステップS1001の説明で前述した(1)式と同様の下記(2)式に基づいて、RAM203上の変数CCに格納されている音色カテゴリ番号CCと、同じく変数CTに格納されている音色カテゴリ内での音色番号CTとに基づいて、Incボタン106aの操作により新たに指定された音色番号(大容量フラッシュメモリ204上での通しの音色番号(図4の説明参照))を算出し、その算出結果を、RAM203上の変数である読み込み予定波形の音色番号の1番目の要素RT[0]に格納する(ステップS1105)。
RT[0]=CC×20+CT ・・・(2)
続いて、CPU201は、ステップS1106からS1109の一連の処理により、読み込み予定波形の音色番号の2番目の要素値RT[1]に、新たに現在指定された音色番号に+1した音色番号(通し番号)(以下これを「+1の音色番号」と呼ぶ)を設定する。すなわち、CPU201はまず、ステップS1102でインクリメントされた変数CTの値に+1した値をRAM203上の変数CT′に格納する(ステップS1106)。次に、CPU201は、変数CT′の値が1つの音色カテゴリ内で指定可能な音色番号の最大値「19」を越えた値「20」になったか否かを判定する(ステップS1107)。ステップS1107の判定がYesならば、CPU201は、音色カテゴリ番号を示す変数CCの値を+1インクリメントして得られる値をRAM203上の変数CC′に格納するとともに、+1の音色番号を示す変数CT′の値を変数CC′が示す音色カテゴリ内の最初の音色番号を示す値「0」に設定する(ステップS1108)。この処理により、Incボタン106aの操作により変数CTが或る音色カテゴリ内の最後の音色番号(=19)を指した場合に、+1の音色番号として次の音色カテゴリ内の最初の音色番号が指定されることになる。ステップS1107の判定がNoならば、CPU201は、ステップS1108の処理をスキップして、ステップS1106の変数CT′の計算結果を維持する。その後、CPU201は、下記(3)式に基づいて、RAM203上の変数CC′に格納されている音色カテゴリ番号CC′と、同じく変数CT′に格納されている音色カテゴリ内での音色番号CT′とに基づいて、Incボタン106aの操作により新たに指定された音色番号を+1した音色番号を算出し、その算出結果を、RAM203上の変数である読み込み予定波形の音色番号の2番目の要素RT[1]に格納する(ステップS1109)。
RT[1]=CC′×20+CT′ ・・・(3)
なお、Incボタン106aの操作により変数CTが最後(16番目)の音色カテゴリ内の最後の音色番号(=19)を指した場合には例えば、RT[1]=−1(無効値)として、+1の音色番号が指定されないように制御されてよい。
続いて、CPU201は、ステップS1110からS1113の一連の処理により、読み込み予定波形の音色番号の3番目の要素値RT[2]に、新たに現在指定された音色番号を−1した音色番号(通し番号)(以下これを「−1の音色番号」と呼ぶ)を設定する。すなわち、CPU201はまず、ステップS1102でインクリメントされた変数CTの値を−1した値をRAM203上の変数CT′に格納する(ステップS1110)。次に、CPU201は、変数CT′の値が1つの音色カテゴリ内で指定可能な音色番号の最小値「0」を下回ったマイナス値になったか否かを判定する(ステップS1111)。ステップS1111の判定がYesならば、CPU201は、音色カテゴリ番号を示す変数CCの値を−1デクリメントして得られる値をRAM203上の変数CC′に格納するとともに、−1の音色番号を示す変数CT′の値を変数CC′が示す音色カテゴリ内の最後の音色番号を示す値「19」に設定する(ステップS1112)。この処理により、Incボタン106aの操作により変数CTが或る音色カテゴリ内の最初の音色番号(=0)を指した場合に、−1の音色番号として1つ前の音色カテゴリ内の最後の音色番号が指定されることになる。ステップS1111の判定がNoならば、CPU201は、ステップS1112の処理をスキップして、ステップS1110の変数CT′の計算結果を維持する。その後、CPU201は、下記(4)式に基づいて、RAM203上の変数CC′に格納されている音色カテゴリ番号CC′と、同じく変数CT′に格納されている音色カテゴリ内での音色番号CT′とに基づいて、Incボタン106aの操作により新たに指定された音色番号を−1した音色番号を算出し、その算出結果を、RAM203上の変数である読み込み予定波形の音色番号の3番目の要素RT[2]に格納する(ステップS1113)。
RT[2]=CC′×20+CT′ ・・・(4)
その後、CPU201は、図11のフローチャートで例示される図8のステップS804の順次音色比較状態用読み込み音色番号決定サブルーチンの処理を終了する。
一方、CPU201は、ステップS1101の判定がYes、すなわち演奏者がDecボタン106bを押したと判定した場合は、まずRAM203上の音色カテゴリ内の音色番号を指定する変数CTの値を−1デクリメントする(ステップS1114)。
次に、CPU201は、ステップS1115からS1117の一連の処理により、読み込み予定波形の音色番号の1番目の要素値RT[0]に、新たに現在指定された音色番号(通し番号)を設定する。すなわち、CPU201はまず、ステップS1114でデクリメントされた変数CTの値が1つの音色カテゴリ内で指定可能な音色番号の最小値「0」を下回ったマイナス値になったか否かを判定する(ステップS1115)。ステップS1115の判定がYesならば、CPU201は、音色カテゴリ番号を示す変数CCの値を−1デクリメントするとともに、音色番号を示す変数CTの値を変数CCが示す音色カテゴリ内の最後の音色番号を示す値「19」に設定する(ステップS1116)。この処理により、ある音色カテゴリ内の最初の音色番号が指定されている状態でDecボタン106bが押されると、1つ前の音色カテゴリ内の最後の音色番号が指定されることになる。なお、最初(1番目)の音色カテゴリ内の最初の音色番号が指定されている状態でDecボタン106bが押された場合には、例えば、ステップS1116の処理が実行されないようにしてそれ以上音色番号が戻らないように制御されてよい。ステップS1115の判定がNoならば、CPU201は、ステップS1116の処理をスキップすることにより、ステップS1114で現在の音色カテゴリ内で単純に音色番号が−1された状態が維持される。その後、CPU201は、ステップS1115の場合と同様の(2)式に基づいて、RAM203上の変数CCに格納されている音色カテゴリ番号CCと、同じく変数CTに格納されている音色カテゴリ内での音色番号CTとに基づいて、Decボタン106bの操作により新たに指定された音色番号を算出し、その算出結果を、RAM203上の変数である読み込み予定波形の音色番号の1番目の要素RT[0]に格納する(ステップS1117)。
続いて、CPU201は、ステップS1118からS1121の一連の処理により、読み込み予定波形の音色番号の2番目の要素値RT[1]に、新たに現在指定された音色番号を−1した音色番号(−1の音色番号)を設定する。すなわち、CPU201はまず、ステップS1114でデクリメントされた変数CTの値を−1した値をRAM203上の変数CT′に格納する(ステップS1118)。次に、CPU201は、変数CT′の値が1つの音色カテゴリ内で指定可能な音色番号の最小値「0」を下回ったマイナス値になったか否かを判定する(ステップS1119)。ステップS1119の判定がYesならば、CPU201は、音色カテゴリ番号を示す変数CCの値を−1デクリメントして得られる値をRAM203上の変数CC′に格納するとともに、−1の音色番号を示す変数CT′の値を変数CC′が示す音色カテゴリ内の最後の音色番号を示す値「19」に設定する(ステップS1120)。この処理により、Decボタン106bの操作により変数CTが或る音色カテゴリ内の最初の音色番号(=0)を指した場合に、−1の音色番号として1つ前の音色カテゴリ内の最後の音色番号が指定されることになる。ステップS1119の判定がNoならば、CPU201は、ステップS1120の処理をスキップして、ステップS1118の変数CT′の計算結果を維持する。その後、CPU201は、ステップS1109の場合と同様の(3)式に基づいて、RAM203上の変数CC′に格納されている音色カテゴリ番号CC′と、同じく変数CT′に格納されている音色カテゴリ内での音色番号CT′とに基づいて、Decボタン106bの操作により新たに指定された音色番号を−1した音色番号を算出し、その算出結果を、RAM203上の変数である読み込み予定波形の音色番号の2番目の要素RT[1]に格納する(ステップS1121)。
なお、Decボタン106bの操作により変数CTが最初(1番目)の音色カテゴリ内の最初の音色番号(=0)を指した場合には例えば、RT[1]=−1(無効値)として、−1の音色番号が指定されないように制御されてよい。
続いて、CPU201は、ステップS1122からS1125の一連の処理により、読み込み予定波形の音色番号の3番目の要素値RT[2]に、新たに現在指定された音色番号を+1した音色番号(+1の音色番号)を設定する。すなわち、CPU201はまず、ステップS1114でデクリメントされた変数CTの値を+1した値をRAM203上の変数CT′に格納する(ステップS1122)。次に、CPU201は、変数CT′の値が1つの音色カテゴリ内で指定可能な音色番号の最大値「19」を越えた値「20」になったか否かを判定する(ステップS1123)。ステップS1123の判定がYesならば、CPU201は、音色カテゴリ番号を示す変数CCの値を+1インクリメントして得られる値をRAM203上の変数CC′に格納するとともに、+1の音色番号を示す変数CT′の値を変数CC′が示す音色カテゴリ内の最初の音色番号を示す値「0」に設定する(ステップS1124)。この処理により、Decボタン106bの操作により変数CTが或る音色カテゴリ内の最後の音色番号(=19)を指した場合に、+1の音色番号として次の音色カテゴリ内の最初の音色番号が指定されることになる。ステップS1123の判定がNoならば、CPU201は、ステップS1124の処理をスキップして、ステップS1122の変数CT′の計算結果を維持する。その後、CPU201は、ステップS1113の場合と同様の(4)式に基づいて、RAM203上の変数CC′に格納されている音色カテゴリ番号CC′と、同じく変数CT′に格納されている音色カテゴリ内での音色番号CT′とに基づいて、Decボタン106bの操作により新たに指定された音色番号を+1した音色番号を算出し、その算出結果を、RAM203上の変数である読み込み予定波形の音色番号の3番目の要素RT[2]に格納する(ステップS1125)。
その後、CPU201は、図11のフローチャートで例示される図8のステップS804の順次音色比較状態用読み込み音色番号決定サブルーチンの処理を終了する。
以上のようにして、演奏者がIncボタン106aを押した場合には、読み込み予定波形の音色番号の1番目の要素RT[0]と2番目の要素RT[1]と3番目の要素RT[2]に、新たにインクリメントされた現在の音色番号と、+1した音色番号と、−1した音色番号が、それぞれ格納される。また、演奏者がDecボタン106bを押した場合には、読み込み予定波形の音色番号の1番目の要素RT[0]と2番目の要素RT[1]と3番目の要素RT[2]に、新たにデクリメントされた現在の音色番号と、−1した音色番号と、+1した音色番号が、それぞれ格納される。ここで、読み込み予定波形の音色番号の要素の番号(0、1、2)は、それぞれの要素に格納された音色番号の波形データが大容量フラッシュメモリ204から波形メモリ206上の3つの波形エリア(図3参照)に転送される優先順位を示している。すなわち、演奏者がIncボタン106aを押した場合には、1番目の要素RT[0]に格納された新たにインクリメントされた現在の音色番号の波形データが最初に転送され、2番目の要素RT[1]に格納された+1した音色番号の波形データが次に転送され、3番目の要素RT[2]に格納された−1した音色番号の波形データが最後に転送されるように制御される。これは、演奏者は、音色選択時には、Incボタン106aを1回押した場合には次にも再びIncボタン106aを押す傾向があるため、まず現在の音色番号の波形データを最初に転送し、次に+1した音色番号の波形データを転送し、Decボタン106bの操作により−1される音色番号の波形データの転送の優先順位は最下位にするのが、効率的であるからである。逆に、演奏者がDecボタン106bを押した場合には、1番目の要素RT[0]に格納された新たにデクリメントされた現在の音色番号の波形データが最初に転送され、2番目の要素RT[1]に格納された−1した音色番号の波形データが次に転送され、3番目の要素RT[2]に格納された+1した音色番号の波形データが最後に転送されるように制御される。これは、演奏者は、音色選択時には、Decボタン106bを1回押した場合には次にも再びDecボタン106bを押す傾向があるため、まず現在の音色番号の波形データを最初に転送し、次に−1した音色番号の波形データを転送し、Incボタン106aの操作により+1される音色番号の波形データの転送の優先順位は最下位にするのが、効率的であるからである。
図12および図13は、図8のステップS805の読み込み音色番号設定サブルーチンの詳細処理例を示すフローチャートである。ここでは、図8のステップS803の通常状態用読み込み音色番号決定サブルーチンでRAM203上の読み込み予定波形の音色番号の要素値RT[0]に得られた音色番号に対応する波形データの転送を、波形メモリ206上の3つの波形エリアのうちの空いている1つに割り振る処理(要素値RT[1]とRT[2]には無効値「−1」が設定されている)、あるいは、図8のステップS804の順次音色比較状態用読み込み音色番号決定サブルーチンでRAM203上の読み込み予定波形の音色番号の3つの要素値RT[0]、RT[1]、およびRT[2]に得られた3つの音色番号に対応する各波形データの優先順位を付けた転送を、波形メモリ206上の3つの波形エリアに割り振る処理が実行される。
まず、CPU201は、ステップS1201からS1213までの一連の処理において、演奏者の音色選択操作によってRAM203上の読み込み予定波形の音色番号の要素値RT[0]、RT[1]、およびRT[2]として得られた1つ(図8のステップS803の場合)または3つ(図8のステップS804の場合)の音色番号のそれぞれに対応する波形データが、波形メモリ206上の3つの波形エリア(図3参照)上に存在するか、または現在読み込み中であるか否かをチェックする。3つの波形エリアの状態は、RAM203上の構造体変数である波形メモリステータスWM_ST[0]、WM_ST[1]、WM_ST[2]に格納されている。そこで、CPU201は、ステップS1201で3つの波形エリアのそれぞれを指定するためのRAM203上の変数wに「0」を格納した後、ステップS1212で変数wの値を+1ずつインクリメントしながら、ステップS1213で変数wの値が「3」に達したと判定されるまで、ステップS1202からS1211までの一連の処理を3回繰り返し実行することにより、各波形エリアwに対応する波形メモリステータスWM_ST[w]を、読み込み予定波形の音色番号の3つの要素値RT[r](r=0、1、2)のそれぞれと比較する。この場合、CPU201は、上記各繰り返しにおいて、ステップS1202で読み込み予定波形の音色番号を指定するためのRAM203上の変数rに「0」を格納した後、ステップS1210で変数rの値を+1ずつインクリメントしながら、ステップS1211で変数rの値が「3」に達したと判定されるまで、ステップS1203からS1209までの一連の処理を3回繰り返し実行することにより、波形メモリステータスWM_ST[w]と読み込み予定波形の音色番号の各要素値RT[r]との比較を行う。
上記2重の繰り返し処理において、CPU201はまず、読み込み予定波形の音色番号の要素値RT[r]の値が無効値「−1」であるか否かを判定する(ステップS1203)。
ステップS1203の判定がYesならば、CPU201は、制御をステップS1210の処理に移行させて、次の変数rの値に対応する読み込み予定波形の次の音色番号に対応する処理に移行する。
ステップS1203の判定がNoならば、CPU201は次に、変数wが示す波形エリアの通しの音色番号(図4の説明および図5を参照)を示す波形メモリステータス中の音色通し番号WM_ST[w].TONEが、読み込み予定波形の音色番号の要素値RT[r]の値に一致するか否かを判定する(ステップS1204)。
ステップS1204の判定がNoならば、CPU201は、制御をステップS1210の処理に移行させて、次の変数rの値に対応する読み込み予定波形の次の音色番号に対応する処理に移行する。
ステップS1204の判定がYesならば、CPU201は続いて、波形メモリ206上の変数wが示す波形エリアでの波形データの有無を示す要素値WM_ST[w].WAVE(図5参照)が「有り」を示す値「1」であるか否かを判定する(ステップS1205)。
ステップS1205の判定がYesならば、CPU201は、制御をステップS1207に進める。
ステップS1205の判定がNoならば、CPU201は、現在読み込み中の波形の番号を示すRAM203上の変数READING_WAVE(図5参照)の値が、読み込み予定波形の音色番号の要素値RT[r]の値に一致するか否かを判定する(ステップS1206)。
ステップS1206の判定がNoならば、CPU201は、制御をステップS1210の処理に移行させて、次の変数rの値に対応する読み込み予定波形の次の音色番号に対応する処理に移行する。
ステップS1206の判定がYesならば、変数rに対応する読み込み予定波形の音色番号の要素値RT[r]が、波形メモリステータスWM_ST[w]に対応する変数wが示す波形エリアに対応付けられて処理中である。従って、これ以後、要素値RT[r]については他の波形メモリステータスWM_ST[w]とのチェックは不要となるため、CPU201は、現在の変数rに対応する読み込み予定波形の音色番号の要素値RT[r]に無効値「−1」を格納する(ステップS1207)。
続いて、CPU201は、現在の変数wに対応する波形エリアの大容量フラッシュメモリ204から波形メモリ206への転送(読み込み)の優先順位を示す波形メモリステータスの要素値WM_ST[w].PRI(図5参照)に、新たにそれに対応付けられた読み込み予定波形の音色番号の要素値RT[r]の優先順位を示す変数rの値(図11の最後の説明参照)を設定し直す(ステップS1208)。
そして、CPU201は、現在の変数wに対応する波形エリアへの新たな書き込みを行わせないために、波形メモリステータスの書き換え保護フラグWM_ST[w].PROTECT(図5参照)に保護を示す値「1」を格納する(ステップS1209)。
以上の処理が、変数rの全ての値0、1、2および変数wの全ての値0、1、2について繰り返し実行されることにより、3つの波形エリア(波形メモリステータス)のそれぞれごとに、当該波形エリアの音色番号が読み込み予定波形の音色番号の3つの要素値RT[0]、RT[1]、またはRT[2]に新たに設定された音色番号のいずれかと一致し、かつその音色番号に対応する波形データが当該波形エリアに既に読み込み済みであるか、または読み込み中である場合には、その波形エリア(波形メモリステータス)が保護されることになる。逆に言えば、読み込み予定波形の音色番号の3つの要素値RT[0]、RT[1]、またはRT[2]に新たに設定された音色番号に対応する波形データが、まだどの波形エリアにも読み込み済みでなくかつ読み込み中でもない場合には、保護されていない波形エリアにその波形データを新たに読み込む設定をすることができる。その処理を実行するのが、図13のステップS1214からS1222までの一連の処理である。
CPU201は、ステップS1214で読み込み予定波形の音色番号を指定するための変数rに「0」を格納した後、ステップS1221で変数rの値を+1ずつインクリメントしながら、ステップS1222で変数rの値が「3」に達したと判定されるまで、ステップS1215で無効値「−1」が設定されている読み込み予定波形の音色番号の要素値RT[r]についてはその判定がYesとなることにより処理対象からはずしながら、ステップS1216からS1220までの一連の処理を3回繰り返し実行する。この制御により、まだ波形エリアへの割り当てが行われていない読み込み予定波形の音色番号の要素値RT[r]について、その割り当てが行われる。ステップS1216からS1220までの一連の処理において、CPU201は、ステップS1216で3つの波形エリアのそれぞれを指定するためのRAM203上の変数wに「0」を格納した後、ステップS1219で変数wの値を+1ずつインクリメントしながら、ステップS1220で変数wの値が「3」に達したと判定されるまで、ステップS1217で波形メモリステータスの書き換え保護フラグWM_ST[w].PROTECT(図5参照)の値が「0」である(保護されていない)ものを探しながら、ステップS1218で、波形エリアへの割り当てが行われていない読み込み予定波形の音色番号の要素値RT[r]を、空いている波形エリアに対応する波形メモリステータスWM_ST[w]へ登録する。
すなわち、CPU201は、ステップS1218において、波形メモリステータス中の音色通し番号WM_ST[w].TONEに、読み込み予定波形の音色番号の要素値RT[r]を格納する。また、CPU201は、波形メモリステータスの波形読み込み優先順位WM_ST[w].PRI(図5参照)に、読み込み予定波形の音色番号の要素値RT[r]の優先順位を示す変数rの値(図11の最後の説明参照)を設定する。さらに、CPU201は、波形メモリステータスの波形データの有無を示す要素値WM_ST[w].WAVE(図5参照)にまだ波形データが転送されていないので「無し」を示す値「0」を設定する。また、CPU201は、波形メモリステータスの読み込み音色の波形データのフラッシュメモリ上での格納先頭アドレスWM_ST[w].FLASH_ADRS(図5参照)に、ROM202内の図4に例示されるフラッシュメモリ音色情報テーブルにおける、「番号」項目値が読み込み予定波形の音色番号の要素値RT[r]に等しいエントリの「波形アドレスオフセット」項目値(音色波形先頭アドレス)を設定する。加えて、CPU201は、波形メモリステータスの波形サイズ要素値WM_ST[w].WAVE_SIZEに、ROM202内の図4に例示されるフラッシュメモリ音色情報テーブルにおける、「番号」項目値が読み込み予定波形の音色番号の要素値RT[r]に等しいエントリの「波形サイズ」項目値を設定する。そして、CPU201は、波形メモリステータスの転送済みのデータサイズを示す要素値WM_ST[w].READ_SIZEを値「0」に初期設定する。
以上の処理が、変数rの全ての値0、1、2および変数wの全ての値0、1、2について繰り返し実行されることにより、波形エリアへの割り当てが行われていない読み込み予定波形の音色番号の要素値RT[r]が、空いている波形エリアに対応する波形メモリステータスWM_ST[w]へ登録される。
ステップS1222の判定がYesとなった後、CPU201は、ステップS1223で3つの波形エリアのそれぞれを指定するためのRAM203上の変数wに「0」を格納した後、ステップS1225で変数wの値を+1ずつインクリメントしながら、ステップS1226で変数wの値が「3」に達したと判定されるまで、ステップS1224の処理を実行する。CPU201は、ステップS1224において、各波形エリアに対応する波形メモリステータスの書き換え保護フラグWM_ST[w].PROTECT(図5参照)値を「0」にリセットする。その後、CPU201は、図12および図13のフローチャートで例示される図8のステップS805の読み込み音色番号設定サブルーチンを終了する。
図14は、図8のステップS809の音色切り替え履歴処理サブルーチンの詳細処理例を示すフローチャートである。
CPU201は、RAM203上の変数である音色選択履歴バッファ書き込みポインタTS_WP(図5参照)によって指定される音色選択履歴バッファの音色選択操作ボタン要素TS_HIS[TS_WP].BUTTON(図5参照)および音色選択時の時刻要素TS_HIS[TS_WP].TIME(図5参照)に、変数B、Tにそれぞれ格納されている現在の音色番号および現在時刻を格納する(ステップS1401)。
ここで、CPU201は、図8のステップS809の音色切り替え履歴処理サブルーチンが実行されるごとに、ステップS1402で音色選択履歴バッファ書き込みポインタTS_WPの値を+1ずつインクリメントしながら、ステップS1403で音色選択履歴バッファ書き込みポインタTS_WPの値が「1」になったか否かを判定している。そして、CPU201は、ステップS1403の判定がYesになると、ステップS1404で音色選択履歴バッファ書き込みポインタTS_WPの値を「0」に戻す。これにより、音色選択履歴バッファ書き込みポインタTS_WPの値が「0」と「1」の間でサイクリックに変化し、直近2つ分の音色選択履歴が、音色選択履歴バッファTS_HIS[0]とTS_HIS[1]にサイクリックに得られることになる。
図15および図16は、図6のステップS611の波形読み込み処理の詳細例を示すフローチャートである。演奏による発音処理を止めないようにするために、図6に例示したメインループにおいて、ステップS611で波形読み込み処理だけに処理を集中させず、他の処理も並行に処理するために、ステップS611で波形読み込み処理の1回の実行においては、一定の容量のメモリ転送が完了した時点で処理を中断し、他のメインループの処理を行って再び波形転送プログラムが起動された時に処理を再開する仕組みになっている。
CPU201はまず、ステップS1501において、各種初期設定を行う。具体的には、CPU201は、RAM203上の変数である、今回読み込みサイズカウンタc、波形メモリ上のアドレスカウンタwp、最高プライオリティ波形番号h、および波形番号カウンタwに、それぞれ初期値「0」を設定する。また、CPU201は、RAM203上の変数であるプライオリティカウンタpに、最低優先度(プライオリティ)の値「3」を初期値として格納する。
上記初期設定の後、CPU201は、RAM203上の変数である現在読み込み中の波形の番号READING_WAVEの値が無効値「−1」であるか否か、すなわち、現在波形データの読み込みが行われていないか否かを判定する(ステップS1502)。
現在波形データの読み込みが行われていない(ステップS1502の判定がYesである)場合には、CPU201は、(ステップS1501で初期値「0」に初期化されている)波形番号カウンタwの値をステップS1508で+1ずつインクリメントしながら、ステップS1509で2に達したと判定されるまで、ステップS1504からS1507の一連の処理を繰り返し実行する。この一連の処理の繰り返しにより、CPU201は、波形番号カウンタwが示す波形メモリステータスの要素値WM_ST[w].PRIに書き込まれている波形読み込みの優先順位を順次調べ、波形転送が必要かつ、完了していないものの中で最も優先順位の高い波形データを選定する。
ステップS1504からS1507の一連の処理において、CPU201はまず、波形番号カウンタwが示す波形メモリ206上の波形エリアでの波形データの有無を示すRAM203上の波形メモリステータスの要素値WM_ST[w].WAVEの値が「1」であるか否か、すなわち、波形番号カウンタwが示す波形メモリ206上の波形エリアへの波形データの転送が完了しているか否かを判定する(ステップS1504)。
波形番号カウンタwが示す波形メモリ206上の波形エリアへの波形データの転送が完了している(ステップS1504の判定がYes)ならば、その波形データはさらに転送の必要はないため、CPU201は、ステップS1508の処理に移行して、次の波形番号に対する処理に進む。
波形番号カウンタwが示す波形メモリ206上の波形エリアへの波形データの転送が完了していない(ステップS1504の判定がNo)ならば、CPU201は、波形番号カウンタwが指し示す波形メモリステータスの波形サイズ要素値WM_ST[w].WAVE_SIZEが「0」であるか否かを判定する(ステップS1505)。図4に例示されるフラッシュメモリ音色情報テーブル上で、波形番号カウンタwに対応する「波形番号」項目値に対して、波形データが登録されていない場合には、「波形サイズ」項目値が「0」になっている。そして、図13のステップS1218の説明で前述したように、波形データが登録されていない波形番号のデータについては、波形サイズ要素値WM_ST[w].WAVE_SIZEに、音声波形サイズとして「0」がセットされる。
このため、WM_ST[w].WAVE_SIZEが「0」(ステップS1505の判定がYes)ならば、波形番号カウンタwに対応する波形データは存在しないため、CPU201は、ステップS1508の処理に移行して、次の波形番号に対する処理に進む。
WM_ST[w].WAVE_SIZEが「0」でない(ステップS1505の判定がNO)ならば、CPU201は、波形番号カウンタwが指し示す波形メモリステータスの要素値WM_ST[w].PRIに書き込まれている波形読み込みの優先順位が、プライオリティカウンタpの値よりも小さいか否か(優先順位が高いか否か)を判定する(ステップS1506)。
WM_ST[w].PRIの優先順位がプライオリティカウンタpの値よりも小さい(ステップS1506の判定がYesである)場合には、CPU201は、カウンタ変数hに波形番号カウンタwの値を格納して記憶させ、また、プライオリティカウンタpの優先順位をWM_ST[w].PRIの優先順位で書き換える(ステップS1507)。
WM_ST[w].PRIの優先順位がプライオリティカウンタpの値よりも小さくはない(ステップS1506の判定がNoである)場合には、CPU201は、ステップS1507の書き換えは行わない。
初期状態では、プライオリティカウンタpには、最低の優先順位「3」が設定されている(ステップS1501参照)。これを初期値として、上述のステップS1504からS1507の一連の処理が繰り返し実行される結果、最終的にカウンタ変数hには、波形転送が必要かつ完了していないものの中で最も優先順位の高い波形データの「波形番号」が得られることになる。例えば、演奏者が音色番号を通常状態で指定した場合、w=0,1,2のうちいずれか一つのw値に対応するWM_ST[w]に対してのみ有効なデータが設定されている。従って、この場合には、カウンタ変数hには、演奏者が選択し波形転送が完了していない音色番号に対応する波形データの「波形番号」が1つだけ得られることになる。一方、演奏者306が順次音色比較状態で指定した場合、w=0,1,2のそれぞれに対応する各WM_ST[w]には、演奏者が選択した音色番号と、その音色番号を+1および−1した2つの音色番号が設定されている。従って、この場合には、カウンタ変数hには、演奏者が選択し波形転送が完了していない音色番号に対応する波形データの「波形番号」がまず得られる。
上記繰り返し処理の結果、ステップS1509の判定がYesになると、CPU201は、カウンタ変数hに得られた優先順位の最も高い波形番号をRAM203上の変数である現在読み込み中の波形番号READING_WAVEに格納し、また、波形番号カウンタwが示す波形メモリステータスの、転送済みのデータサイズを示す要素値WM_ST[w].READ_SIZEを値「0」(まだ転送が開始されていない状態)に初期設定する(ステップS1510)。
その後、CPU201は、図16のステップS1511以降の処理に移行し、カウンタ変数hに得られた波形番号の波形データを大容量フラッシュメモリ204から波形メモリ206へ転送する処理を開始する。
前述したステップS1502の判定において、現在波形データの読み込みが行われている(ステップS1502の判定がNoである)と判定された場合には、CPU201は、カウンタ変数hに、RAM203上の変数である現在読み込み中の波形番号READING_WAVEの値を格納した後、図16のステップS1511以降の処理に移行し、カウンタ変数hに得られた波形番号の残りの波形データを大容量フラッシュメモリ204から波形メモリ206へ転送する処理を実行する。
上記転送処理において、CPU201はまず、大容量フラッシュメモリ204において、それぞれカウンタ変数hに対応する波形メモリステータスの要素値であるWM_ST[h].FLASH_ADRSとWM_ST[h].READ_SIZEとを加算して得られるアドレスから、1ワード分の波形データを読み込み、RAM203上の変数dに代入する(ステップS1511)。ここで、要素値WM_ST[h].FLASH_ADRSには、前述した図12のステップS1218で、変数hが示す波形番号に対応する波形メモリ206上の波形エリアに転送されるべき波形データの、大容量フラッシュメモリ204上での先頭アドレスが格納されている。また、要素値WM_ST[h].READ_SIZEには、現在までに転送済みのデータサイズが格納されている。従って、「WM_ST[h].FLASH_ADRS+WM_ST[h].READ_SIZE」は、次に読み出されるべき大容量フラッシュメモリ204上のアドレスとなる。
次に、CPU201は、波形メモリ206において、カウンタ変数hに対応する波形番号の波形エリアの波形メモリ206上での先頭アドレスとカウンタ変数hに対応する波形メモリステータスの要素値であるWM_ST[h].READ_SIZEとを加算して得られるアドレスに、変数dに格納されている1ワード分の波形データを、音源LSI205経由で書き込む(ステップS1512)。
その後、CPU201は、カウンタ変数hが示す波形番号に対応する波形メモリステータスの転送済みのデータサイズを示す要素値WM_ST[h].READ_SIZEの値を+1インクリメントし、また、RAM203上の変数である(ステップS1501で値「0」に初期化されている)今回読み込みサイズカウンタcの値を+1インクリメントする(ステップS1513)。
そして、CPU201は、カウンタ変数hが示す波形番号に対応する波形メモリステータスの転送済みのデータサイズを示す要素値WM_ST[h].READ_SIZEの値が、カウンタ変数hが示す波形番号に対応する波形メモリステータスの波形サイズ要素値WM_ST[w].WAVE_SIZEに等しくなったか否かを判定する(ステップS1514)。波形サイズ要素値WM_ST[w].WAVE_SIZEには、図6のステップS604の音色切替え処理内の図8のステップS805の読み込み音色番号設定サブルーチン内の図13のステップS1218において、現在の音色に対応するROM202内のフラッシュメモリ音色情報テーブルから、図4に示される「波形サイズ」項目値がセットされている。
ステップS1514の判定がNoならば、CPU201は、今回読み込みサイズカウンタcの値が102400バイトに等しくなったか否か、すなわち、今回転送されたサイズが100KB(キロバイト)に達したか否かを判定する(ステップS1515)。
ステップS1515の判定がNoならば、CPU201は、ステップS1511の処理に戻って転送を続行する。
ステップS1515の判定がYesになったならば、CPU201は、図15および図16のフローチャートで例示される図6のステップS611の波形読み込み処理を終了する。このように、本実施形態では、一定の容量(例えば100KB)のメモリ転送が完了した時点で処理が中断され、他のメインループの処理を行って再び波形転送プログラムが起動された時に図15のステップS1502→S1503を介して、処理が再開される。このとき、カウンタ変数hが示す波形メモリステータスの、転送済みのデータサイズを示す要素値WM_ST[w].READ_SIZEには、図16のステップS1513の処理によって前回までに転送が完了したサイズが格納されているため、図16のステップS1511およびS1512のアドレス演算処理によって、前回転送が完了したアドレスの次のアドレスから転送を再開することができる。
転送済みのデータサイズを示す要素値WM_ST[h].READ_SIZEの値が波形サイズ要素値WM_ST[w].WAVE_SIZEに等しくなった場合(ステップS1514の判定がYesになった場合)、CPU201は、カウンタ変数hが示す波形メモリステータス中の波形メモリ206上での波形の有無を示す要素値WM_ST[w].WAVE(図5参照)に、変数hが示す波形番号に対応する波形データが波形メモリ206の波形エリアに存在することを示す値「1」を設定する(ステップS1516)。その後、CPU201は、図15および図16のフローチャートで例示される図6のステップS611の波形読み込み処理を終了する。
上述の一連の処理により優先順位の最も高い波形データの転送が完了すると、次のタイミング以降図6のステップS611の波形読み込み処理が実行されるときに、ステップS1502→S1504〜S1510によって、優先順位が2番目に高い波形データの転送の設定が行われて転送が実行され、さらに続いて優先順位が最も低い波形データの転送の設定が行われて転送が実行される。具体的には、演奏者306がIncボタン106aを操作したときには、演奏者306が選択した優先順位の最も高い音色番号に対応する波形データの転送に続いて、優先順位が2番目に高いその音色番号を+1した音色番号に対応する波形データの転送が実行され、最後に優先順位が最も低いその音色番号を−1した音色番号に対応する波形データの転送が実行される。逆に、演奏者306がDecボタン106bを操作しているときには、演奏者306が選択した優先順位の最も高い音色番号に対応する波形データの転送に続いて、優先順位が2番目に高いその音色番号を−1した音色番号に対応する波形データの転送が実行され、最後に優先順位が最も低いその音色番号を+1した音色番号に対応する波形データの転送が実行される(以上、図11の最後の説明と図12のステップS1208の説明を参照)。
以上のようにして、波形メモリ206上の波形エリアへの波形データの転送が完了した後、演奏者が鍵盤101を演奏する操作に対応して、CPU201は、図6のステップS607の音源発音処理で、音源LSI205に対して波形エリアの波形データの読み出しによる楽音発音処理を指示することができる。すなわち、CPU201は、押鍵イベントが発生した場合(図6のステップS606の判定がYesの場合)、演奏者によって現在選択されている音色番号と同じ値が要素値TONE(図5参照)に設定されている波形メモリステータスWM_ST[w]を抽出する。次に、CPU201は、その波形メモリステータスの要素値WM_ST[w].WAVE(図5参照)の値が「1」であるか否か、すなわち、変数wが示す波形番号に対応する波形メモリ206上の波形エリアに波形データの転送が完了しているか否かを判定する。この転送完了の判定がYesならば、CPU201は、変数wが示す波形番号に対応する波形メモリ206上の波形エリアに対する発音処理を、音源LSI205に対して指示する。上記転送完了の判定がNoならば、CPU201は、音源LSI205に対する発音処理の指示はスキップする。
以上説明した実施形態により、複数波形の転送を伴う音色の順次切り替えの際に、波形メモリに所望の波形が存在しないために発音できないという無音時間を大幅に短縮することが可能となる。これにより、演奏者のストレスを軽減、あるいは全く感じさせないレベルに抑制することができる。例えば、1つの音色に必要な波形のうち、10パーセントの容量を持つ1つの波形データが揃っただけで演奏可能となるケースでは、予想が外れない限りは、無音状態が10分の1まで短縮ができることになる。予想が外れても押鍵されたものから読み込みを行うので、全部読み込むよりは遥かに短い無音時間で済むという効果が得られる。
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
一次記憶装置と、
複数種の波形データを記憶する二次記憶装置と、
外部より波形選択信号が供給される毎に、第1のモード及び第2のモードのいずれかを判別する判別処理と、前記第1のモードであると判別された場合に、前記波形選択信号により選択される波形データを前記二次記憶装置から読み出し、前記二次記憶装置から読み出された波形データを前記一次記憶装置に記憶させる通常読み込み処理と、前記第2のモードであると判別された場合に、前記波形選択信号により選択される波形データと、当該波形データと関連する他の波形データとを前記二次記憶装置から読み出し、前記二次記憶装置から読み出された波形データを前記一次記憶装置に記憶させる音色設定読み込み処理と、を実行する処理部と、
を備えた波形読み込み装置。
(付記2)
前記一次記憶装置は、ランダムアクセスメモリを備え、前記二次記憶装置は、前記一次記憶装置より容量の大きいフラッシュメモリを備えた付記1記載の波形読み込み装置。
(付記3)
前記波形読み込み装置はさらに、波形選択信号を供給する波形選択操作子を有し、
前記処理部はさらに、前記二次記憶装置に記憶されている複数の波形データの中から、前記波形選択操作子により供給される波形選択信号に対応する波形データを選択する波形選択処理を実行する、付記1または2に記載の波形読み込み装置。
(付記4)
前記複数種の波形データ夫々は、前記二次記憶装置内の連続したエリアに順次記憶され、
前記処理部において、前記音色設定読み込み処理は、前記波形選択処理により選択された波形データ、及び当該波形データが記憶されているエリアに隣接するエリアに記憶されている波形データを読み出す、付記3に記載の波形読み込み装置。
(付記5)
前記波形選択操作子は操作される毎に、前記二次記憶装置内の連続したエリアに記憶されている順に波形データを選択させる波形選択信号を供給する、付記4に記載の波形読み込み装置。
(付記6)
前記処理部はさらに、前記波形選択情報が供給される毎に、当該波形選択情報が供給されるタイミングを波形選択履歴バッファに順次記憶する波形選択履歴記憶処理を実行し、
前記判別処理は、前記波形選択情報が供給される毎に、当該波形選択情報が供給されるタイミングと前記波形選択履歴バッファに記憶されているタイミングとの差が予め定められた値を超えている場合は第1のモードと判別し、前記予め定められた値を超えていない場合は第2のモードと判別する、付記1に記載の波形読み込み装置。
(付記7)
一次記憶装置と、複数種の波形データが記憶された二次記憶装置と、を備えた波形読み込み装置に用いられる波形読み込み方法であって、前記波形読み込み装置が、
外部より波形選択信号が供給される毎に、第1のモード及び第2のモードのいずれかを判別し、
前記第1のモードであると判別された場合に、前記波形選択信号により選択される波形データを前記二次記憶装置から読み出し、前記二次記憶装置から読み出された波形データを前記一次記憶装置に記憶させ、
前記第2のモードであると判別された場合に、前記波形選択信号により選択される波形データと、当該波形データと関連する他の波形データとを前記二次記憶装置から読み出し、前記二次記憶装置から読み出された波形データを前記一次記憶装置に記憶させる、波形読み込み方法。
(付記8)
一次記憶装置と、複数種の波形データが記憶された二次記憶装置と、を備えた波形読み込み装置として用いられるコンピュータに、
外部より波形選択信号が供給される毎に、第1のモード及び第2のモードのいずれかを判別するステップ、
前記第1のモードであると判別された場合に、前記波形選択信号より選択される波形データを前記二次記憶装置から読み出し、前記二次記憶装置から読み出された波形データを前記一次記憶装置に記憶させるステップと、
前記第2のモードであると判別された場合に、前記波形選択信号により選択される波形データと、当該波形データと関連する他の波形データとを前記二次記憶装置から読み出し、前記二次記憶装置から読み出された波形データを前記一次記憶装置に記憶させるステップと、
を実行させるプログラム。
(付記9)
付記1に記載の波形読み込み装置と、
発音すべき楽音の音高を指定する演奏操作子と、
前記波形選択信号により選択される波形データを、前記演奏操作子により指定された音高に基づいて前記一次記憶装置から読み出すことにより、楽音を生成する音源と、
を備えた電子楽器。
(付記10)
一次記憶装置と、
複数種の波形データが記憶された二次記憶装置と、
外部より波形選択信号が供給される毎に、第1のモード及び第2のモードのいずれかを判別する判別部と、
前記第1のモードであると判別された場合に、前記波形選択信号により選択される波形データを前記二次記憶装置から読み出し、前記二次記憶装置から読み出された波形データを前記一次記憶装置に記憶させる通常読み込み部と、
前記第2のモードであると判別された場合に、前記波形選択信号により選択される波形データと、当該波形データと関連する他の波形データとを前記二次記憶装置から読み出し、前記二次記憶装置から読み出された波形データを前記一次記憶装置に記憶させる音色設定読み込み部と、
を備えた波形読み込み装置。