図1は、この発明の一実施形態に係るメロディ生成装置を備えた電子楽器の回路構成を示すもので、この電子楽器は、パーソナルコンピュータ等の小型コンピュータによってメロディ生成、コード進行データ作成、AVNS決定、楽音発生等が制御されるようになっている。
バス10には、CPU(中央処理装置)12、ROM(リード・オンリィ・メモリ)14、RAM(ランダム・アクセス・メモリ)16、検出回路18,20、表示回路22、音源回路24、効果回路26、外部記憶装置28、MIDI(Musical Instrument Digital Interface)インターフェース30、通信インターフェース32、タイマ34等が接続されている。
CPU12は、ROM14にストアされたプログラムに従ってメロディ生成、コード進行データ作成、AVNS決定のための各種処理を実行するもので、これらの処理については図5,8〜10,13,14を参照して後述する。
ROM14には、プログラムの他に、スケール音テーブル及びAVNS検出テーブルが記憶されている。スケール音テーブルは、図3に示すようにアイオニアン・スケール、ドリアン・スケール、フリジアン・スケール…等の各AVNS毎に主音からの音程0〜11に対応する12音のうちのどの音がスケール音でどの音が非スケール音かを表わすもので、スケール音については1が、非スケール音については0がそれぞれ記憶される。図3のスケール音テーブルを参照することにより各AVNS毎にスケール音のピッチを求めることができる。例えば、アイオニアン・スケールについては、コードのルート(根音)を主音としてそのノートナンバをNとすると、7つのスケール音のピッチは、N,N+2,N+4,N+5,N+7,N+9,N+11でそれぞれ表わされる。
AVNS検出テーブルは、コード又はコード群毎に対応するAVNSを指示するもので、図7には一例としてCメジャー調におけるダイアトニックコード及びセカンダリドミナントコードについてAVNSを示す。例えば、C,C6,CM7の3コードについてはAVNSとしてアイオニアン・スケールを指示するスケールデータSCが記憶され、C7のコードについてはAVNSとしてミクソリディアン・スケールを指示するスケールデータSCが記憶される。図7のテーブルを参照することにより例えば図6のコードCM7のようにスケールデータを記憶しなかったコードに対応するAVNSを検出することができる。なお、図7では、テンション付きコードの表記を省略してある。
RAM16は、CPU12による各種処理に際して使用される種々の記憶部を含むもので、この発明の実施に関係する主な記憶部としては、コード進行データ記憶部16A、リズムデータ記憶部16B、コードデータ記憶部16C、スケールデータ記憶部16D、区間データ記憶部16E、曲データ記憶部16F等を含んでいる。
検出回路18は、鍵盤36から鍵操作情報を検出するものである。検出回路20は、スイッチ群38から各種スイッチの操作情報を検出するものである。スイッチ群38は、一例として文字入力及び数値入力が可能なキーボードからなる。
表示回路22は、表示器40の表示動作を制御することにより各種の表示を可能にするものである。
音源回路24は、複数の楽音発生チャンネルを有するものである。
効果回路26は、音源回路24から発生される楽音信号にコーラス、リバーブ等の効果を付加するものである。効果回路26から送出される楽音信号は、サウンドシステム42に供給され、音響に変換される。
外部記憶装置28は、HD(ハードディスク)、FD(フレキシブルディスク)、CD(コンパクトディスク)、DVD(ディジタル多目的ディスク)、MO(光磁気ディスク)等のうち1又は複数種類の記憶媒体を着脱可能なものである。外部記憶装置28に所望の記憶媒体を装着した状態では、記憶媒体からRAM16へデータを転送可能である。また、装着した記憶媒体がHDやFDのように書込可能なものであれば、RAM16のデータを記憶媒体に転送可能である。
外部記憶装置28に装着する記憶媒体には、メロディ生成用の複数のコード進行データが記憶される。図5のメロディ生成処理を行なう場合、記憶媒体には、図2に示すようなコード進行データCP1,CP2…が記憶される。コード進行データCP1は、1曲分のコード進行を構成する複数のコードをそれぞれ指示する複数のコードデータCD1,CD2…を含むと共に、コードデータCD1,CD2…にそれぞれ対応する複数のAVNSを指示する複数のスケールデータSC1,SC2…を含むものである。一例として、1曲の長さは、32小節(4小節を1楽節として8楽節)とし、各小節毎にコードデータ及びスケールデータを記憶し、コードデータ CD1,CD2…は、Cメジャー調を基準として記憶する。他のコード進行データCP2,CP3…も、コード進行データCP1と同様のフォーマットで記憶される。
図8又は9のメロディ生成処理あるいは図10のコード進行データ作成処理を行なう場合、外部記憶装置28の記憶媒体には、図6に示すようなコード進行データCP11,CP12…が記憶される。コード進行データCP11は、前述したコード進行データCP1からコードデータCD1,CD3,CD4等にそれぞれ対応するスケールデータを削除したものに相当する。コード進行に適合したメロディを得るためには、図2に示したようにコード毎に予めAVNSを指定するのが最も好ましいが、例えばノンダイアトニックコードや特にAVNS指定の必要性が高いダイアトニックコード等についてだけ予めAVNSを指定しておけば他のダイアトニックコードとそのテンションコード及びセカンダリードミナントコード等については図7に示したようなAVNS検出テーブルを参照して検出したAVNSを用いても差支えがないことがある。そこで、図6のコード進行データCP11では、CD2,CD5等のコードデータについてのみSC2,SC5等のスケールデータを記憶し、CD1,CD3,CD4等のコードデータについてはスケールデータの記憶を省略したものである。スケールデータを記憶してないCD1,CD3,CD4等のコードデータについては、図7のAVNS検出テーブルを参照してAVNSを検出することができる。他のコード進行データCP12,CP13…も、コード進行データCP11と同様のフォーマットで記憶される。
図2,6の例では、Cメジャー調を基準としてコードデータを記憶したが、任意の調を基準としてコード進行データを記憶してもよい。図6に示したように部分的にスケールデータが欠如したコード進行データを任意の調で記憶する場合は、基準とした調を指示する調データをコード進行データ中に含ませておくとよい。このようにすると、図7のAVNS検出テーブルを用いてAVNSを検出する際に基準とした調とCメジャー調との主音の差だけ各コードのルート(根音)をシフトすればCメジャー調の場合と同様にAVNSを検出することができる。なお、基準とした調を記憶しない場合は、コード進行を分析して調を求めたり、ユーザに調を指定させたりすればよい。
コード進行データの記憶フォーマットは、図2,6に示したように1小節等の演奏区間毎にコードを記憶するものに限らない。例えば、1拍毎又は2拍毎にコードを記憶するようにしてもよく、あるいはコード変化のあったタイミングを指示するタイミングデータと変化後のコードを指示するコードデータとを組にして記憶するイベント記憶方式を用いてもよい。また、部分的にスケールデータを欠如するコード進行データの記憶フォーマットとしては、図6に示したように各コード毎にAVNS記憶エリアを確保するものに限らず、各コード毎にAVNS指定の有無を示すフラグデータを記憶すると共にフラグデータによりAVNS指定ありが示されるコードについてのみAVNSを指示するスケールデータを記憶するようにしてもよい。このようにすると、フラグデータによりAVNS指定なしが示されるコードデータについてはスケールデータを記憶する記憶エリアが不要となり、記憶容量の低減が可能となる。
コード進行データを記憶する記憶手段として、外部記憶装置28の代りにROM14又はRAM16を用いてもよい。また、プログラム記憶手段としては、ROM14の代りに外部記憶装置28の記憶媒体(前述のHD,FD,CD,DVD,MO等)を用いることができる。この場合、記憶媒体に記憶したプログラムは、外部記憶装置28からRAM16へ転送する。そして、RAM16に記憶したプログラムに従ってCPU12を動作させる。このようにすると、プログラムの追加やバージョンアップ等を容易に行なうことができる。
MIDIインターフェース30は、自動演奏装置等の他のMIDI機器44との間で演奏情報等の送受信を行なうために設けられたものである。
通信インターフェース32は、通信ネットワーク(例えばLAN(ローカル・エリア・ネットワーク)、インターネット、電話回線等)46を介して他のコンピュータ48と情報通信を行なうために設けられたものである。この発明の実施に必要なプログラムや各種データは、コンピュータ48から通信ネットワーク46及び通信インターフェース32を介してRAM16又は外部記憶装置28へダウンロード要求に応じて取込むようにしてもよい。
タイマ34は、与えられるテンポデータに対応する周期でテンポクロック信号TCLを発生するもので、テンポクロック信号TCLは、割込命令としてCPU12に供給される。CPU12は、テンポクロック信号TCLの各クロックパルス毎に割込処理を開始する。このような割込処理を利用することにより記憶部16Fの曲データ(メロディデータ)に基づいて自動演奏を行なうことができる。
上記した電子楽器において、CPU12は、鍵盤36で鍵が押されるたびに、押された鍵に対応する音高情報と発音命令信号とを音源回路24に供給する。音源回路24は、音高情報及び発音命令信号に応じて、押された鍵に対応する音高を有する楽音信号を発生する。このようにしてマニュアル演奏音の発生が可能となる。
次に、上記した電子楽器における曲生成処理の概要を図4を参照して説明する。ステップ50では、1曲分のメロディのリズム(打点又は発音タイミング)を表わすリズムデータを生成し、RAM16の記憶部16Bに記憶させる。1曲分のメロディのリズムを生成する方法としては、1曲分のメロディのリズムパターンテンプレートを多数記憶しておき、ユーザが拍子、ジャンル、楽節構成等の作曲条件を指定するのに応じて該作曲条件に合うリズムパターンテンプレートを自動的に選択する方法、記憶した多数のリズムパターンテンプレートの中からユーザが任意のものを選択する方法、1小節等の短区間のリズムパターンテンプレートを多数記憶しておき、ユーザが拍子、ジャンル、楽節構成等の作曲条件を指定するのに応じて該作曲条件を満たすように短区間のリズムパターンテンプレートを自動的につなぎ合せて1曲分のメロディのリズムを生成する方法、ユーザがモチーフとなるリズムパターンを入力し、このリズムパターンを演算等により発展させて1曲分のメロディのリズムを生成する方法のうちいずれかの方法を採用可能であるが、これら以外の方法を採用してもよい。
ステップ52では、外部記憶装置28からCP1,CP2…等のコード進行データのうちユーザが望むものを選択してRAM16の記憶部16Aに読出す。そして、記憶部16Aのコード進行データと記憶部16Bのリズムデータとに基づいて1曲分のメロディを生成し、生成メロディを表わすメロディデータをRAM16の記憶部16Fに書込む。メロディ生成処理としては、図5に関して後述する処理を採用することができる。
外部記憶装置28からは、図6に示したCP11,CP12…等のコード進行データのうちユーザが望むものを選択して記憶部16Aに読出すこともできる。このようにした場合、メロディ生成処理としては、図8又9に示す処理を採用することができる。
ステップ54では、記憶部16Fの曲データに基づいて曲生成(自動演奏)を行なったり、記憶部16Fの曲データを外部記憶装置28に転送して保存したりする。
ステップ56では、外部記憶装置28(又はROM14)からAP1,AP2…等の伴奏パターンのうちユーザが望むものを選択してRAM16内の所定の記憶エリア(図示せず)に読出す。そして、記憶部16Aのコード進行データと所定の記憶エリアの伴奏パターンとに基づいて1曲分の伴奏生成(自動伴奏)行なう。この伴奏生成(自動伴奏)は、ステップ54での曲生成(自動演奏)と鍵盤36でのマニアル演奏とのうちの一方又は双方に対する伴奏とすることができる。
ステップ56の伴奏生成(自動伴奏)では、記憶部16Aのコード進行データ中のコードデータに基づいて伴奏パターン中のピッチを適宜修正して伴奏音を生成する。このとき、コードデータだけでなく、コード進行データ中のAVNSを利用すると、適切なテンションノート等を使うことで一層豊かな伴奏音を生成することができる(特開平10−78779号公報参照)。
コード進行データや伴奏パターンを選択する方法としては、ユーザが拍子、ジャンル等の条件を指定するのに応じて該条件に合うものを自動的に選択する方法、各コード進行データや各伴奏パターンに対してそのイメージを表わす言葉(例えば「さわやか」、「都会的な」等)を対応させておき、ユーザが所望の言葉を指定するのに応じて対応するコード進行データや伴奏パターンを自動的に選択する方法のうちいずれかの方法を採用可能であるが、これら以外の方法を採用してもよい。
コード進行データを記憶する際には、コード進行データと他のデータとを組にして記憶したり、コード進行データと他のデータとの対応関係を記憶したりしてもよい。この場合、他のデータとしては、リズム生成のためのデータ(拍子、ジャンル、楽節構成等のデータ)、伴奏パターン選択のためのデータ(拍子、ジャンル等のデータ)等を記憶したり、コード進行データに対応させたりすればよい。このようにすると、コード進行に適合したリズムや伴奏を生成可能となる。
図5は、メロディ生成処理の第1の例を示すものである。ステップ60では、記憶部16Aからコード進行データにおける先頭のコードデータを読出して記憶部16Cに書込む。一例として、記憶部16Aには、図2のコード進行データCP1が書込まれているものとすると、ステップ60では、記憶部16CにコードデータCD1が書込まれる。
次に、ステップ62では、記憶部16Cのコードデータに関して指定されているAVNSを取得する。すなわち、記憶部16Cのコードデータの指示するコードに対応するAVNSを指示するスケールデータを記憶部16Aから読出して記憶部16Dに書込む。前述例のように記憶部16CにはコードデータCD1が書込まれているものとすると、ステップ62では、記憶部16DにスケールデータSC1が書込まれる。
次に、ステップ64では、記憶部16Cのコードデータに対応する区間の打点(発音タイミング)を取得する。すなわち、記憶部16Bの1曲分のリズムデータから記憶部16Cのコードデータに対応する区間(小節)のリズムデータを抽出して記憶部16Eに書込む。前述例のように記憶部16CにはコードデータCD1が書込まれているものとすると、ステップ64では、記憶部16Eに1小節目のリズムデータが書込まれる。
次に、ステップ66では、ステップ64での取得に係る区間の打点に対してステップ62での取得に係るAVNS内の音のピッチを付与する。すなわち、記憶部16Eのリズムデータの指示する打点に対して記憶部16Dのスケールデータの指示するAVNS内の音のピッチを付与する。このときのピッチ付与では、前述したように図3のスケール音テーブルを参照して記憶部16Dのスケールデータの指示するAVNS内のすべてのスケール音(コード構成音及び非コード構成音)のピッチを求め、求めたスケール音のピッチの中からピッチ付与を行なう。
ピッチ付与方法としては、AVNS内の音のピッチをランダムに選択して各打点に付与する方法を用いることができる。この場合、区間内の複数の打点のうち重要音(強拍音又はその近くに位置する音)にはコード構成音のピッチをランダムに選択して付与し、それ以外の音にはAVNS内のコード構成音以外の音(非コード構成音)のピッチをランダムに選択して付与することができる。打点に対してコード構成音のピッチを付与するには、AVNSを求めた上でそのAVNS内のコード構成音のピッチを付与する方法に限らず、コードデータに基づいてコード構成音を求めた上でそのコード構成音のピッチを付与するようにしてもよい。
上記のようにAVNS内の音のピッチをランダムに選択してピッチを付与する場合、完全なランダム選択ではなく、音楽ルールや指定された作曲条件を満たす音のピッチの中からランダムに選択するようにしてもよい。他のピッチ付与方法としては、スイッチ群38を構成するキーボードに付属したマウス等でピッチ変化を示す折れ線や曲線を表示器40の画面上に描き、これを打点位置毎にサンプリングしてサンプリングで得られた値をAVNS内の最も近い音のピッチに修正して採用するようにしてもよい。この場合、重要音については最も近いコード構成音のピッチに修正して採用してもよい。
ステップ66において記憶部16Eのリズムデータの指示する各打点に対するピッチ付与が終ったときは、各打点毎にピッチを表わすリズムデータからなる区間メロディデータを記憶部16Eから読出して記憶部16Fに書込む。前述例のように記憶部16Eには1小節目のリズムデータが、記憶部16DにはスケールデータSC1がそれぞれ書込まれているものとすると、ステップ66では、1小節目のリズムデータの指示する各打点に対してスケールデータSC1の指示するアイオニアン・スケール内の音のピッチを付与することにより1小節目のメロディデータが生成され、このメロディデータが記憶部16Eから記憶部16Fに転送される。
次に、ステップ68では、記憶部16Aに次のコードデータありか判定する。この判定の結果が肯定的(Y)であればステップ69に移り、記憶部16Aから次のコードデータを読出して記憶部16Cに書込む。そして、記憶部16Cに書込まれたコードデータに関してステップ62〜66の処理を上記したと同様に実行する。一例として、ステップ69において記憶部16Cに図2のコードデータCD2が書込まれたものとすると、ステップ66では、記憶部16Eの2小節目のリズムデータの指示する各打点に対して記憶部16DのスケールデータSC2の指示するドリアン・スケール内の音のピッチを付与することにより2小節目のメロディデータが生成され、このメロディデータが記憶部16Eから記憶部16Fに転送される。
この後は、3小節目以降の各コードデータについて上記したと同様にメロディ生成処理が行なわれる。最終小節に関してステップ66の処理が終ると、ステップ68の判定結果が否定的(N)となり、処理エンドとする。処理エンド時において、記憶部16Fには、1曲分のメロディを表わすメロディデータが記憶されている。
図8は、メロディ生成処理の第2の例を示すものである。ステップ70では、記憶部16Aからコード進行データにおける先頭のコードデータを読出して記憶部16Cに書込む。一例として、記憶部16Aには、図6のコード進行データCP11が書込まれているものとすると、ステップ70では、記憶部16CにコードデータCD1が書込まれる。
次に、ステップ72では、記憶部16CのコードデータはAVNS指定ありか判定する。すなわち、記憶部16Cのコードデータの指示するコードに対応したAVNSを指示するスケールデータが記憶部16Aに記憶されているか判定する。この判定の結果が肯定的(Y)であればステップ74に移り、前述のステップ62と同様にして記憶部16Cのコードデータに関して指定されているAVNSを取得する。この結果、記憶部16Dには、記憶部16Cのコードデータに対応するスケールデータが書込まれる。
ステップ72の判定結果が否定的(N)であったときは、ステップ76で図7のAVNS検出テーブルを参照してAVNSを取得する。すなわち、記憶部16Cのコードデータの指示するコードに対応したAVNSを指示するスケールデータを図7のAVNS検出テーブルから読出して記憶部16Dに書込む。前述例のように記憶部16CにコードデータCD1が書込まれているものとすると、ステップ76では、コードデータCD1の指示するコード「CM9」に対応するAVNSを指示するスケールデータを図7のAVNS検出テーブルから読出して記憶部16Dに書込む。なお、「CM9」は、コード「C」にテンション音が付加されたテンションコードであり、図7においてはその表記が省略されているが、この「CM9」に対応するAVNSは、「アイオニアン・スケール」である。
ステップ74又は76の処理が終ったときは、ステップ78に移り、前述のステップ64と同様にして記憶部16Cのコードデータに対応する区間の打点を取得する。前述例のように記憶部16CにはコードデータCD1が書込まれているものとすると、ステップ78では、記憶部16Eに1小節目のリズムデータが書込まれる。
次に、ステップ80では、前述のステップ66と同様にしてステップ78での取得に係る区間の打点に対してステップ74又は76での取得に係るAVNS内の音のピッチを付与する。そして、各打点毎にピッチが付与されたリズムデータからなる区間メロディデータを記憶部16Eから記憶部16Fに転送する。前述例のように記憶部16Eには1小節目のリズムデータが、記憶部16Dには「CM9」対応のスケールデータがそれぞれ書込まれているものとすると、ステップ80では、1小節目のリズムデータの指示する各打点に対して「CM9」対応のスケールデータの指示するAVNS内の音のピッチを付与することにより1小節目のメロディデータが生成され、このメロディデータが記憶部16Eから記憶部16Fに転送される。
次に、ステップ82では、記憶部16Aに次のコードデータありか判定する。この判定の結果が肯定的(Y)であればステップ84に移り、記憶部16Aから次のコードデータを読出して記憶部16Cに書込む。そして、記憶部16Cに書込まれたコードデータに関してステップ72〜80の処理を上記したと同様に実行する。一例として、ステップ84において記憶部16Cに図6のコードデータCD2が書込まれたものとすると、ステップ74では、記憶部16Dに図6のスケールデータSC2が書込まれる。そして、ステップ80では、記憶部16Eの2小節目のリズムデータの指示する各打点に対して記憶部16DのスケールデータSC2の指示するドリアン・スケール内の音のピッチを付与することにより2小節目のメロディデータが生成され、このメロディデータが記憶部16Eから記憶部16Fに転送される。
この後は、3小節目以降の各コードデータについて上記したと同様にメロディ生成処理が行なわれる。最終小節に関してステップ80の処理が終ると、ステップ82の判定結果が否定的(N)となり、処理エンドとする。処理エンド時において、記憶部16Fには、1曲分のメロディを表わすメロディデータが記憶されている。
図9は、メロディ生成処理の第3の例を示すものである。この例において、ステップ90,92,94,98,100,102,104は、図8のステップ70,72,74,78,80,82,84とそれぞれ同様の処理であるので、詳細な説明を省略する。
図9のメロディ生成処理の特徴は、ステップ92の判定結果が否定的(N)であった(記憶部16Aにコードデータ対応のスケールデータが記憶されていなかった)とき、ステップ96でコード進行における調のスケールを取得し、ステップ100でピッチを付与する際に取得に係る調のスケール内の音のピッチを採用するようにしたことである。
一例として、記憶部16Aには図6のコード進行データCP11が書込まれており、ステップ90では記憶部16Cに図6のコードデータCD1を読出したものとすると、コードデータCD1に対応するスケールデータが記憶部16Aに記憶されていないので、ステップ92の判定結果が否定的(N)となり、ステップ96においてコード進行における調(この例ではCメジャー調)のスケールすなわちダイアトニックスケールを指示するスケールデータを記憶部16Dに書込む。
次に、ステップ98では、コードデータCD1に対応する1小節目のリズムデータを記憶部16Bから記憶部16Eに転送する。そして、ステップ100では、記憶部16Eのリズムデータの指示する各打点に対して記憶部16Dのスケールデータの指示する調のスケール内のピッチを付与することにより1小節目のメロディデータを生成し、このメロディデータを記憶部16Eから記憶部16Fに転送する。
ダイアトニックコードについては、AVNSと調のスケールが実質的に同一であるので、図9のメロディ生成処理によっても適切なメロディピッチを付与することができる(但し、セカンダリードミナントコードには対応できない)。
図10は、コード進行データ作成処理を示すものである。ステップ110では、記憶部16Aからコード進行データにおける先頭のコードデータを読出して記憶部16Cに書込む。一例として、記憶部16Aには、図6のコード進行データCP11が書込まれているものとすると、ステップ110では、記憶部16CにコードデータCD1が書込まれる。
次に、ステップ112では、前述のステップ72と同様にして記憶部16CのコードデータはAVNS指定ありか(スケールデータが記憶部16Aに記憶されているか)判定する。この判定結果が否定的(N)であればステップ114に移り、前述のステップ76と同様にして図7のAVNS検出テーブルを参照して記憶部16Cのコードデータに対応するAVNSを取得し、取得に係るAVNSを指示するスケールデータを記憶部16Cのコードデータに対応して記憶部16Aに書込む。前述例のように記憶部16CにコードデータCD1が書込まれているものとすると、ステップ114では、コードデータCD1の指示するコード「CM9」に対応するAVNSを指示するスケールデータを図7のAVNS検出テーブルから読出し、コードデータCD1に対応して記憶部16Aに書込む。
ステップ112の判定結果が肯定的(Y)であったとき又はステップ114の処理が終ったときは、ステップ116において記憶部16Aに次のコードデータありか判定する。この判定結果が肯定的(Y)であればステップ118に移り、記憶部16Aから次のコードデータを読出して記憶部16Cに書込む。そして、記憶部16Cに書込まれたコードデータに関してステップ112,114の処理を上記したと同様に実行する。
前述例のようにステップ114でコードデータCD1に関する処理を行なったときは、ステップ118で記憶部16CにコードデータCD2が読出される。コードデータCD2についてはスケールデータSC2が記憶部16Aに記憶されているのでステップ112の判定結果が肯定的(Y)となり、ステップ114を経ずにステップ116に移る。
この後は、3小節目以降の各コードデータについて上記したと同様にAVNS指定の有無を判定し、AVNS指定なしであればステップ114でAVNSを取得して記憶部16Aに書込む。最終小節に関してステップ112又は114の処理が終ると、ステップ116の判定結果が否定的(N)となり、処理エンドとする。処理エンド時において、記憶部16Aのコード進行データは、図6のCP11に示すように部分的にスケールデータを欠如した状態から図2のCP1に示すようにスケールデータを完備した状態に変化している。
図10の処理で作成されたコード進行データは、図5に関して前述したメロディ生成処理や図4に関して前述した自動伴奏処理において利用可能である。
次に、図11を参照してAVNS決定処理の概要を説明する。記憶部16P,16Q,16R,16S,16Tは、いずれも図1のRAM16に属するもので、それぞれコード進行データ,着目コードデータ,前コードデータ,後コードデータ,調データを記憶する。コード進行データは、例えば1曲分のコード進行を構成する複数のコードをそれぞれ指示する複数のコードデータを含むもので、曲の調を指示する調データと共に取得される。
調データ及びコード進行データを取得する方法としては、例えばROM14又は外部記憶装置28に設けたコード進行データベースからユーザが所望の調データ付きのコード進行データを選択する方法、ユーザが鍵盤36やスイッチ群38等により所望の調データ及びコード進行データを入力する方法、ユーザの指示に応じて調データ付きのコード進行データを自動生成する方法等を利用可能である。いずれかの方法で取得された調データ及びコード進行データのうち、調データは記憶部16Tに記憶されると共にコード進行データは記憶部16Pに記憶される。記憶部16Pには、コード進行データを構成する各コードデータに対応してAVNSを指示するスケールデータを記憶可能になっている。
AVNS決定処理120では、記憶部16Pに記憶されたコード進行データを構成する各コードデータ毎に該コードデータが示すコードに対するAVNSを決定し、各コードデータ毎に決定に係るAVNSを指示するスケールデータASDを例えば図2のCP1に示したのと同様のフォーマットで記憶部16Pに記憶させる。AVNS決定の際には、AVNSを決定すべきコードデータを記憶部16Pから読出し、着目コードデータとして記憶部16Qに記憶させる。また、着目コードデータの直前のコードデータ及び直後のコードデータを記憶部16Pから読出し、それぞれ前コードデータ及び後コードデータとして記憶部16R及び16Sに記憶させる。ただし、コード進行の先頭のコードについてAVNSを決定するときは、前コードデータが存在しないので、記憶部16Tの調データが指示する調のトニックコードを表わすトニックコードデータを記憶部16Rに記憶させ、コード進行の最後のコードについてAVNSを決定するときは、後コードデータが存在しないので、前コードデータの場合と同様に調のトニックコードを表わすトニックコードデータを記憶部16Sに記憶させる。
AVNSテーブル122は、図12に一例を示すように1又は複数のコードタイプ毎に1又は複数のAVNSを表わすもので、例えばROM14又は外部記憶装置28に記憶される。図12には、コード及びAVNSについて使用する調(メジャー又はマイナー)を示した。図12の例では、ダイアトニックコードにおけるスケールのみを示した。1つのコードタイプが複数のスケールに対応することがあるが、これは1つのコードタイプであってもコード機能が違えばスケールも違うことを意味している。例えばCメジャー調において、メジャー(M)はトニック(C)とサブドミナント(F)で使用され、このときのスケールはトニックに対応してアイオニアン・スケールとなり、サブドミナントに対応してリディアン・スケールとなる。
AVNS決定の際には、記憶部16Qの着目コードデータが指示する着目コード毎にAVNSテーブル122を参照して該着目コードに対応するAVNS候補を抽出する。そして、抽出に係るAVNS候補が「m7♭5」の場合の「ロクリアン・スケール」のように1つだけあればその1つのAVNS候補を着目コードに対するAVNSとして決定し、「M」の場合の「アイオニアン・スケール,リディアン・スケール」のように複数であれば記憶部16Rの前コードデータ及び記憶部16Sの後コードデータを参照して前コード及び後コードのうちの少なくとも一方のコードの構成音を含む1つのAVNS候補を抽出に係る複数のAVNS候補のうちから検出し、この検出に係る1つのAVNS候補を着目コードに対するAVNSとして決定する。また、前コード及び後コードのうちの少なくとも一方のコードの構成音を含む複数のAVNS候補を抽出に係る複数のAVNS候補のうちから検出すると共にこの検出に係る複数のAVNS候補のうちから1つのAVNS候補を選択し、この選択に係る1つのAVNS候補を着目コードに対するAVNSとして決定する。
図13,14は、AVNS決定処理の流れを示すものである。ステップ130では、調データと共にコード進行を取得する。すなわち、前述したいずれかの取得方法により調データ及びコード進行データを取得し、調データは記憶部16Tに、コード進行データは記憶部16Pにそれぞれ記憶させる。
次に、ステップ132では、コード進行から着目コード、前コード及び後コードを取得する。すなわち、記憶部16Pから着目コードデータを読出して記憶部16Qに書込むと共に記憶部16R,16Sにそれぞれ前コードデータ及び後コードデータを書込む。コード進行の先頭のコードを着目コードとするときは、前コードデータとして調のトニックコードを表わすトニックコードデータを記憶部16Rに書込み、着目コードの次のコードデータを記憶部16Pから読出して後コードデータとして記憶部16Sに書込む。この後、ステップ134に移る。
ステップ134では、着目コードに対応するAVNS候補をAVNSテーブル122から抽出する。すなわち、記憶部16Qの着目コードデータが指示する着目コードに対応するAVNS候補をAVNSテーブル122から読出してRAM16内の候補レジスタ(図示せず)にセットする。このときセットされるAVNS候補は、1つのときもあれば、複数のときもある。
次に、ステップ136では、候補レジスタ内のAVNS候補が複数か判定する。この判定の結果が否定的(N)であれば、AVNS候補が1つであったことになり、図14のステップ138に移る。
ステップ138では、候補レジスタ内の1つのAVNS候補を着目コードに対するAVNSとして決定する。そして、決定に係るAVNSを指示するスケールデータASDを着目コードデータに対応して記憶部16Pに書込む。
一方、ステップ136の判定結果が肯定的(Y)であったときは、ステップ140に移り、前コードの構成音と後コードの構成音とに共通する共通音を検出する。すなわち、記憶部16Rの前コードデータが指示するコードの構成音と、記憶部16Sの後コードデータが指示するコードの構成音とのうちから両者に共通する音を検出する。例えば、前コードの構成音がB♭,D,Fであり、後コードの構成音がE♭,G,B♭であれば、共通音はB♭となる。
次に、ステップ142では、共通音ありか判定する。この判定の結果が肯定的(Y)であればステップ144に移り、ステップ134での抽出に係る複数のAVNS候補のうちに、共通音を含むAVNS候補があるか判定する。この判定の結果が肯定的(Y)であればステップ146に移り、ステップ134での抽出に係る複数のAVNS候補のうちに、共通音を最も多く含むAVNS候補が複数あるか判定する。この判定の結果が否定的(N)であったときは、共通音を最も多く含むAVNS候補が1つであったことになり、ステップ138に移る。
ステップ138では、共通音を最も多く含む1つのAVNS候補を着目コードに対するAVNSとして決定すると共に、決定に係るAVNSを指示するスケールデータASDを前述したと同様にして記憶部16Pに書込む。
ステップ142又は144の判定結果が否定的(N)であった(共通音がないか、あってもそれを含むAVNS候補がなかった)とき、あるいはステップ146の判定結果が肯定的(Y)であった(共通音を最も多く含むAVNS候補が複数あった)ときは、ステップ148に移る。
ステップ148では、ステップ134での抽出に係る複数のAVNS候補のうちの各AVNS候補毎に該AVNS候補に含まれる前コードの構成音の数と該AVNS候補に含まれる後コードの構成音の数とを検出する。このとき、前コード及び後コードは、それぞれ記憶部16Rの前コードデータ及び記憶部16Sの後コードデータによって指示される。
次に、ステップ150では、ステップ134での抽出に係る複数のAVNS候補のうちに、前コード又は後コードのいずれかのコードの構成音を含むAVNS候補があるかステップ148の検出結果に基づいて判定する。この判定の結果が肯定的(Y)であればステップ152に移り、ステップ134での抽出に係る複数のAVNS候補のうちに、コード構成音を最も多く含むAVNS候補が複数あるかステップ148の検出結果に基づいて判定する。
1つのAVNS候補がコード構成音を含む態様としては、(a)前コードの構成音のみを含むもの、(b)後コードの構成音のみを含むもの、(c)前コード及び後コードの双方の構成音を含むものがありうる。1つのAVNS候補に含まれるコード構成音数としては、態様(a)では前コードについて含まれる構成音数を採用し、態様(b)では後コードについて含まれる構成音数を採用し、態様(c)では前後のコードについて含まれる構成音数が等しければその等しい数を採用し、等しくなければ多い方の数(例えば2音と3音ならば3音)を採用する。このようにして各AVNS候補毎に含まれるコード構成音数を求めた上で、求めたコード構成音数が最も多いAVNS候補が複数あるかステップ152で判定する。この判定の結果が否定的(N)であったときは、コード構成音を最も多く含むAVNS候補が1つであったことになり、ステップ138に移る。
ステップ138では、コード構成音を最も多く含む1つのAVNS候補を着目コードに対するAVNSとして決定し、決定に係るAVNSを指示するスケールデータASDを前述したと同様にして記憶部16Pに書込む。
ステップ150の判定結果が否定的(N)であった(前コード又は後コードのいずれかのコードの構成音を含むAVNS候補がなかった)とき、あるいはステップ152の判定結果が肯定的(Y)であった(コード構成音を最も多く含むAVNS候補が複数あった)ときは、ステップ154に移る。
ステップ150からステップ154にきた場合には、ステップ154において、ステップ134での抽出に係る複数のAVNS候補のうちから、調の音階音を最も多く含む1つのAVNS候補を選択する。また、ステップ152からステップ154にきた場合には、ステップ154において、ステップ152での判定に係る複数のAVNS候補のうちから、調の音階音を最も多く含む1つのAVNS候補を選択する。いずれの場合にも、調は、記憶部16Tの調データによって指示される。AVNS候補の選択の後、ステップ154では、選択に係る1つのAVNS候補を着目コードに対するAVNSとして決定すると共に、決定に係るAVNSを指示するスケールデータASDを着目コードデータに対応して記憶部16Pに書込む。
ステップ154において、AVNS候補を選択する際には、調の音階音以外の要素を考慮して選択を行なうようにしてもよい。例えば、すでにコード進行に対応するメロディが存在する場合には、着目コードの区間における該メロディの構成音をより多く含むAVNS候補を選択してもよい。また、前コード及び後コードのうち発音時間が長い方のコードの構成音を含むAVNS候補を選択してもよい。さらに、ユーザの音楽的好みを反映できるようにするため、ユーザが前コードの構成音を含むAVNS候補又は後コードの構成音を含むAVNS候補のいずれを選択するか指定できるようにしてもよい。
ステップ138又は154の処理が終ったときは、ステップ156に移り、記憶部16PにAVNSを決定すべき次のコードありか判定する。例えば、ステップ132でコード進行の先頭のコードを着目コードとした後初めてステップ156にきたときは、次のコードがあるので、ステップ156の判定結果が肯定的(Y)となり、ステップ158に移る。
ステップ158では、着目コードを次のコードに設定する。そして、ステップ132に戻り、前述したと同様にしてコード進行から着目コード、前コード及び後コードを取得する。例えば、着目コードが2番目のコード(先頭コードの次のコード)であったときは、記憶部16Q,16R,16Sにはそれぞれ先頭コード,2番目のコード,3番目のコードがセットされる。ステップ132の後は、前述したと同様にしてステップ134以降の処理を行なう。
上記のようにしてコード進行を構成するコードについて順次にAVNSを決定していくと、やがてステップ158ではコード進行の最後のコードを着目コードとする。そして、ステップ132に戻り、記憶部16Q,16R,16Sにはそれぞれ最後のコード,最後のコードの直前のコード,調のトニックコードをセットする。次に、ステップ134以降の処理を行ない、ステップ138又は154において、最後のコードに対するAVNSを決定すると共に、決定に係るAVNSを指示するスケールデータASDを前述したと同様にして記憶部16Pに書込む。この後、ステップ156で次のコードありか判定すると、判定結果が否定的(N)となり、処理エンドとする。
上記したAVNS決定処理によれば、コード進行を構成する各コード毎に該コードに適合したAVNSを自動的に決定することができる。このようなAVNS決定の具体例として例1〜3を順次に説明する。
〔例1〕コード進行がCメジャー調のB♭,F,E♭であり、着目コードがFである場合、AVNS候補は、
アイオニアン・スケール:F,G,A,B♭,C,D,E
リディアン・スケール:F,G,A,B,C,D,E
となり、前後コードの構成音は、
前コードB♭:B♭,D,F
後コードE♭:E♭,G,B♭
となる。ここで、共通音はB♭となり、共通音B♭を含むAVNS候補はアイオニアン・スケール1つとなる。従って、アイオニアン・スケールが着目コードFに対するAVNSとして決定される。
〔例2〕コード進行がCメジャー調のB♭,F,Cであり、着目コードがFである場合、AVNS候補は、
アイオニアン・スケール:F,G,A,B♭,C,D,E
リディアン・スケール:F,G,A,B,C,D,E
となり、前後コードの構成音は、
前コードB♭:B♭,D,F
後コードC:C,E,G
となる。ここで、共通音はない。アイオニアン・スケールに含まれる前コードB♭の構成音は、B♭,D,Fの3音であり、アイオニアン・スケールに含まれる後コードCの構成音は、C,E,Gの3音である。また、リディアン・スケールに含まれる前コードB♭の構成音は、D,Fの2音であり、リディアン・スケールに含まれる後コードCの構成音は、C,E,Gの3音である。従って、コード構成音を最も多く含むAVNS候補は、アイオニアン・スケール及びリディアン・スケールの2つとなり、これらのスケール候補のうち調の音階音を最も多く含むAVNS候補は、Cメジャー調の音階音C,D,E,F,G,A,Bをすべて含むリディアン・スケールとなる。この結果、リディアン・スケールが着目コードFに対するAVNSとして決定される。
〔例3〕コード進行がCメジャー調のB♭,F,Dであり、着目コードがFである場合、AVNS候補は、
アイオニアン・スケール:F,G,A,B♭,C,D,E
リディアン・スケール:F,G,A,B,C,D,E
となり、前後コードの構成音は、
前コードB♭:B♭,D,F
後コードD:D,F♯,A
となる。ここで、共通音はDとなり、共通音Dを含むAVNS候補は、アイオニアン・スケール及びにリディアン・スケールとなる。アイオニアン・スケールに含まれる前コードB♭の構成音は、B♭,D,Fの3音であり、アイオニアン・スケールに含まれる後コードDの構成音は、D,Aの2音である。また、リディアン・スケールに含まれる前コードB♭の構成音は、D,Fの2音であり、リディアン・スケールに含まれる後コードDの構成音は、D,Aの2音となる。従って、コード構成音を最も多く含むAVNS候補は、アイオニアン・スケール1つとなり、アイオニアン・スケールが着目コードFに対するAVNSとして決定される。
上記したAVNS決定処理は、図8のステップ76又は図10のステップ114に関して前述したAVNS検出処理として利用可能であるのは勿論のこと、図2に示したようなコード進行データを作成する際に各コード毎にAVNSを決定するのに利用することができる。また、他の用途(例えば通常の自動作曲、自動伴奏、教習等)に利用してもよい。
上記したAVNS決定処理は、次の(イ)〜(ト)のような変更を加えて実施してもよい。
(イ)調データと共にコード進行データを取得するようにしたが、調データを取得せず、コード進行データのみを取得し、この後コード進行データに基づいて調を自動検出してもよい。この場合、部分的な転調を検出する必要はなく、コード進行全体を支配する調を検出すればよい。このコード進行全体の調検出は公知の技術であり、部分的な転調検出に比べて容易である。また、取得するコード進行を所定調(例えばCメジャー調)のみに限定したり、あるいは「調の音階音を最も多く含むAVNS候補を着目コードに対するAVNSとする」というステップを省略したりすれば、調データを与えなくてよい。
(ロ)図12に示したAVNSテーブルにおいて、ダイアトニックコードにおけるスケールのみを記憶するようにしたが、ノンダイアトニックコードにおけるスケールをも記憶するようにしてもよい。また、AVNSテーブルの記憶データ形式は、図12に示したものに限らない。
(ハ)前後コードに共通の構成音を含む1又は複数のAVNS候補を検出する処理(ステップ140〜146の処理)の後、前後コードのうちの少なくとも一方のコードの構成音を最も多く含む1又は複数のAVNS候補を検出する処理(ステップ148〜152の処理)を行なう例を示したが、これらの処理の順序を逆にしてもよく、あるいはいずれか一方の処理のみを行なうようにしてもよい。また、必ず両方の処理を行ない、異なる結果が出た場合は、いずれか一方の処理の結果を優先的に採用してもよいし、ランダムに採用してもよい。
(ニ)着目コードに関しては、1つ前のコード及び1つ後のコードを参照するのみならず、2つ前のコード及び2つ後のコードをも参照してAVNSの決定を行なうようにしてもよい。例えば、前後コードのみの参照では複数のAVNS候補が残ってしまう場合に、2つ前のコード及び2つ後のコードをも参照し、これらのコード構成音をも含むAVNSを採用するようにすればよい。更には、3つ以上前のコード及び3つ以上後のコードをも参照してもよい。
(ホ)コード進行の先頭及び最後のコードについては、調のトニックコードをそれぞれ仮の前コード及び仮の後コードとして用いてAVNS決定を行なったが、仮の前コード及び仮の後コードを設定せず、前コード及び後コードを用いない例外的なAVNS決定処理を行なうようにしてもよい。
(ヘ)各AVNS候補毎に該AVNS候補に含まれるコード構成音の数を求める際に、含まれるコード構成音数が前コードと後コードとで等しければその等しい数を採用し、等しくなければ多い方の数を採用したが、前コード及び後コードの双方について含まれるコード構成音数を考慮した値(例えば単純加算値、重み付け加算値等)を採用してもよい。例えば、あるAVNS候補に含まれる前コード及び後コード構成音数がそれぞれ2音及び3音であれば含まれるコード構成音数を5とすることができ、他のAVNS候補についても同様にしてコード構成音数を求めることができる。そして、コード構成音数が多い方のAVNS候補を着目コードに対するAVNSとして決定すればよい。
(ト)AVNS決定処理において、着目コードに対して提示された複数のAVNS候補のいずれにも前コード及び後コードの構成音が含まれている場合、前コード又は後コードのいずれか一方のコードについて含まれるコード構成音数が等しいときは、他方のコードについて含まれるコード構成音数が多い方のAVNS候補を着目コードに対するAVNSとして決定してもよい。このようにすると、前後コードとのつながりがより良いAVNS候補を着目コードに対するAVNSとして決定することができる。
この発明は、上記した実施形態に限定されるものではなく、種々の改変状態で実施可能なものである。例えば、次のような変更が可能である。
(1)この発明は、電子楽器の形態に限らず、パーソナルコンピュータとアプリケーションソフトウェアとの組合せの形態でも実施することができる。この発明を電子楽器の形態で実施する場合、その形態は、鍵盤楽器タイプに限らず、弦楽器タイプ、管楽器タイプ、打楽器タイプ等の形態を採用してもよい。また、音源装置、自動演奏装置等を1つの電子楽器本体に内蔵した形態に限らず、それぞれの装置を別体の装置とし、MIDIや各種ネットワーク等の通信手段を用いて別体の装置を接続した形態を採用してもよい。
(2)演奏データ(曲データ)のフォーマットは、イベントの発生時刻を1つ前のイベントからの相対時間で表わす「イベント+相対時間」方式に限らず、イベントの発生時刻を曲や小節内の絶対時間で表わす「イベント+絶対時間」方式、音符の音高と音符長及び休符と休符長で曲の内容を表わす「高音(休符)+符長」方式、イベント発生の最小時間単位毎に記憶領域を確保し、イベントの発生時刻に対応する記憶領域にイベントを記憶する方式等の任意の方式を用いることができる。
(3)時系列の演奏データの記憶方法としては、メモリ上で連続する領域に記憶する形式でもよいし、メモリ上で飛び飛びの領域に散在させて記憶し、連続するデータとして管理する形式でもよい。
(4)MIDIインターフェースとしては、専用のMIDIインターフェースに限らず、RS−232C、USB(ユニバーサル・シリアル・バス)、IEEE1394(アイトリプルイー1394)等の汎用のインターフェースを用いて構成されたものを用いてもよい。この場合、MIDIメッセージ以外のデータをも同時に送受信するようにしてもよい。
(5)図2又は6に示したようなコード進行データにおけるコードやAVNSをユーザが任意に指定できるようにしてもよい。
10:バス、12:CPU、14:ROM、16:RAM、18,20:検出回路、22:表示回路、24:音源回路、26:効果回路、28:外部記憶装置、30:MIDIインターフェース、32:通信インターフェース、34:タイマ、36:鍵盤、38:スイッチ群、40:表示器、42:サウンドシステム、44:他のMIDI機器、46:通信ネットワーク、48:他のコンピュータ。