以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。図1は、電子楽器の一例である電子鍵盤楽器の実施形態のハードウェア構成例を示す図である。図1において、電子鍵盤楽器100は、例えば電子ピアノとして実現され、CPU(中央演算処理装置)101、ROM(リードオンリーメモリ)102、RAM(ランダムアクセスメモリ)103、鍵盤部104、スイッチ部105、及び音源LSI106を備え、それらがシステムバス108によって相互に接続された構成を有する。また、音源LSI106の出力はサウンドシステム107に入力する。
この電子鍵盤楽器100は、リズムパートを自動演奏する自動演奏装置の機能を備える。そして、この電子鍵盤楽器100の自動演奏装置は、ジャズ、ロック、ワルツ等のリズム種に対応する自動演奏の発音データを、プログラムされたデータを単に再生するのではなく、或る一定の音楽的ルールの範囲内でアルゴリズムにより自動生成することができる。
CPU101は、RAM103を作業用メモリとして使用しながらROM102に記憶された制御プログラムをRAM103にロードして実行することにより、図1の電子鍵盤楽器100の制御動作を実行する。特に、CPU101は、後述するフローチャートによって示される制御プログラムをROM102からRAM103にロードして実行することにより、リズムパートを自動演奏する制御動作を実行する。
鍵盤部104は、複数の演奏操作子としての各鍵の押鍵又は離鍵操作を検出し、CPU101に通知する。CPU101は、後述するリズムパートの自動演奏のための制御動作のほかに、鍵盤部104から通知された押鍵又は離鍵操作の検出通知に基づいて、演奏者による鍵盤演奏に対応する楽音の発音又は消音を制御するための発音指示データを生成する処理を実行する。CPU101は、生成した発音指示データを、音源LSI106に通知する。
スイッチ部105は、演奏者による各種スイッチの操作を検出し、CPU101に通知する。
音源LSI106は、楽音発生のための大規模集積回路である。音源LSI106は、CPU101から入力する発音指示データに基づいて、デジタル楽音波形データを生成し、サウンドシステム107に出力する。サウンドシステム107は、音源LSI106から入力したデジタル楽音波形データをアナログ楽音波形信号に変換した後、そのアナログ楽音波形信号を内蔵のアンプで増幅して内蔵のスピーカから放音する。
上記構成を有する電子鍵盤楽器100の自動演奏装置の実施形態(以下「本自動演奏装置」と記載)によるリズムパートの自動演奏処理の詳細について、以下に説明する。図2は、本自動演奏装置のメイン処理の例を示すフローチャートである。この処理は、図1のCPU101が、ROM102に記憶された自動演奏の制御処理のプログラムをRAM103にロードして実行する処理である。
演奏者が図1のスイッチ部105を操作して自動演奏のジャンル(例えば「ジャズ」)やテンポを選択した後、スイッチ部105にある特には図示しない自動演奏のスタートスイッチを押すと、CPU101は、図2のフローチャートで例示されるメイン処理をスタートする。
まず、CPU101は、リセット処理を実行する(ステップS201)。具体的には、ステップS201で、CPU101は、リズムパートの自動演奏の開始時からの小節数を表すRAM103に記憶されている小節カウンタ変数値を、リズムパートの自動演奏の第1小節を示す値(例えば「1」)にリセットする。また、ステップS201で、CPU101は、小節内の拍数(拍位置)を示すRAM103に記憶されている拍カウンタ変数値を、1拍目を示す値(例えば「1」)にリセットする。次に、自動演奏装置による自動演奏の制御は、RAM103に記憶されるtick変数の値(以下この変数の値を「tick変数値」と記載)を単位として進行する。図1のROM102内には、自動演奏の時間分解能を示すTimeDivision定数(以下この定数の値を「TimeDivision定数値」と呼ぶ)が予め設定されており、このTimeDivision定数値は4分音符の分解能を示している。この値が例えば96ならば、4分音符は「96×tick変数値」の時間長を有する。ここで、1tickが実際に何秒になるかは、自動演奏のリズムパートに対して指定されるテンポによって異なる。今、ユーザ設定に従ってRAM103上のTempo変数に設定される値を「Tempo変数値[ビート/分]」とすれば、1tickの秒数(以下「tick秒数値」と記載)は、下記(1)式により算出される。
tick秒数値=60/Tempo変数値/TimeDivision変数値
・・・(1)
そこで、図2のステップS201のリセット処理において、CPU101はまず、上記(1)式に対応する演算処理により、tick秒数値を算出し、RAM103上の「tick秒変数」に記憶させる。なお、Tempo変数値としては、初期状態では図1のROM102の定数から読み出した所定の値、例えば60[ビート/秒]が、初期設定されてもよい。或いは、Tempo変数が不揮発性メモリに記憶され、電子鍵盤楽器100の電源の再投入時に、前回終了時のTempo変数値がそのまま保持されていてもよい。
次に、CPU101は、図2のステップS201のリセット処理において、まず、RAM103上のtick変数値を0にリセットする。その後、内蔵する特には図示しないタイマのハードウェアに対して、上述のようにして算出されRAM103上のtick秒変数に保存されているtick秒数値によるタイマ割込みを設定する。この結果、タイマにおいて上記tick秒数値の秒数が経過する毎に、割込み(以下「tick割込み」と記載)が発生することになる。
演奏者が、自動演奏の途中で、図1のスイッチ部105を操作して自動演奏のテンポを変更した場合、CPU101は、ステップS201のリセット処理と同様にして、RAM103上のTempo変数値に再設定されたTempo変数値を用いて前述した(1)式に対応する演算処理を再度実行することにより、tick秒数値を算出する。その後、CPU101は、内蔵のタイマのハードウェアに対して、新たに算出したtick秒数値によるタイマ割込みを設定する。この結果、タイマにおいて新たに設定されたtick秒数値の秒数が経過する毎に、tick割込みが発生することになる。
CPU101は、ステップS201のリセット処理の後、ステップS202~S205の一連の処理をループ処理として繰り返し実行する。このループ処理は、演奏者が図1のスイッチ部105の特には図示しないスイッチにより自動演奏をオフするまで繰返し実行される。
まず、CPU101は、上記ループ処理内の、ステップS204のtickカウントアップ処理において、タイマから新たなtick割込みが発生している場合には、RAM103上のtickカウンタ変数値をカウントアップする。その後、CPU101は、tick割込みを解除する。CPU101は、tick割込みが発生していない場合には、tickカウンタ変数値はカウントアップせずに、そのままステップS204の処理を終了する。この結果、tickカウンタ変数値は、演奏者が設定したTempo変数値に対応して算出されているtick秒数値の秒数毎に、カウントアップされてゆくことになる。
CPU101は、ステップS204でtick秒数値の秒数毎にカウントアップされる上記tickカウンタ変数値を基準として、自動演奏の進行を制御する。以下、このtickカウンタ変数値=1を単位とするテンポに同期した時間単位を[tick]と記載する。前述したように、4分音符の分解能を示すTimeDivision定数値が例えば96ならば、4分音符は96[tick]の時間長を有する。従って、自動演奏されるリズムパートが例えば4拍子であれば、1拍=96[tick]となり、1小節=96[tick]×4拍=384[tick]となる。CPU101は、上記ループ処理のステップS205において、例えば4拍子のリズムパートが選択されている場合、tickカウンタ変数値が96の倍数になる毎にRAM103に記憶されている拍カウンタ変数値を1→2→3→4→1→2→3・・・と、1から4の間でループさせて更新する。また、CPU101は、ステップS205において、上記拍カウンタ変数値が変化するタイミングで、各拍の先頭からのtick時間をカウントする拍内tickカウンタ変数値を0にリセットする。更に、CPU101は、ステップS205において、上記拍カウンタ変数値が4から1に変化するタイミングで、RAM103に記憶されている小節カウンタ変数値を+1ずつカウントアップしてゆく。即ち、小節カウンタ変数値はリズムパートの自動演奏の開始時からの小節数を表しており、拍カウンタ変数値は小節カウンタ変数値が表す各小節内での拍数(拍位置)を表していることになる。
CPU101は、ループ処理として上記ステップS204とS205を繰り返し実行してtickカウンタ変数値、拍内tickカウンタ変数値、及び小節カウンタ変数値を更新しながら、ステップS202で基本ドラムパターン処理を実行し、ステップS203でバリエーションドラム処理を実行する。
図2のステップS202の基本ドラムパターン処理の詳細について、以下に説明する。基本ドラムパターン処理は、ドラムパターンを確率的に決定する処理などを伴わず、ライドシンバル(以降「Ride」と記載)、及びペダルハイハット(以降「PHH」と記載)による定常的に発音される基本的な自動演奏のドラムパターン(以降「基本パターン」と記載)の発音を行う処理である。
図3(a)は、基本パターンの楽譜例を示す図である。また、図3(b)は、図3(a)の楽譜例として例示される基本パターンの発音を制御するために図1のROM102に記憶されるテーブルデータ(以降「基本テーブル」と記載)のデータ構成例を示す図である。図3(a)の楽譜例は、RideとPHHによる8ビートシャッフルのリズムパートの例である。
8ビートシャッフルでは、図3(a)の楽譜例において、2連の8分音符のうちの1つ目が演奏時の3連符の1つ目と2つ目を合わせた音符長に対応し、上記2連の8分音符のうちの2つ目が演奏時の3連符の3つ目の音符長に対応している。このように、8ビートシャッフルでは、リズムパートの楽譜に記述される8分音符の裏拍が、演奏時の3連符の3つ目の音符のタイミングと同等である。即ち、通常の8ビートより、8ビートシャッフルのほうが、8分音符の裏拍が遅れて発音される。
図3(a)の楽譜例において、破線枠301で囲った部分は、Rideの発音タイミング群を示している。これらの発音タイミング群は、8ビートシャッフルにおいて、繰り返される小節の1拍目と3拍目の各表拍で演奏時の3連符3個分のRide音を発音し、2拍目と4拍目の各表拍で演奏時の3連符2個分、各裏拍で演奏時の3連符1個分のRide音を発音することを示している。
図3(a)の楽譜例において、破線枠302で囲った部分は、PHHの発音タイミング群を示している。これらの発音タイミング群は、8ビートシャッフルにおいて、繰り返される小節の1拍目と3拍目の各表拍は休符で、2拍目と4拍目の各表拍で演奏時の3連符2個分のPHH音を発音することを示している。
次に、図3(b)に例示される基本テーブルにおいて、「Beat」行の数字「1」、「2」、「3」、「4」が付与されているテーブルの各列は夫々、繰り返される小節内の1拍目、2拍目、3拍目、及び4拍目の各タイミングの発音を制御する情報であることを示している。
図3(b)に例示される基本テーブルにおいて、「Tick」行の数字「0」と「64」の繰返しが付与されているテーブルの各列は、「Beat」行の各数字で示される小節内の各拍において、その拍の先頭から0[tick]目と64[tick]目の各タイミングの発音を制御する情報であることを示している。前述したように、1拍の時間は例えば96[tick]である。従って、0[tick]は各拍の先頭のタイミングであり、前述した8ビートシャッフルの表拍(演奏時の3連符の1つ目と2つ目の音符を合わせた音符長の始まりのタイミング)に対応している。一方、64[tick]は各拍の先頭から64[tick]時間が経過した時点のタイミングであり、前述した8ビートシャッフルの裏拍(演奏時の3連符の3つ目の音符の音符長の始まりのタイミング)に対応している。即ち、「Tick」行の各数字は、その数字が置かれている列のその数字が含まれる「Beat」行が示す拍での拍内tick時間を示している。リズムパートがジャズパートの8ビートシャッフルである場合は、「Tick」行の各数字としては、例えば表拍を示す拍内tick時間「0」と裏拍を示す拍内tick時間「64」が設定される。
図3(b)に例示される基本テーブルにおいて、「Ride」行の各数字は、その数字が置かれている列の、「Beat」行の小節内拍数と「Tick」行の拍内tick時間とによって示される発音タイミングにおいて、その数字が示すベロシティでRide音が発音されるべきことを示している。その数字が「0」である場合は、ベロシティ「0」、つまりRide音は発音されるべきではないことが指示されている。
例えば、「Beat」行が「1」で「Tick」行が「0」である小節内の1拍目の表拍のタイミングでは、Rideがベロシティ「30」で発音されるべきことが指示されている。「Beat」行が「1」で「Tick」行が「64」である小節内の1拍目の裏拍のタイミングでは、Rideのベロシティが「0」、即ちRide音は発音されるべきではないことが指示されている。「Beat」行が「2」で「Tick」行が「0」である小節内の2拍目の表拍のタイミングでは、Rideがベロシティ「50」で発音されるべきことが指示されている。「Beat」行が「2」で「Tick」行が「64」である小節内の2拍目の裏拍のタイミングでは、Rideがベロシティ「40」で発音されるべきことが指示されている。「Beat」行が「3」である小節内の3拍目では、1拍目と同じ発音指示がなされている。「Beat」行が「4」である小節内の4拍目では、2拍目と同じ発音指示がなされている。
図3(b)に例示される基本テーブルにおいて、「PHH」行の各数字は、その数字が置かれている列の、「Beat」行の小節内拍数と「Tick」行の拍内tick時間とによって示される発音タイミングにおいて、その数字が示すベロシティでPHH音が発音されるべきことを示している。その数字が「0」である場合は、ベロシティ「0」、つまりPHH音は発音されるべきではないことが指示されている。
例えば、「Beat」行が「1」及び「3」で夫々「Tick」行が「0」及び「64」である小節内の1拍目及び3拍目の夫々の表拍及び裏拍の各タイミングでは、PHHのベロシティが「0」、即ちPHH音は発音されるべきではないことが指示されている。「Beat」行が「2」及び「4」で夫々「Tick」行が「0」である小節内の2拍目及び4拍目の夫々の表拍のタイミングでは、PHHがベロシティ「30」で発音されるべきことが指示されている。「Beat」行が「2」及び「4」で「Tick」行が「64」である小節内の2拍目及び4拍目の夫々の裏拍のタイミングでは、PHHのベロシティが「0」、即ちPHH音は発音されるべきではないことが指示されている。
図4は、図3(b)に例示されるROM102内の基本テーブルデータに基づいて、図3(a)に例示される基本パターンの自動演奏制御を行うための、図2のステップS202の基本ドラムパターン処理の詳細例を示すフローチャートである。まず、CPU101は、ROM102内の基本テーブルデータから、図3(b)に例示される「Ride」行の各列のデータの集合であるRideパターンデータを、各列に設定されているベロシティデータと、各列が含まれる図3(b)に例示される「Beat」行の拍データと、各列が含まれる「Tick」行の拍内tick時間データの組として読み込む(ステップS401)。
次に、CPU101は、RAM103上の現在の拍カウンタ変数値及び拍内tickカウンタ変数値(図2のステップS205参照)を、ステップS401で読み込んだRideパターンデータの各列の拍データ及び拍内tick時間データ及びベロシティデータと比較することにより、現在の発音タイミングが、Ride音の発音タイミングであるか否かを判定する(ステップS402)。
ステップS402の判定がYESならば、CPU101は、予め設定されているRide音色及びステップS402での判定処理により判定されたRideパターンデータのベロシティによる楽音の発音指示を、図1の音源LSI106に対して発行する。この結果、音源LSI106が、発音指示されたRide音の楽音波形データを生成する。そして、サウンドシステム107を介して、Ride音の楽音が発音される(以上、ステップS403)。
ステップS402の判定がNOの場合、又はステップS403の処理の後に、CPU101は、ROM102内の基本テーブルデータから、図3(b)に例示される「PHH」行の各列のデータの集合であるPHHパターンデータを、その列に設定されているベロシティデータと、その列が含まれる図3(b)に例示される「Beat」行の拍データと、その列が含まれる「Tick」行の拍内tick時間データの組として読み込む(ステップS404)。
次に、CPU101は、RAM103上の拍カウンタ変数値及び拍内tickカウンタ変数値(図2のステップS205参照)を、ステップS404で読み込んだPHHパターンデータの各列の拍データ及び拍内tick時間データ及びベロシティデータと比較することにより、現在の発音タイミングが、PHH音の発音タイミングであるか否かを判定する(ステップS405)。
ステップS405の判定がYESならば、CPU101は、予め設定されているPHH音色及びステップS405での判定処理により判定されたPHHパターンデータのベロシティによる楽音の発音指示を、図1の音源LSI106に対して発行する。この結果、音源LSI106が、発音指示されたPHH音の楽音波形データを生成する。そして、サウンドシステム107を介して、PHH音の楽音が発音される(以上、ステップS406)。
ステップS405の判定がNOの場合、又はステップS406の処理の後に、CPU101は、今回のtick時間タイミングにおける図4のフローチャートで例示される図2のステップS202の基本ドラムパターン処理を終了する。
次に、図2のステップS203のバリエーションドラム処理について、以下に説明する。例えばジャズのリズムパートの8ビートシャッフルでは、前述した図3(a)では、Ride音及びPHH音による1小節分の基本パターンが、自動演奏により繰り返し発音される。また、ジャズ等の音楽ジャンルでは、コンピングと呼ばれる演奏法が知られている。コンピングとは、ドラム奏者等がミュージシャンの即興ソロ又はメロディーラインをサポートするために、コード、リズム、及びカウンタメロディを伴奏する行為をいう。このコンピングに対応して、本自動演奏装置では、上記基本パターンに、そこに味付け的にスネアドラム(以降「SD」と記載)、バスドラム(以降「BD」と記載)、又はタム(以降「TOM」と記載)のリズムパターンが確率的に発生させられて対応する楽音が発音される。本自動演奏装置において、これらの確率的に発生させられるリズムパターンのことを、コンピングパターンと呼ぶ。
図5(a)は、コンピングパターン+図3(a)の基本パターンの楽譜例を示す図である。図5(b)、(c)、(d)、(e)、(f)、及び(g)は、図5(a)の楽譜例の501及び502として例示されるコンピングパターンの発音を制御するために図1のROM102に記憶されるテーブルデータ(以降「コンピングテーブル」と記載)のデータ構成例を示す図である。コンピングテーブルとはすなわちSD、BDやTOM等の楽器の発音タイミングを示す複数のタイミングパターンを指示するテーブルである。図5(a)の楽譜例は、図3(a)の楽譜例で示したRideによる基本パターン(破線枠301で囲まれたパターン)とPHHによる基本パターン(破線枠302で囲まれたパターン)と、例えばSDによるコンピングパターン501とBDによるコンピングパターン502を含む、8ビートシャッフルのリズムパートの例である。
図5(a)における基本パターンの発音タイミング例は、図3(a)の場合と同様である。図5(a)では更に、SDによるコンピングパターン501とBDによるコンピングパターン502が確率的に付加される。
前述した基本パターンを生成するための基本テーブルは、図3(b)に例示したように例えば1小節分の固定的なテーブルデータであった。これに対して、本自動演奏装置において、コンピングパターンを確率的に付加するためのコンピングテーブルとしては、図5(b)、(c)、(d)、(e)、(f)、及び(g)に例示されるように、複数の拍長テーブルデータが用意される。
図5(b)~(g)に例示されるコンピングテーブルにおいて、「Beat」行及び「Tick」行の意味は、図3(b)に例示した基本テーブルの場合と同じである。また、「SD/BD/TOM」行の各数字「1」は、その数字が置かれている列の、「Beat」行の小節内拍数と「Tick」行の拍内tick時間とによって示される発音タイミングにおいて、SD音、BD音、又はTOM音の何れかが発音されるべきことを示している。その数字が「0」である場合は、SD音、BD音、又はTOM音の何れも発音されるべきではないことを示している。なお、各発音タイミングにおける、SD音、BD音、又はTOM音のうちで発音される楽器音の種類、及びベロシティは、コンピングテーブルの参照では決定されず、後述するインストテーブルの参照により決定される。
本自動演奏装置においては、図1のROM102に記憶されている図5(b)、(c)、(d)、(e)、(f)、又は(g)に例示さるコンピングテーブル(コンピングパターン記憶手段)から、確率的に1つのコンピングパターンが選択される。この結果、1拍の表拍又は裏拍に渡って継続するコンピングパターン、2拍分の表拍又は裏拍に渡って継続するコンピングパターン、3拍分の表拍又は裏拍に渡って継続するコンピングパターン、或いは、4拍(本実施形態では1小節)分の表拍又は裏拍に渡って継続するコンピングパターンからなる様々なコンピングパターンのバリエーションが例えばランダムに選択されながら、その選択されたコンピングパターンの拍数の長さ(以降「拍長」と記載)の各拍及びその各拍内の表拍と裏拍に渡る各発音タイミングでの発音を指示する発音指示データが生成される。1つの拍長のコンピングパターンに対する発音指示が終了したら、次の拍長のコンピングパターンが確率的に選択されるという処理が繰り返し実行される。
このように、本自動演奏装置では、様々な拍長(可変長)の拍数のコンピングパターンが確率的に選択されて次々に発音指示される。このため、従来技術のように小節単位で多くのリズムパターンのバリエーションを記憶する場合に比較して、少ない記憶容量にて、発音タイミングが様々に変化するコンピングパターンによる自動演奏が可能となる。このとき、リズムパートの曲想は基本パターンとして持たせることができるため、例えばリズムパートの自動演奏が脈絡の無い曲想で行われることはない。
なお、SD音、BD音、及びTOM音の何れのコンピングパターンも付加されない演奏もあり得るため、発音を全く指示しない例えば図5(b)に示されるコンピングパターンも用意される。
図5(b)、(c)、(d)、(e)、(f)、及び(g)に例示されるコンピングテーブルは、実際には図6に示されるデータ形式で図1のROM102に記憶される。図6において、601~606の各「SD/BD/TOM」行のコンピングパターンは夫々、図5(b)、(c)、(d)、(e)、(f)、及び(g)に例示されるコンピングテーブルの各コンピングパターンに対応している。更に、図6の「頻度」項目に含まれる列「1st beat」には、次にコンピングパターンを読み出すタイミング(その時点の拍カウンタ変数値が示す値)が小節内の1拍目のタイミングであった場合に、各「SD/BD/TOM」行のコンピングパターンが読み出される確率を示すタイミングパターン頻度データである頻度値が登録される。この頻度値が大きいほど、その頻度値が設定される「SD/BD/TOM」行のコンピングパターンが選択される確率が大きくなる。同様に、図6の「頻度」項目に含まれる列「2nd beat」「3rd beat」及び「4th beat」には夫々、次にコンピングパターンを読み出すタイミング(その時点の拍カウンタ変数値が示す値)が小節内の2拍目、3拍目、及び4拍目のタイミングであった場合に、各「SD/BD/TOM」行のコンピングパターンが読み出される確率を示す頻度値が登録される。頻度値に対応する確率の計算方法については、図10の頻度処理のフローチャートを用いて後述する。
ここで例えば、図6において、「SD/BD/TOM」行606のコンピングパターンの「2nd beat」「3rd beat」及び「4th beat」での頻度値が何れも0であるのは、このコンピングパターンは1小節分の長さを有し、4拍で叩かれることを前提としたフレーズが圧倒的に多いため、1拍目以外のタイミングは発生しないような制御が行われるためである。「SD/BD/TOM」行605のコンピングパターンの「4th beat」での頻度が0である理由も、上記理由と同様である。
一方、図6において、「SD/BD/TOM」行604の「4th beat」、及び「SD/BD/TOM」行605の「3rd beat」での頻度値が0でないのは、2拍や3拍のパターンが小節内で完結することを目的としておらず、2拍や3拍のフレーズが組み合わさっていくことで、常に4拍で完結してしまうマンネリ感を出さないためである。例えば、同じ3拍パターンが小節を飛び越えて繋がっていくようなケースを実現するために、4拍(小節)の枠に収めない制御が行われる。
次に、コンピングパターンの楽器音色とベロシティの決定処理について説明する。図7は、楽器音色とベロシティを指定するための楽器音色指定テーブルであるインストテーブルの例を示す図である。本自動演奏装置において、上述のようにして或る拍長を有するコンピングパターンの各拍及びその拍内の表拍と裏拍の発音タイミングが決定されたら、次に、選択されたコンピングパターンに対して用意されているインストテーブルに登録されている1つ以上のインストパターンから1つが確率的に選択される。この結果、発音タイミング毎にSD、BD、又はTOMのどの楽器音及びどのベロシティで発音するかが決定される。
図7(a)は、図5(e)又は図6の604のコンピングパターンに対応するインストテーブルの例である。図5(e)又は図6の604のコンピングパターンでは、1拍目の裏拍と2拍目の表拍の2つの発音タイミングでの発音が指示される。このため、図7(a)に例示されるインストパターンとしても、「inst_count」行の「0」と「1」として例示されるように2つの発音タイミングに対応した、それぞれ楽器音色及びベロシティからなる2つの組が用意される。また、それらの組のバリエーションとして、INST1、INST2、INST3、及びINST4の例えば4種類のバリエーションが用意される。例えばインストパターンINST1には、「inst_count」行が「0」である1番目の発音タイミング(1拍目の裏拍)においてSD音をベロシティ「30」で発音し、「inst_count」行が「1」である2番目の発音タイミング(2拍目の表拍)においてBD音をベロシティ「40」で発音することが指示されている。他のインストパターンINST2、INST3、及びINST4では夫々、異なる楽器音とベロシティの組合せが指示されている。
図7(b)は、図5(g)又は図6の606のコンピングパターンに対応するインストテーブルの例である。図5(g)又は図6のコンピングパターンでは、6つの発音タイミングでの発音が指示されている。このため、図7(b)に例示されるインストパターンとしても、「inst_count」行の「0」~「5」として例示されるように6つの発音タイミングに対応した、それぞれ楽器音色及びベロシティからなる6つの組が用意される。また、それらの組のバリエーションとして、INST1、INST2、及びINST3の例えば3種類のバリエーションが用意される。
本自動演奏装置では、図5及び図6で説明したようにして選択されたコンピングパターンに対応するインストテーブル中の例えば複数のインストパターンから1つのインストパターンが、確率的に選択される。具体的には、例えば図7(a)及び(b)のインストテーブル毎に設定されている図7(c)及び(d)の頻度テーブル(以降「インスト頻度テーブル」と呼ぶ)が参照される。図7(c)のインスト頻度テーブルには、図7(a)のインストテーブル中の各インストパターンINST1、INST2、INST3、及びINST4を夫々、頻度値50、10、10、及び20に対応する確率で選択されることが指示されている。この頻度値は、楽器音色指定テーブルに含まれる複数の異なる楽器音色の各々の選択され易さを示す楽器音色頻度データである。この頻度値は、値が大きいほど選択される確率が高くなる。頻度値に対応する確率の計算方法については、図10の頻度処理のフローチャートを用いて後述する。図7(d)のインスト頻度テーブルには、図7(b)のインストテーブル中の各インストパターンINST1、INST2、及びINST3が夫々、頻度値70、30、及び20に対応する確率で選択されることが指示されている。
このように、本自動演奏装置では、様々な可変長の拍長を有するコンピングパターンが確率的に選択されて次々に発音指示されると共に、選択されたコンピングパターンに対応する楽器音色及びベロシティの様々な組合せのインストパターンも確率的に選択されてその選択された楽器音及びベロシティで発音指示される。このため、従来技術のように画一的な楽器音ではなく、少ない記憶容量にて、楽器音及びベロシティの組合せが様々に変化するインストパターンによる自動演奏が可能となる。即ち、本自動演奏装置は、「コンピングパターンの組合せ数×コンピングパターン毎のインストパターンの組合せの数」の通りのコンピングパターンを生成することが可能となる。
図8は、上記コンピングパターン及びインストパターンの自動演奏制御を行うための、図2のステップS203のバリエーションドラム処理の詳細例を示すフローチャートである。まず、CPU101は、現在のタイミングが自動演奏の先頭か否かを判定する(ステップS801)。具体的には、CPU101は、RAM103上のtickカウンタ変数値が0であるか否かを判定する。
ステップS801の判定がYESの場合、CPU101は、RAM103に記憶される1つのコンピングパターン内のtick単位残り時間数を示すremain_tick変数の値を0にリセットする(ステップS802)。
ステップS801の判定がNOの場合には、CPU101は、ステップS802の処理はスキップする。
次に、CPU101は、RAM103上のremain_tick変数値が0であるか否かを判定する(ステップS803)。
自動演奏の先頭であってステップS802でremain_tick変数値が0にリセットされた場合、又は1つのコンピングパターン内での各発音タイミングの処理が全て終了してremain_tick変数値が0になった場合に、上記ステップS803の判定がYESとなる。この場合、CPU101は、図5及び図6で説明したコンピングパターンを選択するための処理である、コンピングパターン選択処理を実行する(ステップS804)。
図9は、図8のステップS804のコンピングパターン選択処理の詳細処理例を示すフローチャートである。図9において、CPU101はまず、RAM103上の拍カウンタ変数値(図2のステップS205を参照)を参照することにより、現在の小節内での拍数を取得する(ステップS901)。
次に、CPU101は、図1のROM102に記憶されているコンピングテーブルにアクセスし、ステップS901で取得した現在の拍数に対応したコンピングテーブル上の頻度値を取得する(ステップS902)。例えば、現在の拍数が第1拍目であれば、CPU101は、図6に例示されるコンピングテーブル上の「1st beat」の各コンピングパターン601~606の頻度値を取得する。同様に、現在の拍数が2、3、又は4拍目であれば、CPU101は、図6に例示されるコンピングテーブル上の「2nd beat」、「3rd beat」、又は「4th beat」の各コンピングパターン601~606の頻度値を取得する。
ステップS902に続き、CPU101は、頻度処理を実行する(ステップS903)。図10は、図9のステップS903の頻度処理の詳細例を示すフローチャートである。図10において、まずCPU101は、コンピングテーブル上にN個(Nは自然数)のコンピングパターンが記憶されているとし、図9のステップS902で取得した現在の拍数に対応したコンピングテーブル上のN個のコンピングパターンの各頻度値をf
i(1≦i≦N)とする。この場合、CPU101は、下記(2)式で示される演算を実行し、その演算結果を乱数最大値r
maxとして算出し、RAM103に保存する(ステップS1001)。
例えば、現在の拍数が第1拍目であれば、図9のステップS902で、図6に例示されるコンピングテーブルから、N=6個の第1拍目「1st beat」のコンピングパターン601~606の頻度値として、f1=300、f2=20、f3=20、f4=10、f5=5、及びf6=5が取得されていれば、上記(2)式により、
300+20+20+10+5+5=360
が、乱数最大値rmaxとして算出される。
次に、CPU101は、図9のステップS902で取得したN個のコンピングパターンの各頻度値f
i(1≦i≦N)を下記(3)式に示される演算により順次足し込んで、それぞれの加算結果を構成要素とする新頻度値fnew
j(1≦j≦N)を作成する(ステップS1002)。
例えば、図9のステップS902で、図6に例示されるコンピングテーブルから取得されているコンピングパターンの頻度値、f1=300、f2=20、f3=20、f4=10、f5=5、及びf6=5を用いて、上記(3)式の演算により、下記のように新頻度値fnewj(1≦j≦6)が算出される。
300・・・fnew1
300+20=320・・・fnew2
300+20+20=340・・・fnew3
300+20+20+10=350・・・fnew4
300+20+20+10+5=355・・・fnew5
300+20+20+10+5+5=360・・・fnew6
次に、CPU101は、0から乱数最大値rmaxまでの間、例えば0から360までの間の乱数rを発生させる(ステップS1003)。
そして、CPU101は、発生した乱数rと新頻度値fnew
j(1≦j≦N)との間で下記(4)式の条件を満たすいずれかのj(1≦j≦N)を判定し、そのjに対応するj番目のコンピングパターンを選択する(ステップS1004)。
例えば、前述の例において、「0<r≦fnew1=300」であれば、図6のコンピングテーブルの第1番目のコンピングパターン601が選択される。また、「fnew1=300<r≦fnew2=320」であれば、図6のコンピングテーブルの第2番目のコンピングパターン602が選択される。また、「fnew2=320<r≦fnew3=340」であれば、図6のコンピングテーブルの第3番目のコンピングパターン603が選択される。また、「fnew3=340<r≦fnew4=350」であれば、図6のコンピングテーブルの第4番目のコンピングパターン604が選択される。更に、「fnew4=350<r≦fnew5=355」であれば、図6のコンピングテーブルの第5番目のコンピングパターン605が選択される。そして、「fnew5=355<r≦fnew6=360」であれば、図6のコンピングテーブルの第6番目のコンピングパターン606が選択される。
その後、CPU101は、図10のフローチャートで例示される図9のステップS903の頻度処理を終了する。
図9の説明に戻り、CPU101は、ステップS903の頻度処理により選択した番号jのコンピングパターンから、「SD/BD/TOM」行の値が「1」である列の数をKとすれば、それらの各列の「Beat」行の拍数biと「Tick」行の拍内tick時間tiの組(bi,ti)(1≦i≦K)を、選択済みコンピングパターン情報(bi,ti)(1≦i≦K)として生成し、RAM103に記憶させる(ステップS904)。
例えば、図6のコンピングテーブルの第4番目のコンピングパターン604が選択されている場合、「SD/BD/TOM」行の値が「1」である列の数K=2である。この結果、上記2列のうち、第1列目の「Beat」行の拍数bi=1と「Tick」行の拍内tick時間ti=64の組(1,64)と、第2列目の「Beat」行の拍数bi=2と「Tick」行の拍内tick時間ti=0の組(2,0)が、選択済みコンピングパターン情報(bi,ti)(1≦i≦2)として生成され、RAM103に記憶される。
続いて、CPU101は、ステップS903の頻度処理により選択した番号jのコンピングパターンに対応して、そのコンピングパターンの発音タイミング毎の発音楽器及びベロシティを示すデータからなる図1のROM102に記憶されているインストテーブルを特定する。更に、CPU101は、その特定したインストテーブルに対応するインスト頻度テーブルを選択する(ステップS905)。
例えば、ステップS903の頻度処理により、ROM102に記憶されている前述した図5又は図6に例示したコンピングテーブルから、前述した図5(e)又は604のコンピングパターンが選択されたとする。図5(e)又は図6の604のコンピングパターンでは、1拍目の裏拍と2拍目の表拍の2つの発音タイミングでの発音が指示されている。このため、CPU101は、ROM102に記憶されているインストテーブルのうち、「inst_count」行の「0」と「1」の2つの発音タイミングが指定される前述した図7(a)に例示されるインストテーブルを特定する。そして、CPU101は、その特定した図7(a)に例示されるインストテーブルに対応する前述した図7(c)に例示されるインスト頻度テーブルを選択する。
更に、CPU101は、インストテーブル上の「inst_count」行で指定されている各発音タイミングを指定するためのRAM103に記憶される変数であるインストカウンタ変数の値を0にリセットする(ステップS906)。
そして、CPU101は、ステップS903の頻度処理により選択した番号jのコンピングパターンの拍長に対応した値を、RAM103上の変数であるremain_tick変数にセットする(ステップS907)。
例えば、ステップS903の頻度処理により、ROM102に記憶されている前述した図5又は図6に例示したコンピングテーブルから、前述した図5(e)又は604のコンピングパターンが選択されたとすれば、このコンピングパターンの拍長は2拍であるため、remain_tick変数値として値「2」がセットされる。
その後、CPU101は、図9のフローチャートで例示される図8のステップS804のコンピングパターン選択処理を終了する。
図8の説明に戻り、CPU101は、ステップS803の判定がNOである(remain_tick変数値が0ではない)場合、又はステップS804の処理の後に、図9のステップS904でRAM103に記憶させた選択済みコンピングパターン情報(bi,ti)(1≦i≦K)を読み込む(ステップS805)。
次に、CPU101は、現在のタイミングがステップS805で読み込んだコンピングパターン情報によって指定される発音タイミングであるか否かを判定する(ステップS806)。具体的には、CPU101は、図2のステップS205で更新される、RAM103に記憶されている現在の拍カウンタ変数値と拍内tick時間変数値の組が、ステップS805で読み込んだコンピングパターン情報(bi,ti)(1≦i≦K)の何れかの組と一致するか否かを判定する。ここで、biはコンピングパターンの各列の「Beat」行の拍数、tiは「Tick」行の拍内tick時間である。
例えば、ステップS805で図5(e)又は604のコンピングパターン情報として、(bi,ti)=(1,64)及び(2,0)が読み込まれたとすれば、「拍カウンタ変数値=1かつ拍内tick時間=64」又は「拍カウンタ変数値=2かつ拍内tick時間=0」の何れかであるか否かが判定される。
ステップS806の判定がYESならば、CPU101は、インストパターン選択処理を実行する(ステップS807)。図11は、図8のステップS807のインストパターン選択処理の詳細処理例を示すフローチャートである。
図11において、CPU101はまず、RAM103に記憶されているインストカウンタ変数値が0であるか否かを判定する(ステップS1101)。
上記インストカウンタ変数値は、図8のステップ804のコンピングパターン選択処理内の図9でコンピングパターンが選択されたときに、ステップS906で0にリセットされている。よって、このタイミングにおいてステップS1101の判定がYESとなる。この場合、CPU101は、頻度処理を実行する(ステップS1102)。ここでCPU101は、図8のステップ804のコンピングパターン選択処理で選択されたコンピングパターンに対応して選択されるインストテーブル中の複数のインストパターンのうちの1つを、確率的に選択する処理を実行する。
ステップS1102の頻度処理の詳細例は、前述したコンピングパターンの頻度処理(図9のステップS903)の詳細例と同様の図10のフローチャートで示される。図10において、CPU101はまず、図8のステップS804のコンピングパターン選択処理内の図9のステップS905で選択したインスト頻度テーブルによって示されるインストパターンの各頻度値をfi(1≦i≦N)とする。この場合、CPU101は、前述した(2)式で示される演算を実行し、その演算結果を乱数最大値rmaxとして算出し、RAM103に保存する(ステップS1001)。
例えば、図7(a)に例示されるインストテーブルに対応する図7(c)に例示されるインスト頻度テーブルが選択されており、このテーブル内の各頻度値が、f1=50、f2=10、f3=10、及びf4=20であるとすれば、前述した(2)式により、
50+10+10+20=90
が、乱数最大値rmaxとして算出される。
次に、CPU101は、取得しているN個のインスト頻度テーブルの各頻度値fi(1≦i≦N)を前述した(3)式に示される演算により順次足し込んで、それぞれの加算結果を構成要素とする新頻度値fnewj(1≦j≦N)を作成する(ステップS1002)。
例えば、図7(c)に例示されるインスト頻度テーブルの各頻度値、f1=50、f2=10、f3=10、及びf4=20を用いて、前述した(3)式の演算により、下記のように新頻度値fnewj(1≦j≦4)が算出される。
50・・・fnew1
50+10=60・・・fnew2
50+10+10=70・・・fnew3
50+10+10+20=90・・・fnew4
次に、CPU101は、0から乱数最大値rmaxまでの間、例えば0から90までの間の乱数rを発生させる(ステップS1003)。
そして、CPU101は、発生した乱数rと新頻度値fnewj(1≦j≦N)との間で前述した(4)式の条件を満たすいずれかのj(1≦j≦N)を判定し、そのjに対応するj番目のインストパターンを選択する(ステップS1004)。
例えば、前述の例において、「0<r≦fnew1=50」であれば、図7(a)のインストテーブルの第1番目のインストパターンINST1が選択される。また、「fnew1=50<r≦fnew2=60」であれば、図7(a)のインストテーブルの第2番目のインストパターンINST2が選択される。更に、「fnew2=60<r≦fnew3=70」であれば、図7(a)のインストテーブルの第3番目のインストパターンINST3が選択される。そして、「fnew3=70<r≦fnew4=90」であれば、図7(a)のインストテーブルの第4番目のインストパターンINST4が選択される。
その後、CPU101は、図10のフローチャートで例示される図11のステップS1102の頻度処理を終了する。
図11の説明に戻り、CPU101は、特定されているインストテーブルの「inst_count」行の各値が含まれる列の数をLとすれば、ステップS1102の頻度処理により選択したインストパターン行の上記各列毎の楽器音色giとベロシティviの組(gi,vi)(1≦i≦L)を、インストパターン情報(gi,vi)(1≦i≦L)として生成し、RAM103に記憶させる(ステップS1103)。
例えば、図7(a)のインストテーブルの第1番目のインストパターンINST1が選択されている場合、図7(a)のインストテーブルの「inst_count」行には「0」と「1」の各値が含まれるため、L=2である。この結果、インストパターンINST1の2行から、「inst_count」行が「0」である列の楽器音色gi=「SD」とベロシティvi=30の組(g1,v1)=(SD,30)と、「inst_count」行が「1」である列の楽器音色gi=「BD」とベロシティvi=40の組(g2,v2)=(BD,40)が、インストパターン情報(gi,vi)(1≦i≦2)として生成され、RAM103に記憶される。
図11において、CPU101は、ステップS1101の判定がNOの場合、又はステップS1103の処理の後、RAM103に記憶されている上記インストパターン情報(gi,vi)(1≦i≦L)を読み込む。そして、CPU101は、上記インストパターン情報(gi,vi)(1≦i≦L)のうち、RAM103に記憶されているインストカウンタ変数値が示す組のインストパターン情報に基づいて、発音する音の楽器音色とベロシティを選択する(以上、ステップS1104)。
例えば、現在のインストカウンタ変数値が0である(ステップS1101の判定がYES→S1102→S1103→S1104である)ならば、インストパターン情報(g1,v1)=(SD,30)が選択される。この結果、発音する音の楽器音色は「SD」、ベロシティは「30」と決定される。
また例えば、現在のインストカウンタ変数値が1である(ステップS1101の判定がNOである)ならば、インストパターン情報(g2,v2)=(BD,40)が選択される。この結果、発音する音の楽器音色は「BD」、ベロシティは「40」と決定される。
最後に、CPU101は、RAM103上のインストカウンタ変数値を+1カウントアップする(ステップS1105)。その後、CPU101は、図11のフローチャートで例示される図8のステップS807のインストパターン選択処理を終了する。
図8の説明に戻り、CPU101は、ステップS807のインストパターン選択処理により選択された楽器音色及びベロシティによる楽音の発音指示を、図1の音源LSI106に対して発行する。この結果、音源LSI106が、発音指示された楽器音色及びベロシティの楽音波形データを生成する。そして、サウンドシステム107を介して、コンピング音の楽音が発音される(以上、ステップS808)。
図8において、ステップS806の判定がNOである(発音タイミングでない)場合、又はステップS808の処理の後、CPU101は、ステップS204でRAM103上のtickカウンタ変数値がカウントアップされていれば、RAM103上のremain_tick変数値を-1カウントダウンさせる。tickカウンタ変数値がカウントアップされていなければ、remain_tick変数値はカウントダウンさせない(以上、ステップS809)。
その後、CPU101は、図8のフローチャートで例示される図2のステップS203のバリエーションドラム処理を終了する。
以上説明した実施形態は、本発明による自動演奏装置が電子鍵盤楽器100に内蔵されている実施形態であった。一方、自動演奏装置と電子楽器は、夫々個別の装置であって、自動演奏装置と電子鍵盤楽器等の電子楽器とを備える演奏システムとして構成されてもよい。具体的には、例えば図12に示されるように、自動演奏装置は例えばスマートフォンやタブレット端末(以下「スマートフォン等1201」と記載)に自動演奏アプリとしてインストールされ、電子楽器は例えば自動演奏機能を持たない電子鍵盤楽器1202であってよい。この場合、スマートフォン等1201と電子鍵盤楽器1202は、MIDI over Bluetooth Low Energy(以下「BLE-MIDI」と記載)と呼ばれる規格に基づいて無線通信する。BLE-MIDIは、無線規格Bluetooth Low Energy(登録商標)上で楽器間の通信の標準規格MIDI(Musical Instrument Digital Interface:楽器デジタルインタフェース)で通信が行えるようにした楽器間無線通信規格である。電子鍵盤楽器1202は、Bluetooth Low Energy規格でスマートフォン等1201に接続することができる。その状態で、スマートフォン等1201上で実行される自動演奏アプリによって、図2から図11で説明した自動演奏機能に基づく自動演奏データが、BLE-MIDI規格の通信路1203を介して、MIDIデータとして電子鍵盤楽器1202に送信される。電子鍵盤楽器1202は、BLE-MIDI規格で受信した自動演奏MIDIデータに基づいて、図2から図11で説明した自動演奏を実施する。
図13は、図12に示される接続形態を有する自動演奏装置と電子楽器が個別に動作する他の実施形態における自動演奏装置1201のハードウェア構成例を示す図である。図13において、CPU1301、ROM1302、及びRAM1303は、図1のCPU101、ROM102、及びRAM103と同様の機能を有する。CPU1301が、RAM1303にダウンロードされインストールされた自動演奏アプリのプログラムを実行することにより、CPU101が制御プログラムを実行することにより実現した、図2から図11で説明した自動演奏機能と同じ機能を実現する。このとき、図1のスイッチ部105と同等の機能は、タッチパネルディスプレイ1304によって提供される。そして、自動演奏アプリは、自動演奏用の制御データを自動演奏MIDIデータに変換してBLE-MIDI通信インタフェース1305に引き渡す。
BLE-MIDI通信インタフェース1305は、自動演奏アプリにより生成された自動演奏MIDIデータを、BLE-MIDI規格に従って電子鍵盤楽器1202に送信する。この結果、電子鍵盤楽器1202が、図1の電子鍵盤楽器100の場合と同様の自動演奏を実施する。BLE-MIDI通信インタフェース1305は、自動演奏装置1201が生成した自動演奏用のデータを電子鍵盤楽器1202等の電子楽器に送信することに利用可能な通信手段の例である。なお、BLE-MIDI通信インタフェース1305の代わりに、有線のMIDIケーブルで電子鍵盤楽器1202に接続するMIDI通信インタフェースが用いられてもよい。
以上説明したようにして、上述した各実施形態として実現される自動演奏装置では、ドラムフレーズは決められたフレーズが繰り返されるのではなく、可変長フレーズが拍単位で発生確率が規定されて、再生タイミングに適したフレーズが発生される。また、ドラムフレーズは、常に一意に決められたドラムセットの中の楽器が自動演奏されるのではなく、フレーズの中での音楽的意味のあるいくつかの楽器の組合せから、確率的に1つの組合せが選択されて発音される。これらの特徴により、従来、予めプログラミングされた演奏データが任意の長さで繰り返し演奏されていた伴奏演奏が、或る一定のルールの中でランダマイズさせられることで、単調な繰り返し演奏ではなくなり、人間が演奏する生演奏に近づいた演奏を再現することが可能となる。
また、上述の「或る一定のルール」において、拍単位の可変長フレーズを持ち組み合わせることにより、従来よりも少ない記憶容量でよりバリエーションに飛んだ演奏を再現することが可能となる。
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
楽器音の発音タイミングを示す複数のタイミングパターンのうちの一つを確率的に決定し、決定されたタイミングパターンに対応付ける楽器音色指定テーブルを、複数の楽器音色指定テーブルの中から決定する、
処理を実行する自動演奏装置。
(付記2)
前記複数のタイミングパターンの各々の選択され易さを示すタイミングパターン頻度データに基づき、前記タイミングパターンを決定する、
付記1に記載の自動演奏装置。
(付記3)
前記楽器音色指定テーブルに含まれる複数の異なる楽器音色の各々の選択され易さを示す楽器音色頻度データに基づき、前記発音タイミングにおいて発音される楽器音色を決定する、
付記1又は2に記載の自動演奏装置。
(付記4)
基本伴奏パターンの演奏と共に、前記決定されたタイミングパターンと前記決定された楽器音色とに基づき、自動演奏を行う、
付記1乃至3のいずれかに記載の自動演奏装置。
(付記5)
前記楽器音色指定テーブルは、前記発音タイミングにおいて発音させる楽器音色と共に前記楽器音色を発音する際のベロシティを指定するデータを更に含む、
付記1乃至3のいずれかに記載の自動演奏装置。
(付記6)
基本伴奏パターンの演奏と共に、前記決定されたタイミングパターンと前記決定された楽器音色とベロシティとに基づき、自動演奏を行う、
付記5に記載の自動演奏装置。
(付記7)
前記自動演奏装置は、通信手段を備え、前記通信手段を介して、前記自動演奏装置が生成した自動演奏用のデータを電子楽器に送信する、
付記1乃至6のいずれかに記載の自動演奏装置。
(付記8)
演奏操作子と、付記1乃至6のいずれかに記載の自動演奏装置と
を備える電子楽器。
(付記9)
付記7に記載の自動演奏装置と、電子楽器と
を備える演奏システム。
(付記10)
楽器音の発音タイミングを示す複数のタイミングパターンのうちの一つを確率的に決定し、決定されたタイミングパターンに対応付ける楽器音色指定テーブルを、複数の楽器音色指定テーブルの中から決定する、
処理を実行する自動演奏方法。
(付記11)
楽器音の発音タイミングを示す複数のタイミングパターンのうちの一つを確率的に決定し、決定されたタイミングパターンに対応付ける楽器音色指定テーブルを、複数の楽器音色指定テーブルの中から決定する、
処理をコンピュータに実行させるためのプログラム。