以下、本発明を実施するための形態(以下「本実施形態」と記載する)について図面を参照しながら詳細に説明する。
図1は、本発明による電子鍵盤楽器の実施形態の外観図である。本実施形態は、電子鍵盤楽器100として実施される。電子鍵盤楽器100は、演奏操作子としての複数の鍵からなる鍵盤101と、波形選択操作子としての音色選択を行うための音色選択ボタン102、および音色以外の各種機能選択を行う機能選択ボタン103からなるからなるスイッチ・パネルと、ピッチベンドやトレモロ、ビブラート等の各種モジュレーション(演奏効果)を付加するベンダ/モジュレーション・ホイール104、音色や音色以外の各種設定情報を表示するLCD(Liquid Crystal Display:液晶ディスプレイ)105等を備える。また、電子鍵盤楽器100は、特には図示しないが、演奏により生成された楽音を放音するスピーカを裏面部、側面部、または背面部等に備える。
音色選択ボタン102は、図1に示されるように、ピアノ(図中「Piano」)、ギター(図中「Guitar」)、オルガン(図中「Organ」)、ストリング(図中「String」)、サキソフォン(図中「Sax」)、トランペット(図中「Trumpet」)、シンセサイザー(図中「Synth」)等の各種音色を選択するための波形選択操作子としてのボタンである。各音色選択ボタン102には、後述する機能を有するLED(Light−Emitting Diode:発光ダイオード)106が内蔵されている。
図2は、図1の電子鍵盤楽器100の実施形態のハードウェア構成例を示す図である。図2において、電子鍵盤楽器100は、CPU(中央演算処理装置)201、ROM(リードオンリーメモリ)202、RAM(ランダムアクセスメモリ)203、大容量フラッシュ(Flash)メモリ204、波形メモリ206が接続される音源LSI(大規模集積回路)205、図1の鍵盤105と図1の音色選択ボタン102、および機能選択ボタン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コンバータ208によりアナログ楽音波形信号に変換され、アンプ211で増幅された後に、特には図示しないスピーカまたは出力端子から出力される。
CPU201は、RAM203をワークメモリとして使用しながらROM202に記憶された制御プログラムを実行することにより、図1の電子鍵盤楽器100の制御動作を実行する。また、ROM202は、上記制御プログラムおよび各種固定データを記憶する。
大容量フラッシュメモリ204は、波形データ等の大容量データの格納領域であり、シーケンシャルアクセスにより順次アクセスされる。一方、音源LSI205には、波形データを展開するRAMで構成される波形メモリ206が接続され、発音される楽音の波形データは必ず、この波形メモリ206上に配置されている必要がある。CPU201は、大容量フラッシュメモリ204から波形データをシーケンシャルに読みだし、それを音源LSI205経由で波形メモリ206に転送することで、音色データを入れ替えることができる。
音源LSI205は、波形メモリ206に転送された対象となる音色の記憶領域から、波形データを演奏で指定された鍵の音高に対応する速度で読み出し、その読み出した波形データに対して演奏で指定されたベロシティの振幅エンベロープを付加し、その結果得られる波形データを出力楽音波形データとして出力する。
LCDコントローラ209は、LCD105を制御するIC(集積回路)である。キー・スキャナ207は、鍵盤105や音色選択ボタン102、または機能選択ボタン103等のスイッチ・パネルの状態を走査して、CPU201に通知するICである。A/Dコンバータ208は、ベンダ/モジュレーション・ホイール104の操作位置を検出するICである。16bitフリーランニング・タイマカウンタ212は、イベントの時刻検出のための計時を行う。
図3は、波形メモリ206における記憶領域の例を示す図である。図3に示されるように、波形メモリ206は、2音色の波形データを記憶可能な波形メモリエリアA(図中「AREA A」と波形メモリエリアB(図中「AREA B」)を備える。
一方、特には図示しないが、大容量フラッシュメモリ204には、図1の音色選択ボタン102で指定される音色ごとの波形データがシーケンシャルに記憶されている。本実施例の電子楽器100は例えば、16種類の音色を持ち、その波形データが、大容量フラッシュメモリ204に格納されている。図4は、図2のROM202に記憶されている、大容量フラッシュメモリ204上の波形データを管理するためのフラッシュメモリ音色情報テーブルのデータ構成例を示す図である。図4に例示されるように、フラッシュメモリ音色情報テーブルの各音色ごとのエントリには、音色番号を示す「番号」項目値と、「音色名」項目値と、その音色の波形データの大容量フラッシュメモリ204の波形記憶領域の先頭からの記憶アドレスのオフセット(16進数)を示す「波形アドレスオフセット」項目値と、その音色の波形データの波形サイズ(16進数)を示す「波形サイズ」項目値が記憶されている。
以上の構成を有する本実施形態の電子楽器100の概略動作について、以下に説明する。この電子楽器100では、演奏者が、音色に対応する音色選択ボタン102を選択することで所望の音色が選択されるが、この音色選択動作においては後述するように、波形メモリ206上の波形メモリエリア(図3参照)への波形データの書き込みと、演奏波形の切り替え、という2段階の操作が存在する。このとき、波形メモリ206上の図3に示される波形メモリエリアAとBは、それぞれ演奏用および準備用として交互に使われる。
演奏者がまず、LED106(図1参照)が消灯している所望の音色の音色選択ボタン102を一度押下すると、その音色の波形データを、大容量フラッシュメモリ204から、波形メモリ206内の波形メモリエリアAまたはBのうち準備用に設定されている波形メモリエリアへ、書き込む動作が開始される。いま例えば、波形メモリエリアAに格納されている波形データが演奏用に設定されてその波形データを用いて発音動作が行われているときは、波形メモリエリアBが準備用として設定される。逆に、波形メモリエリアBに格納されている波形データが演奏用に設定されてその波形データを用いて発音動作が行われているときは、波形メモリエリアAが準備用として設定される。この状態で演奏者が上述のように音色選択ボタン102を押下すると、それに対応する波形データが、大容量フラッシュメモリ204から波形メモリ206上の準備用として設定されている例えば波形メモリエリアBに、演奏制御動作に対するバックグラウンド動作として書き込まれる。この時点では現在演奏中のノートの音色には何の影響も与えられず、演奏者は、演奏用として設定されている例えば波形メモリエリアAの波形データを用いて、演奏を行うことができる。
上記書き込み動作中は、演奏者が操作した音色選択ボタン102のLED106が黄色く点灯する。この書き込みが完了すると、その音色選択ボタン102のLED106は緑色の点灯に変化する。
演奏者が押下した音色選択ボタン102に対応する音色の波形データが、準備用として設定されている波形メモリエリアに既に格納されている場合には、上記音色選択ボタン102が操作されても波形書き込み動作は実行されず、その音色選択ボタン102のLED106は緑色の点灯を維持する。
一方、演奏用として設定されている例えば波形メモリエリアAに格納されている波形データの音色に対応する音色選択ボタン102は、赤く点灯する。
次に、上述の準備用として設定されている例えば波形メモリエリアBへのバックグラウンド動作による書き込み処理が完了して、対応する音色選択ボタン102のLED106が緑色に点灯した後、演奏者が、同じ音色選択ボタン102をもう一度押下する。すると、準備用として設定されていた例えば波形メモリエリアBが演奏用に切り替えられ、波形メモリエリアBに格納が完了している波形データの音色で演奏が可能となる。このとき、対応する音色選択ボタン102のLED106は、赤色の点灯に変化する。一方、いままで演奏用として設定されていた例えば波形メモリエリアAは準備用に切り替えられ、対応する音色選択ボタン102のLED106は消灯する。
上述の2度目の音色選択ボタン102の押下時に、それまでの音色で演奏中の発音がある場合は、直ぐに新しい設定に変化せずに全ての鍵が離鍵されるまで準備用と演奏用の切り替えが行われないペンディング状態になる。この時、上記音色選択ボタン102のLED106は、橙色に点灯する。また、もし全て離鍵した後に押鍵が行われた場合でも、準備用の例えば波形メモリエリアBへの大容量フラッシュメモリ204からの波形データの書き込みが完了していない場合は、発音することが出来ないので、押鍵は無視される。
また、1回めの音色選択ボタン102の押下の後に、別の音色の音色選択ボタン102が押下された場合には、最初に押下された音色選択ボタン102に対応する音色の波形データの準備用の例えば波形メモリエリアBへの書き込みはキャンセルされ、新たに押下された音色選択ボタン102に対応する音色の波形データの準備用の例えば波形メモリエリアBへの書き込みが開始される。このとき、最初の音色選択ボタン102のLED106での黄色の点灯は消灯され、新たな音色選択ボタン102のLED106が黄色に点灯される。
以上が本実施例の動作の概要であるが、音色選択ボタン102のLED106の色の意味をまとめると、下記のようになる。
*消灯・・・開放(未使用)状態
*黄色・・・その音色の波形データを準備用の波形メモリエリアに書き込み中
*緑色・・・その音色の波形データを準備用の波形メモリエリアに書き込み完了
*橙色・・・その音色の波形データが全離鍵後に演奏用に選択されるペンディング状態
*赤色・・・その音色の波形データが演奏用に選択されて発音可能な状態
図5は、図2のCPU201が実行する制御処理において使用するRAM203上の変数の一覧を示す図である。各変数については、後述する制御処理の詳細説明において詳述する。
以下に、上述の動作を実現するためにCPU201が実行する制御処理の詳細例について説明する。
図6は、CPU201が実行する制御処理の全体処理の例を示すメインルーチンのフローチャートである。この処理例は、CPU201がROM202に記憶された制御プログラムを実行する処理例である。
CPU201は、まずRAM203の内容初期化した後(ステップS601)、ステップS602からS611の一連の処理で示される定常ループ処理に入る。
定常ループ処理では、CPU201はまず、鍵盤処理を実行する(ステップS602)。ここでは、CPU201は、図2のキー・スキャナ207を介して図1の鍵盤105における押鍵状態を取得する。次に、CPU201は、ステップS602の処理の結果、演奏者が鍵盤105上のいずれかの鍵を押鍵することにより押鍵イベントが発生したか否かを判定する(ステップS603)。そして、CPU201は、押鍵イベントが発生した場合(ステップS603の判定がYesの場合)は、音源LSI205の発音処理である押鍵処理を実行する(ステップS604)。
続いて、CPU201は、ステップS602の処理の結果、演奏者が鍵盤105上のいずれかの押鍵中の鍵を離鍵することにより離鍵イベントが発生したか否かを判定する(ステップS605)。そして、CPU201は、離鍵イベントが発生した場合(ステップS605の判定がYesの場合)は、音源LSI205での消音処理である離鍵処理を実行する(ステップS606)。
次に、CPU201は、演奏者インタフェース処理(図中「演奏者I/F」と表示)を実行する(ステップS607)。ここでは、CPU201は、図2のキー・スキャナ207を介して図1の音色選択ボタン102の状態を取得する。次に、CPU201は、ステップS607の処理の結果、演奏者が音色選択ボタン102を操作することにより音色選択イベントが発生したか否かを判定する(ステップS608)。そして、CPU201は、音色切り替えが発生した場合(ステップS608の判定がYesの場合)は、音色切替え処理を実行する(ステップS609)。
その後、CPU201は、音源定常サービス処理を実行する(ステップS610)。ここでは、例えば図1の機能選択ボタン103が押された場合に対応する処理や、図1のベンダ/モジュレーション・ホイール104が操作された場合に対応する処理等の、電子鍵盤楽器100に対する一般的な処理が実行される。
最後に、CPU201は、波形書き込み処理を実行する(ステップS611)。
その後、CPU201は、ステップS602の定常ループ処理の先頭に戻る。
これ以降、本実施形態に関係するステップS601の初期化処理、ステップS609の音色切替え処理、ステップS604の押鍵処理、ステップS606の離鍵処理、およびステップS611の波形書き込み処理について、詳細に説明してゆく。
図7は、図6のステップS601の初期化処理の詳細例を示すフローチャートである。
CPU201は、RAM203上のワーク領域である図5に示される「変数」の値を全て「0にする(以上、ステップS701)。その後、CPU201は、図7のフローチャートで示される図6のステップS601の初期化処理を終了する。
図8は、図6のステップS609の音色切替え処理の詳細例を示すフローチャートである。ここでは、前述したように演奏者が所望の音色に対応する音色選択ボタン102を選択したときに、対応する波形データを波形メモリ206上の波形メモリエリアAまたはB(図3参照)のうち準備用として設定されている波形メモリエリアへ書き込むための準備処理が実行される。また、前述したように緑色に点灯している音色選択ボタン102を演奏者がもう一度押下したときに、準備用として設定されていた波形メモリエリアを演奏用に切り替える処理が実行される。
まず、CPU201は、準備エリア番号サブルーチンを実行する(ステップS801)。図9は、このサブルーチンの詳細例を示すフローチャートである。ここでは、現在準備用として設定されている波形メモリエリアが波形メモリ206中の波形メモリエリアAまたはB(図3参照)のどちらであるかが、RAM203上の変数pの値「0」または「1」として得られる。
CPU201はまず、RAM203上の変数TONEに格納されている現在演奏用として選択されている音色が波形メモリエリアAまたはB(図3参照)のいずれに書き込まれているかを示すRAM203上の変数CAREA(図5参照)の値を判定する(ステップS901)。
変数CAREAの値が「0」、すなわち現在演奏用として選択されている音色が波形メモリエリアAに書き込まれていれば、CPU201は、現在準備用として設定されている波形メモリエリアを示すRAM203上の変数pに、値「1」を設定する(ステップS902)。すなわち、現在準備用として設定されている波形メモリエリアはBとなる。
逆に、変数CAREAの値が「1」、すなわち現在演奏用として選択されている音色が波形メモリエリアBに書き込まれていれば、CPU201は、現在準備用として設定されている波形メモリエリアを示すRAM203上の変数pに、値「0」を設定する(ステップS903)。すなわち、現在準備用として設定されている波形メモリエリアはAとなる。
なお、初期状態では、変数CAREAの値は図6のステップS601の初期化処理で「0」にされている(図7参照)ので、演奏用として設定されている波形メモリエリアはA、準備用として設定されている波形メモリエリアはBとなる。この場合、どちらの波形メモリエリアにも、まだ波形データは格納されておらず、波形メモリエリアAおよびBの各状態を示すRAM203上の変数である波形メモリステータスWM_ST[0]およびWM_ST[1]のWAVE要素値WM_ST[0].WAVEおよびWM_ST[1].WAVEは、図6のステップS601の初期化処理で共に開放(未使用)状態を示す値「0」にされている(図7参照)。なお、図5に示されるように、このWAVE要素値の意味は、以下の通りである。
値「0」:開放(未使用)状態
値「1」:波形メモリエリアに波形データを書き込み中
値「2」:波形メモリエリアに波形データを書き込み完了
値「3」:波形メモリエリアが演奏用に選択される前のペンディング状態
値「4」:波形メモリエリアが演奏用に選択中
以上の図9のステップS902またはS903の処理の後、CPU201は、図9のフローチャートで示される図8のステップS801の準備エリア番号サブルーチンを終了する。
図8の説明に戻り、ステップS801の後、CPU201は、図6のステップS607でRAM203上の変数Tに得られた演奏者により新たに押下された音色選択ボタン102に対応する音色番号が、RAM203上の変数CTONEに保存されている現在演奏用に選択されている音色番号(TONE番号)(図5参照)に等しいか否かを判定する(ステップS802)。
演奏者が現在演奏用に選択されている音色に対応するLED106が赤色に点灯している音色選択ボタン102を再度押下した場合は、現在演奏用として設定されている波形メモリエリアは切り替える必要はないため、ステップS802の判定がYesとなって、CPU201は、そのまま図8のフローチャートで示される図6のステップS609の音色切り替え処理を終了する。
ステップS802の判定がNoならば、CPU201は、図6のステップS607でRAM203上の変数Tに得られた演奏者により新たに押下された音色選択ボタン102に対応する音色番号が、RAM203上の変数PTONEに保存されている現在準備用に選択されている音色番号(TONE番号)(図5参照)に等しいか否かを判定する(ステップS803)。
演奏者が現在演奏用に選択されている音色でも準備用に選択されている音色でもない音色に対応する、LED106が消灯している音色選択ボタン102を新たに押下した場合は、ステップS803の判定がNoとなって、CPU201は、ステップS804の処理を実行する。CPU201は、ステップS804で、その音色に対応する波形データを波形メモリ206上の準備用として設定されている波形メモリエリアへ書き込むための準備処理を実行する。
すなわち、ステップS804において、CPU201はまず、図6のステップS607でRAM203上の変数Tに得られた演奏者により新たに押下された音色選択ボタン102に対応する音色番号を、現在準備用に選択されている音色番号を示すRAM203上の変数PTONEに格納する。すなわち、新たに選択された音色が準備用の音色となる。
次に、ステップS804において、CPU201は、ステップS801で変数pに得られている準備用として設定されている波形メモリエリアに対応するRAM203上の変数である波形メモリステータスWM_ST[p]のWAVE要素値WM_ST[p].WAVEに、その波形メモリエリアに波形データを書き込み中であることを示す値「1」(図5参照)を格納する。また、CPU201は、上記波形メモリステータスWM_ST[p]のTONE要素値(図5参照)に、変数PTONEに格納されている準備用として設定されている音色番号を格納する。
さらに、ステップS804で、CPU201は、図4に例示される、図2のROM202に記憶されている大容量フラッシュメモリ204上の波形データを管理するためのフラッシュメモリ音色情報テーブルを参照する。次に、CPU201は、このテーブル上の上記音色番号に対応するエントリを参照し、そのエントリから「波形アドレスオフセット」項目値と「波形サイズ」項目値を読み出し、それぞれ、波形メモリステータスWM_ST[p]のFLASH_ADRS要素値WM_ST[p].FLASH_ADRSおよびWAVE_SIZE要素値WM_ST[p].WAVE_SIZEに格納する。この結果、図4より、WM_ST[p].FLASH_ADRSには、上記音色の波形データの大容量フラッシュメモリ204の波形記憶領域の先頭からの記憶アドレスのオフセット(16進数)が格納され、WM_ST[p].WAVE_SIZEには、上記音色の波形データの波形サイズ(16進数)が格納される。
そして、ステップS804において、CPU201は、波形メモリステータスWM_ST[p]の転送済みのデータサイズを示す要素値WM_ST[p].READ_SIZEを値「0」に初期設定する。
以上のステップS804の準備処理の後、CPU201は、ステップS809のLED設定サブルーチンを実行する。このサブルーチンの処理の詳細については後述するが、ステップS804で波形メモリステータスのWAVE要素値WM_ST[p].WAVEが波形データを書き込み中であることを示す値「1」に設定されていることにより、ステップS809の処理の結果、演奏者が新たに押下した音色選択ボタン102のLED106が黄色に点灯される。なお、現在演奏中の音色に対応する音色選択ボタン102のLED106は赤色の点灯を維持する。その後、CPU201は、図8のフローチャートで示される図6のステップS609の音色切り替え処理を終了する。
演奏者が現在準備用に選択されている音色に対応する、LED106が黄色に点灯している音色選択ボタン102を再度押下した場合は、ステップS803の判定がYesとなって、CPU201は、ステップS805の処理を実行する。ここでは、CPU201は、準備用として設定されている波形メモリエリアに対応する波形メモリステータスのWAVE要素値WM_ST[p].WAVEが波形データを書き込み中であることを示す値「1」に設定されているか否かを判定する。
ステップS805の判定がYesの場合には、現在準備用として設定されている波形メモリエリアはまだ波形データを書き込み中でその波形メモリエリアを演奏用に切り替えてはいけないため、CPU201は、そのまま図8のフローチャートで示される図6のステップS609の音色切り替え処理を終了する。
ステップS805の判定がNoの場合には、現在準備用として設定されている波形メモリエリアへの波形データを書き込は、完了した状態となっている。この場合、CPU201はまず、RAM203上の特には図示しない鍵盤105(図1参照)上で現在押鍵中の鍵を示す変数を参照することにより、現在何れかの鍵が押鍵中であるか否かを判定する(ステップS806)。
演奏中の発音があってステップS806の判定がYesの場合には、CPU201は、直ぐに新しい設定に変化せずに鍵盤105上の全ての鍵が離鍵されるまで準備用と演奏用の切り替えが行われないペンディング状態にするために、準備用として設定されている波形メモリエリアに対応する波形メモリステータスのWAVE要素値WM_ST[p].WAVEを、波形メモリエリアが演奏用に選択される前のペンディング状態であることを示す値「3」に設定する(ステップS808)。
その後、CPU201は、ステップS809のLED設定サブルーチンを実行する。このサブルーチンの処理の詳細については後述するが、ステップS808で波形メモリステータスのWAVE要素値WM_ST[p].WAVEがペンディング状態を示す値「3」に設定されていることにより、ステップS809の処理の結果、演奏者が新たに押下した音色選択ボタン102のLED106が橙色に点灯される。なお、現在演奏中の音色に対応する音色選択ボタン102のLED106は赤色の点灯を維持する。その後、CPU201は、図8のフローチャートで示される図6のステップS609の音色切り替え処理を終了する。
演奏中の発音がなくステップS806の判定がNoの場合には、CPU201は、波形エリア切り替えサブルーチンを実行する(ステップS808)。ここでは、CPU201は、演奏用と準備用の波形メモリエリアの入れ替えと、該当する音色選択ボタン102のLED106の表示の変更を行う。CPU201は、図8のフローチャートで示される図6のステップS609の音色切り替え処理を終了する。
図10は、図8のステップS807の波形エリア切り替えサブルーチンの詳細処理例を示すフローチャートである。
CPU201はまず、現在演奏用として設定されている波形メモリエリアを示す変数CAREAの値を、準備用として設定される波形メモリエリアを示す変数pの値に変更する(ステップS1001)。
次に、CPU201は、図8のステップS801と同様の図9のフローチャートで示される準備エリア番号サブルーチンを実行する(ステップS1002)。この結果、変数pには、いままで演奏用として設定されている波形メモリエリアに対応する値が格納され、ステップS1001の処理と合わせて、変数CAREAと変数pの値が交換される。
続いて、CPU201は、変数pの新たな値によって示される準備用として設定された波形メモリエリアにいままで演奏中であった音色の波形データが書き込み完了状態になっていることを示すために、その波形メモリエリアに対応する波形メモリステータスのWAVE要素値WM_ST[p].WAVEに、書き込み完了状態を示す値「2」(図5参照)を格納する(ステップS1003)。この処理は、以後同じ音色が演奏者によって選択されたときに、再度大容量フラッシュメモリ204から波形メモリ206に波形データを転送する無駄を省くための設定である。
その後、CPU201は、変数CAREAの新たな値によって示される新たに演奏用として設定された波形メモリエリアが演奏選択状態になったことを示すために、その波形メモリエリアに対応する波形メモリステータスのWAVE要素値WM_ST[CAREA].WAVEに、書き込み完了状態を示す値「4」(図5参照)を格納する(ステップS1004)。
さらに、CPU201は、演奏用に選択された音色番号を保持する変数CTONEと準備用に選択された音色番号を保持する変数PTONEの値を、互いに交換する(ステップS1005)。
最後に、CPU201は、図8のステップS810と同様のLED設定サブルーチンを実行する(ステップS1006)。このサブルーチンの処理の詳細については後述するが、ステップS1004で変数CAREAの新たな値によって示される新たに演奏用として設定された波形メモリエリアに対応する波形メモリステータスのWAVE要素値WM_ST[p].WAVEが演奏選択状態を示す値「4」に設定されていることにより、ステップS1006の処理の結果、演奏者が押下した音色選択ボタン102のLED106の点灯色が緑色から赤色に変更される。また、ステップS1003で変数pの新たな値によって示される新たに準備用として設定された波形メモリエリアに対応する波形メモリステータスのWAVE要素値WM_ST[p].WAVEが書き込み完了を示す値「2」に設定されていることにより、ステップS1006の処理の結果、いままで演奏用として赤色に点灯していた音色選択ボタン102のLED106の点灯色が緑色に変更される。
以上の一連の処理の後、CPU201は、図10のフローチャートで示される図8の波形エリア切り替えサブルーチンの処理を終了する。
図11は、図8のステップS809または図10のステップS1006のLED設定サブルーチンの詳細処理例を示すフローチャートである。
まず、CPU201は、すべての音色(図中「TONE」と記載)の音色選択ボタン102のLED106を消灯させる(ステップS1101)。
次に、CPU201は、準備エリア番号サブルーチンの処理を実行する(ステップS1102)。この処理は、図8のステップS801や図10のステップS1002と同様に、図9のフローチャートで示される。図8のステップS809や図10のステップS1006の処理として図11のフローチャートの処理が実行されるときには、準備エリア番号サブルーチンは、図8のステップS801や図10のステップS1002で一度実行されているためここで再度実行する必要はないが、後述する図6のステップS606の離鍵処理内の図14のステップS1403の波形エリア切り替えサブルーチン内で実行される場合や、図6のステップS611の波形書き込み処理内の図16のステップS1515で実行される場合には、再度変数pの値を確定する必要があるため、ステップS1102の処理が実行される。
次に、CPU201は、変数pによって示される準備用として設定されている波形メモリエリアに対応する波形メモリステータスのWAVE要素値WM_ST[p].WAVEが、波形データを書き込み中であることを示す値「1」に設定されているか否かを判定する(ステップS1103)。
CPU201は、ステップS1103の判定がYesならば、変数PTONEが示す準備用として設定されている音色番号に対応する音色選択ボタン102のLED106の点灯色を、黄色に設定する(ステップS1104)。その後、CPU201は、ステップS1109の処理に移行する。
ステップS1103の判定がNoの場合、CPU201は、変数pによって示される準備用として設定されている波形メモリエリアに対応する波形メモリステータスのWAVE要素値WM_ST[p].WAVEが、波形データ書き込み完了を示す値「2」に設定されているか否かを判定する(ステップS1105)。
CPU201は、ステップS1105の判定がYesならば、変数PTONEが示す準備用として設定されている音色番号に対応する音色選択ボタン102のLED106の点灯色を、緑に設定する(ステップS1106)。その後、CPU201は、ステップS1109の処理に移行する。
ステップS1105の判定がNoの場合、CPU201は、変数pによって示される準備用として設定されている波形メモリエリアに対応する波形メモリステータスのWAVE要素値WM_ST[p].WAVEが、演奏選択のペンディング状態を示す値「3」に設定されているか否かを判定する(ステップS1107)。
CPU201は、ステップS1107の判定がYesならば、変数PTONEが示す準備用として設定されている音色番号に対応する音色選択ボタン102のLED106の点灯色を、橙に設定する(ステップS1108)。その後、CPU201は、ステップS1109の処理に移行する。
ステップS1107の判定がNoの場合、またはステップS1104、S1106、またはS1108の処理の後、CPU201は、変数CTONEが示す演奏用として設定されている音色番号に対応する音色選択ボタン102のLED106の点灯色を、赤に設定する(ステップS1109)。
その後、CPU201は、図11のフローチャートで示されるLED設定処理を終了する。
図12は、図6のステップS604の押鍵処理の詳細処理例を示すフローチャートである。
CPU201はまず、波形書き込み状態確認サブルーチンを実行する(ステップS1201)。図13は、このサブルーチンの詳細処理例を示すフローチャートである。CPU201はまず、演奏用として設定されている波形メモリエリアに波形データが未だ書き込まれていなか書き込み済みかを値「0」または「1」で示すRAM203上の変数rに、初期値「0」を設定する(ステップS1301)。次に、CPU201は、演奏用として設定された波形メモリエリアが演奏選択状態になったことを示すために、変数CAREA(図5参照)によって示される演奏用として設定されている波形メモリエリアに対応する波形メモリステータスのWAVE要素値WM_ST[CAREA].WAVEの値(図5参照)が「1」より大きいか否か、すなわち波形データが書き込み中以降の状態になったか否かを判定する(ステップS1302)。そして、ステップS1302の判定がYesならば、CPU201は、変数rに書き込み済みを示す値「1」を設定する。ステップS1302の判定がNoならば、CPU201は、変数rに書き込み済みを示す値「1」を設定する。ステップS1302の判定がNoならば、CPU201は、変数rの値を、ステップ1301で設定された未書き込みを示す値「0」のままにする。その後、CPU201は、図13のフローチャートで示される図12のステップS1201の波形書き込み状態確認サブルーチンを終了する。この結果、変数rに、演奏用として設定されている波形メモリエリアに波形データが未だ書き込まれていなか書き込み済みかを示す値「0」または「1」が格納される。
次にCPU201は、ステップS1201で設定された変数rの値が「1」であるか否かを判定する(ステップS1202)。
変数rの値「0」でステップS1202の判定がNoならば、CPU201は、演奏用として設定されている波形メモリエリアに波形データがまだ揃っていないと判断し、発音処理は実行せずにそのまま図12のフローチャートで示される図6のステップS604の押鍵処理を終了する。
変数rの値「1」でステップS1202の判定がYesならば、CPU201は、演奏用として設定されている波形メモリエリアへの波形データの書き込みが完了したと判断し、発音処理サブルーチンを実行する(ステップS1203)。このサブルーチンの詳細は特には図示しないが、CPU201は、図6のステップS602の鍵盤処理において得られている押鍵されたノートナンバー(鍵番号)Keyと押鍵の強さを示すベロシティ値Velocityを、それぞれRAM203上の変数kおよびvに格納する。そして、CPU201は、変数kおよびvを含むノートオンイベントを、音源LSI205に発行する。これに対して、音源LSI205は、波形メモリ206上の波形メモリエリアAまたはB(図3参照)のうちRAM203上の変数CAREAで示される演奏用として設定されている波形メモリエリアに対して、変数kが示すノートナンバーに対応する読み出し速度で適宜サンプル補間しながら波形データの読み出しを開始し、読み出された波形データに対して変数vが示すベロシティに対応する強度特性(エンベロープ特性)を付与して、その結果得られる楽音波形データをD/Aコンバータ208に出力する発音処理を実行する。その後、CPU201は、図12のフローチャートで示される図6のステップS604の押鍵処理を終了する。
図14は、図6のステップS606の離鍵処理の詳細処理例を示すフローチャートである。
CPU201はまず、RAM203上の特には図示しない鍵盤105(図1参照)上で現在押鍵中の鍵を示す変数を参照することにより、全ての鍵が離鍵状態であるか否かを判定する(ステップS1401)。
全ての鍵が離鍵状態でステップS1401の判定がYesならば、CPU201は、変数pの値によって示される現在準備用として設定されている波形メモリエリアに対応する波形メモリステータスのWAVE要素値WM_ST[p].WAVEの値が、その波形メモリエリアが演奏用に選択される前のペンディング状態にあるか否か(図8のステップS808の説明を参照)を判定する(ステップS1402)。
ステップS1402の判定がYesならば、鍵盤105上の全ての鍵が離鍵されて準備用と演奏用の波形メモリエリアを切り替え可能となったため、CPU201は、ペンディング状態にされていた図8のステップS807と同様の図10のフローチャートで示される波形エリア切り替えサブルーチンを実行する(ステップS1403)。
鍵盤105上の全ての鍵が離鍵状態にはまだなっておらずステップS1401の判定がNoの場合、または、準備用として設定されている波形メモリエリアが演奏用に選択される前のペンディング状態にはなっておらずステップS1402の判定がNoの場合には、CPU201は、ステップS1403の波形エリア切り替えサブルーチンは実行しない。
その後、CPU201は、図6のステップS602の鍵盤処理において得られている離鍵されたノートナンバー(鍵番号)KeyをRAM203上の変数kに格納する。そして、CPU201は、変数kを含むノートオフイベントを、音源LSI205に発行する(ステップS1404)。これを受けて音源LSI205は、変数kで示されるノートナンバーの発音処理を終了して離鍵状態にする。その後、CPU201は、図12のフローチャートで示される図6のステップS604の押鍵処理を終了する。
図15および図16は、図6のステップS611の波形書き込み処理の詳細例を示すフローチャートである。演奏による発音処理を止めないようにするために、図6に例示したメインループにおいて、ステップS611で波形書き込み処理だけに処理を集中させず、他の処理も並行に処理するために、ステップS611で波形書き込み処理の1回の実行においては、一定の容量のメモリ転送が完了した時点で処理を中断し、他のメインループの処理を行って再び波形転送プログラムが起動された時に処理を再開する仕組みになっている。
CPU201はまず、ステップS1501において、各種初期設定を行う。具体的には、CPU201は、RAM203上の変数である、今回書き込みサイズカウンタc、波形メモリ上のアドレスカウンタwp、および波形番号カウンタwに、それぞれ初期値「0」を設定する。
上記初期設定の後、まずCPU201は、RAM203上の変数である現在書き込み中の波形の番号READING_AREAの値が無効値「−1」であるか否か、すなわち、現在波形データの書き込みが行われていないか否かを判定する(ステップS1502)。
現在波形データの書き込みが行われていない(ステップS1502の判定がYesである)場合には、まず波形番号カウンタwが値「0」すなわち波形メモリ206上の波形メモリエリアA(図3参照)が選択されている状態で、CPU201は、波形番号カウンタw=0が示す波形メモリエリアAに対応する波形メモリステータスのWAVE要素値WM_ST[w].WAVE(図5参照)が波形書き込み中を示す値「1」にセットされているか否か(図8のステップS804参照)を判定する(ステップS1504)。
ステップS1504の判定がNoならば、CPU201は、波形番号カウンタw=0が示す波形メモリエリアAに対しては波形データの書き込み設定は行わずに、ステップS1506に移行して、次の波形メモリエリアBに対する処理に進む。
ステップS1504の判定がYesならば、CPU201は、波形番号カウンタw=0が示す波形メモリエリアAに対応する波形メモリステータスの波形サイズ要素値WM_ST[w].WAVE_SIZE(図5参照)の値が「0」であるか否かを判定する(ステップS1505)。図4に例示されるフラッシュメモリ音色情報テーブル上で、波形番号カウンタwに対応する「番号」項目値に対して、波形データが登録されていない場合には、「波形サイズ」項目値が「0」になっている。そして、図8のステップS804の説明で前述したように、波形データが登録されていない波形番号のデータについては、波形サイズ要素値WM_ST[w].WAVE_SIZEに、音声波形サイズとして「0」がセットされる。
このため、WM_ST[w].WAVE_SIZEが「0」(ステップS1505の判定がYes)ならば、波形番号カウンタw=0が示す波形メモリエリアAに対応する波形データは存在しないため、CPU201は、ステップS1506の処理に移行して、次の波形メモリエリアBに対する処理に進む。
ステップS1504の判定がNoの場合、またはステップS1505の判定がYesの場合には、CPU201は、波形番号カウンタwの値を、+1インクリメントして値「1」にする(ステップS1506)。
その後、CPU201は、波形番号カウンタwの値が「2」に達したか否かを判定する(ステップS1507)。
ステップS1507の判定がNoならば、CPU201は、ステップS1504の処理に戻り、波形番号カウンタw=1に対応する波形メモリエリアBに対して、上述と同様のステップS1504とS1505の判定処理を実行する。
波形メモリエリアBに対しても、ステップS1504の判定がNo、またはステップS1505の判定がYesの場合には、CPU201は、波形番号カウンタwの値を、さらに+1インクリメントして値「2」にする(ステップS1506)。この結果、次のステップS1507の判定がYesとなって、CPU201は、実質的な波形書き込みは実行せずに、図15および図16のフローチャートで示される図6のステップS611の波形書き込み処理を終了する。
波形メモリエリアAまたはBにタイするステップS1505の判定処理で、波形番号カウンタwが示す波形メモリエリアに対応する波形メモリステータスの波形サイズ要素値WM_ST[w].WAVE_SIZEが「0」でないと判定された(ステップS1505の判定がNo)ならば、CPU201は、現在書き込み中の波形の番号を保持するRAM203上の変数READING_WAVEに、波形番号カウンタwの値を格納する。また、CPU201は、波形番号カウンタwが示す波形メモリエリアに対応する波形メモリステータスの転送済みのデータサイズを示す要素値WM_ST[w].READ_SIZEを、これから転送が開始されるので値「0」に初期設定する。その後、CPU201は、図16のステップS1509以降の処理に移行し、波形メモリ206上の波形番号カウンタwの波形メモリエリアに対して波形データを大容量フラッシュメモリ204から転送する処理を開始する。
前述したステップS1502の判定において、現在波形データの書き込みが行われている(ステップS1502の判定がNoである)と判定された場合には、CPU201は、波形番号カウンタwに、RAM203上の変数である現在書き込み中の波形番号READING_AREAの値を格納した後、図16のステップS1509以降の処理に移行し、波形メモリ206上の波形番号カウンタwの波形メモリエリアに対して波形データを大容量フラッシュメモリ204から転送する処理を開始する。
上記転送処理において、CPU201はまず、大容量フラッシュメモリ204において、それぞれ波形番号カウンタwが示す書き込み対象の波形メモリエリアに対応する波形メモリステータスの要素値であるWM_ST[w].FLASH_ADRSとWM_ST[w].READ_SIZEとを加算して得られるアドレスから、1ワード分の波形データを書き込み、RAM203上の変数dに代入する(ステップS1509)。ここで、要素値WM_ST[w].FLASH_ADRSには、前述した図8のステップS804で、波形番号カウンタwが示す波形メモリ206上の波形エリアAまたはB(図3参照)に転送されるべき波形データの、大容量フラッシュメモリ204上での先頭アドレスが格納されている。また、要素値WM_ST[w].READ_SIZEには、波形番号カウンタwが示す波形メモリ206上の波形エリアAまたはB(図3参照)における、現在までに転送済みのデータサイズが格納されている。従って、「WM_ST[w].FLASH_ADRS+WM_ST[w].READ_SIZE」は、次に読み出されるべき大容量フラッシュメモリ204上のアドレスとなる。
次に、CPU201は、波形メモリ206において、波形番号カウンタwに対応する波形メモリエリアの波形メモリ206上での先頭アドレスと、波形番号カウンタwに対応する波形メモリステータスの要素値であるWM_ST[w].READ_SIZEとを加算して得られるアドレスに、変数dに格納されている1ワード分の波形データを、音源LSI205経由で書き込む(ステップS1510)。
その後、CPU201は、波形番号カウンタwが示す波形メモリエリアに対応する波形メモリステータスの転送済みのデータサイズを示す要素値WM_ST[w].READ_SIZEの値を+1インクリメントし、また、RAM203上の変数である(ステップS1501で値「0」に初期化されている)今回書き込みサイズカウンタcの値を+1インクリメントする(ステップS1511)。
そして、CPU201は、波形番号カウンタwが示す波形メモリエリアに対応する波形メモリステータスの転送済みのデータサイズを示す要素値WM_ST[w].READ_SIZEの値が、波形番号カウンタwが示す波形メモリエリアに対応する波形メモリステータスの波形サイズ要素値WM_ST[w].WAVE_SIZEに等しくなったか否かを判定する(ステップS1512)。波形サイズ要素値WM_ST[w].WAVE_SIZEには、図6のステップS609の音色切替え処理内の図8のステップS804において、現在の音色に対応するROM202内のフラッシュメモリ音色情報テーブルから、図4に示される「波形サイズ」項目値がセットされている。
ステップS1512の判定がNoならば、CPU201は、今回書き込みサイズカウンタcの値が102400バイトに等しくなったか否か、すなわち、今回転送されたサイズが100KB(キロバイト)に達したか否かを判定する(ステップS1513)。
ステップS1513の判定がNoならば、CPU201は、ステップS1509の処理に戻って転送を続行する。
ステップS1513の判定がYesになったならば、CPU201は、図15および図16のフローチャートで例示される図6のステップS611の波形書き込み処理を終了する。このように、本実施形態では、一定の容量(例えば100KB)のメモリ転送が完了した時点で処理が中断され、他のメインループの処理を行って再び波形転送プログラムが起動された時に図15のステップS1502→S1503を介して、処理が再開される。このとき、波形番号カウンタwが示す波形メモリエリアに対応する波形メモリステータスの、転送済みのデータサイズを示す要素値WM_ST[w].READ_SIZEには、図16のステップS1511の処理によって前回までに転送が完了したサイズが格納されているため、図16のステップS1509およびS1510のアドレス演算処理によって、前回転送が完了したアドレスの次のアドレスから転送を再開することができる。
転送済みのデータサイズを示す要素値WM_ST[w].READ_SIZEの値が波形サイズ要素値WM_ST[w].WAVE_SIZEに等しくなった場合(ステップS1512の判定がYesになった場合)、CPU201は、波形番号カウンタwが示す波形メモリエリアに対応する波形メモリステータス中の波形メモリ206の状態を示す要素値WM_ST[w].WAVE(図5参照)に、書き込みが完了したことを示す値「2」を設定する(ステップS1514)。
続いて、CPU201は、前述した図11のフローチャートで示されるLED設定サブルーチンを実行する(ステップS1515)。この結果、図11のステップS1105の判定がYesとなって、変数PTONEが示す音色番号に対応する準備用の音色の音色選択ボタン102のLED106が、書き込みが完了したことを示す緑色に点灯される。その後、CPU201は、図15および図16のフローチャートで例示される図6のステップS611の波形書き込み処理を終了する。
以上説明した実施形態により、複数音色の波形メモリ領域を持ち、音色選択時に波形書き込みを伴うような電子楽器において、実際に演奏音を切り替えたいタイミングよりも前に使用中ではない波形メモリ領域に書き込んでおく操作を音色選択ボタン102(音色切り替え操作子)のみ、もしくは音色選択ボタン102と鍵盤105など最小限の操作子で簡単に行うことが可能となる。本実施形態のように、例えば音色選択ボタン102を一度押すと準備用として設定されている波形メモリエリアに書き込みを行い、もう一度同じボタンを押すと実際にその音色に切り替わる。あるいは音色選択ボタン102を一度押すと準備用として設定されている波形メモリエリアに書き込みを行い、その後の全鍵離鍵のタイミングで音色切り替えを行うなど、波形準備動作を極力簡単で直感的な操作で実現できる。
また、応用例として、複数の音色の組み合わせをまとめて記録したメモリ単位の選択を行った時も、単数の音色選択と同様に、複数組の音色分の波形メモリ領域を搭載していることによって、本実施形態の場合と同様の機能が実現できる。
また本実施形態においては、実際に演奏音の音色を切り替えたいタイミングより以前に音色切り替えのボタンを押して波形メモリエリアに書き込みを開始し、実際に音色を切り替えたいタイミングでもう一度同じボタンを押しても、波形メモリエリアへの書き込みが終了してなければ、音色の切り替えが行われないようにしている。しかしながら、例えば打楽器音などのように、初期アタック部分でほとんど音色が決定するような波形データであれば、実際の音色切り替え指示のタイミングで波形メモリエリアへの書き込みが終了していない状態で、音色の切り替えを行うようにすることも可能である。
以上のように、本実施形態によれば、波形メモリに所望の波形が存在しないために発音できないという無音時間を大幅に短縮することが可能となる。これにより、演奏者のストレスを軽減、あるいは全く感じさせないレベルに抑制することができる。
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
一次記憶装置と、
複数種の波形データを記憶する二次記憶装置と、
前記一次記憶装置内に書き込み可能な波形メモリエリアを設定する設定処理と、第1の操作信号が供給される毎に、当該第1の操作信号により選択される波形データを前記二次記憶装置から読み出し、前記二次記憶装置から読み出された波形データを前記一次記憶装置内の前記書き込み可能な波形メモリエリアに書き込む波形書き込み処理と、第2の操作信号が供給されたときに、前記書き込み可能な波形メモリエリアを読み出し可能な波形メモリエリアに切り替えるとともに、前記一次記憶装置内の読み出し可能な波形メモリエリア以外の別のエリアを書き込み可能な波形メモリエリアに設定する波形エリア切り替え処理と、を実行する処理部と、
を備える波形書き込み装置。
(付記2)
前記一次記憶装置は、ランダムアクセスメモリを備え、前記二次記憶装置は、前記一次記憶装置より容量の大きいフラッシュメモリを備える付記1記載の波形書き込み装置。
(付記3)
前記波形書き込み装置はさらに、波形選択信号を供給する波形選択操作子を有し、
前記処理部はさらに、前記書き込み可能な波形メモリエリアに記憶されている波形データの種類と異なる種類の波形データが前記波形選択操作子により選択された場合に、当該異なる種類の波形データを選択させる前記第1の操作信号を供給し、前記書き込み可能な波形メモリエリアに書き込まれた波形データの種類と同じ種類の波形データが前記波形選択操作子により選択された場合に、前記第2の操作信号を供給する、付記1または2に記載の波形書き込み装置。
(付記4)
前記波形選択操作子は前記波形データの種類ごとに具備され、当該種類ごとの波形選択前記処理部は、前記波形選択操作子に対する操作に応答して、当該種類の波形データを選択する前記第1の操作信号及び前記第2の操作信号のいずれかを出力する、付記3に記載の波形書き込み装置。
(付記5)
前記波形選択操作子ごとに、当該波形選択操作子に対応する種類の波形データが、未使用である状態、前記書き込み可能な波形メモリエリアが書き込み中である状態、当該書き込み可能な波形メモリエリアへの書き込みが完了している状態、または当該波形データが格納された波形メモリエリアが前記読み出し可能に設定されている状態を表示する表示部をさらに備える、付記4に記載の波形書き込み装置。
(付記6)
前記処理部は、前記第2の操作信号が供給されたときに、前記読み出し可能な波形メモリエリアの波形データを読み出し中である場合に、当該読み出し動作が終了した後に、前記波形エリア切り替え処理を実行する、付記1ないし5のいずれかに記載の波形書き込み装置。
(付記7)
前記処理部は、第2の操作信号が供給されたときに、前記書き込み可能な波形メモリエリアに波形データの書き込みが完了している場合に、前記書き込み可能な波形メモリエリアを読み出し可能な波形メモリエリアに切り替えるとともに、前記一次記憶装置内の読み出し可能な波形メモリエリア以外の別のエリアを書き込み可能な波形メモリエリアに設定する付記1ないし6のいずれかに記載の波形書き込み装置。
(付記8)
一次記憶装置と、複数種の波形データを記憶する二次記憶装置と、を備える波形書き込み装置に用いられる波形書き込み方法であって、前記波形書き込み装置が、
前記一次記憶装置内に書き込み可能な波形メモリエリアを設定し、
第1の操作信号が供給される毎に、当該第1の操作信号により選択される波形データを前記二次記憶装置から読み出すとともに、前記二次記憶装置から読み出された波形データを前記一次記憶装置内の前記書き込み可能な波形メモリエリアに書き込み、
第2の操作信号が供給されたときに、前記書き込み可能な波形メモリエリアを読み出し可能な波形メモリエリアに切り替えるとともに、前記一次記憶装置内の読み出し可能な波形メモリエリア以外の別のエリアを書き込み可能な波形メモリエリアに設定する、波形書き込み方法。
(付記9)
一次記憶装置と、複数種の波形データを記憶する二次記憶装置と、を備える波形書き込み装置として用いられるコンピュータに、
前記一次記憶装置内に書き込み可能な波形メモリエリアを設定するステップと、
第1の操作信号が供給される毎に、当該第1の操作信号により選択される波形データを前記二次記憶装置から読み出すとともに、前記二次記憶装置から読み出された波形データを前記一次記憶装置内の前記書き込み可能な波形メモリエリアに書き込むステップと、
第2の操作信号が供給されたときに、当該書き込み可能な波形メモリエリアの設定を読み出し可能な波形メモリエリアに切り替えるとともに、前記一次記憶装置内の読み出し可能な波形メモリエリア以外の別のエリアを書き込み可能な波形メモリエリアに設定するステップと、
を実行させるプログラム。
(付記10)
付記1に記載の波形書き込み装置と、
発音すべき楽音の音高を指定する演奏操作子と、
前記波形選択信号により選択される波形データを、前記演奏操作子により指定された音高に基づいて前記一次記憶装置内の読み出し可能な波形メモリエリアから読み出すことにより、楽音を生成する音源と、
を備える電子楽器。