(57)【特許請求の範囲】
【請求項１】
鍵盤上の各鍵に割り当てられた旋律を押鍵に応じて自動演奏する自動旋律演奏装置において、
自動演奏によって発音される複数の音の中から、最も高い音の音程を検出する第１の検出手段と、
前記第１の検出手段によって検出された音の音程に対して他の音の音程が不協和か否かをそれぞれ検出する第２の検出手段と、
前記第２の検出手段により不協和が検出された際には、不協和と検出された音の音程を協和する音程に変更する音程変更手段を備えたことを特徴とする自動旋律演奏装置。
【請求項２】
前記音程変更手段は、不協和と検出された音の音程を、前記第１の検出手段によって検出された音程に協和する音程の中で、変更前の音程に最も近い音程に変更することを特徴とする請求項１に記載の自動旋律演奏装置。
【請求項３】
前記音程は、各鍵のキーナンバに対応しており、前記音程変更手段は、音程を変更すべき音が現在発音すべき音である場合、そのキーナンバを変えることにより音程を変更することを特徴とする請求項１または２に記載の自動旋律演奏装置。
【請求項４】
前記音程は、各鍵のキーナンバに対応しており、前記音程変更手段は、音程を変更すべき音が現在発音中の音である場合、その音程のオフセット値を変えることにより音程を変更することを特徴とする請求項１または２に記載の自動旋律演奏装置。
【請求項５】
前記音程変更手段は、複数の押鍵に応じて複数の旋律が自動演奏されている場合に不協和となる音の音程を変更するものであることを特徴とする請求項１ないし４のいずれかに記載の自動旋律演奏装置。
【請求項６】
複数の押鍵に応じて複数の旋律が自動演奏されている場合に複数の旋律のステレオ定位を別々に設定する定位設定手段をさらに備えたことを特徴とする請求項１ないし５のいずれかに記載の自動旋律演奏装置。
【請求項７】
鍵盤上の各鍵に割り当てられた旋律を押鍵に応じて自動演奏する自動旋律演奏機能用プログラムであって、コンピュータを、
自動演奏によって発音される複数の音の中から、最も高い音の音程を検出する第１の検出手段、
前記第１の検出手段によって検出された音の音程に対して他の音の音程が不協和か否かをそれぞれ検出する第２の検出手段、
前記第２の検出手段により不協和が検出された際には、不協和と検出された音の音程を協和する音程に変更する音程変更手段として機能させるためのプログラム。
【請求項８】
前記音程変更手段は、不協和と検出された音の音程を、前記第１の検出手段によって検出された音程に協和する音程の中で、変更前の音程に最も近い音程に変更することを特徴とする請求項７に記載のプログラム。
【請求項９】
前記音程は、各鍵のキーナンバに対応しており、前記音程変更手段は、音程を変更すべき音が現在発音すべき音である場合、そのキーナンバを変えることにより音程を変更することを特徴とする請求項７または８に記載のプログラム。
【請求項１０】
前記音程は、各鍵のキーナンバに対応しており、前記音程変更手段は、音程を変更すべき音が現在発音中の音である場合、その音程のオフセット値を変えることにより音程を変更することを特徴とする請求項７または８に記載のプログラム。
【請求項１１】
前記音程変更手段は、複数の押鍵に応じて複数の旋律が自動演奏されている場合に不協和となる音の音程を変更するものであることを特徴とする請求項７ないし１０のいずれかに記載の電子楽器のプログラム。
【請求項１２】
コンピュータを、複数の押鍵に応じて複数の旋律が自動演奏されている場合に複数の旋律のステレオ定位を別々に設定する定位設定手段としてさらに機能させる請求項７ないし１１のいずれかに記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、鍵盤上の各鍵に割り当てられた旋律を鍵の押下に応じて自動演奏する自動旋律演奏装置および自動旋律演奏機能用プログラムに関し、特に、複数の鍵が押下されて複数の旋律が自動演奏される場合でも旋律間での和音的な不具合を回避することができる自動旋律演奏装置および自動旋律演奏機能用プログラムに関する。
【背景技術】
【０００２】
自動伴奏機能あるいは自動演奏機能を備え、さらにアドリブ演奏機能を備えた電子楽器がある。アドリブ演奏機能による自動旋律演奏は、予め数小節のフレーズデータを鍵盤上の特定音域内の各鍵に割り当てて内蔵させておき、特定音域内の任意の鍵が押下されたとき、その押下中だけ該鍵に対応するフレーズデータを先頭から読み出し、発音させることで実現される。
【０００３】
特許文献１には、演奏のモチーフ(フレーズ、ピリオド(楽節)、複数のピリオド等を含む)を示す情報を記憶し、OFA(ワンフィンガーアドリブ)モード、すなわち各キーの操作で各キーに割り当てられたアドリブモチーフパターンの自動演奏を行うモードにおいて、操作キーに対応した情報を読み出し、楽音を発生させるモチーフ演奏装置が記載されている。これによれば、1つの伴奏キーを押しているだけで伴奏内容を変化させることができ、またリズム演奏もでき、さらに演奏者が演奏をしながら自動演奏に関与することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平３−１２６９９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来の自動旋律演奏装置は、単一の押鍵に対して単一の旋律を演奏するというものであり、複数の旋律を同時に演奏する場合についての考慮はなされていない。複数の旋律を同時に演奏することは、複数の演奏者が互いに協力しながら合奏する様子を再現することを目的として行われる。
【０００６】
従来の自動旋律演奏装置では、複数の鍵が押下されて複数の旋律が自動演奏された場合、いくつかの問題のために複数の演奏者が互いに協力しながら合奏する様子が再現されないという課題がある。
【０００７】
第１の問題は、複数の旋律を同時に演奏しても、複数の演奏者による演奏とは聞こえ難いということである。同一の楽器から同一の音色で発音した場合、複数の旋律は混ざり合って個々に認識され難い。このため、複数の旋律を同時に演奏した場合、一人の演奏者が複数の発音を渾然と行っているように聞こえる。
【０００８】
第２の問題は、複数の演奏者が互いに協力する様子が感じられ難いということである。複数の旋律のデータは個別に設計されているので、複数の旋律を同時に演奏した場合、不協和音が発生しやすい。このため、複数の演奏者が互いに協力しているのではなく、個別に２つの旋律を演奏しているように聞こえる。
【０００９】
本発明の目的は、上記課題を解決し、複数の演奏者が互いに協力してそれぞれの旋律を演奏しているかのような楽音を発生させることができる自動旋律演奏装置および自動旋律演奏機能用プログラムを提供することにある。
【課題を解決するための手段】
【００１０】
上記課題を解決するため、本発明は、鍵盤上の各鍵に割り当てられた旋律を押鍵に応じて自動演奏する自動旋律演奏装置において、自動演奏によって発音される複数の音の中から、最も高い音の音程を検出する第１の検出手段と、前記第１の検出手段によって検出された音の音程に対して他の音の音程が不協和か否かをそれぞれ検出する第２の検出手段と、前記第２の検出手段により不協和が検出された際には、不協和と検出された音の音程を協和する音程に変更する音程変更手段を備えた点に第１の特徴がある。
【００１１】
また、本発明は、前記音程変更手段が、不協和と検出された音の音程を、前記第１の検出手段によって検出された音程に協和する音程の中で、変更前の音程に最も近い音程に変更する点に第２の特徴がある。
【００１２】
また、本発明は、前記音程が、各鍵のキーナンバに対応しており、前記音程変更手段は、音程を変更すべき音が現在発音すべき音である場合、そのキーナンバを変えることにより音程を変更する点に第３の特徴がある。
【００１３】
また、本発明は、前記音程が、各鍵のキーナンバに対応しており、前記音程変更手段は、音程を変更すべき音が現在発音中の音である場合、その音程のオフセット値を変えることにより音程を変更する点に第４の特徴がある。
【００１４】
また、本発明は、前記音程変更手段が、複数の押鍵に応じて複数の旋律が自動演奏されている場合に不協和となる音の音程を変更するものである点に第５の特徴がある。
【００１５】
さらに、本発明は、複数の押鍵に応じて複数の旋律が自動演奏されている場合に複数の旋律のステレオ定位を別々に設定する定位設定手段をさらに備えた点に第６の特徴がある。
【００１６】
なお、本発明は、自動旋律演奏機能用プログラムとしても実現でき、このプログラムを電子楽器に搭載することにより、本発明の自動旋律演奏装置が得られる。
【発明の効果】
【００１７】
本発明によれば、自動演奏によって発音される複数の音の音程が不協和の場合、それらが協和するように音程が変更されるので、複数の鍵が押下されて複数の旋律が自動演奏される場合でも旋律間での和音的な不具合を回避することができ、複数の演奏者が互いに協力してそれぞれの旋律を演奏しているかのような楽音を発生させることができる。
【図面の簡単な説明】
【００１８】
【図１】本発明が適用される電子楽器の構成例を示すブロック図である。
【図２】鍵盤上の音域と各音域の鍵の機能の対応関係の一例を示す図である。
【図３】フレーズデータがプログラムROMに記憶されている状態を示す図である。
【図４】図１の電子楽器の動作を示すメインフローチャートである。
【図５】タイマ処理を示すフローチャートである。
【図６】イベント処理を詳細に示すフローチャートである。
【図７】押鍵イベント処理を詳細に示すフローチャートである。
【図８】離鍵イベント処理を詳細に示すフローチャートである。
【図９】パネルイベント処理を詳細に示すフローチャートである。
【図１０】時変数処理を詳細に示すフローチャートである。
【図１１】経時処理を詳細に示すフローチャートである。
【図１２】自動旋律演奏処理を詳細に示すフローチャートである。
【図１３】発音データ更新処理を詳細に示すフローチャートである。
【図１４】協和化処理を詳細に示すフローチャートである。
【図１５】演奏されるフレーズ数に応じたステレオ定位の例を示す図である。
【発明を実施するための形態】
【００１９】
以下、図面を参照して本発明を説明する。図１は、本発明が適用される電子楽器の構成例を示すブロック図である。以下では、本発明に係る自動旋律演奏装置について説明するが、本発明は、電子楽器に搭載されて自動旋律演奏装置として機能させる自動旋律演奏機能用プログラムとしても実現できる。
【００２０】
図１において、CPU100は、プログラムROM101に格納されている制御プログラムに従って電子楽器全体の制御を実行する。また、CPU100は、アドリブ演奏時の制御手段としても機能する。CPU100はタイマ割り込み回路を備えている。
【００２１】
プログラムROM101は、電子楽器全体の制御を実行するプログラムや定数、曲データなどを記憶している。曲データには、ドラム、ベース、伴奏パートのほか、アドリブ演奏機能で必要なコード進行データが含まれる。また、プログラムROM101の一部領域は、鍵盤104上の特定音域の各鍵にそれぞれアサインされた数小節のアドリブ演奏用フレーズデータ(以下では、単にフレーズデータと称する。)を各鍵のキーナンバと対応して記憶している。フレーズデータは、プログラムROM101とは別個のメモリ(ROM)に記憶してもよい。
【００２２】
RAM102は、CPU100のワークエリアおよびバッファとして使用され、また、楽器内の各種制御データ、MIDIデータなどを格納する。RAM102は、例えばバッテリによりバックアップされていてもよい。
【００２３】
I/F103は、CPU100と鍵盤104、パネル105およびＭＩＤＩ入出力回路106をバス113を介して接続するインタフェースである。鍵盤104は、複数の鍵と鍵盤スイッチとそのスキャン回路を含む。なお、鍵盤104は、上鍵盤や下鍵盤など、複数の鍵盤を有してもよい。
パネル105は、電子楽器の各種状態を設定する操作子(ボタン)、表示装置(LCD)およびそのアクセス回路を含む。パネル105の操作子には、音色選択ボタン、自動演奏機能での曲選択ボタン、曲の演奏/停止ボタン、演奏モード(ノーマル,自動,ドラム,ベース)を選択するためのモード選択ボタン、テンポ選択ボタン、アドリブ選択ボタンなどが含まれる。
【００２４】
アドリブ選択ボタンは、アドリブ演奏モードを設定するための操作子である。アドリブ選択ボタンによりアドリブ演奏モードが設定されると、数小節のフレーズデータがアサインされた鍵盤上の特定音域内の任意の鍵の押下中、押下されている鍵に対応するフレーズデータが、テンポ選択ボタンにより選択されたテンポで読み出され、自動的に旋律が演奏される。各鍵に割り当てられた機能は、プログラムROM101に格納されている制御プログラムによって管理される。
【００２５】
楽音発生器107は、デジタル楽音波形サンプル値が記憶されている波形メモリ108から、発音すべき音高に比例したアドレス間隔で順次波形データを読み出し、補間演算等を行って楽音信号を発生させる。
【００２６】
DSP(digital signal processor)109は、楽音発生器107から出力される楽音信号に各種効果を付与する。DSP109にはD-RAMなども含まれる。
【００２７】
DSP109から発生されるデジタル楽音信号は、D/A変換器110によりアナログ楽音信号に変換された後、アンプ111を介してスピーカ112に供給される。バス113は、電子楽音発生装置の上記各部間を接続する。各構成要素間での楽音情報や制御情報のやり取りはバス113を介して行われる。
【００２８】
図２は、鍵盤上の音域と各音域の鍵の機能の対応関係の一例を示す。ここでは、鍵盤を３つの音域に分割し、中央の音域の鍵をアドリブ演奏用鍵として機能させ、上側の音域の鍵を高音域用の上鍵、下側の音域の鍵を低音域用の下鍵として機能させている。このような機能は、パネル105上のアドリブ選択ボタンによりアドリブ演奏モードが設定された場合に得られる。なお、低音域用の下鍵はコード検出用に利用されるが、図示していない、別の鍵盤上の特定音域をコード検出用に利用してもよい。
【００２９】
図３は、フレーズデータがプログラムROM101に記憶されている状態を示す。このフレーズデータは、中央の音域の各鍵に対応して記憶された数小節のフレーズデータ[1],[2],・・・からなり、それぞれのフレーズに対応する発音データ、消音データ、制御データが時系列に沿って記憶され、中央の音域の任意の鍵が押下されたとき、その押下中だけ対応するフレーズデータが読み出される。フレーズデータの読み出しは、1回だけであり、繰り返さない。したがって、アドリブ演奏用の鍵を押下し続けてもフレーズデータ1回による発音だけで終了する。この場合、自動演奏機能が選択されていれば、自動演奏機能による伴奏曲がバック演奏される状態になる。これにより、意図的に休符小節を作ることができる。また、ある鍵を1拍だけ押下すると、先頭から1拍分のフレーズだけが読み出されて発音されるので、鍵を1拍ずつ押下することにより、1小節のフレーズとは違った雰囲気の演奏を意図的に行うことができる。このように、ユーザがアドリブ演奏用のどの鍵を何拍押下するかは、自由である。上記の効果を必要としない場合は、フレーズデータを該当する押鍵が持続している間繰り返し読み出して発音させてもよい。
【００３０】
フレーズ[1]〜[n]の各フレーズデータの長さはまちまちであるので、これをプログラムROM101に格納する際は、例えば以下のようにする。ここでは、図３に示すように、仮に、プログラムROM101のアドレスを4Bytesで表現するものとする。まず、n個のフレーズデータの先頭アドレスを記録するためのフレーズデータ先頭アドレステーブルを用意する。該テーブルの先頭アドレスをOffsetとする。該テーブルのデータ長は、4n Bytesとなるはずである。次いで、各フレーズデータを連続して配置し、それぞれのフレーズデータの先頭アドレスをA1,A2,・・・,Anと算出する。最後に、Offset +4*(i-1)(i=1,2,・・・,n)のエリアにフレーズデータの先頭アドレスA1,A2,・・・,Anを記憶させる。以上を当該電子楽器製造時に実行させておく。なお、フレーズデータを書換可能なメモリに配置する場合は、電子楽器製造後であっても、フレーズデータの書換えに伴って該テーブルを書き換えられるようにしておく。
【００３１】
図４は、図１の電子楽器の動作を示すメインフローチャートである。電子楽器の電源がオンされたとき、まず、装置全体の初期化(S41)を実行する。この初期化は、音色設定や曲設定などの初期化を含む。次に、イベントの有無を判定し(S42)、イベント有りと判定された場合にはイベント処理を実行する(S43)。S43でイベント処理を実行した後、あるいはS42でイベント無しと判定された場合には、時変数処理(S44)を実行し、S42にリターンする。時変数処理(S44)は、既に発音が終了している発音チャンネルをキーアサインから解放させる処理、ソフトウエアによるビブラート低周波オシレータの歩進、自動演奏用のデータを新たに読み出して発音を行わせる処理などを含む。
【００３２】
図５は、タイマ処理を示すフローチャートである。タイマ処理は、CPU100に対する一定間隔、例えば1msec毎の割り込みによりメインフローチャートとは別に実行される。タイマ処理では、タイマ計時時刻TをΔT、すなわち、例えば1msecずつインクリメントする(S51)。なお、タイマ計時時刻Tは、後述するように、時変数処理が実行されるごとにリセットされる。
【００３３】
図６は、イベント処理(図４のS43)を詳細に示すフローチャートである。イベント処理では、まず、イベントが押鍵イベントか否かを判定する(S61)。S61で押鍵イベントと判定された場合、押鍵イベント処理(S62)を実行(詳細は後述)してリターンするが、押鍵イベントでないと判定された場合には、さらに離鍵イベントか否かを判定する(S63)。S63で離鍵イベントと判定された場合、離鍵イベント処理(S64)を実行(詳細は後述)してリターンするが、離鍵イベントでないと判定された場合には、さらにパネルイベントか否かを判定する(S65)。S65でパネルイベントと判定された場合、パネルイベント処理(S66)を実行(詳細は後述)してリターンするが、パネルイベントでないと判定された場合には、その他のイベント処理(S67)を実行、すなわち、MIDI送受信など、その他に分類されるイベント処理を実行してリターンする。
【００３４】
図７は、押鍵イベント処理(図６のS62)を詳細に示すフローチャートである。押鍵イベント処理では、まず、押鍵がOFA音域(図２の中央の音域)か否かを判定する(S71)。押鍵がOFA音域か否かは、押鍵のキーナンバがOFA音域の最小キーナンバ(KNOL)から最大キーナンバ(KNOH)の間であるか否かにより判定することができる。S71で押鍵がOFA音域と判定された場合、フラグ(FLAG_A)をセット(S72)し、鍵に対応するフレーズデータの先頭アドレス(押下された鍵の鍵番号をKNとすれば、それに対応するフレーズデータの番号iは、i=KN-KNOL+1と計算できる。フレーズ番号iに対応するフレーズデータ[i]の先頭アドレスは、上述のように、フレーズデータ先頭アドレステーブルのOffset +4*(i-1)に記憶されている。)を読み出し(図３参照)、フレーズポインタPt1およびPt2にセットしてリターンする。FLAG_Aは、OFA音域が押鍵されているか否かを示すものである。
【００３５】
S71で押鍵がOFA音域でないと判定された場合には、押鍵がコード検出用音域か否かを判定する(S73)。S73で押鍵がコード検出用音域と判定された場合、コードが変化されたので、コード検出(S74)を行った後、リターンするが、押鍵がコード検出用音域でないと判定された場合には発音処理(S75)を行った後、リターンする。この発音処理(S75)は、通常の手動演奏による発音処理であり、鍵に対応した楽音の発音を、楽音発生器107の複数ある発音系列のいずれかにアサインして発音の開始を楽音発生器107に指示する。
【００３６】
図８は、離鍵イベント処理(図６のS64)を詳細に示すフローチャートである。離鍵イベント処理では、まず、離鍵がOFA音域か否かを判定する(S81)。S81で離鍵がOFA音域と判定された場合、他にOFA音域に押鍵中の鍵が存在しなければ、フラグ(FLAG_A)をリセット(S82)してリターンする。他にOFA音域に押鍵中の鍵が存在する場合は何もせずにリターンする。
【００３７】
フラグ(FLAG_A)に代えて、図示しないOFA音域押鍵カウンタOFACを用いてもよい。この場合、S41ではOFACのゼロリセットを併せて行い、S72ではフラグセットに代えてOFACのインクリメントを行い、S82ではフラグリセットに代えてOFACのデクリメントを行う。また、後述のS112ではフラグ(FLAG_B)がセットされ且つOFACがゼロでない場合にS113を実行し、そうでない場合はS113を実行せずにS114を実行するようにする。
【００３８】
S81で離鍵がOFA音域でないと判定された場合には、さらに離鍵がコード検出用音域か否かを判定する(S83)。S83で離鍵がコード検出用音域と判定された場合、コードが再び変化されたので、コード検出(S84)を行った後、リターンするが、離鍵がコード検出用音域でないと判定された場合には消音処理(S85)を行った後、リターンする。この消音処理(S85)は、通常の手動演奏による消音処理であり、鍵に対応した楽音が楽音発生器107の複数の発音系列のいずれにアサインされているかを検索して消音を楽音発生器107に指示する。
【００３９】
図９は、パネルイベント処理(図６のS64)を詳細に示すフローチャートである。パネルイベント処理では、まず、アドリブ演奏モードを設定するためのアドリブ選択ボタンによりアドリブ演奏モードが設定されたか否か、すなわちOFAがオンされたか否かを判定する(S91)。S91でOFAがオンされたと判定された場合、フラグ(FLAG_B)をセット(S92)してリターンする。FLAG_Bは、アドリブ演奏モードが設定されているか否かを示すものである。
【００４０】
S91でOFAがオンされたと判定されない場合、OFAがオフされたか否かを判定する(S93)。S93でOFAがオフされたと判定された場合、フラグ(FLAG_B)をリセット(S94)してリターンする。S93でOFAがオフされたと判定されない場合には他のパネルイベント処理を実行(S95)してリターンする。その他のパネルイベント処理は、パネル操作に従う処理であり、例えば、音色選択や音量調整などを含む。
【００４１】
図１０は、時変数処理(図４のS44)を詳細に示すフローチャートである。時変数処理では、まず、割込禁止(S101)とし、タイマ計時時刻Tをtに代入(t←T)し(S102)、タイマ計時時刻Tをリセット(T←0)し(S103)、割込許可(S104)とする。tは、前回の時変数処理実行時から現在までの経過時間を表すことになる。
【００４２】
その後、経時処理(S105)および非経時処理(S106)を行ってリターンする。経時処理(S105)については後述する。非経時処理(S106)は、エンベロープフェース歩進、アサインメントメモリ解放など、非経時的な処理を含む。
【００４３】
図１１は、経時処理(図１０のS105)を詳細に示すフローチャートである。経時処理では、まず、t＝0か否かを判定する(S111)。ここで、t＝0と判定された場合、経時処理では何の処理も実行せずにリターンする。t＝0は、前回の時変数処理から現在までに十分な時間、例えば1msec(＝ΔT)が経過していないことを意味する。
【００４４】
S111で、t≠0と判定された場合にはFLAG_AとFLAG_Bが共にオンか否かを判定し(S112)、S112でFLAG_AとFLAG_Bが共にオンと判定された場合には自動旋律演奏処理(S113)を実行する。自動旋律演奏処理(S113)については後述する。S112でFLAG_AとFLAG_Bのいずれかがオフと判定された場合、あるいは自動旋律演奏(S113)を実行した後には、パネル操作により自動伴奏がONされているか否かを判定し(S114)、自動伴奏がONされていると判定された場合には、自動伴奏処理(S115)を実行する。
【００４５】
自動伴奏処理(S115)では、既知の自動伴奏の手法を利用して自動的に伴奏を付加する。S114で自動伴奏がONでない判定された場合、あるいはS115で自動伴奏処理が実行された後には、発音の有無を判定する(S116)。S116で発音有りと判定された場合には、発音データ更新処理(S117)を行う。発音データ更新処理(S117)では、後述するように、既に発音されている音と新たに発音される音との協和化処理を行う。S116で発音無しと判定された場合、あるいはS117で発音データ更新処理を実行した後には、その他の経時処理を実行(S118)してリターンする。その他の経時処理は、例えば、ビブラート低周波オシレータの歩進などを含む。
【００４６】
図１２は、自動旋律演奏処理(図１１のS113)を詳細に示すフローチャートである。自動旋律演奏処理は、実際には押鍵されている鍵の数に対応して複数回実行されるが、すべて同じ処理であるので、そのうち1鍵分の処理のみを示す。ここでは、まず、当該鍵に対応するフレーズデータの演奏が既に終端に達してしるかどうかを判定する(S121)。フレーズデータの演奏が既に終端に達している場合は、本実施形態ではフレーズの繰り返し演奏を行わないので、当該フレーズの自動旋律演奏処理では何らの処理も実行せずにリターンする。
フレーズデータの終端に達したかどうかは、例えばフレーズポインタPt1またはPt2が示すデータが、予め記憶された終端コードを示しているかどうかによって判断できる。すなわち、フレーズデータの最後にENDマーク(フレーズデータとして用いることのない値)を書き込んでおき、フレーズポインタPt1またはPt2が示すデータがENDマークであることでフレーズデータの終端を判断できる。これに代えて、例えば、フレーズデータの先頭に終了アドレスを書き込んでおいたり、次のフレーズデータの先頭アドレスAn+1を参照したりし、フレーズポインタが次のフレーズの記憶エリアに達しているかどうか、あるいは別途記憶された当該フレーズデータのデータ長分のデータが既に読み出し終えたかどうか、等によっても、フレーズデータの終端に達したかどうかを判断できる。
【００４７】
S121でフレーズデータの演奏がまだ終端に達していないと判定された場合、ポインタPt2をtだけ進める(S122)。これにより今回の処理終了点を示すポインタPt2が時間tだけ進んだ点に設定される。時間tは、図１０のS102で設定される。ポインタPt2を進めた結果、当該フレーズデータの終端を超えてしまった場合はポインタPt2が終端を示すようにする。次に、ポインタPt1を用いてフレーズの音データを取得する(S123)。次に、OFA音域での押鍵が複数か否かを判定(S124)し、押鍵が複数でないと判定された場合、直接S128に進むが、押鍵が複数と判定された場合にはS125,S126およびS127の処理を通してS128に進む。
【００４８】
S125では複数の押鍵による複数のフレーズデータに含まれる個々の音データのうちの最も高い音の音程(最高音程)KNmaxを検出し、S126では最高音程KNmaxと現在処理しているフレーズの音データの音程KNiとが何半音分離れているかの音程差dを求める(d=KNmax-KNi)。S127では音程差dに従って協和化処理を行う。
【００４９】
S128では、取得した音データが発音データである場合、図６のS62と同様に発音処理を行い、その後、ポインタPt1を次の処理データの位置に歩進させる(S129)。この結果、ポインタPt1は、処理済みデータの位置を示す。次に、Pt1＝Pt2か否かを判定する(S130)。S130でPt1＝Pt2と判定された場合、自動旋律演奏処理での今回の処理を終了してリターンするが、Pt1≠Pt2と判定された場合には、S123に戻って処理を繰り返す。以上のようにして、自動旋律演奏処理ではS123〜S130のループにより1処理データ分分の音データを処理し、その後、さらにポインタPt1を1処理データ分だけ進めるという処理を繰り返す。発音データでなく消音データであった場合は、図６のS62に代えてS64、制御データであった場合はS67と同様の処理をそれぞれ行うが、消音データや音程変更以外の制御データについてはS125〜S127の処理を行わない。
【００５０】
図１３は、発音データ更新処理(図１１のS117)を詳細に示すフローチャートである。発音データ更新処理では、あるフレーズにより既に発音開始済みの音の発音と、別のフレーズによって新たに開始された発音とを協和化する処理を実行する。そのために、まず、OFA音域の押鍵が複数か否か、すなわち複数のフレーズが平行して演奏中かどうかを判定する(S131)。S131で複数のフレーズが平行して演奏中でないと判定された場合、発音データ更新処理では何らの処理も実行せずにリターンするが、押鍵が複数と判定された場合にはS132〜S137の処理を実行した後にリターンする。
【００５１】
S132では、演奏中の各フレーズの発音中の音データにつき、最高音程KNmaxを検出する。S133では最初のフレーズの発音をiに代入する。S134では最高音程KNmaxと当該フレーズの発音iの音程KNiとが何半音分離れているかの音程差dを求める(d=KNmax-KNi)。S135ではdがゼロか否かを判定する。ここで、ｄがゼロでないと判定された場合は協和化処理(S136)を実行する。S135でdがゼロであると判定された場合、すなわち発音iが最高音程そのもの、または最高音程と同じ音程である場合は、S136を実行せずにS137を実行する。
【００５２】
S136では音程差dに従って協和化処理を実行(詳細は後述)する。S137では、S134〜S138のループでも未処理のフレーズの発音があるか否かを判定する。S137で未処理のフレーズの発音があると判定された場合には、S138で次のフレーズの発音をiに代入し、S134に戻る。以下、複数のフレーズすべてを処理し終えるまでS134〜S138のループによる処理を繰り返し、未処理のフレーズの発音が無くなればリターンする。-
【００５３】
図１４は、協和化処理(図１２のS125、図１３のS134)を詳細に示すフローチャートである。協和化処理では、まず、音程差dにより最高音程KNmaxの音に対して他の音程KNiの音が不協和か否かを判定する(S141)。不協和か否かは、例えば、d=0,3,4,5,7,8,9かそれ以外かで判定できる。d=0,3,4,5,7,8,9はそれぞれ、完全1度、短3度、長3度、完全4度、完全5度、短6度、長6度を示し、この場合には不協和でないと判定する。なお、不協和か否かの判定基準は、上記例に限られない。例えば、完全協和音程(完全1度、完全4度、完全5度)以外は不協和と判定してもよい。また、同時に演奏されているフレーズの数によって変化させてもよい。例えば、フレーズ数が3以上の場合は、上述のように協和を判定し、フレーズ数が2の場合には、上述の協和音程から完全4度(d=5)を除外してもよい。前回の判定結果を反映させ、完全5度や完全8度が連続することを避けてもよい。また、その判定基準をユーザが設定できるようにしてもよい。ここで、不協和でないと判定された場合には、何らの処理も実行せずにリターンする。
【００５４】
次に、ベロシティ(Vel)が小(例えば最高音程KNmaxの音のベロシティとの差が40以上か)か否か(S142)、ゲートタイム(Gate Time、発音開始から発音終了までの継続時間)が短(例えば1/8拍以下)か否か(S143)、現在が弱拍(例えば4拍子(強拍、弱拍、中拍、弱拍の並び)の2または4拍目)か否かを判定し(S144)、いずれかに該当すると判定された場合には何らの処理も実行せずにリターンする。
【００５５】
S145ではコード構成音を取得する。コード構成音は、S74,S84でのコード検出の結果により知ることができる。例えば、コード検出によるコードがC(メジャー)の場合、コード構成音は、「ド」,「ミ」,「ソ」となり、Cm7の場合、コード構成音は、「ド」,「ミ♭」,「ソ」,「シ♭」となる。
【００５６】
S146では音程KNiの音がコード構成音か否かを判定する。S146で音程KNiの音がコード構成音と判定された場合には、何らの処理も実行せずにリターンする。しかし、S146で音程KNiの音がコード構成音ではないと判定された場合には、S145で取得されたコード構成音の中からそれに最も近い音を取得し(S147)、音程KNiを変更する。すなわち、音程KNiの音をS145で取得されたコード構成音の中からそれに最も近い音に変更する(S148)。例えば、不協和の音が「ファ♯」で、コードがC(メジャー)の場合、該音を「ミ」に変更する。この結果が最高音程KNmaxを超えないために、コード構成音の中から最も近い音でなく、コード構成音の中から低音側で最も近い音を取得するようにしてもよい。取得結果が最高音程Knmaxを超えるかどうかで両者を使い分けてもよい。
【００５７】
自動旋律演奏における協和化処理(S127)では、現在発音すべき音の音程を変更する。以上のようにして、音程KNiの音が最高音程KNmaxの音に対して不協和であり、かつコード構成音でない場合、該音はコードを構成する音程に変更される。
【００５８】
S125での協和化処理、すなわち、これから発音すべき音の音程は、キーナンバを変えることにより変更することができる。発音データ更新処理における協和化処理(S135)でも同様に、これから発音すべき音の音程は、キーナンバを変えることにより変更することができるが、先にあるフレーズで低い音程の発音があり、続いて別のフレーズで高い音程の発音があった場合にように、現在発音中の音の音程を変更する場合もある。現在発音中の音の音程は、ベントデータを送出して音程のオフセット値を変えることにより変更することができる。例えば、「ファ」で発音されている音は、半音下げるベントデータにより「ミ」に変更できる。ベントデータの送出は、直ちに行ってもよいし、現在の状態からある程度の時間をかけて徐々に目的のデータ値に近づくように何度も変更するように行ってもよい。この何度かに渡る変更は、図１１のS118で別途実行してもよい。
【００５９】
以上、実施形態について説明したが、本発明は、上記実施形態に限定されるものではなく、種々に変形することができる。例えば、上記実施形態では、協和化処理を行わなくても和声的に大きな不具合が生じない場合には協和化処理を行わないようにした(図１４のS142〜S144)が、S142〜S144の幾つかあるいは全てを省略して協和化処理を行うようにしてもよい。
【００６０】
また、図１４のS146も省略することができる。S146が省略された場合、S147〜S148では、コード構成音に代えて、S141で協和と判定される音程のうち最もKNiに近い音程に変更するようにしてもよい。さらに、複数の押鍵に応じて複数の旋律が自動演奏されている場合、複数の旋律の各々のステレオ定位を別々に設定する定位設定手段を備えさせることもできる。
【００６１】
図１５は、演奏されるフレーズ数に応じたステレオ定位の例を示す。ここでは、PanSet()関数による動作を示し、Nth-Phrは、N番目の押鍵に応じて演奏される旋律を意味する。この例では、フレーズ数が4以上の場合、すべてのフレーズは演奏されるが、第4フレーズ以降のフレーズにはステレオ定位が割り当てられず、結果として発音されない。第1〜第3フレーズに対応する鍵が離鍵されるか、フレーズ演奏を完了すると、第4フレーズはステレオ定位を得て演奏中の音が発音されるようになる。このステレオ定位処理は、発音時および図１０のS106において、新たに発音されるようになったフレーズの音について実行すればよい。
【符号の説明】
【００６２】
100・・・CPU、101・・・プログラムROM、102・・・RAM、103・・・I/F、104・・・鍵盤、105・・・パネル、106・・・キーアサイナ、107・・・楽音発生器、108・・・波形メモリ、109・・・DSP(digital signal processor)、110・・・D/A変換器、111・・・アンプ、112・・・スピーカ、113・・・バス
【図１】
0005449963.tif 000002
【図２】
0005449963.tif 000003
【図３】
0005449963.tif 000004
【図４】
0005449963.tif 000005
【図５】
0005449963.tif 000006
【図６】
0005449963.tif 000007
【図７】
0005449963.tif 000008
【図８】
0005449963.tif 000009
【図９】
0005449963.tif 000010
【図１０】
0005449963.tif 000011
【図１１】
0005449963.tif 000012
【図１２】
0005449963.tif 000013
【図１３】
0005449963.tif 000014
【図１４】
0005449963.tif 000015
【図１５】
0005449963.tif 000016