IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ カシオ計算機株式会社の特許一覧

特許7505196ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム
<>
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図1
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図2
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図3
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図4
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図5
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図6
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図7
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図8
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図9
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図10
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図11
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図12
  • 特許-ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-17
(45)【発行日】2024-06-25
(54)【発明の名称】ベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラム
(51)【国際特許分類】
   G10H 1/00 20060101AFI20240618BHJP
【FI】
G10H1/00 102Z
【請求項の数】 11
(21)【出願番号】P 2020020067
(22)【出願日】2020-02-07
(65)【公開番号】P2021124688
(43)【公開日】2021-08-30
【審査請求日】2023-02-01
(73)【特許権者】
【識別番号】000001443
【氏名又は名称】カシオ計算機株式会社
(74)【代理人】
【識別番号】110004185
【氏名又は名称】インフォート弁理士法人
(74)【代理人】
【識別番号】100074099
【弁理士】
【氏名又は名称】大菅 義之
(74)【代理人】
【識別番号】100121083
【弁理士】
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【弁理士】
【氏名又は名称】天田 昌行
(72)【発明者】
【氏名】吉野 順
(72)【発明者】
【氏名】橘 敏之
【審査官】中村 天真
(56)【参考文献】
【文献】特開2001-175263(JP,A)
【文献】特開昭63-080299(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G10G 1/00-3/04
G10H 1/00-1/46
(57)【特許請求の範囲】
【請求項1】
生成する音が、小節内のいずれの拍のタイミングに該当するかを判断し、
判断された前記拍のタイミングが第1拍のタイミングである場合に、前記第1拍のタイミングに対応付けられているコードデータのルート音を生成するルート音処理を実行し、
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングである場合に、前記コードデータに基づく処理を含む複数の処理のなかから確率的に決定された処理を実行する、
ベースライン音自動生成装置。
【請求項2】
前記複数の処理は、
取得された前記コードデータのコード構成音に含まれるいずれかの音を生成するコード音処理、
音タイミングがそれぞれ異なる複数の連続する音を生成するスケール音処理であって、設定された複数の音高のなかで順番に高音側に遷移していく上行音、及び順番に低音側に遷移していく下行音のいずれかで生成するスケール音処理、
判断された前記拍のタイミングの次の拍のタイミングに発音させる音の半音上又は半音下のいずれかの音高の音を生成する半音処理、
のいずれかを含む、請求項1に記載のベースライン音自動生成装置。
【請求項3】
判断された前記拍のタイミングが第1拍のタイミングである場合であって、前記小節内の前記第1拍以外の拍のタイミングにコードデータが対応付けられていない場合に、スケール乱数値を発生させ、
発生させた前記スケール乱数値に従って、第2拍以降の拍のタイミングに前記スケール音処理を実行するか否かを決定し、
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングである場合であって、前記第2拍以降の拍のタイミングに前記スケール音処理を実行すると既に決定されている場合に、前記確率的に決定された前記スケール音処理を実行する、
請求項2に記載のベースライン音自動生成装置。
【請求項4】
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングである場合であって、前記第2拍以降の拍のタイミングに前記スケール音処理を実行しないと決定されている場合に、前記確率的に前記コード音処理を実行すると決定された場合、判断された前記拍のタイミングに応じて異なるテーブルに従って、前記コード音処理を実行する、
請求項3に記載のベースライン音自動生成装置。
【請求項5】
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングであって、判断された前記拍のタイミングの次の拍のタイミングにコードデータが対応付けられている場合に、コード乱数値を発生させ、
発生させた前記コード乱数値に従って、前記半音処理、前記コード音処理のいずれの処理を実行するかを決定する、
請求項2乃至4のいずれかに記載のベースライン音自動生成装置。
【請求項6】
発生させた前記コード乱数値に従って、前記半音処理の実行が決定された場合に、
判断された前記拍のタイミングの1つ前の拍のタイミングのノート情報の音高が、前記次の拍のタイミングに対応付けられているコードデータのルート音の音高に対して、半音下又は全音上の場合には、前記次の拍のタイミングに対応付けられているコードデータのルート音の音高に対して半音上の音高を前記拍のタイミングの出力音高として決定し、
判断された前記拍のタイミングの1つ前の拍のタイミングのノート情報の音高が、前記次の拍のタイミングに対応付けられているコードデータのルート音の音高に対して、全音下又は半音上の場合には、前記次の拍のタイミングに対応付けられているコードデータのルート音の音高に対して半音下の音高を前記拍のタイミングの出力音高として決定する、
請求項5に記載のベースライン音自動生成装置。
【請求項7】
自動生成するベースラインがジャズ調である場合に、自動生成するベースラインがポップス調である場合と比べて、前記半音処理が実行される確率が高くなるように、半音頻度変数値が設定されている、
請求項5又は6に記載のベースライン音自動生成装置。
【請求項8】
自動生成するベースラインのテンポが第1テンポである場合に、前記第1テンポより遅い第2テンポである場合と比べて、前記半音処理が実行される確率が高くなるように、半音頻度変数値が設定されている、
請求項5又は6に記載のベースライン音自動生成装置。
【請求項9】
請求項1乃至8のいずれかに記載のベースライン自動生成装置と、
演奏操作子と、
を備え、
前記演奏操作子の操作に応じた発音処理を実行する、
電子楽器。
【請求項10】
ベースライン音自動生成装置のプロセッサに、
生成する音が、小節内のいずれの拍のタイミングに該当するかを判断させ、
判断された前記拍のタイミングが第1拍のタイミングである場合に、前記第1拍のタイミングに対応付けられているコードデータのルート音を生成するルート音処理を実行させ、
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングである場合に、前記コードデータに基づく処理を含む複数の処理のなかから確率的に決定された処理を実行させる、
方法。
【請求項11】
ベースライン音自動生成装置のプロセッサに、
生成する音が、小節内のいずれの拍のタイミングに該当するかを判断させ、
判断された前記拍のタイミングが第1拍のタイミングである場合に、前記第1拍のタイミングに対応付けられているコードデータのルート音を生成するルート音処理を実行させ、
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングである場合に、前記コードデータに基づく処理を含む複数の処理のなかから確率的に決定された処理を実行させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ベースラインを自動生成することができるベースライン音自動生成装置、電子楽器、ベースライン音自動生成方法及びプログラムに関する。
【背景技術】
【0002】
従来の電子楽器において、音長、強弱、音高の変化方向、音高の変化幅、ノート属性、のうち少なくとも1つについての例えばベースライン伴奏パターンのためのパラメータを供給しながらパラメータの値を変化させ、このパラメータに基づいて望みの時点で所望の伴奏音が発生するように、ベースライン伴奏パターンを作り出す技術が知られている(例えば特許文献1)。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2001-175263号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかし、上述の従来技術により生成されるベースライン伴奏パターンは、パラメータを介してあらかじめプログラミングされた伴奏データが繰り返し再生されるものであり、パラメータをユーザの意思により又は確率に基づいて変化させることで伴奏パターンに変化を持たせることはできるが、例えばジャズのベースライン伴奏などに見られるアドリブを効かせたような自動伴奏を行うことはできず、それ故その演奏は機械的に聞えてしまうという課題があった。
【0005】
本発明は、良好なベースラインを自動生成することを目的とする。
【課題を解決するための手段】
【0006】
態様の一例では、ベースライン音自動生成装置のプロセッサが、生成する音が、小節内のいずれの拍のタイミングに該当するかを判断し、判断された拍のタイミングが第1拍のタイミングである場合に、第1拍のタイミングに対応付けられているコードデータのルート音を生成するルート音処理を実行し、判断された拍のタイミングが第1拍以外の拍のタイミングである場合に、コードデータに基づく処理を含む複数の処理のなかから確率的に決定された処理を実行する。
【発明の効果】
【0007】
本発明によれば、良好なベースラインを自動生成することが可能となる。
【図面の簡単な説明】
【0008】
図1】電子楽器のシステムハードウェアの構成例を示すブロック図である。
図2】本実施形態の動作説明図である。
図3】全体処理の例を示すメインフローチャートである。
図4】音高決定処理の例を示すフローチャートである。
図5】半音処理実行判断処理、コード音処理実行判断処理、及びルート音処理の例を示すフローチャートである。
図6】半音処理の例を示すフローチャートである。
図7】スケール音処理実行判断処理の例を示すフローチャートである。
図8】スケール音処理の例を示すフローチャートである。
図9】コード音処理の例を示すフローチャートである。
図10】オクターブ音処理の例を示すフローチャート(その1)である。
図11】オクターブ音処理の例を示すフローチャート(その2)である。
図12】スケール音決定テーブルの例を示す図である。
図13】コード音決定テーブルの例を示す図である。
【発明を実施するための形態】
【0009】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。図1は、電子楽器の1実施形態100のシステムハードウェアの構成例を示す図である。
【0010】
電子楽器100は、例えば電子鍵盤楽器であり、演奏操作子としての複数の鍵からなる鍵盤105と、電子楽器100の電源オン/オフや、音量調整、楽音出力の音色の指定やベースライン自動伴奏のテンポ等の各種設定を指示したりするスイッチ、及び演奏効果を付加するスイッチやベンドホイールやペダル等を含むスイッチ107と、各種設定情報を表示するLCD(Liquid Crystal Display:液晶ディスプレイ)109等を備える。また、電子楽器100は、演奏により生成された楽音を放音するスピーカ113を、筐体の裏面部、側面部、又は背面部等に備える。
【0011】
また、電子楽器100において、CPU(プロセッサ)101、ROM(リードオンリーメモリ)、RAM(ランダムアクセスメモリ)103、音源LSI(大規模集積回路)104、鍵盤105が接続されるキースキャナ106、スイッチ107が接続されるI/Oインタフェース108、LCD109が接続されるLCDコントローラ110、及びMIDI(Musical Instrument Digital Interface)等の音楽データを外部のネットワークから取りこむネットワークインタフェース114、が、それぞれシステムバス115に接続されている。更に、音源LSI104の出力側には、D/Aコンバータ111、アンプ112、及びスピーカ113が順次接続される。
【0012】
CPU101は、RAM103をワークメモリとして使用しながらROM102に記憶された制御プログラムを実行することにより、図1の電子楽器100の制御動作を実行する。また、ROM102は、上記制御プログラム及び各種固定データのほか、例えばジャズのベースラインデータを含む曲データを記憶する。
【0013】
このときCPU101は、ユーザが鍵盤105で演奏した演奏データをキースキャナ106及びシステムバス115を介して取りこみ、その演奏に応じたノートオンデータやノートオフデータを生成して、音源LSI104に出力する。これにより、音源LSI104は、入力したノートオンデータやノートオフデータに応じた楽音波形データを生成・出力し又は出力を終了する。音源LSI104から出力される楽音波形データは、D/Aコンバータ111でアナログ楽音波形信号に変換された後、アンプ112で増幅され、スピーカ113から、ユーザが演奏した演奏楽音として放音される。
【0014】
また、上記演奏楽音の放音動作に併行して、CPU101は、例えばROM102からシステムバス115を介して、ユーザがスイッチ107からI/Oインタフェース108及びシステムバス115を介して指定した、例えばジャズ楽曲のベースラインを自動伴奏するためのコードデータを順次入力し、そのコードデータに基づいてベースラインのノートナンバを順次決定し、そのノートナンバのノートオンデータ又はノートオフデータを順次生成して、音源LSI104に出力する。これにより、音源LSI104は、入力したベースラインの自動伴奏音に対応するベースライン楽音波形データを生成・出力し又は出力を終了する。音源LSI104から出力されるベースライン楽音波形データは、D/Aコンバータ111でアナログ楽音波形信号に変換された後、アンプ112で増幅され、スピーカ113から、ユーザが演奏楽音に合わせて自動伴奏されるベースライン楽音として放音される。
【0015】
音源LSI104は、上記演奏楽音及びベースライン自動伴奏音を同時に出力するために、例えば同時に最大256ボイスを発振させる能力を有する。
【0016】
キースキャナ106は、鍵盤105の押鍵/離鍵状態を定常的に走査し、CPU101に割込みをかけて状態変化を伝える。
【0017】
I/Oインタフェース108は、スイッチ107の操作状態を定常的に走査し、CPU101に割り込みを掛けて状態変化を伝える。
【0018】
LCDコントローラ110は、LCD505の表示状態を制御するIC(集積回路)である。
【0019】
ネットワークインタフェース114は、例えばインターネットやローカルエリアネットワークに接続され、本実施形態で使用される制御プログラムや、各種楽曲データ、自動演奏データなどを取得し、RAM103等に記憶させることができる。
【0020】
図1で示される電子楽器100の動作概要について、図2の動作説明図に従って説明する。本実施形態では、ユーザによる鍵盤105による演奏に合わせて、例えばジャズのベースラインの伴奏音を自動生成し、放音させることができる。
【0021】
このとき、CPU101は、小節ごと又は小節の拍ごとにコードデータを例えばROM102から取得し、コードデータに基づいて、少なくとも半音処理、スケール音処理、コード音処理、又はルート音処理のうちの何れかの処理を判断及び実行し、取得したコードデータ及び、実行した処理に従って、ベースラインを生成し、生成したベースラインに応じた音の発音を音源LSI104に指示する。
【0022】
半音処理とは、音楽用語としてはクロマチックアプローチともいい、或るタイミングに発音させるノートの音高を、その或るタイミングの次のタイミングに発音させるノートの半音上又は半音下の音高で発音させる処理のことをいう。半音処理の実行により調性外のノートが使用されることになり不協和音の発生に繋がるが、これにより音楽的なスパイスが加えられる。
【0023】
スケール音処理とは、小節内の各拍タイミングなどの、発音タイミングがそれぞれ異なるタイミングにおける連続する複数のノートを、所定の音程で設定された複数の音高(スケール音)の中から順番に、上行(順番に高音側に遷移していく)、又は下行(順番に低音側に遷移していく)の各音高で、例えば各拍タイミングに同期して発音させる処理のことをいう。スケール(音階)とは、例えば、メジャー、マイナー等の調性や、シンメトリカル、ペンタトニック、ブルーノート等の音楽理論に基づいて、音を音高により昇順あるいは降順にならべたものである。
【0024】
コード音処理とは、コードの構成音に含まれる音高で発音させる処理のことをいう。
【0025】
ルート音処理とは、コードの構成音のうちのルート音高で発音させる処理のことをいう。
【0026】
上述の半音処理、スケール音処理、コード音処理、及びルート音処理の組合せは、例えばジャズのベースラインが演奏されるときにコード進行に沿ったベースライン特有の奏法である。
【0027】
図1のROM102には、例えば、複数の小節又は小節内の例えば強拍に対応付けて、図2(a)に例示されるような例えば8小節分(小節数は任意)のコードデータが記憶されている。図2(b)は、ROM102から順次読み出される図2(a)に対応する各コードデータのデータ構成の例を示す図である。図2(b)に示される表の上から下へ並ぶ各行が、それぞれ時間経過に従いROM102から順次読み出されるコードデータを示している。各コードデータは、そのコードデータが何小節目に設定されるかを示す「小節」項目値と、そのコードデータが小節内の何拍目に設定されるかを示す「拍」項目値と、そのコードデータが示すコードのルート音の音高を示す「ルート」項目値と、そのコードデータが示すコードのコード種別を示す「コード種別」項目値を含む。
【0028】
CPU101は、時間的に進行する各小節内の各拍のタイミングにおいて、下記の判断1から3よりなるアルゴリズムで、半音処理、スケール音処理、コード音処理、及びルート音処理を実行するか否かを判断する。
【0029】
まず、CPU101は、処理判断1(ステップS401)として、現在の拍が弱拍(例えば4拍子において現在の小節内の2拍目又は4拍目)であり、かつ現在の拍にROM102から取得されるコードデータが設定されておらず、かつ現在の拍の次の拍にROM102から取得されるコードデータが設定されている場合に、確率的に現在の拍に対して半音処理の実行を決定して、半音処理を実行する。ここで、「確率的に」とは、例えば乱数を発生させて、その乱数の値をある閾値と大小比較することにより、小ならば半音処理の実行を決定し、大ならば半音処理の実行を決定しないという処理を行うことをいう。
【0030】
CPU101は、上記処理判断1で半音処理の実行を決定しなかった場合に、処理判断2(ステップS402)として、現在の拍が現在の小節の1拍目であって、かつ現在の小節の1拍目以外の拍にコードデータが設定されていない場合に、確率的に現在の小節の1拍目に対して、スケール音処理の実行を決定して、スケール音処理を実行する。また、CPU101は、現在の拍が現在の小節の1拍目でない場合に、現在の小節の1拍目に対してスケール音処理の実行を既に決定している場合には、現在の拍に対してスケール音処理の実行を決定して、スケール音処理を実行する。
【0031】
CPU101は、上記処理判断2でスケール音処理の実行を決定しなかった場合に、処理判断3(ステップS403)として、現在の拍が現在の小節の1拍目以外の拍であって、かつ現在の拍にコードデータが設定されていない場合に、現在の拍に対してコード音処理の実行を決定して、コード音処理を実行する。
【0032】
CPU101は、上記処理判断3でコード音処理の実行を決定しなかった場合に、ルート音処理の実行を決定して、ルート音処理を実行する。原則的に、コードデータが対応付けられている拍のタイミングでは、ルート音処理が実行される。
【0033】
CPU101は、例えば図2(a)(b)のようにしてROM102から順次取得したコードデータに対して、上記処理判断1から3に基づいて、半音処理、スケール音処理、コード音処理、又はルート音処理のうちの何れかの処理を実行し、図2(c)に例示されるようなベースラインの伴奏音を生成する。
【0034】
CPU101は、例えば図2(c)の第1小節の1拍目でCM7のコードデータを取得した場合、処理判断1はNO、処理判断2はNO、処理判断3もNOとなる結果、ルート音処理の実行を決定する。CPU101は、ルート音処理の実行を決定した場合に、現在設定されているコードデータのルート音の音高を現在の拍の出力音高として決定する。即ち、CPU101は、現在第1小節の1拍目に設定されているコードデータCM7のルート音の音高Cを、第1小節の1拍目の出力音高として決定する。
【0035】
CPU101は、例えば図2(c)の第2、第4、第5、第6、及び第8小節の各1拍目と、第6小節の3拍目についても、上記と同様にルート音処理の実行を決定し、ルート音処理を実行する結果、それぞれの小節の1拍目に設定されている各コードデータAm7、G7、Em7、Am7、及びG7と、D7の各ルート音の音高A、G、E、A、及びGと、Dを、各出力音高として決定する。
【0036】
CPU101は、例えば図2(c)の第1小節の2拍目及び3拍目については、それぞれの次の拍にはコードデータが設定されていないため処理判断1はNO、第2小節の1拍目ではスケール音処理の実行は判断されていないため処理判断2もNO、拍にコードデータが設定されていないため処理判断3はYESとなって、それぞれコード音処理の実行を決定して、コード音処理を実行する。CPU101は、コード音処理の実行を決定した場合に、現在の拍が前記現在の小節内で何拍目であるか、及び現在の拍の前の拍の音程が現在のコードの構成音に対応するルート音程、3度音程、5度音程、又は7度音程の何れの音程であるかに応じて確率的に決定した現在のコードの構成音に対応するルート音程、3度音程、5度音程、又は7度音程の何れかのノート種別に基づいて算出される音高を、現在の拍の出力音高として決定する。即ち、CPU101は、第1小節の2拍目及び3拍目として、第1小節に対して設定されているコードCM7の構成音E及びGをそれぞれ、第1小節の2拍目及び3拍目の各出力音高として決定する。
【0037】
CPU101は、第2、第4、第5、及び第8小節のそれぞれの2拍目及び3拍目についても、上記と同様にコード音処理の実行を決定し、コード音処理を実行する結果、第2、第4、第5、及び第8小節のそれぞれの2拍目と3拍目として、GとE、DとF、BとE、及びDとBを、各出力音高として決定する。またCPU101は、第6小節の4拍目については、弱拍であって、その拍にはコードデータは設定されておらず、次の第7小節の1拍目にはコードデータが設定されているが、処理判断1はNO、第6小節の1拍目ではスケール音処理の実行は判断されていないため処理判断2もNO、その拍にコードデータが設定されていないため処理判断3はYESとなって、コード音処理の実行を決定して、コード音処理を実行する。この結果、CPU101は、第6小節の4拍目として、コードD7の構成音Cを、その出力音高として決定する。
【0038】
CPU101は、第1小節の4拍目については、その拍が弱拍であり、かつその拍にコードデータが設定されておらず、かつその拍の次の第2小節の1拍目にコードデータが設定されているため、確率的に半音処理の実行を決定して、半音処理を実行する。CPU101は、現在の拍の1つ前の拍のノート情報の音高が現在の拍の次の拍のコードのルートの音高に対して、半音下又は全音上の場合には、次の拍のコードのルートの音高に対して半音上の音高を現在の拍の出力音高として決定する。又はCPU101は、現在の拍の1つ前の拍のノート情報の音高が現在の拍の次の拍のコードのルートの音高に対して、全音下又は半音上の場合には、次の拍のコードのルートの音高に対して半音下の音高を現在の拍の出力音高として決定する。或いはCPU101は、現在の拍の1つ前の拍のノート情報の音高が現在の拍の次の拍のコードのルートの音高に対して、半音下、全音上、全音下、及び半音上の何れでもない場合には、次の拍のコードのルートの音高に対して半音上又は半音下の何れかの音高を確率的に現在の拍の出力音高として決定する。即ち、CPU101は、現在の拍である第1小節の4拍目の1つ前の3拍目のノート情報の音高Gが、現在の拍である第1小節の4拍目の次の第2小節の1拍目のコードAm7のルートの音高Aに対して全音下であるため、次の拍である第2小節の1拍目のコードAm7のルートの音高Aに対して半音下の音高G#を、第1小節の4拍目の出力音高として決定する。
【0039】
CPU101は、第2、第4、第5、第7、第8小節の4拍目と、第6小節の2拍目についても、上記と同様にして、E♭、D#、B♭、A♭、C#と、C#を、各出力音高として決定する。
【0040】
CPU101は、第3小節の1拍目については、強拍であるため処理判断1がNO、処理判断2で、1拍目でかつ第3小節内の1拍目以外の拍にはコードデータが設定されていないため、確率的に第3小節の1拍目に対して、スケール音処理の実行を決定して、スケール音処理を実行する。また、第3小節の2拍目については、弱拍であり、その拍にコードデータは設定されていないが、次の3拍目にはコードデータが設定されていないため処理判断1がNO、処理判断2で、1拍目ではなく、第3小節の1拍目に対してスケール音処理の実行を既に判断しているため、スケール音処理を実行する。また、第3小節の3拍目については、強拍であるため処理判断1がNO、処理判断2で、1拍目ではなく、第3小節の1拍目に対してスケール音処理の実行を既に判断しているため、スケール音処理を実行する。更に、第3小節の4拍目については、弱拍であり、その拍にコードデータは設定されておらず、次の第4小節の1拍目にコードデータが設定されている。確率的に処理判断1がNOの場合に、処理判断2で、第3小節の1拍目に対してスケール音処理の実行を既に判断しているため、スケール音処理を実行する。
【0041】
CPU101は、スケール音処理の実行を決定した場合に、現在の小節の1拍目に設定されているコードデータが示すコード種別に応じたスケールを構成する各音高を、現在の小節の1拍目の音高に基づいて時間経過に従って各音高が上行又は下行の何れかの方向で、現在の小節内の拍ごとの各出力音高として決定する。即ち、CPU101は、第3小節の1拍目のコードデータDm7が示すコード種別m7に応じたスケールを構成する、上がってゆく方向の各音高D、E、F、Gを、第3小節の1拍目、2拍目、3拍目、及び4拍目の各音高として決定する。
【0042】
CPU101は、第7小節の1拍目、2拍目、3拍目についても、上記と同様にして処理判断1がNO、処理判断2がYESとなって、スケール音処理の実行を決定し、スケール音処理を実行する。即ち、CPU101は、第7小節の1拍目のコードデータDm7が示すコード種別m7に応じたスケールを構成する、下がってゆく方向の各音高D、C、Bを、第7小節の1拍目、2拍目、及び3拍目の各音高として決定する。なお、CPU101は、第7小節の4拍目については、弱拍であり、その拍にコードデータは設定されておらず、次の第8小節の1拍目にコードデータが設定されており、確率的に処理判断1がYESになる。このため、CPU101は、第7小節の4拍目については、前述したように半音処理の実行を決定して、半音処理を実行し、A♭を、出力音高として決定する。
【0043】
以上のように、本実施形態では、自動演奏のコードデータからジャズのベースラインの伴奏音を再生するときに、ベースラインに特有の、半音処理、スケール音処理、コード音処理、及びルート音処理の組合せによるコード進行奏法を自動的に実行することが可能となる。これにより本実施形態では、1種類のコードデータ列からいろいろな伴奏パターンでベースラインが生成されるので、何度聞いても飽きないベースラインの自動伴奏を楽しむことが可能となる。
【0044】
加えて、いったん例えば半音処理やスケール音処理の実行が判断されても、例えば乱数と頻度閾値により確率的に決定される状態によってそれらの実行が判断されない状態が生成されることにより、ベースラインの自動伴奏に更に多彩な変化をつけることが可能となる。
【0045】
図3は、図1の電子楽器100の実施形態において、CPU101がROM102からRAM103に読み出した制御処理を実行する処理である全体処理の例を示すメインフローチャートである。このメインフローチャートの処理は例えば、演奏者が図1のスイッチ107に含まれる電源スイッチを押すことにより、スタートされる。
【0046】
CPU101はまず、初期化処理を実行する(図3のステップS301)。初期化処理において、CPU101は始めに、ベースラインの自動伴奏の進行を制御するTickTimeと小節数と拍数をリセットする。本実施形態において、ベースラインの自動伴奏の進行は、図1のRAM103に記憶されるTickTime変数の値(以下この変数の値を変数名と同じ「TickTime」と呼ぶ)を単位として進行する。図1のROM102内には、TimeDivision定数の値(以下この変数の値を変数名と同じ「TimeDivision」と呼ぶ)が予め設定されており、このTimeDivisionは1拍(例えば4分音符)の分解能を示しており、この値が例えば96ならば、1拍は96×TickTimeの時間長を有する。ここで、1TickTimeが実際に何秒になるかは、曲データに対して指定されるテンポによって異なる。今、ユーザ設定に従ってRAM203上のTempo変数に設定される値をTempo[ビート/分]とすれば、TickTimeの秒数=TickTimeSec[秒]は、下記(1)式により算出される。
【0047】
TickTimeSec[秒]=60/Tempo/TimeDivision
・・・(1)
【0048】
そこでCPU101は、図3のステップS301の初期化処理において、上記(1)式に対応する演算処理により、TickTimeSec[秒]を算出し、CPU101内の特には図示しないハードウェアタイマに設定すると共に、RAM103上のTickTime変数値を0にリセットする。ハードウェアタイマは、上記設定されたTickTimeSec[秒]が経過するごとに、割込みを発生させる。なお、変数Tempoに設定されるTempoの値としては、初期状態では図1のROM102の定数から読み出した所定の値、例えば60[ビート/秒]が、初期設定されてもよい。或いは、変数Tempoが不揮発性メモリに記憶され、電子楽器100の電源の再投入時に、前回終了時のTempo値がそのまま保持されていてもよい。
【0049】
CPU101はまた、図3のステップS301の初期化処理において、RAM103上の小節数を示す変数の値を第1小節を示す値1にリセットし、RAM103上の拍数を示す変数の値を1拍目を示す値1にリセットする。
【0050】
CPU101は更に、図3のステップS301の初期化処理において、ROM102から、図2(b)において例示した、ベースラインの自動伴奏のためのコードデータを取得し、RAM103に記憶させる。
【0051】
その後、CPU101は、図3のステップS302からS308までの一連の処理を繰り返し実行する。この一連の処理において、CPU101はまず、音高決定処理を実行する(ステップS302)。この音高決定処理では、CPU101は、前述した半音処理、スケール音処理、コード音処理、又はルート音処理を実行することにより、現在の拍に対する出力音高及び対応するノートナンバを決定する。音高決定処理の詳細は、図4のフローチャートを使って後述する。
【0052】
上記一連の処理において、CPU101は次に、ノートオン処理を実行する(図3のステップS303)。このノートオン処理では、CPU101は、ステップS302の音高決定処理で決定したベースラインの現在の拍に対応するノートナンバ値と別途決定した(例えば固定値である)ベロシティ値とを有するノートオンデータを生成し、そのノートオンデータを図1の音源LSI104に転送する。この結果、音源LSI104は、そのノートオンデータに対応するノートナンバ及びベロシティを有するベースライン伴奏の楽音波形データの生成を開始し、D/Aコンバータ111及びアンプ112を介してスピーカ113から放音させる。またこのノートオン処理では、CPU101は、図1の鍵盤105の演奏状態を取り込み、鍵盤105上でユーザによる押鍵が発生したときに、その押鍵に対応するノートナンバ値とベロシティ値とを有するノートオンデータを生成し、そのノートオンデータを図1の音源LSI104に転送する。この結果、音源LSI104は、そのノートオンデータに対応するノートナンバ及びベロシティを有するユーザ演奏の楽音波形データの生成を開始し、D/Aコンバータ111及びアンプ112を介してスピーカ113から放音させる。なお、音源LSI104は、上記ベースライン伴奏とユーザ演奏による1つ以上の押鍵の各楽音波形データの生成は、それぞれ異なる発音チャネルでの時分割処理により同時に実行することができ、D/Aコンバータ111及びアンプ112を介してスピーカ113から同時に放音させることができる。
【0053】
上記一連の処理において、CPU101は次に、前述のハードウェアタイマからTickTimeSec[秒]の割込みが発生しているか否かを判定し、その割込みが発生したらRAM103上の変数であるTickTime値をカウントアップさせる(図3のステップS304)。
【0054】
上記一連の処理において、CPU101は次に、ノートオフのタイミングに達したか否かを判定する(図3のステップS305)。具体的には、CPU101は例えば、ステップS304でTickTime値をカウントアップした結果、例えば対応するベースラインの伴奏音のノートオンデータの発行から1拍分より若干短い固定時間=90TickTimeが経過したかを判定する。或いは、CPU101は例えば、図1の鍵盤105の演奏状態を取り込み、ユーザによる鍵盤105上での押鍵について離鍵が発生したか否かも判定する。
【0055】
ステップS305の判定がYESならば、CPU101は、ノートオフ処理を実行する(ステップS306)。具体的には、CPU101は例えば、対応するベースラインの伴奏音のノートオンデータに対応するノートオフデータを生成し、音源LSI104に出力する。この結果、音源LSI104は、生成中であったベースライン伴奏の楽音波形データの生成を終了し、スピーカ113からの放音を消音させる。或いは、CPU101は例えば、鍵盤105上でのユーザによる離鍵操作に対応するユーザ演奏音のノートオンデータに対応するノートオフデータを生成して、音源LSI104に出力する。この結果、音源LSI104は、生成中であったユーザ演奏による楽音波形データの生成を終了し、スピーカ113からの放音を消音させる。
【0056】
ステップS305の判定がNOならば、CPU101はステップS306のノートオフ処理は実行しない。
【0057】
上記一連の処理において、CPU101は次に、RAM103上のTickTime変数値が前述したTimeDivision定数値(=96TickTime値)に達したか否か、即ち、TickTime変数値によるカウントが1拍分進んだか否かを判定する(図3のステップS307)。
【0058】
ステップS307の判定がNOならば、CPU101は、図3のステップS304の処理に戻って、更にTickTime値をカウントアップさせる。
【0059】
ステップS307の判定がYESになると、CPU101は、TickTime変数値をリセットし、RAM103上の拍数を示す変数の値を+1し、更にその値が4を超えたらその変数の値を1にリセットすると共に、RAM103上の小節数を示す変数の値を+1する(図3のステップS308)。その後、CPU101は、図3のステップS302の音高決定処理に戻る。
【0060】
図4は、図3のステップS302の音高決定処理の詳細例を示すフローチャートである。まず、CPU101は、半音処理を実行するか否かを判断し(ステップS401)、ステップS401の判定がYESならステップS404の半音処理を実行する。
【0061】
CPU101は、ステップS401の判定がNOならば、スケール音処理を実行するか否かを判断し(ステップS402)、ステップS402の判定がYESならステップS405のスケール音処理を実行する。
【0062】
CPU101は、ステップS402の判定がNOならば、コード音処理を実行するか否かを判断し(ステップS403)、ステップS403の判定がYESならステップS406のコード音処理を実行し、ステップS403の判定がNOならステップS407のルート音処理を実行する。
【0063】
CPU101は、ステップS404、S405、S406、及びS407の何れかの処理において、現在の小節の現在の拍のタイミングで音源LSI104にベースラインの伴奏の楽音波形データを生成させるべきノートの音名(C~B:値としては0から11)を決定する。
【0064】
CPU101は、ステップS404、S405、S406、及びS407の何れかの処理の後に、オクターブ処理を実行する(ステップS408)。このオクターブ処理において、CPU101は、上記決定したC~B(値0~11)のノート値を、実際に音源LSI104に指示されるノートオンデータに設定される0から127の範囲の値を有するノートナンバ(MIDIのノートナンバ)に変換する(ステップS408)。その後、CPU101は、図3のステップS302の音高決定処理を終了する。
【0065】
図5(a)は、図4のステップS401の判断を行うための半音処理実行判断処理の詳細例を示すフローチャートである。このフローチャートの処理は、前述した電子楽器100の動作概要における処理判断1の動作に対応する。
【0066】
図5(a)の半音処理実行判断処理において、CPU101はまず、現在の拍に対応する図3のステップS301とS308で設定されているRAM103上の拍数を示す変数値が、2拍目又は4拍目の何れかのいわゆる弱拍を示しているか否かを判定する(図5(a)のステップS501)。
【0067】
ステップS501の判定がNOならば、即ち、現在の拍がいわゆる強拍であれば、CPU101は、半音処理の実行は判断せずに、図4のステップS402のスケール音処理判断処理に進む。
【0068】
ステップS501の判定がYESならば、即ち、現在の拍が弱拍であれば、CPU101は、現在の拍にコードデータが設定されているか否かを判定する(ステップS502)。具体的には、CPU101は、現在の小節及び現在の拍に対応する図3のステップS301とS308で設定されているRAM103上の小節数を示す変数値と拍数を示す変数値で、図3のステップS301においてROM102からRAM103に取得している図2(b)に例示されるコードデータの「小節」項目と「拍」項目とを検索できたか否かにより、現在の拍にコードデータが設定されているか否かを判定する。
【0069】
ステップS502の判定がYESならば、即ち、現在の拍が弱拍であるが、現在の拍にコードデータが設定されている場合には、CPU101は、半音処理の実行は判断せずに、図4のステップS402のスケール音処理判断処理に進む。
【0070】
ステップS502の判定がNOならば、即ち、現在の拍が弱拍であってコードデータが設定されていない場合には、現在の拍の次の拍にコードデータが設定されているか否かを判定する(ステップS503)。具体的には、CPU101は、現在の小節及び現在の拍に対応するRAM103上の小節数を示す変数値と拍数を示す変数値に対して、図3のステップS308の更新処理と同様に1拍分更新させた変数値で、図3のステップS301においてROM102からRAM103に取得している図2(b)に例示されるコードデータの「小節」項目と「拍」項目とを検索できたか否かにより、現在の拍の次の拍にコードデータが設定されているか否かを判定する。
【0071】
ステップS503の判定がNOならば、即ち、現在の拍が弱拍であってコードデータが設定されておらず、現在の拍の次の拍にもコードデータが設定されていない場合には、CPU101は、半音処理の実行は判断せずに、図4のステップS402のスケール音処理判断処理に進む。
【0072】
ステップS503の判定がYESならば、CPU101は、RAM103上の変数値xとして、0から99の範囲の乱数値(コード乱数値)を発生させる(ステップS504)。
【0073】
CPU101は、ステップS504で発生させた乱数値が、半音処理の頻度を示すRAM103上の半音頻度変数よりも小さいか否かを判定する(ステップS505)。この半音頻度変数は、半音処理をある確率で実行させるか否かを制御するための閾値であり、例えば半音頻度変数の値が0なら、半音処理が実行される確率は0%になり、半音頻度変数の値が100以上なら、100%の確率で半音処理が実行されることになる。例えばジャズのベースラインにおいては、半音処理が多用されるため、この半音頻度変数の値を大きくして(「99」に近い値にして)、ほとんど毎回半音処理が実行されるようにしてもよい。また、この半音頻度変数の値は、ユーザが図1のスイッチ107で設定するテンポに応じて変更されるようにしてもよい。例えば、テンポが速い場合は半音にとどまる時間が短く(音符長が短いため)調性感をくずしにくいので、半音頻度変数の値が大きくされてもよい。また、半音頻度変数の値は、曲調によって変えてもよい。例えば、ポップスのときは調性感がくずれないように半音頻度変数の値を下げ、ジャズでは上げる等である。更には、ユーザがリアルタイムで半音頻度変数の値を指定できるようにしてもよい。
【0074】
半音処理が実行されれば、調性外の音符が使用されることにより、不協和音が発生する。生成するベースラインがジャズ調である場合は、ポップス調である場合より不協和音の発生頻度を増加させてもよい。同様に、テンポの速い曲である場合は、遅い曲である場合より不協和音の発生頻度を増加させてもよい。本願発明によれば、確率変数値をジャンルやテンポ等に応じて変化させることにより、ジャンルやテンポ等に合った良好なベースラインを生成できることが利点である。
【0075】
ステップS505の判定がNOならば、CPU101は、確率的に半音処理の実行を決定せずに、図4のステップS402のスケール音処理判断処理に進む。
【0076】
ステップS505の判定がYESならば、確率的に半音処理の実行を決定し、図4のステップS404の半音処理に進む。
【0077】
以上の図5(a)のフローチャートで例示される半音処理実行判断処理により、前述した電子楽器100の実施形態の動作概要で説明した処理判断1の機能が実現される。
【0078】
図6は、図4のステップS404の半音処理の詳細例を示すフローチャートである。まずCPU101は、現在設定されているコードデータの次のコードデータが示すコードのルート(0から11の値)を取得する。具体的には、CPU101は、図5(a)の半音処理実行判断処理のステップS503で検索した現在の拍の次の拍のコードデータの「ルート」項目値(図2(b)参照)を取得する。
【0079】
次にCPU101は、RAM103に記憶している1つ前の拍で発音指示しているノートオンデータのノートナンバを取得する(ステップS602)。
【0080】
上述のステップS601とS602を、例えば前述した図2(c)のコード進行の例を使って説明すると、現在が第1小節の4拍目であるなら、CPU101は、ステップS601で第2小節の1拍目のコードAm7のルートAの値を取得し、ステップS602で第1小節の3拍目で発音指示しているノートオンデータのノートナンバ(0~127)を取得する。
【0081】
次にCPU101は、ステップS602で取得した1つ前の拍のノートナンバからステップS601で取得したルート値を減算することで、両者の差分値を算出する(ステップS603)。CPU101は、下記(2)式の演算処理を実行することにより、差分値が、必ず正の値になり、かつ0~11の範囲に丸め込まれるようにする。「%」は乗余演算を示す。
【0082】
(1つ前のノートナンバ - ルート値+12)%12 ・・・(2)
【0083】
続いて、CPU101は、ステップS603で算出した差分値が、11又は2の何れかの値であるか否かを判定する(ステップS604)。
【0084】
ステップS604の判定がYESならば、CPU101は、ステップS601で取得したルート値に+1した値を、現在の拍のノート値とする(ステップS608)。差分値が11の場合、現在の拍の1つ前の拍のノートナンバの音高が現在の拍の次の拍のコードのルートの半音下ということであり、1つ前の拍のノートナンバと次の拍のコードのルートの間の音高は取れないため、1つ前の拍のノートナンバから全音上がってその上がった音高から半音下の次の拍のコードのルートに移行できるようにするために、即ち、同じノート値が続かないように逆の方向の半音を鳴らすために、次の拍のコードのルートの音高を+1して得られる音高が現在の拍のノート値とされる。一方、差分値が2の場合、現在の拍の1つ前のノートナンバの音高が現在の拍の次の拍のコードのルートの全音上ということであり、現在の拍に対してはこれらの音高の間の音高を取るために、次の拍のコードのルートの音高をやはり+1して得られる音高が現在の拍のノート値とされる。
【0085】
ステップS604の判定がNOならば、CPU101は、ステップS603で算出した差分値が、10又は1の何れかの値であるか否かを判定する(ステップS605)。ステップS605の判定がYESならば、CPU101は、ステップS601で取得したルート値から-1した値を、現在の拍のノート値とする(ステップS609)。差分値が10の場合、現在の拍の1つ前の拍のノートナンバの音高が現在の拍の次の拍のコードのルートの全音下ということであり、現在の拍に対してはこれらの音高の間の音高を取るために、次の拍のコードのルートの音高から-1して得られる音高が現在の拍のノート値とされる。一方、差分値が1の場合、現在の拍の1つ前のノートナンバの音高が現在の拍の次の拍のコードのルートの半音上ということであり、1つ前の拍のノートナンバと次の拍のコードのルートの間の音高は取れないため、1つ前の拍のノートナンバから全音下がってその下がった音高から半音上の次の拍のコードのルートに移行できるようにするために、即ち、同じノート値が続かないように逆の方向の半音を鳴らすために、次の拍のコードのルートの音高から-1して得られる音高が現在の拍のノート値とされる。
【0086】
ステップS605の判定がNOならば、CPU101は、RAM103上の変数値xとして、0から99の範囲の乱数値を発生させる(ステップS606)。
【0087】
CPU101は、ステップS606で発生させた乱数値が、半音上音の頻度を示すRAM103上の半音上音頻度変数よりも小さいか否かを判定する(ステップS607)。この半音上音頻度変数は、半音処理において、現在の拍のノート値として、現在の拍の次の拍のコードのルートに対して、半音上の音高とするか(ステップS608を実行するか)又は半音下の音高とするか(ステップS609を実行するか)を制御するための閾値であり、例えば半音上音頻度変数の値を70ぐらいに設定すれば、半音下からよりも半音上から次の拍のコードのルートに移行する頻度が、倍ぐらい高くなる。この半音上音頻度変数の値は、予め設定した値でも、ユーザが編集できる値でもよい。
【0088】
ステップS607の判定がYESならば、CPU101は、前述したステップS608の処理を実行する。一方、ステップS607の判定がNOならば、CPU101は、前述したステップS609の処理を実行する。
【0089】
ステップS608又はS609の処理の後、CPU101は、出力するノート値が1オクターブ内の音高になるように、ステップS608又はS609で算出したノート値を0から11の値の範囲内に丸め込む処理を実行する(ステップS610)。なお、CPU101は、上記ノート値が、値-1となる場合には値11に、値12となる場合には値0に変換する。その後、CPU101は、図6のフローチャートで示される図4のステップS404の半音処理を終了する。
【0090】
以上の図6のフローチャートで例示される半音処理により、前述した電子楽器100の実施形態の動作概要で説明した処理判断1に基づいて実行される半音処理の機能が実現される。これにより、図2(c)のコード進行例で前述したように、例えば、第1、第2、第4、第5、第7、第8小節の4拍目と、第6小節の2拍目について、半音処理によりG#、E♭、D#、B♭、A♭、C#と、C#のノート値が出力される。
【0091】
図7は、図4のステップS402の判断を行うためのスケール音処理実行判断処理の詳細例を示すフローチャートである。このフローチャートの処理は、前述した電子楽器100の動作概要における処理判断2の動作に対応する。
【0092】
図7のスケール音処理実行判断処理において、CPU101はまず、現在の拍に対応するRAM103上の拍数を示す変数値が、1拍目を示しているか否かを判定する(ステップS701)。
【0093】
ステップS701の判定がYESの場合、即ち現在の拍が1拍目の場合には、CPU101は、現在の小節の1拍目以外の拍にコードデータが設定されているか否かを判定する(ステップS702)。具体的には、CPU101は、現在の小節に対応するRAM103上の小節数を示す変数値で、図3のステップS301においてROM102からRAM103に取得している図2(b)に例示されるコードデータの「小節」項目を検索し、その検索結果内に値1以外の「拍」項目値が設定されているコードデータがあるか否かを判定する。
【0094】
ステップS702の判定がYESならば、CPU101は、スケール音処理の実行は判断せずに、RAM103上のスケールフラグの変数値をオフ(値0)にした後に(ステップS706)、図4のステップS403のコード音処理実行判断処理に進む。
【0095】
ステップS702の判定がNOならば、CPU101は、RAM103上の変数値xとして、0から99の範囲の乱数値(スケール乱数値)を発生させる(ステップS703)。
【0096】
CPU101は、ステップS703で発生させた乱数値が、スケール音処理の頻度を示すRAM103上のスケール頻度変数よりも小さいか否かを判定する(ステップS704)。このスケール音処理頻度変数の値は、予め設定した値でも、ユーザが編集できる値でもよい。
【0097】
ステップS704の判定がYESならば、CPU101は、確率的に現在の小節の1拍目に対してスケール音処理の実行を決定し、RAM103上のスケールフラグの変数値をオン(値1)にした後(ステップS705)、図4のステップS405のスケール音処理に進む。
【0098】
ステップS704の判定がNOならば、CPU101は、確率的に現在の小節の1拍目に対してスケール音処理の実行を決定せず、RAM103上のスケールフラグの変数値をオフ(値1に)した後(ステップS706)、図4のステップS403のコード音処理実行判断処理に進む。
【0099】
前述したステップS701の判定がNOの場合、即ち現在の拍が現在の小節の1拍目でない場合には、CPU101は、現在の小節の1拍目に対してスケール音処理の実行を既に判断しておりスケールフラグをオン(値1)に設定しているか否かを判定する(ステップS707)。
【0100】
ステップS707の判定がYESの場合には、CPU101は、スケール音処理の実行を決定し、現在の拍である2、3、又は4拍目に対して、図4のステップS405のスケール音処理を実行する。
【0101】
ステップS707の判定がNOの場合には、CPU101は、スケール音処理の実行は判断せず、現在の拍である2、3、又は4拍目に対して、図4のステップS403のコード音処理実行判断処理を実行する。
【0102】
以上の図7のフローチャートで例示されるスケール音処理実行判断処理により、前述した電子楽器100の実施形態の動作概要で説明した処理判断2の機能が実現される。
【0103】
図8は、図4のステップS405のスケール音処理の詳細例を示すフローチャートである。CPU101はまず、現在の拍が2拍目であるか否か、即ち、現在の拍に対応するRAM103上の拍数を示す変数値が2拍目を示しているか否かを判定する(ステップS801)。
【0104】
現在の拍が1拍目であるためにステップS801の判定がNOの場合、CPU101はまず、1拍目に設定されている現在のコードデータのルートとコード種別を取得する(ステップS802)。具体的には、CPU101は、現在の小節及び現在の拍に対応するRAM103上の小節数を示す変数値と拍数を示す変数値(1拍目なのでこの値は1)で、図3のステップS301においてROM102からRAM103に取得している図2(b)に例示されるコードデータの「小節」項目と「拍」項目とを検索し、検索されたコードデータの「ルート」項目値と「コード種別」項目値とを取得する。CPU101は、取得した現在のコードデータの「ルート」項目値と「コード種別」項目値をRAM103に記憶する。
【0105】
続いて、CPU101は、現在の拍が1拍目であるか否かを判定する(ステップS803)。いま、現在の拍は1拍目であるため、ステップS803の判定はYESとなる。この結果、CPU101は、ステップS802で取得されRAM103に記憶されている現在のコードの「ルート」項目値を、ノート値として出力する(ステップS804)。CPU101は、このノート値をRAM103に記憶する。その後、CPU101は、図8のフローチャートで示される図4のステップS405のスケール音処理を終了する。
【0106】
現在の拍が2拍目であるためにステップS801の判定がYESの場合、CPU101は、スケール音処理を上向きで行うか下向きで行うかを決定するためのステップS805からS811の一連の処理を実行する。
【0107】
まずCPU101は、ステップS408のオクターブ処理後のノート値(0~127)を取得する(ステップS805)。
【0108】
次に、CPU101は、ステップS805で取得した1拍目のノート値が、C2(36)未満であるか否かを判定する(ステップS806)。
【0109】
ステップS806の判定がYESの場合、CPU101は、RAM103上の上行/下行変数値として、上行を示す値をセットする(ステップS810)。その後、CPU101は、ステップS812の処理に進む。
【0110】
ステップS806の判定がNOの場合、CPU101は、ステップS805で取得した1拍目のノート値が、G2(43)以上であるか否かを判定する(ステップS807)。
【0111】
ステップS807の判定がYESの場合、CPU101は、RAM103上の上行/下行変数値として、下行を示す値をセットする(ステップS811)。その後、CPU101は、ステップS812の処理に進む。
【0112】
ステップS807の判定がNOの場合、即ち、1拍目がC2以上G2未満の場合には、CPU101は、確率的に上行か下行かを決定する。
【0113】
即ち、CPU101は、RAM103上の変数値xとして、0から99の範囲の乱数値を発生させる(ステップS808)。
【0114】
CPU101は、ステップS808で発生させた乱数値が、値49よりも大きいか否かを判定する(ステップS809)。この値49は、ユーザが編集できる値でもよい。
【0115】
ステップS809の判定がYESの場合、CPU101は、ステップS810に進み、RAM103上の上行/下行変数値として上行を示す値をセットする。一方、ステップS809の判定がNOの場合、CPU101は、ステップS811に進み、RAM103上の上行/下行変数値として下行を示す値をセットする。
【0116】
ステップS810又はS811の処理の後、CPU101は、ステップS812の処理に進む。本実施形態では、図1のROM102は、前述した上行又は下行のそれぞれごとに、図12(a)又は(b)に例示されるスケール音決定テーブルを記憶している。スケール音決定テーブルは、「コード種別」ごとに、1拍目から4拍目までの音程値を記憶している。CPU101は、ステップS812において、ステップS810又はS811でセットされたRAM103上の上行/下行変数値とに基づいて、図12(a)又は(b)の何れかのスケール音決定テーブルを選択し、更に、ステップS802によりRAM103に得られている「コード種別」項目値と、現在の拍に対応するRAM103上の拍数を示す変数値とに基づいて、上記選択したスケール音決定テーブルから現在の拍及びコード種別に対応する音程値を取得する。
【0117】
ステップS812の処理の後、CPU101は、ステップS802によりRAM103に得られている「ルート」項目値に、ステップS812で得られた音程値を加算し、その加算結果がC~B(0~11)の範囲に丸め込まれるように演算して、その結果を現在の拍に対応するスケール音のノート値として出力する(ステップS813)。その後、CPU101は、図8のフローチャートで示される図4のステップS405のスケール音処理を終了する。
【0118】
以上の図8のフローチャートで例示されるスケール音処理により、前述した電子楽器100の実施形態の動作概要で説明した処理判断2に基づいて実行されるスケール音処理の機能が実現される。これにより、図2(c)のコード進行例で前述したように、例えば、第3小節の1拍目から4拍目、第7小節の1拍目から3拍目について、スケール音処理により各スケール音のノート値が出力される。
【0119】
図5(b)は、図4のステップS403のコード音処理実行判断処理の詳細例を示すフローチャートである。このフローチャートの処理は、前述した電子楽器100の動作概要における処理判断3の動作に対応する。
【0120】
図5(b)のコード音処理実行判断処理において、CPU101はまず、現在の拍に対応するRAM103上の拍数を示す変数値が、1拍目以外であるか否かを判定する(図5(b)のステップS510)。
【0121】
ステップS510の判定がYES、即ち現在の拍が1拍目以外であれば、CPU101は、現在の拍にコードデータが設定されているか否かを判定する(ステップS511)。具体的には、CPU101は、現在の小節及び現在の拍に対応するRAM103上の小節数を示す変数値と拍数を示す変数値で、図3のステップS301においてROM102からRAM103に取得している図2(b)に例示されるコードデータの「小節」項目と「拍」項目とを検索できたか否かにより、現在の拍にコードデータが設定されているか否かを判定する。
【0122】
ステップS511の判定がNO、即ち1拍目以外である現在の拍にコードデータが設定されていなければ、CPU101は、コード音処理の実行を決定し、図4のステップS406のコード音処理を実行する。
【0123】
ステップS510の判定がNO、即ち現在の拍が1拍目であるか、又はステップS511の判定がYES、即ち現在の拍が1拍目以外であるが現在の拍にコードデータが設定されている場合には、CPU101は、コード音処理の実行は判断せず、ルート音処理の実行を決定して、図4のステップS407のルート音処理を実行する。
【0124】
図9は、図4のステップS406のコード音処理の詳細例を示すフローチャートである。CPU101はまず、現在の拍の前の拍のノート種別を取得する(ステップS901)。CPU101は、コード音処理の後述するステップS911で、現在の拍に対応するノート種別を取得するごとに、RAM103にその拍に対応するノート種別を変数に記憶する。CPU101は、ステップS901において、前の拍に関してRAM103に記憶しているノート種別の変数値を参照することにより、前の拍のノート種別を取得する。ノート種別には、現在のコードの構成音に対応して、ルート音程、3度音程、5度音程、又は7度音程の何れかの音程がある。
【0125】
次に、CPU101は、以下のステップS902からS914の一連の処理を実行することにより、現在の拍が前記現在の小節内で何拍目であるか、及び現在の拍の前の拍の音程が現在のコードの構成音に対応するルート音程、3度音程、5度音程、又は7度音程の何れの音程であるかに応じて確率的に決定した現在のコードの構成音に対応するルート音程、3度音程、5度音程、又は7度音程の何れかのノート種別に基づいて算出される音高を、現在の拍の出力音高として決定する。
【0126】
まず、CPU101は、RAM103上の拍数を示す変数の値から現在の拍数を取得する(ステップS902)。ここで、図1のROM102は、図13(a)から(d)に例示されるコード音決定テーブルを記憶している。
【0127】
ステップS902で2拍目が取得された場合、CPU101は、図13(a)の2拍目用のコード音決定テーブルを選択する(ステップS903)。
【0128】
ステップS902で3拍目が取得された場合、CPU101は、ステップS901で取得された現在の拍の前の拍のノート種別により、図13(b)に含まれる(b-1)、(b-2)、(b-3)、又は(b-4)の複数の3拍目用のコード音決定テーブルの中から1つのテーブルを選択する(ステップS904)。
【0129】
ステップS902で4拍目が取得された場合は、CPU101は、ステップS901で取得された現在の拍の前の拍のノート種別により、図13(c)に含まれる(c-1)、(c-2)、(c-3)、又は(c-4)の複数の3拍目用のコード音決定テーブルの中から1つのテーブルを選択する(ステップS905)。
【0130】
CPU101は、続くステップS906からS908の処理で、現在のコード種別が3和音なのか4和音なのかの判断を行う。まずCPU101は、RAM103から現在設定されているコードデータのコード種別を取得する(ステップS906)。このために、CPU101は、コードデータを取得する処理を実行するごとに、最新の取得したコードデータの「ルート」項目値及び「コード種別」項目値をRAM103上の各変数に記憶している。
【0131】
ROM102は、図13(d)に例示されるような、コード種別およびノート種別(3rd、5th、7thの各音程)ごとのルートとの差分値を登録したコード音決定テーブルを記憶している。このテーブルにおいて、コード種別が3和音のコード種別である場合には、ノート種別=7thの差分値として-1が記憶されている。CPU101は、ステップS906で取得したコード種別をキーとして図13(d)に例示されるコード音決定テーブルを参照することにより、ノート種別が7thである差分値を取得する(ステップS907)。
【0132】
CPU101は、ステップS907で取得した差分値が-1であるか否かを判定する(ステップS908)。
【0133】
ステップS908の判定がNO、即ちステップS906で取得したコード種別が7th音程を含む4和音のコード種別である場合には、CPU101は、RAM103上の変数値xとして、0から99の範囲の乱数値を発生させる(ステップS909)。
【0134】
ステップS908の判定がYES、即ちステップS906で取得したコード種別が7th音程を含まない3和音のコード種別である場合には、CPU101は、ステップS903、S904、又はS905で選択したコード音決定テーブルの5thに対応する設定範囲のなかの最大値(但し、5thに-1が設定されている場合は3rdに対応されている設定範囲のなかの最大値)をyとして、RAM103上の変数値xとして、0からyの範囲で乱数値を発生させる(ステップS910)。
【0135】
ステップS909又はS910の処理の後、CPU101は、ステップS903、S904、又はS905で選択したコード音決定テーブル上で、上記変数値xを「設定範囲」項目値として含む新規のノート種別を取得する(ステップS911)。
【0136】
次に、CPU101は、RAM103から現在設定されているコードデータのルートを取得する(ステップS912)。前述したように、CPU101は、コードデータを取得する処理を実行するごとに、最新の取得したコードデータの「ルート」項目値及び「コード種別」項目値をRAM103上の各変数に記憶している。
【0137】
CPU101は、ステップS906で取得したコード種別と、ステップS911で取得したノート種別とに基づいて、図13(d)に例示されるコード音決定テーブルを参照することにより、ルートとの差分値を取得する(ステップS913)。
【0138】
最後に、CPU101は、ステップS912で取得したルート値に、ステップS913で取得した差分値を加算し、その加算結果がC~B(0~11)の範囲に丸め込まれるように演算して、その結果を現在の拍に対応するコード音のノート値として出力する(ステップS914)。その後、CPU101は、図9のフローチャートで示される図4のステップS406のコード音処理を終了する。
【0139】
以上の図9のフローチャートで例示されるコード音処理により、前述した電子楽器100の実施形態の動作概要で説明した処理判断3に基づいて実行されるコード音処理の機能が実現される。これにより、図2(c)のコード進行例で前述したように、例えば、第1、第2、第4、第5、及び第8小節のそれぞれの2拍目及び3拍目と、第6小節の4拍目について、コード音処理により各コード構成音のノート値E及びG、G及びE、D及びF、B及びE、D及びBと、Cが出力される。
【0140】
図5(c)は、図4のステップS407のルート音処理の詳細例を示すフローチャートである。CPU101はまず、コードデータに基づいてルートを取得する(ステップS520)。具体的には、CPU101は、現在の小節及び現在の拍に対応するRAM103上の小節数を示す変数値と拍数を示す変数値(1拍目なのでこの値は1)で、図3のステップS301においてROM102からRAM103に取得している図2(b)に例示されるコードデータの「小節」項目と「拍」項目とを検索し、検索されたコードデータの「ルート」項目値を取得し、RAM103に記憶する。
【0141】
CPU101は、ステップS520で取得されRAM103に記憶されている現在のコードの「ルート」項目値を、ノート値として出力する(ステップS521)。その後、CPU101は、図5(c)のフローチャートで示される図4のステップS407のルート音処理を終了する。
【0142】
以上の図5(c)のフローチャートで例示されるルート音処理により、前述した電子楽器100の実施形態の動作概要で説明した処理判断3に基づいて実行されるルート音処理の機能が実現される。これにより図2(c)のコード進行例で前述したように、例えば、第1、第2、第4、第5、第6、及び第8小節の各1拍目と第6小節の3拍目について、ルート音処理により各コードのルート音C、A、G、E、A、及びGと、Dが出力される。
【0143】
図10及び図11は、図4のステップS408のオクターブ処理の詳細例を示すフローチャートである。以下に説明するオクターブ処理において、CPU101は、図4のステップS404、S405、S406、及びS407の何れかの処理で決定したC~B(値0~11)ノート値を、実際に音源LSI104に指示されるノートオンデータに設定される0から127の範囲の値を有するノートナンバ(MIDIのノートナンバ)に変換する。ノートナンバは前回発生したノードナンバを元に差分値を加算することによって発生させる。
【0144】
CPU101はまず、決定された音が最初の音か否かを判定する(ステップS1001)。
【0145】
ステップS1001の判定がYESの場合、最初の音は前のノートナンバが存在しないため、CPU101は、ノート値(C~B)によりノートナンバ(E1からEb2)を決定する(ステップS1002)。
【0146】
ステップS1001の判定がNOの場合、CPU101は、前のノートナンバを例えばRAM103の変数から取得する(ステップS1003)。
【0147】
次に、CPU101は、ステップS1003で取得した前のノートのノートナンバと、決定されたノート値との差分値を0~11の範囲になるように、下記の演算式による演算で算出する(ステップS1004)。
【0148】
差分値=(前のノートナンバ - 決定されたノート値+12)%12
【0149】
CPU101は、前のノートナンバとステップS1004で算出した差分値とを加算し、その加算結果を新しいノートナンバとする(ステップS1005)。
【0150】
このままでは、必ず前のノートナンバより値が高くなるので、CPU101は、以下のステップS1006からステップ1024の一連の処理により、出力されるノートナンバのオクターブを上下させる処理を実行する。
【0151】
まずCPU101は、ステップS1004で算出した差分値により、各処理を分岐して実行する(ステップS1006)。ステップS1006の判定における判定結果の各数字の意味は下記のようになる。
0:同じ音
1、2:2度上の音
3、4:3度上の音
5、6、7:4、5度上の音
8、9:6度上の音
10、11:7度上の音
【0152】
ステップS1006で、差分値が0の場合は同じ音なので、同じ音のままか、50%の確率でオクターブを上下させる(ステップS1007~S1010)。
【0153】
まず、CPU101は、RAM103上の変数であるオクターブ決定用判定値yとして、0から99の範囲の乱数値を発生させる(ステップS1007)。
【0154】
CPU101は、変数yの値が50未満であるか否かを判定する(ステップS1008)。
【0155】
CPU101は、ステップS1008の判定がNOならば、オクターブは変更せずに図11のステップS1021に進む。
【0156】
CPU101は、ステップS1008の判定がYESならば、前のノートがC2未満か否かを判定する(ステップS1009)。
【0157】
ステップS1009の判定がYESならば、CPU101は、図11のステップS1020に進んで、ノートナンバをオクターブアップさせる。
【0158】
ステップS1009の判定がNOならば、前のノートがE♭2よりも大きいか否かを判定する(ステップS1010)。
【0159】
ステップS1010の判定がYESならば、CPU101は、図11のステップS1019に進んで、ノートナンバをオクターブダウンさせる。
【0160】
ステップS1006で、差分値が1又は2の場合、CPU101は、オクターブは変更せずに図11のステップS1021に進む。
【0161】
ステップS1006で、差分値が3又は4の場合、CPU101はまず、RAM103上の変数であるオクターブ決定用判定値yとして、0から99の範囲の乱数値を発生させる(ステップS1011)。
【0162】
CPU101は、変数yの値が75未満であるか否かを判定する(ステップS1012)。
【0163】
CPU101は、ステップS1012の判定がYESならば、オクターブは変更せずに図11のステップS1021に進む。
【0164】
CPU101は、ステップS1012の判定がNOならば、CPU101は、図11のステップS1019に進んで、ノートナンバをオクターブダウンさせる。
【0165】
ステップS1006で、差分値が5、6、又は7の場合は、CPU101はまず、RAM103上の変数であるオクターブ決定用判定値yとして、0から99の範囲の乱数値を発生させる(ステップS1013)。
【0166】
CPU101は、前のノートがG2以上か否かを判定する(ステップS1014)。
【0167】
ステップS1014の判定がYESならば、CPU101は、図11のステップS1019に進んで、ノートナンバをオクターブダウンさせる。
【0168】
ステップS1014の判定がNOならば、CPU101は、変数yの値が50未満であるか否かを判定する(ステップS1015)。
【0169】
ステップS1015の判定がYESならば、CPU101は、図11のステップS1019に進んで、ノートナンバをオクターブダウンさせる。
【0170】
CPU101は、ステップS1015の判定がNOならば、オクターブは変更せずに図11のステップS1021に進む。
【0171】
ステップS1006で、差分値が8又は9の場合は、CPU101はまず、RAM103上の変数であるオクターブ決定用判定値yとして、0から99の範囲の乱数値を発生させる(ステップS1016)。
【0172】
CPU101は、前のノートがC2以上か否かを判定する(ステップS1017)。
【0173】
ステップS1017の判定がYESならば、CPU101は、図11のステップS1019に進んで、ノートナンバをオクターブダウンさせる。
【0174】
ステップS1017の判定がNOならば、CPU101は、変数yの値が75未満であるか否かを判定する(ステップS1018)。
【0175】
ステップS1018の判定がYESならば、CPU101は、図11のステップS1019に進んで、ノートナンバをオクターブダウンさせる。
【0176】
CPU101は、ステップS1018の判定がNOならば、オクターブは変更せずに図11のステップS1021に進む。
【0177】
ステップS1006で、差分値が10又は11の場合は、CPU101は、図11のステップS1019に進んで、ノートナンバをオクターブダウンさせる。
【0178】
図11のステップS1021以降の処理は、音域のリミット処理である。CPU101は、出力の音域をE1~G3までの範囲にする。なお、発音する音域を変えたい場合はこの範囲E1~G3を変更させればよい。
【0179】
CPU101は、発音するノートがE1よりも小さいか否かを判定する(ステップS1021)。
【0180】
ステップS1021の判定がYESの場合、CPU101は、出力のノートをオクターブアップする(ステップS1023)。
【0181】
ステップS1021の判定がNOの場合、CPU101は、発音するノートがG3よりも大きいか否かを判定する(ステップS1022)。
【0182】
ステップS1022の判定がYESの場合、CPU101は、出力のノートをオクターブダウンする(ステップS1024)。
【0183】
ステップS1023若しくはS1024の処理の後、又はステップS1022の判定がNOの場合に、CPU101は、図11のフローチャートで示される図4のステップS408のオクターブ処理を終了する。
【0184】
以上のオクターブ処理により、前のノートと現在のノートの差分値が高いほど、オクターブを下げる処理が多くなっているので、跳躍進行(広い音程での移動)を少なくすることが可能となる。
【0185】
従来はあらかじめプログラミングされた演奏データを任意の長さで繰り返し演奏させていた伴奏演奏が、ある1定のルールの中でランダマイズさせることで、単調な繰り返し演奏ではなくなり、人間が演奏する生演奏に近づいた演奏を再現することが可能となる。
【0186】
このときの「ある1定のルール」には、既に発音を終えた当該タイミング以前のノートの情報も組み込むことで、1音1音の繋がりが無くランダマイズで発生される音高に比べて、より音楽的に自然な繋がりを持ったフレーズを再現することが可能となる。
【0187】
ランダマイズされる発音音高の決定手段を複数持つことで、単調な演奏からより一層離れ、人間が演奏する生演奏に近づいた演奏を再現することが可能となる。
【0188】
半音処理又はスケール音処理などの処理条件を満たす場合でも確率的に実行しないようにして変化を持たせることが可能となる。
【0189】
その他、本発明は上述した実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上述した実施形態で実行される機能は可能な限り適宜組み合わせて実施しても良い。上述した実施形態には種々の段階が含まれており、開示される複数の構成要件による適宜の組み合せにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、効果が得られるのであれば、この構成要件が削除された構成が発明として抽出され得る。
【0190】
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
生成する音が、小節内のいずれの拍のタイミングに該当するかを判断し、
判断された前記拍のタイミングが第1拍のタイミングである場合に、前記第1拍のタイミングに対応付けられているコードデータのルート音を生成するルート音処理を実行し、
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングである場合に、前記コードデータに基づく処理を含む複数の処理のなかから確率的に決定された処理を実行する、
ベースライン音自動生成装置。
(付記2)
前記複数の処理は、
取得された前記コードデータのコード構成音に含まれるいずれかの音を生成するコード音処理、
連続する発音タイミングがそれぞれ異なる複数の音を、設定された複数の音高のなかで順番に高音側に遷移していく上行音、及び順番に低音側に遷移していく下行音のいずれかに含まれる音を生成するスケール音処理、
判断された前記拍のタイミングの次の拍のタイミングに発音させる音の半音上又は半音下のいずれかの音高の音を生成する半音処理、
のいずれかを含む、付記1に記載のベースライン音自動生成装置。
(付記3)
判断された前記拍のタイミングが第1拍のタイミングである場合であって、前記小節内の前記第1拍以外の拍のタイミングにコードデータが対応付けられていない場合に、スケール乱数値を発生させ、
発生させた前記スケール乱数値に従って、第2拍以降の拍のタイミングに前記スケール音処理を実行するか否かを決定し、
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングである場合であって、前記第2拍以降の拍のタイミングに前記スケール音処理を実行すると既に決定されている場合に、前記確率的に決定された前記スケール音処理を実行する、
付記2に記載のベースライン音自動生成装置。
(付記4)
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングである場合であって、前記第2拍以降の拍のタイミングに前記スケール音処理を実行しないと決定されている場合に、前記確率的に前記コード音処理を実行すると決定された場合、判断された前記拍のタイミングに応じて異なるテーブルに従って、前記コード音処理を実行する、
付記3に記載のベースライン音自動生成装置。
(付記5)
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングであって、判断された前記拍のタイミングの次の拍のタイミングにコードデータが対応付けられている場合に、コード乱数値を発生させ、
発生させた前記コード乱数値に従って、前記半音処理、前記コード音処理のいずれの処理を実行するかを決定する、
付記2乃至4のいずれかに記載のベースライン音自動生成装置。
(付記6)
発生させた前記コード乱数値に従って、前記半音処理の実行が決定された場合に、
判断された前記拍のタイミングの1つ前の拍のタイミングのノート情報の音高が、前記次の拍のタイミングに対応付けられているコードデータのルート音の音高に対して、半音下又は全音上の場合には、前記次の拍のタイミングに対応付けられているコードデータのルート音の音高に対して半音上の音高を前記拍のタイミングの出力音高として決定し、
判断された前記拍のタイミングの1つ前の拍のタイミングのノート情報の音高が、前記次の拍のタイミングに対応付けられているコードデータのルート音の音高に対して、全音下又は半音上の場合には、前記次の拍のタイミングに対応付けられているコードデータのルート音の音高に対して半音下の音高を前記拍のタイミングの出力音高として決定する、
付記5に記載のベースライン音自動生成装置。
(付記7)
自動生成するベースラインがジャズ調である場合に、自動生成するベースラインがポップス調である場合と比べて、前記半音処理が実行される確率が高くなるように、半音頻度変数値が設定されている、
付記5又は6に記載のベースライン音自動生成装置。
(付記8)
自動生成するベースラインのテンポが第1テンポである場合に、前記第1テンポより遅い第2テンポである場合と比べて、前記半音処理が実行される確率が高くなるように、半音頻度変数値が設定されている、
付記5又は6に記載のベースライン音自動生成装置。
(付記9)
付記1乃至8のいずれかに記載のベースライン自動生成装置と、
演奏操作子と、
を備え、
前記演奏操作子の操作に応じた発音処理を実行する、
電子楽器。
(付記10)
ベースライン音自動生成装置のプロセッサに、
生成する音が、小節内のいずれの拍のタイミングに該当するかを判断させ、
判断された前記拍のタイミングが第1拍のタイミングである場合に、前記第1拍のタイミングに対応付けられているコードデータのルート音を生成するルート音処理を実行させ、
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングである場合に、前記コードデータに基づく処理を含む複数の処理のなかから確率的に決定された処理を実行させる、
方法。
(付記11)
ベースライン音自動生成装置のプロセッサに、
生成する音が、小節内のいずれの拍のタイミングに該当するかを判断させ、
判断された前記拍のタイミングが第1拍のタイミングである場合に、前記第1拍のタイミングに対応付けられているコードデータのルート音を生成するルート音処理を実行させ、
判断された前記拍のタイミングが前記第1拍以外の拍のタイミングである場合に、前記コードデータに基づく処理を含む複数の処理のなかから確率的に決定された処理を実行させる、
プログラム。
【符号の説明】
【0191】
100 電子楽器
101 CPU
102 ROM
103 RAM
104 音源LSI
105 鍵盤
106 キースキャナ
107 スイッチ
108 I/Oインタフェース
109 LCD
110 LCDコントローラ
111 D/Aコンバータ
112 アンプ
113 スピーカ
114 ネットワークインタフェース
115 システムバス
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13