以下、この発明の実施の形態を添付図面に従って詳細に説明する。
図1は、この発明に係る自動伴奏装置を適用した電子楽器の全体構成の一実施例を示したハード構成ブロック図である。本実施例に示す電子楽器は、マイクロプロセッサユニット(CPU)1、リードオンリメモリ(ROM)2、ランダムアクセスメモリ(RAM)3からなるマイクロコンピュータによって制御される。CPU1は、この電子楽器全体の動作を制御する。このCPU1に対して、通信バス1D(例えばデータ及びアドレスバス)を介してROM2、RAM3、通信インタフェース(I/F)4、入力操作部5、表示部6、外部記憶装置7、音源8がそれぞれ接続されている。ROM2は、CPU1により実行あるいは参照される各種制御プログラム(例えば、自動伴奏処理(後述する図3参照)など)や各種データ等(例えば、アルペジオパターンデータ(後述する図2参照)など)を格納する。RAM3は、CPU1が所定のプログラムを実行する際に発生する各種データなどを一時的に記憶するワーキングメモリとして、あるいは現在実行中のプログラムやそれに関連するデータを一時的に記憶するメモリ等として使用される。RAM3の所定のアドレス領域がそれぞれの機能に割り当てられ、レジスタやフラグ、テーブル、メモリなどとして利用される。
通信インタフェース(I/F)4は、例えばLANやインターネット、電話回線等の有線あるいは無線の通信ネットワークに接続されており、該通信ネットワークを介して外部機器4A等と接続され、当該外部機器4Aから制御プログラムや各種データを電子楽器本体側に取り込むためのインタフェースである。こうした通信インタフェース4は、有線あるいは無線のものいずれかでなく双方を具えていてよい。
入力操作部5は楽音の音高を選択するための複数の鍵を備えた例えば鍵盤等のような演奏操作子、アルペジオ音(分散和音)を自動生成する「アルペジオ演奏モード」に当該電子楽器を設定するためのアルペジオ演奏モード指定スイッチ、「アルペジオ演奏モード」の際に参照すべきアルペジオパターンデータを、タイプの入力により選択するためのタイプ別選択スイッチ、あるいは「アルペジオ演奏モード」の際に自動生成されるアルペジオ音の拡張音域を、オクターブレンジの入力(例えば、+3、+2、+1、0、−1、−2、−3など)により設定するための音域拡張指示スイッチなどである。上記鍵盤型の演奏操作子(以下、単に鍵盤と呼ぶ)は楽音演奏のために使用できるのは勿論のこと、当該電子楽器を「アルペジオ演奏モード」に設定する、「アルペジオ演奏モード」の際に参照すべきアルペジオパターンデータを選択する、あるいは「アルペジオ演奏モード」の際に自動生成されるアルペジオ音の拡張音域を設定するための入力手段などとして使用することもできる。勿論、入力操作部5はこれら以外にも数値データ入力用のテンキーや文字データ入力用のキーボード、あるいはディスプレイ6Aに表示される所定のポインティングデバイスを操作するために用いるマウスなどの各種操作子を含んでいてもよい。表示部6は例えば液晶表示パネル(LCD)やCRT等から構成されるディスプレイ6Aに、予め記憶されているアルペジオパターンデータをタイプ別に一覧表示したり、ユーザが選択したアルペジオパターンデータやユーザが設定したアルペジオ音の拡張音域、あるいはCPU1の制御状態などの各種情報を表示したりする。
従来知られているように、上記したアルペジオ演奏モード設定スイッチの操作により当該電子楽器を「アルペジオ演奏モード」に設定した場合には、鍵盤のうち予め割り当てられている固定鍵域あるいはユーザ設定に応じて変動する任意の鍵域が「アルペジオ鍵域」に設定される。すなわち、「アルペジオ鍵域」の設定には、鍵盤を低音側と高音側の2つに分割する分割点を予め割り当てておき、この分割点から低音域側を「アルペジオ鍵域」とする方法、あるいは全ての鍵域から「アルペジオ鍵域」としたい音高範囲をユーザが直接選択して設定する方法などがあるが、「アルペジオ鍵域」を設定する方法は公知のどのような方法であってもよい。「アルペジオ鍵域」内の各鍵に対するユーザによる押鍵操作に従って検出されるノートナンバー(音高情報)は、アルペジオ構成音の音高を定めるために用いられる。すなわち、「アルペジオ鍵域」内の各鍵に対するユーザによる押鍵操作に従って検出されたノートナンバーと、後述するアルペジオパターンデータ(後述する図2参照)とに基づき、ノートナンバー、ベロシティ及びノートオン/ノートオフを音源8に対して設定することによって、アルペジオ(分散和音)での発音及び消音が行われるようになっている。これについては公知であることから、ここでの説明を省略する。なお、「アルペジオ鍵域」以外の各鍵に対するユーザによる押鍵操作に従って検出されたノートナンバーは、通常の鍵盤演奏としての楽音発生に用いられることは言うまでもない。
図1の説明に戻って、外部記憶装置7は上記したROM2と同様に、制御プログラムや各種データなどを記憶する。前記ROM2に制御プログラムが記憶されていない場合、この外部記憶装置7(例えばハードディスク)に制御プログラムを記憶させておき、それを前記RAM3に読み込むことにより、ROM2に制御プログラムを記憶している場合と同様の動作をCPU1にさせることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。なお、外部記憶装置7はハードディスク(HD)に限られず、フレキシブルディスク(FD)、コンパクトディスク(CD−ROM・CD−RAM)、光磁気ディスク(MO)、あるいはDVD(Digital Versatile Disk)等の着脱自在な様々な形態の外部記録媒体を利用する記憶装置であってもよい。あるいは、半導体メモリなどであってもよい。
音源8は複数のチャンネルで楽音信号の同時発生が可能であり、通信バス1Dを経由して与えられた、「自動伴奏処理」(後述する図3参照)により生成されるアルペジオ発音データや演奏操作子の操作に応じて発生される発音データ等の各種演奏情報を入力し、これらの演奏情報に基づいて楽音信号を発生する。音源8から発生された楽音信号は、アンプやスピーカなどを含むサウンドシステム8Aから発音される。この音源8から発生された楽音信号に対して、効果回路など(図示せず)を用いて所定の効果を付与するようにしてもよい。前記アルペジオ発音データや前記発音データの形式はMIDI形式のようなディジタル符号化されたものであってもよいし、PCM、DPCM、ADPCMのような波形サンプルデータ方式からなるものであってもよい。この音源8とサウンドシステム8Aの構成には、従来のいかなる構成を用いてもよい。例えば、音源8はFM、PCM、物理モデル、フォルマント合成等の各種楽音合成方式のいずれを採用してもよく、また専用のハードウェアで構成してもよいし、CPU1によるソフトウェア処理で構成してもよい。
なお、上述した電子楽器において、演奏操作子は鍵盤楽器の形態に限らず、ギターのネック形状などのような弦楽器の形態であってもよい。また、電子楽器は入力操作部5やディスプレイ6Aあるいは音源8などを1つの電子楽器本体に内蔵したものに限らず、それぞれが別々に構成され、MIDIインタフェースや各種ネットワーク等の通信手段を用いて各装置を接続するように構成されたものであってもよいことは言うまでもない。さらに、本発明に係る自動伴奏装置を適用する装置は電子楽器の形態に限らず、パーソナルコンピュータ、PDAや携帯電話等の携帯型通信端末、あるいはカラオケ装置やゲーム装置など、どのような形態の装置・機器に適用してもよい。携帯型通信端末に適用した場合、端末のみで所定の機能が完結している場合に限らず、機能の一部をサーバ側に持たせ、端末とサーバとからなるシステム全体として所定の機能を実現するようにしてもよい。
ここで、ROM2や外部記憶装置7などに記憶されており、「アルペジオ演奏モード」時においてアルペジオ音を自動生成する際に参照されるアルペジオパターンデータについて、図2を用いて説明する。図2は、アルペジオパターンデータのデータ構造の一実施例を示す概念図である。図2(a)はアルペジオパターンデータの全体構造を、図2(b)はアルペジオパターンデータ内に含まれる発音パターンデータのデータ構造をそれぞれ示す。
図2(a)に示すように、例えばピアノやギターなどの音色毎にアルペジオパターンデータ群が予め用意されており、該アルペジオパターンデータ群は、プリセットされたものやユーザにより設定された、複数のタイプ別のアルペジオパターンデータ(1〜N)を記憶する。各タイプ別のアルペジオパターンデータ(1〜N)は、楽音を出力するために用いられる出力トラック(Track‘1’〜Track‘n’)毎に、発音パターンデータ、音域情報、特性情報をそれぞれ含んでなる。発音パターンデータは、アルペジオ構成音それぞれの発音タイミング、音長、音量、さらには音高のオクターブシフト量などを定めたデータである。具体的には、図2(b)に示すように、タイミング(Timing)、ゲートタイム(Gate)、キー番号(Key)、オクターブシフト情報(Oct)及びベロシティ(Vel)の5つの要素からなる1音分のデータ(イベントとも呼ぶ)を、複数音分記憶している。なお、図2(b)に示した実施例は、1小節分の発音パターンデータを表している(1拍分の時間長さを480クロックとした場合であり、1小節分の時間長さは1920クロックとなる)。
発音パターンデータのタイミング(Timing)は、楽音の発音開始タイミングに対応するクロック値を表すデータである。ゲートタイム(Gate)は、発音する楽音のキーオンからキーオフまでの時間長(クロック数値)を表すデータである。キー番号(Key)は、アルペジオを発音する際の楽音の音高を決めるためのデータである。例えば、アルペジオ鍵域内の各鍵の押鍵操作に従って検出可能とする押鍵数を4つに設定した場合、キー番号は「1〜4」の数値をとり、このキー番号の値はアルペジオの音高変化パターンに対応して各1音分のデータ毎に予め割り当てられている。RAM3にはこのキー番号に対応するレジスタが予め設定されており、「アルペジオ鍵域」内の各鍵に対するユーザによる押鍵操作に従って検出されるノートナンバーを該レジスタに格納する。この際には、所定のルール(例えば、音高の低い順など)に従って、小さいキー番号順にノートナンバーを割り当てる。そして、後述する自動伴奏処理(図3参照)において、発音パターンデータ中のキー番号に対して割り当てられたノートナンバーを該当するレジスタから読み出し、このノートナンバーに基づき発音する楽音の音高を定める。したがって、キー番号の並び順がアルペジオパターンを決定付ける。なお、発音する楽音の音高を定める際にはオクターブシフト等の処理もあるので、キー番号に対して割り当てられたノートナンバーに対応する音高が、そのまま発音される楽音の音高になるとは限らない。
発音パターンデータのオクターブシフト情報(Oct)は、「アルペジオ鍵域」内の各鍵を押鍵操作することによって指示される音高(ノート)をオクターブ単位で上下に変更させて発音する際に、何オクターブ分変更するかを指定するデータである。例えば、キー番号に割り当てられたノートナンバーが「C3」であるような場合において、オクターブシフト情報(Oct)が「0」と指定されている場合には、「C3」の音高を発音するタイミングで該「C3」の音高でそのまま発音させる。一方、オクターブシフト情報(Oct)が「+1」と記憶されている場合には、「C3」の音高を発音するタイミングで該「C3」を1オクターブ上にシフトした「C4」の音高で発音させる。ベロシティは、発音する楽音のベロシティ値(音量の制御などに利用されるデータ)を表すデータである。このような押鍵数毎に定義された発音パターンデータに従って、押鍵に応じたアルペジオ発音データが生成されるようになっている。
音域情報は各発音パターンデータにより実現される固有の音域、つまりアルペジオパターンで使用するデフォルトの使用音域を示す情報であり、発音パターンデータに定義された上記オクターブシフト情報(Oct)に従って、「1オクターブ」〜「4オクターブ」、「それ以上のオクターブ(その他)」のいずれかに定義される。例えば、オクターブシフト情報(Oct)が「+0」のみで定義されている場合には音域情報に「1オクターブ」、オクターブシフト情報(Oct)が「+0」と「+1」(又は「-1」)とで定義されている場合には音域情報に「2オクターブ」、オクターブシフト情報(Oct)が「+0」と「+1」と「+2」(又は「-1」)とで定義されている場合には音域情報に「3オクターブ」とそれぞれ定義される。特性情報は各発音パターンデータにより実現される固有の楽音の特性、つまりアルペジオパターンの特性(音の並びの規則性)を示す情報であり、「フレーズ」、「その他」、「up」、「down」のいずれかに定義される。例えば、キー番号に単なる数値(ただし、このキー番号に対応するレジスタあり)ではなく、アルペジオ音生成の際に実際に用いる音高、つまりアルペジオ構成音の音高を定める音高情報であるノートナンバーが定義されている場合(所謂フィックスドノートタイプのアルペジエータの場合)には特性情報に「フレーズ」、キー番号に3以上の数値が定義されており並び順がランダムである場合には特性情報に「その他」、例えばキー番号に数値が昇順に定義されている場合には特性情報に「up」(ただし、キー番号が「1」のみで特性情報が「up」と定義されることもある)、例えばキー番号に数値が降順に定義されている場合には特性情報に「down」(ただし、キー番号が「1」のみで特性情報が「down」と定義されることもある)とそれぞれ定義される。したがって、図2(b)に示す発音パターンデータの音域情報は「2オクターブ」であり、特性情報は「その他」である。
なお、アルペジオパターンデータに上記した音域情報又は/及び特性情報が含まれていない(定義されていない)ような場合には、各出力トラック毎に発音パターンデータを分析して各出力トラック毎の音域情報又は/及び特性情報を特定するようにしてよい。音域情報については発音パターンデータのオクターブシフト情報(Oct)を分析し、例えばオクターブシフト情報のうち最も大きい絶対値を持つオクターブシフト情報が「+1」である場合には音域情報を2オクターブに、オクターブシフト情報のうち最も大きい絶対値を持つオクターブシフト情報が「+0」である場合には音域情報を1オクターブに特定する。特性情報については発音パターンデータのキー番号を分析し、例えばキー番号にノートナンバーが定義されている場合(所謂フィックスドノートタイプのアルペジエータの場合)には特性情報を「フレーズ」に、キー番号に3以上の数値が定義されている場合には特性情報を「その他」に、キー番号に数値が昇順に定義されている場合には特性情報を「up」に、キー番号に数値が降順に定義されている場合には特性情報を「down」にそれぞれ特定する。
図1に示した電子楽器においては、予め選択済みのアルペジオパターンデータの発音パターンデータを使用して、ユーザによる鍵盤操作に応じて決定される複数の音高に基づきアルペジオ発音データを生成することにより、自然な聴感を持つアルペジオ音(分散和音)を生成することができるようになっている。こうしたアルペジオ音を自動生成する「自動伴奏処理」は、図1に示した電子楽器のCPU1が自動伴奏処理を実現する所定のプログラム(ソフトウエア)を実行することにより実施される。そこで、この「自動伴奏処理」の処理動作について、図3A及び図3Bを用いて説明する。図3A及び図3Bは、「自動伴奏処理」の一実施例を示したフローチャートである。当該処理は、アルペジオ演奏モード指定スイッチの操作に応じて当該装置がアルペジオ演奏モードに設定済みである場合に実行される。以下、図3A及び図3Bに示したフローチャートに従って、当該処理の処理動作を説明する。ただし、ここでは図示の都合上、図3Aに処理の前半部分を、図3Bに図3Aに示した処理の前半部分に後続する処理の後半部分を、それぞれ分けて示している。
図3Aに示すように、ステップS1は、アルペジオパターンデータの選択及び読み込みを行う。すなわち、ユーザによるタイプ別選択スイッチの操作に従って、音色毎に記憶されているアルペジオパターンデータ群の中から、アルペジオ生成に使用すべき対象とするアルペジオパターンデータを1つ選択し、該選択したアルペジオパターンデータをROM2や外部記憶手段7などからRAM3に読み出す。ステップS2は、前記読み出したアルペジオパターンデータの発音パターンデータから音域情報を取得する。ここで、ステップS2以降の処理は、各出力トラック毎(発音パターンデータ毎)に行うものとして説明する。ステップS3は、前記読み出したアルペジオパターンデータの発音パターンデータから特性情報を取得する。ここで、発音パターンデータに音域情報や特性情報が含まれておらず、音域情報や特性情報を取得できない場合には、上述したようにして発音パターンデータを分析してこれらの情報を取得する。ステップS4は、各種初期設定を実行する。この初期設定としては、例えばユーザにより設定される音域拡張幅であるオクターブレンジを「0」にセットする、音域として使用できる音域最大値を「4(オクターブ)」にセットする、鍵盤数に応じて決まる発音可能音域(例えば、鍵盤数が61鍵である場合には「C1〜C6」、88鍵である場合には「A−1〜C7」)を使用鍵域に仮セットする、ポインタ1を読み出したアルペジオパターンデータの発音パターンデータに定義されている先頭の1音分のデータの記憶位置にセットする、ループカウンタを「0」にセットするなどがある。
ステップS5は、ユーザによるアルペジオ鍵域内での押鍵操作の開始を検出する。ステップS6は、前記取得した特性情報が「フレーズ」以外及び「その他」以外である場合に、ユーザにより押鍵操作されたアルペジオ鍵域内の各鍵に対応付けられている押鍵音を発音パターンデータに適用する順番を決め(例えば、特性情報が「up」のときは低い音高順、特性情報が「down」のときは高い音降順とする)、1番目に適用する押鍵音にポインタ2をセットする。また、特性情報が「フレーズ」以外の発音パターンデータについては、数値の小さいキー番号から順に、ユーザにより押鍵操作されたアルペジオ鍵域内の各鍵に対応付けられている押鍵音を低い音高順に割り当てる。ステップS7は、ユーザによるアルペジオ鍵域内での押鍵操作が持続中であるか否かを判定する。ユーザによるアルペジオ鍵域内での押鍵操作が終了している(持続されていない)と判定した場合には(ステップS7のNO)、当該処理を終了する。ユーザによるアルペジオ鍵域内での押鍵操作が持続中であると判定した場合には(ステップS7のYES)、ユーザによる音域拡張指示スイッチの操作に応じた音域拡張指示を受け付けたか否かを判定する(ステップS8)。音域拡張指示を受け付けたと判定した場合には(ステップS8のYES)、オクターブレンジを前記受け付けた音域拡張指示の値に変更する(ステップS9)。
ステップS10は、取得した音域情報に規定されている音域とオクターブレンジに記憶した音域拡張値の絶対値とを加算し、該加算した結果の加算値が前記セットした音域最大値以下であるか否かを判定する。加算値が音域最大値以下であると判定した場合には(ステップS10のYES)、前記加算値(音域情報に規定されている音域+オクターブレンジの音域拡張値の絶対値)を「発音音域」とする(ステップS11)。一方、加算値が音域最大値以下でないと判定した場合には(ステップS10のNO)、音域最大値を「発音音域」とする(ステップS12)。ステップS13は、「音域情報+ループカウンタ」の値が発音音域よりも小さいか否かを判定する。「音域情報+ループカウンタ」の値が発音音域よりも大きいと判定した場合には(ステップS13のNO)、ループカウンタを「0」にセットするとともに、ポインタ1をリセット、つまりポインタ1を読み出したアルペジオパターンデータの発音パターンデータに定義されている先頭の1音分のデータの記憶位置に再セットする(ステップS14)。ステップS15は、前記取得した特性情報が「フレーズ」又は「その他」であるか否かを判定する。前記取得した特性情報が「フレーズ」又は「その他」である場合には(ステップS15のYES)、発音パターンデータからポインタ1が指し示す記憶位置にある1音分のデータを読み出し、自動伴奏音(発音データ)を生成する(ステップS16)。ここで、特性情報が「その他」である場合には、キー番号に割り当てられた押鍵音に従い、発音パターンデータ中のオクターブシフト情報(Oct)に従うオクターブの調整を加味して自動伴奏音(発音データ)を生成する。他方、特性情報が「フレーズ」である場合には、キー番号に定義されたノートナンバーに従い、自動伴奏音(発音データ)を生成する。前記取得した特性情報が「フレーズ」及び「その他」でない場合には(ステップS15のNO)、発音パターンデータからポインタ1が指し示す記憶位置にある1音分のデータを読み出し、ポインタ2にセットされた押鍵音より自動伴奏音(発音データ)を生成する(ステップS17)。ただし、この場合には、発音パターンデータ中のオクターブシフト情報(Oct)に従うオクターブの調整を加味しなくてよい。
図3Bに示すように、ステップS18は、前記取得した特性情報が「フレーズ」又は「その他」であるか否かを判定する。前記取得した特性情報が「フレーズ」又は「その他」であると判定した場合には(ステップS18のYES)、オクターブレンジの音域拡張値が0以上であるか否かを判定する(ステップS22)。すなわち、音域拡張が、発音パターンデータの音域情報に定義されているデフォルトの音域よりも、高いほうの音域に拡張するよう指示されているか否かを判定する。オクターブレンジの音域拡張値が0以上でないと判定した場合、つまりデフォルトの音域よりも低いほうの音域に拡張するよう指示されている場合には(ステップS22のNO)、生成した自動伴奏音の音高をループカウンタ分だけ下げるようにオクターブシフトする(ステップS24)。オクターブレンジの音域拡張値が0以上であると判定した場合、つまりデフォルトの音域よりも高いほうの音域に拡張するよう指示されている場合には(ステップS22のYES)、生成した自動伴奏音の音高をループカウンタ分だけ上げるようにオクターブシフトする(ステップS23)。前記取得した特性情報が「フレーズ」及び「その他」でないと判定した場合には(ステップS18のNO)、生成した自動伴奏音の音高を、ループカウンタ分だけ上げるようにオクターブシフトする(ステップS19)。そして、オクターブレンジの音域拡張値が0以上であるか否かを判定する(ステップS20)。オクターブレンジの音域拡張値が0以上でないと判定した場合には(ステップS20のNO)、生成した自動伴奏音の音高を、オクターブレンジの音域拡張値の絶対値分だけ下げるようにオクターブシフトする(ステップS21)。
ステップS25は、生成した自動伴奏音の音高を、発音可能音域内に納め音源に出力する。ステップS26は、前記取得した特性情報が「フレーズ」又は「その他」であるか否かを判定する。前記取得した特性情報が「フレーズ」又は「その他」であると判定した場合には(ステップS26のYES)、ポインタ1が発音パターンデータに定義されている1音分のデータのうち、最後のデータの記憶位置を指し示しているか否かを判定する(ステップS34)。ポインタ1が発音パターンデータに定義されている最後のデータの記憶位置を指し示していると判定した場合には(ステップS34のYES)、ポインタ1を発音パターンデータの先頭の1音分のデータの記憶位置に戻すようセットする(ステップS35)。そして、ループカウンタに「1」を加算して(ステップS36)、ステップS7の処理に戻る。一方、ポインタ1が発音パターンデータに定義されている最後のデータの記憶位置を指し示していないと判定した場合には(ステップS34のNO)、ポインタ1を1つ進め、発音パターンデータの後続する1音分のデータの記憶位置にセットし(ステップS37)、ステップS7の処理に戻る。すなわち、押鍵があるとアルペジオパターンに従って順次発音データを出力するのであるが、特性情報が「フレーズ」の場合にはアルペジオパターンデータの最後に達すると、また始めに戻り、押鍵が続く間は周期的に同様な発音データの出力を繰り返す。
他方、上記ステップS26において、前記取得した特性情報が「フレーズ」及び「その他」でないと判定した場合には(ステップS26のNO)、ポインタ1が発音パターンデータに定義されている1音分のデータのうち、最後のデータの記憶位置を指し示しているか否かを判定する(ステップS27)。ポインタ1が発音パターンデータに定義されている最後のデータの記憶位置を指し示していると判定した場合には(ステップS27のYES)、ポインタ1を発音パターンデータの先頭の1音分のデータの記憶位置に戻すようセットする(ステップS28)。ポインタ1が発音パターンデータに定義されている最後のデータの記憶位置を指し示していないと判定した場合には(ステップS27のNO)、ポインタ1を1つ進め、発音パターンデータの後続する1音分のデータの記憶位置にセットする(ステップS29)。すなわち、押鍵があるとアルペジオパターンに従って順次発音データを出力するのであるが、アルペジオパターンデータの最後に達すると、また始めに戻り、押鍵が続く間は周期的に同様な発音データの出力を繰り返す。
ステップS30は、ポインタ2が順位付けた複数の押鍵音のうち最後(一番低い順位)の押鍵音を指し示しているか否かを判定する。ポインタ2が順位付けた複数の押鍵音のうち最後の押鍵音を指し示していると判定した場合には(ステップS30のYES)、ポインタ2を順位付けた複数の押鍵音のうち最初(一番高い順位)の押鍵音を指し示すようセットする(ステップS32)。そして、ループカウンタに「1」を加算して(ステップS33)、ステップS7の処理に戻る。一方、ポインタ2が順位付けた複数の押鍵音のうち最後の押鍵音を指し示していると判定した場合には(ステップS30のNO)、ポインタ2を1つ進め、ポインタ2を順位付けた複数の押鍵音のうち次の順位の押鍵音を指し示すようセットし(ステップS31)、ステップS7の処理に戻る。
次に、上記処理に従って、発音パターンデータに基づき生成されるアルペジオ音の音域拡張について、具体例を用いて説明する。ここでは、特性情報が「up」(又は「down」)の場合と、特性情報が「フレーズ」(又は「その他」)の場合とに図を分けて説明する。図4は、特性情報が「up」である発音パターンデータに基づき生成されるアルペジオ音の音域拡張について説明するための概念図である。図5は、特性情報が「フレーズ」である発音パターンデータに基づき生成されるアルペジオ音の音域拡張について説明するための概念図である。図の左側に発音パターンデータを、図の右側に押鍵状態さらには音域拡張指示に基づき生成される発音データの具体例を示す。
図4を参照しながら、特性情報が「up」である発音パターンデータに基づき生成されるアルペジオ音の音域拡張について説明する。まず、音域拡張指示として、アルペジオ音域を「+1」拡張するように指示されている場合について説明する。例えば、押鍵状態として、アルペジオ鍵域内に含まれる鍵のうち、「C3」、「E3」がそれぞれ割り当てられている2つの鍵が同時に押鍵操作されているような場合、発音パターンデータに定義されているキー番号「1(Key=1)」に「C3」、キー番号「2(Key=2)」に「E3」がそれぞれ割り当てられる(ここでは特性情報が「up」であることから、低音側の音高のノートナンバーから若いキー番号を順に割り当てる)。発音パターンデータの1音目(Timing=0000)にはキー番号として「1」が設定されていることから、このキー番号「1」に割り当てられたノートナンバー「C3」により音高が決められ(ステップS17参照:キー番号とポインタ2とは対応する)、1音目は「C3」が発音される(ステップS25参照)。発音パターンデータの2音目(Timing=0240)にはキー番号として「2」が設定されていることから、このキー番号「2」に割り当てられたノートナンバー「E3」により音高が決められ(ステップS17参照)、2音目は「E3」が発音される(ステップS25参照)。同様にすると、発音パターンデータの3音目(Timing=0480)にはキー番号として「1」、発音パターンデータの4音目(Timing=0720)にはキー番号として「2」が設定されていることから、1音目は「C3」、2音目は「E3」とそれぞれ音高が決められるが(ステップS17参照)、これらの処理の前において「ループカウンタ」は「0」から「1」に変更されていることから(ステップS33参照)、前記決定した音高よりも1オクターブ上の「C4」、「E4」がそれぞれ3音目、4音目として発音される(ステップS19及びステップS25参照)。
発音パターンデータの最後の1音分のデータである4音目(Timing=0720)のデータを用いた処理が終わると、発音パターンデータの先頭の1音目(Timing=0000)のデータに戻って処理を続けることから(ステップS28参照)、発音パターンデータの1音目(Timing=0000)に従って5音目の処理が行われる。発音パターンデータの1音目(Timing=0000)にはキー番号として「1」が設定されていることから、このキー番号「1」に割り当てられたノートナンバー「C3」により音高が決められるが(ステップS17参照)、これらの処理の前において「ループカウンタ」が「1」から「2」に変更されていることから(ステップS33参照)、前記決定した音高よりも2オクターブ上の「C5」が5音目に決められる(ステップS19参照)。同様にすると、発音パターンデータの2音目(Timing=0240)に従って、6音目は「E5」となる。6音目の処理が終了すると、ループカウンタ及びポインタ1がリセットされることから(ステップS14参照)、7音目の処理には発音パターンデータの先頭の1音目(Timing=0000)のデータが用いられる。したがって、キー番号「1」に割り当てられたノートナンバー「C3」により音高が決められ、またループカウンタは上記のようにして「0」となっていることから、「0」オクターブ上げても音高は変わらず、7音目はそのまま「C3」が発音される(図示せず)。
このようにして、音域拡張指示として、アルペジオ音域を「+1」拡張するように指示されており、アルペジオ鍵域内に含まれるノートナンバー「C3」、「E3」がそれぞれ割り当てられている鍵が同時に押鍵された場合においては、1音目から順に「C3」、「E3」、「C4」、「E4」、「C5」、「E5」の音高を持つ8分音符(Gate=220)で構成されたアルペジオパターンを繰り返す発音データが生成されることになる。すなわち、特性情報が「up」(又は「down」)である発音パターンデータを用いている場合に、音域拡張指示として、アルペジオ音域を「+」方向(高い音域方向)に拡張するように指示されたような場合には、音域拡張前に比べて最低音高を変更することなしに、指定された「+値」分高いオクターブだけ音域が拡張されるようになる。
一方、音域拡張指示として、アルペジオ音域を「−1」拡張するように指示されている場合について説明する。発音パターンデータの1音目(Timing=0000)にはキー番号として「1」が設定されていることから、このキー番号「1」に割り当てられたノートナンバー「C3」により音高が決められるが、この場合には、ループカウンタ分のオクターブ上げる処理(ステップS19参照)及びオクターブレンジの絶対値分(ここでは「1」固定)のオクターブ下げる処理(ステップS21参照)を行うことから、1音目は前記決定した「C3」を「0」オクターブ上げてから「1」オクターブ下げた音高である「C2」となる(ループカウンタが「0」、オクターブレンジの絶対値が「1」)。同様にすると、発音パターンデータの2音目(Timing=0240)に従って、2音目は「E2」となる。発音パターンデータの3音目(Timing=0480)に従って3音目を作成する際には、キー番号として「1」が設定されていることから、このキー番号「1」に割り当てられたノートナンバー「C3」により音高が決められるが、この場合には「ループカウンタ」が「1」、「オクターブレンジの絶対値」が「1」(固定値)となっていることから、3音目は前記決定した「C3」を「1」オクターブ上げてから「1」オクターブ下げた音高、つまり「C3」そのままとなる。同様にすると、発音パターンデータの4音目(Timing=0720)に従って、4音目は「E3」となる。
発音パターンデータの最後の1音分のデータである4音目(Timing=0720)のデータを用いた処理が終わると、発音パターンデータの先頭の1音目(Timing=0000)のデータに戻って処理を続けることから(ステップS28参照)、発音パターンデータの1音目(Timing=0000)に基づき5音目の処理が行われる。発音パターンデータの1音目(Timing=0000)にはキー番号として「1」が設定されていることから、このキー番号「1」に割り当てられたノートナンバー「C3」により音高が決められるが、この処理の際には「ループカウンタ」が「2」、「オクターブレンジの絶対値」が「1」となっていることから、5音目は「C3」を「2」オクターブ上げてから「1」オクターブ下げた音高である「C4」となる。同様にすると、発音パターンデータの2音目(Timing=0240)に従って、6音目は「E4」となる。6音目の処理が終了すると、ループカウンタ及びポインタ1がリセットされることから(ステップS14参照)、7音目の処理には発音パターンデータの先頭の1音目(Timing=0000)のデータが用いられる。したがって、キー番号「1」に割り当てられたノートナンバー「C3」により音高が決められるが、この場合にはループカウンタは上記のようにして「0」とされることから、前記決定した「C3」を「0」オクターブ上げてから「1」オクターブ下げた音高である「C2」が発音される(図示せず)。
このようにして、音域拡張指示として、アルペジオ音域を「−1」拡張するように指示されており、アルペジオ鍵域内に含まれるノートナンバー「C3」、「E3」がそれぞれ割り当てられている鍵が同時に押鍵された場合においては、1音目から順に「C2」、「E2」、「C3」、「E3」、「C4」、「E4」の音高を持つ8分音符(Gate=220)で構成されたアルペジオパターンを繰り返す発音データが生成されることになる。すなわち、特性情報が「up」(又は「down」)である発音パターンデータを用いている場合に、音域拡張指示として、アルペジオ音域を「−」方向(低い音域方向)に拡張するように指示された場合には、音域拡張前に比べて最低音高が変更されて、指定された「−値」分低いオクターブだけ音域が拡張されるようになる。
次に、図5を参照しながら、特性情報が「フレーズ」である発音パターンデータに基づき生成されるアルペジオ音の音域拡張について説明する。まず、音域拡張指示として、アルペジオ音域を「+1」拡張するように指示されている場合について説明する。例えば、押鍵状態として、アルペジオ鍵域内に含まれる鍵のうち、「C3」が割り当てられている鍵が押鍵操作されると、発音パターンデータの1音目(Timing=0000)にはキー番号としてノートナンバー「C3」が設定されており、またここではループカウンタが「0」であって「0」オクターブ上げても(ステップS23参照)音高は変わらないので、1音目はそのまま「C3」となる。2音目のデータ(Timing=0240)はキー番号としてノートナンバー「C3」が設定されていることから、2音目は「C3」となる。同様にすると、3音目、4音目は「E3」、5、6音目は「G3」、7音目は「A3」、8音目は「G3」となる。
発音パターンデータの最後の1音分のデータである8音目(Timing=1680)のデータを用いた処理が終わると、発音パターンデータの先頭の1音目(Timing=0000)のデータに戻って処理を続けることから(ステップS35参照)、発音パターンデータの1音目(Timing=0000)に基づき9音目の処理が行われる。発音パターンデータの1音目(Timing=0000)にはキー番号としてノートナンバー「C3」が設定されているが、この処理の前には「ループカウンタ」が「1」とされていることから(ステップS36参照)、「C3」の1オクターブ上である「C4」が9音目となる(ステップS23参照)。同様にすると、10音目〜16音目までは上記2音目〜8音目までのそれぞれの音高に1オクターブ上の音高に決められる。16音目の処理が終了すると、再度発音パターンデータの先頭の1音目(Timing=0000)に戻って処理を続けるが、16音目の処理が終了した際に「ループカウンタ」は「0」にリセットされることから(ステップS14参照)、17音目以降は1音目〜16音目までと同様の音高が繰り返されることになる。
このようにして、音域拡張指示として、アルペジオ音域を「+1」拡張するように指示されており、アルペジオ鍵域内に含まれるノートナンバー「C3」が割り当てられている鍵が押鍵された場合においては、図示したような音高を持つ8分音符(Gate=220)で構成されたアルペジオパターンを繰り返す発音データが生成されることになる。すなわち、特性情報が「フレーズ」(又は「その他」)である発音パターンデータを用いている場合に、音域拡張指示として、アルペジオ音域を「+」方向(高い音域方向)に拡張するように指示されたような場合には、音域拡張前に比べて最低音高を変更することなしに、指定された「+値」分高いオクターブだけ音域が拡張されるようになる。
一方、音域拡張指示として、アルペジオ音域を「−1」拡張するように指示されている場合について説明する。1音目〜8音目までについては、上記したアルペジオ音域を「+1」拡張するように指示されている場合と同様であることから、説明を省略する。発音パターンデータの最後の1音分のデータである8音目(Timing=1680)のデータを用いた処理が終わり、再度発音パターンデータの先頭の1音目(Timing=0000)のデータに戻って9音目の処理を行う場合、発音パターンデータの1音目(Timing=0000)にはキー番号としてノートナンバー「C3」が設定されているが、この場合には、ループカウンタ分(ここでは「1」)のオクターブだけ音高を下げる処理(ステップS24参照)を行うことから、9音目は「C2」となる。同様にすると、9音目〜16音目までは2音目〜8音目までのそれぞれの音高に1オクターブ減算した音高に決められる。16音目の処理が終了すると、再度発音パターンデータの先頭の1音目(Timing=0000)に戻って処理を続けるが、16音目の処理が終了した際に「ループカウンタ」は「0」にリセットされることから(ステップS14参照)、17音目以降は1音目〜16音目までと同様の音高が繰り返される。
このようにして、音域拡張指示として、アルペジオ音域を「−1」拡張するように指示されており、アルペジオ鍵域内に含まれるノートナンバー「C3」が割り当てられている鍵が押鍵された場合においては、図示のように、フレーズ1ループ目を発音パターンデータに基づく元音域内の音高を持つ8分音符(Gate=220)で構成される発音データ、フレーズ2ループ目を発音パターンデータに基づく元音域よりも1オクターブ下の音域内の音高を持つ8分音符(Gate=220)で構成される発音データ、が生成されることになる。すなわち、特性情報が「フレーズ」(又は「その他」)である発音パターンデータを用いている場合に、音域拡張指示として、アルペジオ音域を「−」方向(低い音域方向)に拡張するように指示された場合には、音域拡張前に比べて最低音高が変更されて、指定された「−値」分低いオクターブだけ音域が拡張されるようになる。
以上のようにすることによって、発音パターンデータそのものに変更を加えることなく、ユーザは演奏中に自由にアルペジオ音を展開すべき音域を変える(拡張する)ことができる。また、発音パターンデータに基づく元音域を考慮して音域拡張を行うので、ユーザは使用する発音パターンデータに基づく元音域について認識していなくてよい。さらに、ユーザによる音域拡張(オクターブレンジ)の指示に応じてアルペジオ音を展開する音域が自動的に拡張されるが、単純に拡張するのではなく、対象となるアルペジオパターンデータの持つ音域や、発音パターンデータの特性(音の並びの規則性)を考慮しながら音域を拡張するようになることから、無理のない自然な音域拡張が行われる。すなわち、音域拡張時において、発音パターンデータの持つ特性に応じたアルペジオ音を生成するので、より聴感上自然で変化に富んだアルペジオ音での演奏を行うことができるようになる。
なお、音域拡張指示は演奏前もしくは演奏途中でユーザが操作子により行うとよい。また、音域拡張指示をあらかじめプログラムしたデータを装置に入力するようにしてもよい。
なお、発音パターンデータは複数種類、装置内に記憶されていてもよいし、外部装置やネットワークを通して参照するような仕組みであってもよい。複数種類の発音パターンデータが存在する場合は、使用するものをユーザが任意に指定することができるようにしてよい。
なお、発音パターンデータに限らず他の自動伴奏パターンデータでもよい。 例えば、伴奏スタイルを用いる自動伴奏装置では、ユーザの選択した伴奏スタイルに応じて記憶されている自動伴奏パターンデータに基づいて、鍵盤などから検出した入力和音に合わせて自動伴奏データを生成する。自動伴奏パターンデータは、個々の伴奏音に対応した音高データとタイミングデータをセットにしたもので、例えば「Cmaj(Cメジャー)」などの所定和音に基づいたソースパターンとして用意されている。こうした自動伴奏装置では、入力和音の種類に応じてソースパターン内の音高を変換するとともに、全音高を入力和音の根音に応じてシフトし、和音に合った音高の伴奏音を生成する。
なお、各発音パターンデータの持つ特性情報は1つの識別子としてデータ内に記憶されていてもよいし、実際の発音パターンデータを分析して決定してもよい。各発音パターンデータが持つ音域情報についても同様で、1つの識別子としてデータ内に記憶されていてもよいし、実際の発音パターンデータを分析して取得してもよい。特性情報と音域情報とを識別子で持つ場合、2種類別々の識別子でもよいし、1つの識別子で見分けてもよい。
なお、音域を拡張した結果、装置の発音可能な音域をはみ出してしまう場合には、例えば、はみ出す音高を1オクターブ上下移動するなどの処理を行って、装置の発音可能な音域内に収めるようにするとよい。
なお、発音パターンデータの持つ音域情報は具体的な音高で示されていてもよいし、例えば1オクターブや12半音などの幅で示されていてもよい。
なお、上述した実施例のように、発音パターンデータが複数出力トラック分ある場合には、音域拡張の指示を出力トラック別にできるようにしてもよい。あるいは、発音パターンデータが複数出力トラック分あっても、複数出力トラック一括で音域拡張を指示できるようにしてあってもよい。
なお、発音パターンデータのフォーマットは、各イベントの発生時刻を1つ前のイベントからの時間で表した「イベント+相対時間」、イベントの発生時刻を曲や小節内における絶対時間で表した「イベント+絶対時間」、音符の音高と符長あるいは休符と休符長で表した「音高(休符)+符長」、演奏の最小分解能毎にメモリの領域を確保し、イベントの発生する時刻に対応するメモリ領域にイベントを記憶した「ベタ方式」等、どのような形式であってもよい。
1…CPU、2…ROM、3…RAM、4…通信インタフェース、4A…外部機器、5…入力操作部、6…表示部、6A…ディスプレイ、7…外部記憶装置、8…音源、8A…サウンドシステム、1D…通信バス