以下、本発明の実施の形態を図面に基づいて詳細に説明する。
図1は、本発明の一実施の形態に係るアルペジエータの概略構成を示すブロック図である。
同図に示すように、本実施の形態のアルペジエータは、鍵盤等の演奏操作子および各種スイッチ等の設定操作子からなる操作子群1と、該操作子群1の各操作子の操作状態を検出する検出回路2と、装置全体の制御を司るCPU3と、該CPU3が実行する制御プログラムや各種テーブルデータ等を記憶するROM4と、前記演奏操作子から入力された演奏情報(音符情報)、アルペジオパターンデータ、各種入力情報および演算結果等を一時的に記憶するRAM5と、前記制御プログラムを含む各種アプリケーションプログラムや各種アルペジオパターンデータ、各種データ等を記憶する外部記憶装置6と、各種情報等を表示する、たとえば液晶ディスプレイ(LCD)および発光ダイオード(LED)等を備えた表示装置7と、外部MIDI(Musical Instrument Digital Interface)機器等の外部機器100を接続し、この外部機器100とデータの送受信を行う通信インターフェース(I/F)8と、前記演奏操作子から入力された演奏情報および前記RAM5に記憶されたアルペジオパターンデータに基づいて生成したアルペジオ発音データ等を楽音信号に変換する音源回路9と、該音源回路9からの楽音信号に各種効果を付与するための効果回路10と、該効果回路10からの楽音信号を音響に変換する、たとえば、DAC(Digital-to-Analog Converter)やアンプ、スピーカ等のサウンドシステム11とにより構成されている。
上記構成要素2〜10は、バス12を介して相互に接続され、通信I/F8には外部機器100が接続され、音源回路9には効果回路10が接続され、効果回路10にはサウンドシステム11が接続されている。
外部記憶装置6は、たとえば、フレキシブルディスク(FD)、ハードディスク(HD)、CD−ROM、DVD(digital versatile disc)、光磁気ディスク(MO)および半導体メモリなどの記憶媒体とその駆動装置である。記憶媒体は、駆動装置から着脱可能であってもよいし、外部記憶装置6自体が、本実施の形態のアルペジエータから着脱可能であってもよい。あるいは、記憶媒体も外部記憶装置6も着脱不可能であってもよい。なお、外部記憶装置6(の記憶媒体)には、前述のように、CPU3が実行する制御プログラムも記憶でき、ROM4に制御プログラムが記憶されていない場合には、この外部記憶装置6に制御プログラムを記憶させておき、それをRAM5に読み込むことにより、ROM4に制御プログラムを記憶している場合と同様の動作をCPU3にさせることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。
通信I/F8には、図示例では、外部機器100が接続されているが、これに限られず、たとえばLAN(local area network)やインターネット、電話回線等の通信ネットワークを介して、サーバコンピュータが接続されるようにしてもよい。この場合、外部記憶装置6に上記各プログラムや各種パラメータが記憶されていなければ、通信I/F8は、サーバコンピュータからプログラムやパラメータをダウンロードするために用いられる。クライアントとなるアルペジエータは、通信I/F8および通信ネットワークを介してサーバコンピュータへとプログラムやパラメータのダウンロードを要求するコマンドを送信する。サーバコンピュータは、このコマンドを受け、要求されたプログラムやパラメータを、通信ネットワークを介してアルペジエータへと配信し、アルペジエータが通信I/F8を介して、これらプログラムやパラメータを受信して外部記憶装置6に蓄積することにより、ダウンロードが完了する。
なお、本実施の形態のアルペジエータは、上述の構成から分かるように、電子鍵盤楽器上に構築されたものであるが、これに限らず、鍵盤を外部接続した汎用的なパーソナルコンピュータ上に構築してもよい。また、鍵盤楽器の実施形態に限らず、弦楽器タイプ、管楽器タイプ、打楽器タイプ等の他の実施形態でもよい。
以上のように構成されたアルペジエータが実行する制御処理を、まず図2〜図5を参照してその概要(ただし、一部は詳細)を説明し、次に図6〜図9を参照して詳細に説明する。
本実施の形態のアルペジエータは、主として
(A)ユーザによって選択されたアルペジオパターンデータ中の発音パターンデータに基づいて新発音パターンデータを作成する新発音パターンデータ作成処理
(B)上記(A)の新発音パターンデータ作成処理によって作成された新発音パターンデータおよびユーザの押鍵操作によって入力された演奏情報(本実施の形態では、音高)に基づいて発音データリストを生成する発音データリスト生成処理
(C)上記(B)の発音データリスト生成処理によって生成された発音データリストを再生する発音データリスト再生処理
(D)ユーザの押鍵/離鍵操作に応じてノートオン/ノートオフイベントを生成して前記音源回路9に出力することで、押鍵音の発音/離鍵音の消音を行う発音/消音処理
を行う。
図2は、本実施の形態のアルペジエータが実行する制御処理、つまり上記(A)〜(D)の処理の制御構成を示すブロック図であり、図3は、アルペジオパターンデータに含まれる発音パターンデータから作成された新発音パターンデータのフォーマットの一例と、その新発音パターンデータとユーザの押鍵操作によって入力された押鍵音の音高に基づいて生成した発音データリストを示す図である。
アルペジオパターンデータは、たとえば前記外部記憶装置6内に予め複数種類(たとえば、音色毎に複数種類)記憶され、その中からユーザがいずれかを選択すると、選択されたアルペジオパターンデータが、外部記憶装置6から読み出されて、前記RAM5の所定位置に確保されたアルペジオパターンデータ格納領域(図示せず)に格納される。図2には、ユーザがアルペジオパターンデータ群から選択したアルペジオパターンデータNに基づいてアルペジオ発音データを生成する様子が示されている。
各アルペジオパターンデータにはそれぞれ、発音パターンデータが含まれている。発音パターンデータは、図3に示すように、発音タイミング(Timing)、ゲートタイム(Gate)、キーナンバ(Key)、オクターブ(Oct)およびベロシティ(Vel)を1組のデータ(以下、「イベントデータ」と言う)とする複数組のイベントデータによって構成されている(ただし図3は、上述のように新発音パターンデータのフォーマットを示し、その作成基となる発音パターンデータのフォーマットを示していないが、両者のフォーマットは同じとする)。ここで、発音タイミングは、対応する(つまり、同じ組に属する)キーナンバの押鍵音を発音するタイミングを「小節:拍:クロック数」で表したものであり、本実施の形態では、480クロックが1拍分の時間に相当する。ゲートタイムは、上記発音タイミングで発音が開始された押鍵音の発音継続時間(つまり音長)をクロック数で表したものである。キーナンバは、ユーザが複数の鍵を同時に押したとき(押鍵開始タイミングは、同時でもよいし、ずれていてもよく、要は複数鍵が同時に押されている期間があればよい。以下、同様)に入力される押鍵音に対して、音高の低い順に番号付けしたものである。オクターブは、対応するキーナンバの押鍵音をどれだけオクターブシフトするかを示したものである。ベロシティは、対応するキーナンバの押鍵音を発音する際のベロシティの値を示したものである。
図3には、ユーザの押鍵により3つの音高“C3”,“E3”および“G3”が同時に入力されたときに、新発音パターンデータ、つまり前記(A)の新発音パターンデータ作成処理によって作成された新発音パターンデータを用いて生成した発音データリストが記載されている。図示例の新発音パターンデータは4小節長であるが、元のアルペジオパターンデータ(ここでは、アルペジオパターンデータN)中の発音パターンデータは4小節長以上である。
押鍵音“C3”,“E3”および“G3”には、前記ルールに従ってそれぞれ“1”,“2”および“3”のキーナンバが付与されるので、発音データリストの、たとえば先頭(“1:1:000”)から第2拍の末尾(“1:2:479”)までのノートナンバ(Note)は、次のように生成される。すなわち、
タイミング“1:1:000”:C4(発音パターンデータの発音タイミング“1:1:000”におけるキーナンバ“1”の押鍵音の音高(“C3”)を“1”オクターブシフトしたもの)
タイミング“1:1:240”:G3(発音パターンデータの発音タイミング“1:1:240”におけるキーナンバ“3”の押鍵音の音高(“G3”)を“0”オクターブシフトしたもの)
タイミング“1:2:000”:E3(発音パターンデータの発音タイミング“1:2:000”におけるキーナンバ“2”の押鍵音の音高(“E3”)を“0”オクターブシフトしたもの)
タイミング“1:2:240”:C3(発音パターンデータの発音タイミング“1:2:240”におけるキーナンバ“1”の押鍵音の音高(“C3”)を“0”オクターブシフトしたもの)
他の拍の各タイミングのノートナンバも、同様にして生成される。
なお本実施の形態では、新発音パターンデータとして元の発音パターンデータから4小節長(図3の例では、4/4拍子)分切り出したものを採用しているが、発音データリストの生成は、後述するようにユーザの押鍵操作で開始された後、その離鍵操作があるまで停止されないので、ユーザの押鍵操作から離鍵操作に至るまでの時間が4小節長を超えると、発音データリストは4小節長を超えて生成される。したがって、押鍵音が変更されないまま、発音データリストが4小節長を超えて生成されたときには、第5小節目以降のノートナンバは、第1〜第4小節で生成されたノートナンバが繰り返し生成される。ただし、発音データリストに登録される第5小節目以降の発音データのタイミングは、発音パターンデータ中の対応する発音タイミングをそのまま使うことができず、新発音パターンデータをループして使用する回数(以下、「ループ回数」と言う)×新発音パターンデータの時間長分、当該発音タイミングを時間的に遅く(後ろ)にシフトする必要がある。たとえば、ループ回数が2回目の先頭の発音データのタイミングは、図3に示すように、新発音パターンデータ中の対応する発音タイミング“1:1:000”に対して4小節分後ろにシフトされ、“5:1:000”となっている。ここで、ループ回数は“0”を初期値としているので、図3の「ループ2回目」とは、ループ回数=1のことである(この事情は、図4および図5でも同様である)。なお、新発音パターンデータとして切り出す時間長は、元の発音パターンデータ全体の時間長より短ければ、上記4小節長に限られないことは言うまでもない。
図2に戻り、ユーザの指示に応じてアルペジオ再生モードに移行し、ユーザが、アルペジオパターンデータを選択するとともに開始位置、終了位置および開始位置シフト量を設定し(ブロック1b)、アルペジオ発音データの生成開始を指示した後、押鍵操作によって、少なくとも1つ以上の押鍵音を入力する(ブロック1a)と、入力された押鍵音(少なくともキーコードおよびベロシティを含む)は、前記RAM5の所定位置に確保されたキーオンバッファ(図示せず)に格納される。前記CPU3はキーオンバッファの状態を常にチェックし、キーオンバッファに押鍵音が格納されると、その押鍵音に対応するノートオンイベントを生成して前記音源回路9に出力する。これに応じて音源回路9は、入力されたノートオンイベントに対応する楽音信号を生成して、前記効果回路10に出力する。これにより、サウンドシステム11から押鍵音が発音される。
次にCPU3は、新発音パターンデータ、つまりアルペジオパターンデータN中の発音パターンデータを前記開始位置から前記終了位置まで切り出すことによって得られた発音パターンデータと、キーオンバッファに格納された押鍵音の音高(キーコード)に基づいて、前述のようにして発音データリストを生成する(ブロック3a)。なお前記ブロック1bでは、「開始位置シフト量」も設定できるように構成されているが、これに基づいた制御処理については、後述する。また本発明は、アルペジオパターンデータ(の発音パターンデータ)の一部を使用することで、新たなアルペジオパターンデータを生成して再生したり、保存したりすることに特徴があるので、本実施の形態では常に、アルペジオパターンデータの一部を使用することにする。つまり、「開始位置」および「終了位置」のうち、少なくとも一方が常に設定されるものとする。しかし、これは説明の都合上であって、「開始位置」および「終了位置」のいずれも設定されず(この場合、「開始位置シフト量」は設定できてもできなくてもよい)、前記従来のアルペジエータのようにアルペジオパターンデータ全体を用いて発音データリストを生成できるように構成してもよい。
このようにして生成された(あるいは生成中の)発音データリストは、図示しないタイマ割り込み処理内に埋め込まれた前記(C)の発音データリスト再生処理によって再生される。この(C)発音データリスト再生処理は、具体的には、次のようにして実現される。すなわち、タイマ割り込み処理は、たとえば前記クロックの1周期毎に起動されるとして、
(i)RAM5の所定位置に設けたフリーランカウンタ(図示せず)を、タイマ割り込み処理が起動される度にカウントアップする
(ii)フリーランカウンタのカウント値と発音データリスト中の発音タイミングとを比較し、その結果、両者が一致すると、発音データリストから、その発音タイミングのノートナンバおよびベロシティを読み出し、このノートナンバおよびベロシティを含むノートオンイベントを生成して、音源回路9へ出力する
(iii)上記(ii)でノートオンイベントを生成した場合、フリーランカウンタが、その生成時点を起点として現時点までカウントした値を検出し、その検出値と、生成したノートオンイベントに対応するゲートタイムとを比較し、その結果、両者が一致すると、生成したノートオンイベントに対応するノートオフイベントを生成して、音源回路9に出力する。
なおフリーランカウンタは、押鍵が開始されたタイミングなどの所定のタイミングでリセットする必要があることは言うまでもない。そしてリセットは通常、フリーランカウンタの値を“0”に設定することによって行うが、本実施の形態では、フリーランカウンタの値を“−1”に設定することによって行う。これは、本実施の形態では上述のように、フリーランカウンタがカウントアップされてから、そのカウント値と発音タイミングとが比較されるため、フリーランカウンタを“0”でリセットすると、発音タイミングが“0000”の位置にあるイベントを検出できないからである。また本実施の形態では、発音タイミングの表現形式として「小節:拍:クロック数」を採用する一方、フリーランカウンタのカウントは単純な(たとえば、“1”ずつの)カウントアップであるため、前記(ii)の処理における「比較」は、一方の表現形式を他方の表現形式に合わせた後に行う必要がある。どちらをどちらに合わせても構わないが、本実施の形態では説明の都合上、フリーランカウンタのカウント値を「小節:拍:クロック数」の表現形式に変換した後、発音タイミングと比較することにする。
図4は、本実施の形態のアルペジエータが実行する制御処理を説明するための図であり、同図(a)は、選択された6小節長のアルペジオパターンデータの一部を切り出す様子を示し、同図(b)は、同図(a)のアルペジオパターンデータ中の発音パターンデータに基づいて新たに作成した発音パターンデータを示し、同図(c)は、同図(b)の発音パターンデータを使用して生成した発音データリストに基づいて再生を行ったときの様子を示している。
前述のように、ユーザによって選択されたアルペジオパターンデータは前記アルペジオパターンデータ格納領域に格納されるが、このとき、そのアルペジオパターンデータ中の発音パターンデータを構成する各イベントデータの時間的位置が、たとえば図4(a)に示すように前記表示装置7上に表示される。その表示画面上には、切り出し開始位置および切り出し終了位置をそれぞれ示す矢印とともに、図示しないカーソルも表示される。ユーザは、このカーソルを切り出し開始位置または切り出し開始位置を示す矢印に合わせてドラッグ操作することで、切り出し開始位置または切り出し終了位置を指定する。図示例では、切り出し開始位置として第2小節の先頭が、切り出し終了位置として第5小節の末尾が指定されている。これにより、前記図2のブロック1bにおける「開始位置」として第2小節の先頭が、同「終了位置」として第5小節の末尾が設定される。なお、切り出し開始位置および切り出し終了位置の指定をドラッグ操作で行うと、切り出し開始位置が切り出し終了位置より時間的に遅く指定されたり、切り出し開始位置が当該アルペジオパターンデータの先頭を超えて指定されたり、切り出し終了位置が当該アルペジオパターンデータの末尾を超えて指定されたりすることがあり得る。このようなエラー指定については、ユーザに警告したり、指定そのものをできなくしたりすればよい。
次にユーザが、アルペジオ発音データの生成開始を指示すると、図4(b)に示すように、アルペジオパターンデータ中の発音パターンデータが「開始位置」から「終了位置」まで切り出されて、新たな発音パターンデータが作成される。
そして、この新発音パターンデータおよび入力された押鍵音に基づいて発音データリストが生成され、この発音データリストに基づいて楽音、つまりアルペジオが生成される。図4(c)は、新発音パターンデータを2回使用してアルペジオを生成したときの様子を示している。ただし図示例では、新発音パターンデータ内のキーナンバが読み出される様子が示され、発音データリスト内のノートナンバが再生される様子は示されていない。これは、本発明ではアルペジオパターンデータ(の発音パターンデータ)の一部をどのように切り出し、切り出し後のアルペジオパターンデータ(の発音パターンデータ内のキーナンバ)をどのように読み出してアルペジオを生成するかが問題であって、切り出し後のアルペジオパターンデータ(の発音パターンデータ内のキーナンバ)から発音データリスト内のノートナンバをどのように生成するかは問題ではない(つまり、発音パターンデータ内のキーナンバから発音データリスト内のノートナンバを生成する方法は、前記従来のアルペジエータによってなされている方法をそのまま用いている)からである。
図5は、図4の制御処理と異なる他の制御処理を説明するための図である。図5の制御処理は、図4の制御処理に対して、ユーザがタイミングシフト量を指定した点が異なっている。図5(a)〜(c)はそれぞれ、図4(a)〜(c)に対応している。
図5(a)に示すように、まずユーザが、図4(a)と同じアルペジオパターンデータを選択して、図4(a)と同じ区間の切り出しを指定した上で、さらに2拍分のタイミングシフト量を指定すると、前記図2のブロック1bの「開始位置」、「終了位置」および「開始位置シフト量」にはそれぞれ、「第2小節の先頭」、「第5小節の末尾」および「2拍分」が設定される。
次にユーザが、アルペジオ発音データの生成開始を指示すると、図5(b)に示すように、アルペジオパターンデータ中の発音パターンデータが「開始位置」+「開始位置シフト量」から「終了位置」まで切り出され、さらに「開始位置」から「開始位置」+「開始位置シフト量」まで切り出され、前者の切り出された発音パターンデータの後ろに後者の切り出された発音パターンデータを追加して、新たな発音パターンデータが生成される。
そして、この新発音パターンデータおよび入力された押鍵音に基づいて発音データリストが生成され、この発音データリストに基づいて楽音、つまりアルペジオが生成される。図5(c)は、新発音パターンデータを2回使用してアルペジオを生成したときの様子を示している。
なお、図4(b)および図5(b)の新発音パターンデータは、ユーザの保存の指示により、新たなアルペジオパターンデータとして所定の記憶媒体に記録できるように構成されている。
このように本実施の形態のアルペジエータでは、アルペジオパターンデータの一部を用いてアルペジオを生成することができる。そして、使用したアルペジオパターンデータ(の発音パターンデータ)の一部は、新たなアルペジオパターンデータとして保存するようにしたので、1つのアルペジオパターンデータから複数のアルペジオパターンデータを作成することができる。具体的には、たとえばドラム用のアルペジオパターンでは、7小節間の通常のパターンの後、フィルイン的なパターンが8小節目に入るような構成になっていることがある。このとき、ユーザが8小節目でなく、もっと先にフィルイン的なパターンを入れたい場合には、フィルイン的なパターンの前の通常のパターンの部分を切り出して使い、最後にフィルイン的なパターンを使うというように、切り出したパターンと元のパターンを簡単に組み合わせて利用することができる。
またパターンの切り出しは、基本的には小節の先頭タイミングから始めるが、パターンの特性などによっては小節の途中から始めたいこともある。この場合、本実施の形態のアルペジエータではタイミングシフト量を指定することができるので、ユーザは、そのパターンの特性などを考慮してタイミングシフト量を指定することで、そのパターンの切り出し開始位置を適宜(たとえば、16分音符単位毎に)後ろにずらすことができる。これにより、たとえば切り出した発音パターンデータの先頭に休符が入っている場合など、休符を飛ばしてアルペジオ生成を開始することができる。さらに、このように切り出し開始位置をずらしたアルペジオパターンをループ再生する場合、本実施の形態のアルペジエータでは、再生が進行して切り出し終了位置に到達すると、ずらす前の切り出し開始位置、つまり、図5の例では小節の先頭タイミングに戻るようにしているので、全体として見たときに小節がずれることなくアルペジオ生成を行うことができる。
次に、この制御処理を詳細に説明する。
図6は、本実施の形態のアルペジエータ、特にCPU3が実行するアルペジオ再生モード処理の手順をそれぞれ示すフローチャートであり、本アルペジオ再生モード処理は、ユーザが前記アルペジオ再生モードを選択したときに起動される。
本アルペジオ再生モード処理は、主として
(1)初期設定処理(ステップS1〜S3)
(2)前記(A)の新発音パターンデータ作成処理(ステップS4)
(3)前記(D)の発音/消音処理(ステップS5,S6,S11,S12)
(4)アルペジオ再生のスタート/ストップ処理(ステップS7〜S10,S13,S14)
によって構成されている。
上記(1)の初期化処理では、まずCPU3は、前記外部記憶装置6に記憶されているアルペジオパターンデータ群の一覧を、たとえば前記表示装置7上に表示することでユーザに提示し、ユーザがその中からいずれかのアルペジオパターンデータを選択すると、選択されたアルペジオパターンデータを外部記憶装置6から前記アルペジオパターンデータ格納領域に読み込む(ステップS1)。
次にCPU3は、前述のようにしてアルペジオパターンデータ格納領域内のアルペジオパターンデータを前記表示装置7上に表示し、ユーザによって切り出し開始位置および切り出し終了位置が指定されるのを待つ。ユーザが切り出し開始位置および切り出し終了位置を指定すると、CPU3は、その切り出し開始位置および切り出し終了位置をそれぞれ、前記RAM5の所定位置に確保された切り出し開始位置格納領域および切り出し終了位置格納領域(ともに図示せず)に格納する(ステップS3)。
切り出し開始位置および切り出し終了位置の指定は、図4(a)を用いて前述したように、たとえばアルペジオパターンデータ(中の発音パターンデータを構成する各イベントデータの時間的位置)が表示された画面上の矢印およびカーソルを用いてなされる。この位置の指定は、小節単位や拍単位、さらに細かくクロック単位など、いずれの単位を採用してもよいが、本実施の形態ではクロック単位で指定できるものとする。もちろん、ユーザがその単位をいずれにするか設定できるようにしてもよい。なお、切り出し開始位置および切り出し終了位置が指定されたときに、少なくとも一方の位置が、当該発音パターンデータ内のいずれかのイベントデータの発音継続時間の途中になっていることがある。この場合、そのイベントデータは、切り出し位置で分割してもよいし、切り出し対象から除外するようにしてもよいし、クオンタイズ処理を施した後に切り出すようにしてもよい。また、このようなルールをいくつか用意しておき、ユーザあるいはメーカがいずれかを選択設定できるようにしてもよい。
なお、本実施の形態では前述のように、切り出し開始位置および切り出し終了位置のうちのいずれか一方が設定されない場合があり得るが、設定されない方の格納領域にはデフォルト位置(たとえば、切り出し終了位置が設定されない場合には、元のアルペジオパターンデータの終了位置)を設定しておけばよい。
さらにCPU3は、ユーザによってタイミングシフト量(前記図2の「開始位置シフト量」に相当)が指定されるのを待つ。ユーザがタイミングシフト量を指定すると、CPU3は、そのタイミングシフト量を、RAM5の所定位置に確保されたタイミングシフト量格納領域(図示せず)に格納する(ステップS3)。タイミングシフト量の指定も、前記切り出し開始位置および切り出し終了位置の指定と同様に、表示画面上の矢印およびカーソルを用いて行われる。しかしその指定単位は、前記切り出し開始位置および切り出し終了位置の指定単位より細かく、たとえば、16分音符単位や8分音符単位、4分音符単位、さらに細かくクロック単位のいずれかを採用すればよい。本実施の形態では、クロック単位で指定できるものとするが、ユーザがその単位をいずれにするか設定できるようにしてもよい。なお、前記図4を用いて説明したように、タイミングシフト量は指定されない場合があり、その場合、タイミングシフト量格納領域には“FF”(1バイトで表現される場合)を設定しておけばよい。
次にCPU3は、処理を前記(2)の新発音パターンデータ作成処理に進める。
図7は、この(2)新発音パターンデータ作成処理の詳細な手順を示すフローチャートである。同図に示すように、まずCPU3は、新発音パターンデータを作成するためにRAM5の所定位置に新発音パターンデータ格納領域(図示せず)を確保する(ステップS21)。次にCPU3は、前記タイミングシフト量格納領域をチェックすることで、タイミングシフト量が設定されているかどうかを判別し(ステップS22)、タイミングシフト量が設定されていないとき、つまりタイミングシフト量格納領域に“FF”が格納されているときには、ステップS23〜S25の処理を実行する一方、タイミングシフト量が設定されているとき、つまりタイミングシフト量格納領域に“FF”以外の値が格納されているときには、ステップS26〜S28およびS25の処理を実行する。
タイミングシフト量が設定されていないときには、CPU3は、前記アルペジオパターンデータ格納領域に格納されているアルペジオパターンデータ中の発音パターンデータ内のイベントデータのうち、発音タイミングが前記切り出し開始位置から前記切り出し終了位置までの時間内にあるイベントデータをコピーして、前記新発音パターンデータ格納領域の先頭から書き込む(ステップS23)。そしてCPU3は、このようにして書き込まれた各イベントデータの発音タイミングを切り出し開始位置分、つまり当該アルペジオパターンデータ中の発音パターンデータの先頭から切り出し開始位置までの時間(に相当するクロック数)分前にシフトさせる(ステップS24)。さらにCPU3は、必要に応じて新発音パターンデータ格納領域内の末尾のイベントデータの終了時間を調整する(ステップS25)。末尾のイベントデータは、その発音タイミングが切り出し終了位置より時間的に早い位置にあるために、新発音パターンデータ格納領域に書き込まれているものの、そのゲートタイムで、つまり発音継続時間だけ発音させたときには、切り出し終了位置を超えることがあり得る。上記ステップS25の「調整」とは、末尾のイベントデータをそのゲートタイムで発音させたときに切り出し終了位置を超えないように、そのゲートタイムを調整することを意味する。なお、このような「調整」は、末尾のイベントデータだけでなく、末尾に近いいくつかのイベントデータについても行う必要があり得るが、その場合には、当該イベントデータについても同様の「調整」を行うことは言うまでもない。このようにして新発音パターンデータは、前記図4(b)のように作成される。
一方、タイミングシフト量が設定されているときには、CPU3は、前記アルペジオパターンデータ格納領域に格納されているアルペジオパターンデータ中の発音パターンデータ内のイベントデータのうち、発音タイミングが前記切り出し開始位置にタイミングシフト量分加算した結果の位置(切り出し開始位置+タイミングシフト量)から前記切り出し終了位置までの時間内にあるイベントデータをコピーして、前記新発音パターンデータ格納領域の先頭から書き込む(ステップS26)。そしてCPU3は、当該アルペジオパターンデータ中の発音パターンデータ内のイベントデータのうち、発音タイミングが切り出し開始位置から該切り出し開始位置にタイミングシフト量分加えた位置(切り出し開始位置+タイミングシフト量)までの時間内にあるイベントデータのコピーであって、その各イベントデータの発音タイミングをそれぞれ、切り出し終了位置から切り出し開始位置を減算した結果(切り出し終了位置−切り出し開始位置)分だけ時間的に遅くシフトしたコピーを新発音パターンデータ格納領域に追加する(ステップS27)。さらにCPU3は、このようにして書き込まれた各イベントデータの発音タイミングを切り出し開始位置にタイミングシフト量を加算した結果(切り出し開始位置+タイミングシフト量)分、つまり当該アルペジオパターンデータ中の発音パターンデータの先頭から切り出し開始位置+タイミングシフト量までの時間(に相当するクロック数)分前にシフトさせる(ステップS28)。そしてCPU3は、処理を前記ステップS25に進める。ステップS25の処理については前述したので、ここでは繰り返さない。
次にCPU3は、処理を前記(3)の発音/消音処理に進める。この(3)発音/消音処理では、まずCPU3は、ユーザの押鍵操作に応じて前記検出回路2から出力された演奏情報(押鍵音)を取得し、前記キーオンバッファに格納する(図6のステップS5)。次にCPU3は、キーオンバッファに格納された押鍵情報に基づいてノートオンイベントを生成し、音源回路9に出力する(ステップS6)。なおユーザの押鍵操作は、複数の鍵に対するもののみである必要はなく、1つの鍵に対するものでもよい。そしてCPU3は、ユーザの離鍵操作に応じて検出回路2から出力された離鍵情報(離鍵音)を取得すると、その取得された離鍵情報に基づいてノートオフイベントを生成し、音源回路9に出力する(ステップS11→S12)。これにより、ユーザの押鍵から離鍵に至るまで、その押鍵音が継続して発音される。
前記(4)のアルペジオ生成のスタート/ストップ処理では、CPU3は、前記ステップS5で検出された押鍵がニューキーオンであるか否かを判別する(ステップS7)。この判別の結果、ニューキーオンであれば、CPU3は、ループ回数をカウントするためにRAM5の所定位置に設けられたループカウンタ(図示せず)をリセット(“0”)するとともに、前記新発音パターンデータ格納領域内の発音パターンデータから読み出すべき1組のイベントデータの位置を示すためにRAM5の所定位置に設けられた読み出しポインタ(図示せず)をリセット(“0”)し(ステップS8)、さらに発音データリストを初期化(クリア)する(ステップS9)。なお発音データリストも、RAM5の所定位置に確保された領域上に形成される。そしてCPU3は、アルペジオ再生をスタートさせて、アルペジオ再生を動作状態とした(ステップS10)後、発音データリスト生成処理(前記(B)の発音データリスト生成処理に相当する)を実行する。
図8は、発音データリスト生成処理の詳細な手順を示すフローチャートである。本発音データリスト生成処理は、アルペジオ再生の動作中に1回起動されると、新発音パターンデータ格納領域内の新発音パターンデータを1回使って発音データリストを生成するものである。
図8において、まずCPU3は、アルペジオ再生が動作中かどうかを判別し(ステップS31)、動作中でなければ、直ちに本発音データリスト生成処理を終了する一方、動作中であれば、新発音パターンデータ格納領域内の新発音パターンデータから、読み出しポインタが示す位置の1組のイベントデータを読み出す(ステップS32)。
次にCPU3は、読み出した1組のイベントデータと押鍵音の音高に基づいて、前述した方法により発音データを生成し、ループカウンタの値を考慮して発音データリストに書き込む(ステップS33)。図3を用いて前述したように、1回目のループ(ループカウンタ=0の場合)では、発音データリストに登録する発音データのタイミング(Timing)は新発音パターンデータ内の対応するイベントデータの発音タイミングをそのまま使うことができる。しかし2回目以降のループ(ループカウンタ≧1の場合)では、当該イベントデータの発音タイミングをループカウンタの値×新発音パターンデータ全体の時間長(=切り出し終了位置−切り出し開始位置)分だけ時間的に遅くシフトさせてから発音データリストに登録する必要がある。上記ステップS33の「ループカウンタの値を考慮して」とは、発音データを発音データリストに登録するに際して、ループカウンタの値によっては(ループカウンタ≠0の場合)発音データのタイミングを換算する必要があることを意味する。
次にCPU3は、読み出しポインタの値を“1”だけ進める(ステップS34)。そしてCPU3は、読み出した1組のイベントデータが発音パターンデータの末尾のデータになるまで、前記ステップS32〜S34の処理を繰り返す(ステップS35→S32)。一方、読み出した1組のイベントデータが発音パターンデータの末尾のデータになると、CPU3は、ループカウンタを“1”だけカウントアップするとともに、読み出しポインタをリセットした(ステップS35→S36)後、本発音データリスト生成処理を終了する。
このようにして生成された発音データリストを再生して、アルペジオを発音させる処理については、既に説明したので、繰り返さない。ただし、発音データリストに登録された最後の(あるいは、それより前であって、それに近い位置の)発音データが読み出されたときには、CPU3に本発音データリスト生成処理を1回実行させる必要がある。これにより、新発音パターンデータを使った2回目以降のループでも、アルペジオを正しく発音させることができる。
図6に戻り、アルペジオ動作中に、前記ステップS11で検出された離鍵がオールキーオフ(押鍵されていた状態からすべての鍵が離鍵された状態になること)であれば、アルペジオ生成をストップさせて、アルペジオを非動作状態とする(ステップS13→S14)。このときCPU3は、発音データリスト内でユーザの離鍵タイミング以降に消音される発音データについて、必要があればその消音タイミングを調整する。ここで、消音タイミングを調整する必要がある場合とは、たとえば、新発音パターンデータが1度も末尾まで使われずに離鍵操作がされた場合である。この場合には、離鍵操作が検出された後、最初に到来する切りのよい位置(小節や拍の終了位置やパターンの末尾など)までアルペジオ生成を続けた方が望ましい。もちろんこれに限らず、消音タイミングの調整を行わずに、離鍵操作が検出された時点で、アルペジオ生成も即座に停止するようにしてもよい。
このように新発音パターンデータを使ってアルペジオ再生を行ったときに、ユーザがその新発音パターンデータを、新たなアルペジオパターンデータとして前記外部記憶装置6に記録しておきたいことがある。
図9は、アルペジオパターンデータ記録処理の手順を示すフローチャートであり、本アルペジオパターンデータ記録処理は、ユーザが、たとえば前記操作子群1に含まれる保存スイッチ(図示せず)を操作したときに起動される。
本アルペジオパターンデータ記録処理では、まずCPU3は、アルペジオパターンデータの枠組み(たとえば、ファイル)を新規作成する(ステップS41)。新規作成する場所は、たとえば前記RAM5のワークエリアである。
次にCPU3は、作成中のアルペジオパターンデータを識別する識別情報(名前や番号)を決定し、当該アルペジオパターンデータに付与する(ステップS42)。ここで識別情報は、ユーザによって入力されたものを用いてもよいし、CPU3によって自動的に付けられたものを用いてもよい。
次にCPU3は、切り出し開始位置と切り出し終了位置より、新発音パターンデータの長さを抽出し、作成中のアルペジオパターンデータに付与する(ステップS43)。ここで、切り出し開始位置および切り出し終了位置は、前記切り出し開始位置格納領域および切り出し終了位置格納領域にそれぞれ格納されているものを読み出して用いればよい。
次にCPU3は、元のアルペジオパターンデータ、つまり前記アルペジオパターンデータ格納領域に格納されているアルペジオパターンデータを参照して、その他の必要な情報(音色や拍子など)を抽出し、作成中のアルペジオパターンデータに付与する(ステップS44)。なお、ステップS42〜S44の処理は、作成中のアルペジオパターンデータのフォーマットを本実施の形態で採用したアルペジオパターンデータのフォーマットに合わせるための処理である。したがって、本実施の形態で言及したアルペジオパターンデータには、ステップS42〜S44の処理によって付与される情報が付与されている。
次にCPU3は、新発音パターンデータ格納領域から、そこに格納されている新発音パターンデータを読み出して、作成中のアルペジオパターンデータ内に取り込む(ステップS45)。
次にCPU3は、作成中のアルペジオパターンデータを所定の記憶媒体に記録する(ステップS46)。ここで所定の記憶媒体とは、前記外部記憶装置6であるが、外部記憶装置6には、前述のように各種の記憶媒体が存在するので、ユーザにそのいずれかを指定させ、指定された記憶媒体に作成中のアルペジオパターンデータを記録させている。
このように本実施の形態では、アルペジオパターンデータの記録は、ユーザの操作に応じて行うようにしたが、これに限らず、別のアルペジオパターンデータが選択されるときに自動的に行うようにしてもよいし、ある一定時間(たとえば、5分間)いずれのユーザ操作も検出されなかったときに自動的に行うようにしてもよい。自動的に記録する場合、新たなアルペジオパターンデータの識別情報(番号)としては、空いている番号を付けるようにすればよい。
なお本実施の形態では、アルペジオパターンデータ記録処理は、アルペジオ再生モード内の一処理としたが、これに限らず、アルペジオ再生モードとは独立したアルペジオパターンデータ記録モードを設け、そのモード内でアルペジオパターンデータの記録を単独で行うようにしてもよい。この場合、上記図9のアルペジオパターンデータ記録処理の先頭に、前記図6のステップS1〜S4の処理を追加すればよい。
また本実施の形態では、アルペジオ再生を行うに際して、常に新発音パターンデータを作成するようにしたが、新発音パターンデータを作成せず、アルペジオパターンデータ格納領域に格納されているアルペジオパターンデータ中の発音パターンデータ内のイベントデータのうち、切り出し開始位置から切り出し終了位置までに含まれるものを読み出すことで、アルペジオ再生を行うようにしてもよい。具体的には、前記図8の発音データリスト生成処理を次のように変更する。つまり、
a.「新発音パターンデータ」を「アルペジオパターンデータ格納領域に格納されているアルペジオパターンデータ中の発音パターンデータ」に変更
b.読み出しポインタの初期値を“0”(図6のステップS8および図8のステップS36)から「切り出し開始位置のイベントデータの位置」に変更
c.生成した発音データを発音データリストに書き込むときの「ループカウンタの値を考慮して」(ステップS33)を「読み出した1組のイベントデータに含まれる発音タイミングを切り出し開始位置分時間的に早い方向にシフトした上で、ループカウンタの値を考慮して」に変更
d.ステップS35の「読み出した1組のイベントデータは新発音パターンデータの末尾の1組のイベントデータ?」を「読み出した1組のイベントデータは切り出し終了位置までにある最後の1組のイベントデータ?」に変更。
ただし、タイミングシフト量が指定されている場合には、上記b.をさらに「読み出しポインタの初期値を『切り出し開始位置のイベントデータの位置』から『切り出し開始位置+タイミングシフト量のイベントデータの位置』に変更し、ステップS35とステップS36の間に、「切り出し開始位置から切り出し開始位置+タイミングシフト量までに含まれるイベントデータを1組ずつ読み出して、ステップS33の処理と同様の処理を行う(ただし、生成した発音データを発音データリストに書き込むときには、当該発音タイミングを切り出し終了位置−切り出し開始位置−タイミングシフト量分時間的に遅い方向にシフトした上で、ループカウンタの値を考慮する)」処理を追加する。
この場合、新発音パターンデータは作成されないので、前記アルペジオパターンデータ記録モードを設け、そのモード内でアルペジオパターンデータの記録を単独で行う必要がある。
さらに本実施の形態では、アルペジオパターンデータは、外部記憶装置6に予め複数種類記憶されているとしたが、これに限らず、前記ROM4に予め複数種類記憶されていてもよいし、ネットワーク上にあるものを、前記通信I/F8を介して取得するようにしてもよい。
また本実施の形態では、ループカウンタは設けられているものの、ループ回数を設定し、その設定したループ回数で、切り出したアルペジオパターンデータを繰り返し用いる回数を制限できるようには構成されていないが、前記従来のアルペジエータと同様にして、切り出したアルペジオパターンデータを繰り返し用いる回数を制限できるように構成してもよい。
さらに本実施の形態では、アルペジオパターンデータが参照する音符情報として、ユーザがリアルタイム演奏することによって入力したもの(つまり、押鍵音)を用いるようにしたが、これに限らず、ユーザが事前に作成した演奏情報ファイルや既製の演奏情報ファイルを再生して得られたものを用いてもよい。
また本実施の形態では、アルペジオパターンデータ中の発音パターンデータの「切り出し開始位置」、「切り出し終了位置」および「タイミングシフト量」の各指定は、画面上の矢印およびカーソルを用いて行うようにしたが、これに限らず、小節数や拍数、音符長などの数値を、たとえば前記操作子群1に含まれるテンキー(図示せず)などを用いて直接入力するようにしてもよい。さらに本実施の形態では、選択されたアルペジオパターンデータ中の発音パターンデータ(を構成する各イベントデータの時間的位置)を表示装置7上に表示するようにしたが、表示しないようにしてもよい。ただしこの場合、上記「切り出し位置」などを指定するための便宜上、アルペジオパターンデータ中の発音パターンデータの長さを数値で表示できるようにした方が好ましい。
なお、上述した実施の形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムまたは装置に供給し、そのシステムまたは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
この場合、記憶媒体から読出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードおよび該プログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、たとえば、フレキシブルディスク、ハードディスク、光磁気ディスク、CD−ROM、CD−R、CD−RW、DVD−ROM、DVD−RAM、DVD−RW、DVD+RW、磁気テープ、不揮発性のメモリカード、ROMなどを用いることができる。また、通信ネットワークを介してサーバコンピュータからプログラムコードが供給されるようにしてもよい。
また、コンピュータが読出したプログラムコードを実行することにより、上述した実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOSなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。