以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
<第1の実施形態>
図1は、第1の実施形態による演奏装置の構成図である。本実施形態による演奏装置は鍵盤楽器であり、全体を制御するCPU1と、CPU1が実行するプログラム、各種制御用データ、および演奏対象の楽曲データ等を格納したROM(Read Only Memory)2と、CPU1がワークに用いるRAM(Random Access Memory)3と、複数のキー(演奏操作子である鍵)を有する鍵盤4と、各種操作子を有するスイッチ群5と、例えばMIDI(Musical Instrument Digital Interface)データで発音が指示された楽音の波形データを生成し、その波形データをD/A変換して得られるオーディオ信号を出力する音源システム6と、音源システム6から出力されたオーディオ信号を増幅して出力するアンプ回路7と、アンプ回路7から入力したオーディオ信号により楽音を放音するスピーカー8と、CPU1、ROM2、RAM3、鍵盤4、スイッチ群5、音源システム6を互いに接続するバス9と、を備えている。
CPU1はROM2に記録されているプログラムを実行することにより、演奏者(ユーザー)が鍵盤4やスイッチ群5に対して行った操作に応じた制御を行う。鍵盤4への操作が行われた場合には、操作されたキーに割り当てられている音高の楽音の発音指示を音源システム6に対して行う。その指示に従って音源システム6が波形データを生成してオーディオ信号をアンプ回路7に出力する結果、その楽音がスピーカー8により発音される。それにより、音源システム6は楽音発生装置に相当する。スイッチ群5への操作が行われた場合には、操作が行われた操作子に応じて、楽曲データの指定を含む各種設定を行う。その楽音発生装置は、演奏装置に搭載されていないものであっても良い。
スイッチ群5への操作により設定可能なモードとして、楽曲データから特定される音高の楽音を鍵盤4へのキー操作により発音させるもの(以降「エニーキーモード」)がある。そのエニーキーモードは本発明に係わるモードである。このことから便宜的に以降、特に断らない限り、そのエニーキーモードが設定されていることを前提に説明する。ここでは、そのエニーキーモードで用いられる楽曲データは選択されているものとする。また、以下のことも前提とする。
(1)演奏者が演奏すべき演奏パート(以降「対象演奏パート」)は、メロディパート、コードパート、ベースパートの3つとする。
(2)演奏の進行には楽曲データに沿って自動的に演奏を進行させる自動進行方法が採用されている。
(3)メロディパート、コードパート、及びベースパートの各データは、それぞれ異なるチャンネル(以下ではそれぞれ「メロディチャンネル」、「コードチャンネル」及び「ベースチャンネル」と呼ぶ)のデータとして楽曲データに格納されている。
図5は、上記楽曲データを構成する楽音データの構成を説明する図である。
楽曲データを構成する楽音データは、図5に示すように、演奏上のイベントの内容を示すイベントデータ、及び次に処理すべき楽音データを処理するまでの時間間隔(Δt)を示す時間データから構成される。
上記時間間隔Δtは、テンポによって変更される最小時間間隔を単位として表現されたものである。これは他の時間、或いは時間間隔についても同様である。楽音の発音に係わるイベントデータは、例えばイベントが楽音の発音、及び消音の何れであるかを示すイベント種別、楽音の音高を示す番号(以降「音階番号」)、及びチャンネル番号の各データを有するものである。それにより楽曲データは、イベント(楽音)単位で用意された楽音データをその処理順に並べた形の構成となっている。楽曲を構成する演奏パートにはそれぞれ異なるチャンネルが割り当てられる。その演奏パートの一つであるコード(和音)の演奏用のコードパートでは、コード発音用のイベントデータとして、例えば音階番号の代わりに、コードの種類を示すコード名データ、及びルート(根音)の音高を示す音階番号(ルート音階番号)が挿入されている。楽曲データ、或いは楽音データは、上述したような構成に限定されるものではない。また、楽曲データは、ROM2等の不揮発性メモリに用意するのではなく、通信ネットワーク、或いは可搬性の記録媒体を介して取得できるようにすることにより、RAM3に格納しても良い。
CPU1は、処理すべきタイミングとなったイベントデータから音源システム6に送出すべきコマンド(以降MIDIデータを想定する)を生成して送出することで楽音の発音開始、或いは消音を指示する。イベントデータ中にコード名データ、及びルート音階番号が挿入されていた場合には、そのコード名データ、及び音階番号から各コード構成音の音高を特定し、コード構成音毎にMIDIデータを生成して送出する。処理すべきタイミングは、対象演奏パートでは時間データの他に鍵盤4への操作を考慮して判定し、それ以外の演奏パートでは時間データのみから判定する。それにより、エニーキーモード設定時では、対象演奏パートの楽音はユーザーの演奏に応じて放音させ、それ以外の演奏パートの楽音は自動的に放音させる。
音源システム6は、発音を指示するMIDIデータをCPU1から入力した場合、そのMIDIデータ中の音階番号(ノートナンバー)で指定される音高に応じて、楽音発音用の波形データを生成し、生成した波形データをアナログのオーディオ信号に変換してアンプ回路7に出力する。波形データの生成は、消音を指示するMIDIデータがCPU1から送出されて実際に消音させるまでの間、行う。そのような波形データの生成、及び生成した波形データを変換してのオーディオ信号の出力を行うことにより、CPU1の指示に従って楽音の放音を可能とさせる。
以降は、図2〜図4、及び図8に示すフローチャートを参照しつつ、エニーキーモード設定時のCPU1の動作について具体的に説明する。
図2は、メイン処理のフローチャートである。そのメイン処理は、電源の投入後に実行される主な処理を抜粋してその流れを示したものであり、ROM2に格納されたプログラムをCPU1が実行することにより実現される。
先ず、ステップA1では、イニシャル処理が行われる。そのイニシャル処理では、各種変数の初期化等が行われる。ステップA1の処理の実行後はステップA2に移行する。
ステップA2〜A5は繰り返しループを形成しており、例えば予め定めた時間間隔で繰り返し実行される。
ステップA2では、図3に示す自動演奏処理を実行する。これは、楽曲データを読み込み、演奏者が演奏の対象とする対象演奏パート毎に、その楽曲データが発音を示す楽音の音高を候補音高として設定し、他の演奏パートを自動演奏する処理である。その実行後はステップA3に移行する。自動進行方法では、候補音高の設定は、自動演奏の進行に応じて随時、更新する。
ステップA3では、図8に示す鍵盤処理を実行する。これは、演奏者の鍵盤4への操作(押鍵や離鍵)に応じて楽音を発音させるための処理である。ここではエニーキーモードが設定された場合に実行される処理を抜粋して図8に示している。その鍵盤処理の実行後、ステップA4に移行する。
ステップA4では、音源発音処理を実行する。発音、或いは消音させるべき楽音は、ステップA2の自動演奏処理、及びステップA3の鍵盤処理の実行によって特定され、その特定によって生成されるMIDIデータはRAM3に確保された領域に格納される。音源発音処理は、その領域に格納されたMIDIデータを音源システム6に送出することにより、特定した楽音の発音、或いは消音を音源システム6に対して指示するための処理である。その指示を行い、音源システム6からオーディオ信号がアンプ回路7に出力される結果、楽音がスピーカー8を介して発音される。音源発音処理の実行後、ステップA5に移行する。
ステップA5では、スイッチ群5への操作に対応することを含むその他の処理を実行し、ステップA2に戻る。
設定した候補音高を示す音高データは、それぞれ演奏パート毎にRAM3上に確保された領域に格納される。図6は、その領域のデータ構成図である。図6(a)に示すように、メロディパートで設定した候補音高を示す音高データは候補音高バッファ1に格納される。同様に、コードパートの音高データは図6(b)に示す候補音高バッファ2、ベースパートの音高データは図6(c)に示す候補音高バッファ3にそれぞれ格納される。候補音階バッファ1、3に格納する音高データが一つなのは、メロディパート、ベースパート共に、同時に2音以上、発音させることはないと想定しているためである。候補音階バッファ2に6つの音高データを格納できるようにしたのは、最大で6つの構成音のコードまで対応可能としているためである。
図3は自動演奏処理のフローチャートである。その自動演奏処理は図2のステップA2で呼び出される。処理の対象となる楽曲データはROM2から読み出してRAM3に格納したものである。
上述したように楽曲データを構成する楽音データは、イベントの内容を示すイベントデータに、次の楽音データの処理タイミングを示す時間データが付加された構成となっている(図5)。ステップB1では、時間データが示す処理タイミングとなったイベントデータの有無を判定し、それにより処理タイミングとなったイベントデータが有ることが判明すると、そのイベントデータの演奏パートが対象演奏パートか否か判定する。そのイベントデータがメロディチャンネル、コードチャンネル、或いはベースチャンネルのものであった場合、判定はYESとなってステップB2に移行し、それらの何れでもない場合には、判定はNOとなってステップB3に移行する。処理タイミングとなったイベントデータが無いことが判明すると、特には図示していないが、ここで自動演奏処理を終了する。
ステップB2では、図4に示す候補音高取り込み処理を実行して自動演奏処理を終了し、図2のメイン処理に戻る。他方のステップB3では、演奏対象外の演奏パートの自動演奏を行うための通常再生処理を実行する。それにより、演奏対象でない演奏パートのイベントデータからMIDIデータを生成し、そのMIDIデータをRAM3に確保した領域に格納する。その領域に格納されたデータは、図2のステップA4で実際の発音や消音を音源システム6により行わせるために利用される。通常再生処理の実行後は自動演奏処理を終了し、図2のメイン処理に戻る。
図4は候補音高取り込み処理のフローチャートである。候補音高取り込み処理は図3のステップB2で呼び出され、図6に示す候補音高バッファ1〜3への音高データの格納を行う処理である。
ステップB2−1では、図3のステップB1で処理タイミングとなったことを確認したイベントデータがメロディパートのもの(メロディ音として発音される楽音を示すもの)であれば、そのイベントデータが示すイベントの内容(ここでは発音、及び消音の何れか)に応じて、それを構成する音高データの図6(a)の候補音高バッファ1への格納、或いは格納された音高データのクリアを行う。そのクリアは「NODATA」とも表記する。
ステップB2−2では、図3のステップB1で処理タイミングとなったことを確認したイベントデータがコードパートのものであれば、そのイベントデータ中に挿入されているコード名データ、及びルート音階番号から、コードの各構成音の音高データを特定し、特定した音高データを、イベント種別が示すイベントの内容(ここでは発音、及び消音の何れか)に応じて、図6(b)の候補音高バッファ2に格納するか、或いはそのバッファ2からクリアしてNODATAの状態にする。
ステップB2−3では、図3のステップB1で処理タイミングとなったことを確認したイベントデータがベースパートのもの(ベース音として発音される楽音を示すもの)であれば、そのイベントデータ中のイベント種別が示すイベントの内容(ここでは発音、及び消音の何れか)に応じて、それに挿入された音階番号に対応する音高データの図6(c)の候補音高バッファ3への格納、或いはそのバッファ3からのクリアを行う。その後は候補音高取り込み処理を終了して自動演奏処理に戻る。
図8は鍵盤処理のフローチャートである。鍵盤処理は図2のステップA3で呼び出される。上記したように、ここでもエニーキーモード設定時に実行される処理を抜粋して示している。鍵盤4への操作により発音させる楽音は、この鍵盤処理を実行することで決定される。
鍵盤処理では、図6に示す各候補音高バッファ1〜3が参照される。また、図7のAnyKeyバッファおよび前回押鍵バッファを参照し、更新する。AnyKeyバッファはエニーキーモードでの楽音の発音を管理するためのものであり、図7(a)に示すように、実際に演奏者が押鍵しているキーに割り当てられた音高を示す鍵盤番号と、その押鍵に対応して実際に発音している音高と、その発音に使っているチャンネル番号からなる組を10組分格納できるように、RAM3上に確保された領域である。以下では、鍵盤番号を格納するフィールドを鍵盤フィールド、音高(データ)を格納するフィールドを「音高フィールド」、チャンネル番号を格納するフィールドを「チャンネルフィールド」とそれぞれ呼ぶことにする。AnyKeyバッファでデータが格納されている(NODATAの状態ではない)組の数は、現在押鍵中のキーの数、つまり発音中の楽音の数と一致する。データを10組分、格納できるようにしたのは、両手の10本の指で最大10個のキーを同時に押鍵することが可能なためである。チャンネルフィールドを設けたのは、演奏パート毎に異なる音色で楽音を発音させることもできるようにしたためである。
前回押鍵バッファは、図7(b)に示すように、AnyKeyバッファと同様の鍵盤フィールドと音高フィールドを備えた、RAM3上に確保された領域である。鍵盤フィールドには、前回押鍵されたキーの鍵盤番号、音高フィールドには、その押鍵に対応して発音させた楽音の音高データをそれぞれ格納するようにしている。
先ず、ステップC1では、鍵盤4上のキーの状態変化を判定する。演奏者が新たな押鍵、或いは離鍵を行っていない場合、状態が変化したキーは存在しないことから、その旨が判定され、鍵盤処理を終了する。演奏者が新たな離鍵を行った場合には、その旨(OFF)が判定されてステップC23に移行し、演奏者が新たな押鍵を行った場合には、その旨(ON)が判定されてステップC2に移行する。
ステップC2では、AnyKeyバッファの空き領域を抽出するためのサーチを行う。その後に移行するステップC3では、サーチによってAnyKeyバッファの空き領域を抽出できたか否か判定する。その空き領域を抽出できた場合、判定はYESとなってステップC4に移行する。反対に空き領域を抽出できなかった場合には、つまり既に10個の楽音を発音中の場合には、判定はNOとなり、ここで鍵盤処理を終了する。
承知のように、ベースパートは最低音を担当する楽器で演奏される。このことに着目し、本実施形態では、ベースパートの楽音を発音可能な鍵域(ベース鍵域)を設定し、そのベース鍵域への操作に応じてそのベースパートで発音させるべき楽音を発音させるようにしている。ベース鍵域以外は、メロディパート、或いはコードパートの楽音を発音可能な鍵域(メロディ・コード鍵域)としている。このことからステップC4では、新たに押鍵されたキーがベース鍵域内のものか否か判定する。演奏者がベース鍵域内のキーを新たに押鍵した場合、判定はYESとなってステップC5に移行し、そうでない場合には、つまりメロディ・コード鍵域内のキーを演奏者が新たに押鍵した場合には、判定はNOとなってステップC7に移行する。
ステップC5では、演奏すべきベース音があるか否か、つまり図6(c)の候補音高バッファ3に音高データが格納されているか否かを判定する。候補音高バッファ3に音高データが格納されている場合、判定はYESとなってステップC6に移行し、そうでない場合には、判定はNOとなってステップC9に移行する。
ステップC6では、候補音高バッファ3に格納されている音高データで楽音が発音中か否か判定する。その音高データが図7(a)のAnyKeyバッファのいずれかの音高フィールドに格納されていた場合、その楽音は発音中として、判定はYESとなってステップC9に移行する。それにより、今回の押鍵はコードパートの楽音を発音させるためのものと見なす。そうでない場合には、判定はNOとなってステップC21に移行する。
一方ステップC7では、発音させるべきメロディパートの楽音があるか否か、つまり図6(a)の候補音高バッファ1に音高データが格納されているか否かを判定する。候補音高バッファ1に音高データが格納されている場合、判定はYESとなってステップC8に移行し、その音高データが格納されていない、つまり候補音高バッファ1がNODATAの状態であった場合には、判定はNOとなってステップC9に移行する。
ステップC8では、候補音高バッファ1に格納されている音高データで楽音が発音中か否かを判定する。その音高データが図7(a)のAnyKeyバッファのいずれかの音高フィールドに格納されていた場合、その楽音は発音中として、判定はYESとなってステップC9に移行する。そうでない場合には、判定はNOとなってステップC21に移行する。
ステップC9〜C20は、今回の押鍵に対してコードパートを対応させて発音する場合の処理である。ステップC9への移行は、ベース鍵域内のキーを押鍵してもベースパートに新たに発音させるべき楽音が存在しない場合、或いはメロディ・コード鍵域内のキーを押鍵してもメロディパートに新たに発音させるべき楽音が存在しない場合に行われる。
ステップC9では、コードの構成音のうち未発音のものがあるか否かを判定する。候補音高バッファ2に1つ以上の音高データが格納されており、且つそれらのうちで図7(a)のAnyKeyバッファの音高フィールドに格納されていないものがある場合、コードの構成音のうち未発音のものがあるとして、判定はYESとなりステップC10に移行する。候補音高バッファ2に音高データが格納されていない、或いは音高データが1つ以上格納され、且つそのすべてがAnyKeyバッファの音高フィールドに格納されている場合には、未発音の構成音は存在しないとして、判定はNOとなりステップC17に移行する。
ステップC10では、今回押鍵されたキーは前回押鍵されたキーより割り当てられた音高が下か否か判定する。前回押鍵したキーより低い音高のキーを演奏者が今回押鍵した場合、つまり前回押鍵バッファの鍵盤フィールドに格納された鍵盤番号より小さい鍵盤番号が割り当てられたキーを演奏者が今回押鍵した場合、判定はYESとなってステップC14に移行し、そうでない場合には、判定はNOとなってステップC11に移行する。
ステップC11では、演奏者が前回の押鍵時よりも高い音高の楽音を発音させようとしたと見なし、候補音高バッファ2に格納された音高データのなかで、AnyKeyバッファの音高フィールドに対応する音高データが格納されてなく、且つ前回、発音させた構成音の音高データ以上、高音の音高データを探す。次にステップC12では、そのような音高データが有ったか否か判定する。そのような音高データを探し出せた場合、判定はYESとなってステップC21に移行し、そうでない場合には、判定はNOとなってステップC13に移行する。
ステップC13は、コードの構成音に未発音の音が存在するが、その中には前回の押鍵に対応して発音させた構成音の音高データ以上高音の構成音がない場合に実行される。この場合、未発音の構成音をそのまま発音したのでは、前回の押鍵時よりも高音の構成音を発音させようとしている演奏者の意図に応えることはできない。そこで、ステップC13では、未発音の構成音を1オクターブ上げた音高で発音させるよう設定するオクターブUP変換処理を実行する。それにより、演奏者の意図を反映しつつ自然と感じられるようにコードの構成音を発音させる(コードはメロディやベースと異なり、その構成音をオクターブ単位で変換しても(転回しても)演奏の自然さが保たれる)。その後はステップC21に移行する。
ステップC14〜C16は、コードの構成音のうち未発音のものがあり、且つ演奏者は前回よりも低音のキーを今回押鍵している場合に実行される。それにより、演奏者が前回の押鍵時よりも低音の構成音を発音させようとしていると見なし、その意図に対応するための処理が行われる。
ステップC14では、候補音高バッファ2に格納された音高データのなかで、AnyKeyバッファの音高フィールドに音高データが格納されてなく、且つ前回、発音させた構成音の音高データより低音の音高データを探す。次にステップC15では、そのような音高データが有ったか否か判定する。そのような音高データを探し出せた場合、判定はYESとなってステップC21に移行し、そうでない場合には、判定はNOとなってステップC16に移行する。
ステップC16は、コードの構成音に未発音の音が存在するが、その中には前回の押鍵に対応して発音させた構成音の音高データより低音の構成音がない場合に実行される。このことから、ステップC16では、未発音の構成音を1オクターブ下げた音高で発音させるよう設定するオクターブDOWN変換処理を実行する。それにより、演奏者の意図を反映しつつ自然と感じられるようにコードの構成音を発音させる。
ステップC17〜C20は、演奏すべきコード構成音がすべて発音中の場合に実行される。押鍵操作は、現状よりもさらに多くの楽音を発音させたいという演奏者の意図の表れと見なすことができる。演奏者の意図を実際の楽音の発音に反映させるという観点からは、現在発音されている構成音とは音高が異なる音を押鍵操作に合わせて発音することが好ましいと言える。しかし、ステップC17に移行時には発音すべき構成音は既にすべて発音されているので、演奏の自然さを損なわないような楽音を、現在発音させていない楽音の中から選んで発音する必要がある。
そのような楽音として、本実施形態では、発音中のコードの構成音のうちの任意の1つの音高をオクターブ単位で上または下に変換した楽音を採用している。上か下かの選択は、演奏者の意図を発音に反映させるという観点から、前回と今回で押鍵されたキー間の音高関係により行う。
ステップC17への移行は、発音させるべきコード自体が存在しない場合にも行われる。その場合、特には図示していないが、ステップC17〜C20を実行することなく、鍵盤処理を終了するようになっている。
ステップC17では、図6の候補音高バッファ2の音高フィールドに格納された音高データの中から1つの音高データを選択する。その選択後、ステップC18に移行する。
ステップC18では、ステップC10と同様に、今回押鍵されたキーは前回押鍵されたキーより低音のものか否か判定する。前回押鍵したキーより低音のキーを今回、演奏者が押鍵した場合、判定はYESとなってステップC20に移行し、そうでない場合には、判定はNOとなってステップC19に移行する。
ステップC19では、ステップC13と同様に、選択した音高データを対象にオクターブUP変換処理を実行する。その後ステップC21に移行する。他方のステップC20では、ステップC16と同様に、選択した音高データを対象にオクターブDOWN変換処理を実行する。その後ステップC21に移行する。
ステップC21に移行時には、発音させる楽音の音高、その楽音の演奏パートが決定している。その音高は、演奏パートがメロディパート、或いはベースパートであれば候補音高であり、コードパートであれば候補音高、それよりも1オクターブ上の音高、或いは1オクターブ下の音高である。ステップC21では、決定した音高、その音高の楽音を発音させる演奏パートから音源システム6に出力すべきコマンド(ここではMIDIデータ)を生成し、RAM3上に確保した領域に格納する。また、AnyKeyバッファのステップC2で探した空き領域の各フィールドに、今回押鍵されたキーの鍵盤番号、候補音高を示す音高データ、及び演奏パートに対応するチャンネル番号をそれぞれ格納する。続くステップC22では、図7(b)の前回押鍵バッファを更新する。つまり、今回押鍵されたキーの鍵盤番号を鍵盤フィールドに格納し、今回の押鍵により実際に発音させた楽音の音高データを音高フィールドに格納する。その後、鍵盤処理を終了する。
演奏者が新たな離鍵を行っていないとステップC1で判定した場合に移行するステップC23では、図7(a)のAnyKeyバッファをサーチして、鍵盤フィールドの鍵盤番号が今回押鍵されたキーのそれと一致する領域の抽出を行う。次のステップC24では、一致する領域が見つかったか否かを判定する。一致する領域を探し出せた場合、判定はYESとなってステップC25に移行する。そうでない場合には、判定はNOとなり、ここで鍵盤処理を終了する。
ステップC25では、一致する領域が複数あればそのうちの一つを選択し、音高フィールドの音高データ、及びチャンネルフィールドのチャンネル番号を用いて音源システム6に出力するコマンド(MIDIデータ)を生成し、RAM3上に確保した領域に格納する。また、AnyKeyバッファのコマンドの生成に用いたデータを格納した領域の各フィールドをクリアしてNODATAの状態にする。その後、鍵盤処理を終了する。
このようにして上記ステップC23〜C25は、離鍵操作に対応するために実行される。その実行により、鍵の押鍵よって発音を開始させたコードの構成音は、その鍵の離鍵によって消音される。このため、ユーザー(演奏者)はコードの構成音毎に、その発音期間を制御できるようになっている。
図8の鍵盤処理は上記のとおりであるが、その主な特徴と効果は以下のとおりである。
第一に、複数の演奏パートに優先度を設けることにより、演奏者が押鍵したときに優先度の高い対象演奏パートの音から発音することができる。図8では優先度の順に処理を行うことで実現させている。これにより、演奏者がメロディ・コード鍵域を押鍵した際には、より重要なメロディパートがコードパートよりも優先して発音される。
第二に、押鍵された鍵域によって複数の演奏パートの優先度を変更することにより、演奏者の意図が発音に反映される度合いを高めることができる。本実施形態では、ベース鍵域内のキーが押鍵されたか否かによって優先度を変えている。ベース鍵域内のキーが押鍵された場合の優先度はベースパート、コードパートの順であり、メロディパートは無視される。逆に、メロディ・コード鍵域が押鍵された場合の優先度はメロディパート、コードパートの順であり、ベースパートは無視される。
なお、本実施形態では対象演奏パートは3つとなっているが、対象演奏パート数はそれよりも多くとも少なくともよい。例えば、演奏パートがメロディパートとコードパートの2つだけでもよい。その場合、図4のステップB2−3、図6の候補音高バッファ3、図8のステップC4〜C6は不要である。
楽曲データについては、データを演奏パート毎に分けて記述されたものを用いているが、パート毎に分けて記述されていないものを用いても良い。その場合、演奏内容を解析して、発音を示す楽音が属する演奏パートを特定すれば良い。また形式も特に限定されるものではない。その楽曲データは、ROM2に格納して用意するのではなく、ネットワークや可搬型コンピュータ読み取り可能記憶媒体(メモリカード等)を介して取得するものであっても良い。
演奏パート間の優先度の変更は、ベース鍵域内のキーが押鍵されたか否かにより行っている。その変更は、演奏パート毎に鍵域を設定して行うようにしても良い。その鍵域は固定でも良いが、ユーザーによって変更可能としても良い。
本実施形態では、発音させるべき楽音を全て発音中の状況下で更に押鍵が行われると、その押鍵によって更に楽音を発音させるようにしている。しかし、そのような状況下では、更に楽音を発音させないようにしても良い。つまり押鍵を無視するようにしても良い。
コードを発音させるための全ての押鍵が同時に行われるとは限らない。発音させるコード(の構成音)は常に同じものとは限らない。このことから、前後に押鍵されたキーの音高関係に着目して構成音を選択するのではなく、一定時間の間に押鍵されたキーを全て考慮する形で構成音を選択するようにしても良い。コードによって構成音は異なることから、前のコードの影響を回避するために、前回押鍵バッファは候補音階バッファ2の更新に応じてクリアすることが望ましい。
<第2の実施形態>
上記第1の実施形態では、コードで押鍵により発音させる構成音の選択は、今回押鍵されたキーが前回押鍵されたキーより割り当てられた音高が上か否かに応じて、未発音の構成音のなかから発音させる構成音を選択することで行っている。それにより、演奏者が押鍵したキーを考慮して、音高に着目しての構成音の選択を行うようにしている。
上述したようにコードは、協和音と不協和音とに大別される。不協和音では、コードを不協和音とする構成音(テンションノート)によって緊張感を生じさせる。このため、テンションノートを発音させるタイミング(発音順序)は演奏者が制御できるようにすることが望ましい。しかし、音高に着目しての構成音の選択では、その制御が不可能か、たとえ可能であっても制御には、発音させるコードの種類、構成音間の音程等を把握しての適切な操作を行わなければならない。そのような操作は、エニーキーモードでの演奏を行う演奏者にとっては非常に困難なのが実情である。このようなことから第2の実施形態は、テンションノートの発音を所望のタイミングで行えるように、構成音の発音順序を演奏者が制御できるようにして、より意図した音楽表現を行えるようにしたものである。
第2の実施形態による演奏装置の構成は基本的に第1の実施形態と同じである。動作も大部分は同じである。このことから、第1の実施形態で付した符号をそのまま用いつつ、第1の実施形態から異なる部分にのみ着目する形で説明を行う。
第2の実施形態では、コードパートを対象演奏パートとした場合、対象演奏パートはコードパートのみとしている。鍵盤4に設けられたキーの種類には、白鍵、及び黒鍵がある。このことから、鍵盤4上のキーをその種類によってグループ分けすると共に、コードの構成音をテンションキーか否かにより分類し、操作されたキーが属するグループに応じて、そのグループに対応する分類の構成音を選択して発音させるようにしている。それにより、操作するキーの種類の選択を通して、演奏者が構成音の発音順序を制御できるようにしている。
ここでは、黒鍵が操作されたときにはテンションノート、白鍵が操作されたときにはテンションノート以外の構成音を選択・発音させるようにしている。黒鍵をテンションノート発音用のグループとしたのは、構成音のなかでテンションノートが占める割合は比較的に小さい、実際の演奏ではテンションノートの発音に黒鍵を押鍵する頻度は白鍵を押鍵する頻度に比べて高い、といった理由からである。つまり、押鍵動作が白鍵と比較的して大きくなる黒鍵を押鍵する必要性を低く抑えて操作を容易にする、演奏者にとってより違和感が小さくなる、といった利点があるためである。
上述したような構成音の発音順序の制御を可能とするために、第2の実施形態では図2に示すメイン処理において、ステップA2として実行される自動演奏処理、及びステップA3として実行される鍵盤処理が第1の実施形態から異なっている。他のステップでは処理内容は同じか、或いは基本的に同じである。このことから、第2の実施形態で実行される自動演奏処理、及び鍵盤処理について、図9〜図11を参照して詳細に説明する。
図9は、第2の実施形態で実行される自動演奏処理のフローチャートである。始めに図9を参照して、その自動演奏処理について詳細に説明する。
先ず、ステップB11では、直前のイベントデータを処理してから、そのイベントデータに付加された時間データ(図5)が示す時間間隔Δtが経過したか否か判定する。直前のイベントデータが存在しない(次に処理対象とするイベントデータは先頭に位置する楽音データを構成している)、或いはその時間間隔Δtが経過した場合、判定はYESとなってステップB12に移行する。それらの何れでもない場合には、判定はNOとなり、ここで自動演奏処理を終了し、図2のメイン処理に戻る。
ステップB12では、楽曲データから次の楽音データを読み出し、その楽音データ中の時間データが示す時間間隔Δtの計時を開始させる。その計時は、一定時間間隔(例えば上記最小時間間隔)で発生する割り込み信号により実行されるタイマインタラプト処理、或いはCPU1に搭載のハードタイマを用いて行う。次のステップB13では、読み出した楽音データ中のイベントデータが示すチャンネル(図中「演奏ch」と表記)の判定を行う。そのチャンネルがコードパート以外のもの、つまりメロディパート、リズムパート等のチャンネルであった場合、その旨が判定されてステップB17に移行し、イベントデータから音源システム6に送出すべきMIDIデータを生成しRAM3に格納する。一方、そのチャンネルがコードパートのもの(コードチャンネル)であった場合には、その旨が判定されてステップB14に移行する。
上記ステップB12で読み出すべき楽音データが無いことが判明すると、特には図示していないが、ここで自動演奏処理を終了するようになっている。そのステップB12、及びステップB11は、図3に示す自動演奏処理ではステップB1で行われる。
コードパートのイベントデータには、コードの種類を示すコード名データ、及びルートの音高を示すルート音階番号が挿入されている。ステップB14では、コード名データ、及びルート音階番号からコードの各構成音の音高データを特定し、特定した音高データを、イベント種別が示すイベントの内容(ここでは発音、及び消音の何れか)に応じて、図6(b)の候補音高バッファ2に格納するか、或いはそのバッファ2からクリアしてNODATAの状態にする。その後はステップB15に移行する。
第2の実施形態では、図6(b)に示す音階候補バッファ2として、音高データを格納するフィールドの他に、テンションノートか否かを示す値(フラグ)を格納するフィールドを設けたものを採用している。それにより、構成音がテンションノートか否か区別するようにしている。ここでは、テンションノートを示す値を格納することを「フラグを設定する」と表現し、その値を格納しないことを「フラグを設定しない」或いは「フラグの設定を解除する」等と表現する。
ステップB15では、上記コード名データが示すコードの種類が不協和音に大別されるものか否か判定する。その種類が不協和音に大別されるものであった場合、判定はYESとなってステップB16に移行し、そのコードの種類、及びルート音階番号からテンションノートに相当する構成音を特定して、その全てにフラグを設定した後、自動演奏処理を終了する。そうでない場合には、つまりコードの種類が協和音に大別されるものである場合には、判定はNOとなり、ここで自動演奏処理を終了する。
構成音間の音程はコードの種類によって異なる固有のものである。それにより、コードの各構成音の音高は、コードの種類毎に、例えば各構成音のルートからの音程を示す音程データを用意することで特定させることができる。構成音がテンションノートか否かの特定は、例えば音程データと合わせて、その構成音がテンションノートか否かを示すノート種別データを用意することで特定させることができる。セブンスでは何れの種類もルートから短七度、或いは長七度の不協和音程を持つ構成音がテンションノートに相当する。
図10及び図11は、第2の実施形態で実行される鍵盤処理のフローチャートである。次に図10及び図11を参照して、その鍵盤処理について詳細に説明する。その鍵盤処理は、第1の実施形態と同様に、エニーキーモード設定時に実行される処理を抜粋して示している。第1の実施形態と同じ、或いは基本的に同じ処理内容のステップには同一の符号を付している。それにより、第1の実施形態から異なる部分にのみ着目する形で説明を行う。
第2の実施形態では、対象演奏パートがコードパートのみであるため、図6に示す各候補音高バッファ1〜3のなかで図6(b)に示す候補音高バッファ2のみが参照される。図7のAnyKeyバッファおよび前回押鍵バッファは第1の実子の形態と同様に参照し、更新する。
第2の実施形態では、ステップC3でのYESの判定によってステップD2に移行し、押鍵されたキーが白鍵か否か判定する。そのキーが黒鍵であった場合、判定はNOとなり、演奏者はテンションノートの発音を所望していると見なし、図11のステップD7に移行する。そうでない場合には、判定はYESとなってステップD3に移行する。
ステップD3では、図6(b)の候補音高バッファ2に、フラグが未設定で未発音の構成音の音高データが格納されているか否か判定する。候補音高バッファ2に1つ以上の音高データが格納されており、且つそれらのうちで図7(a)のAnyKeyバッファの音高フィールドに格納されていないフラグが未設定のものがある場合、コードの構成音のうちテンションノート以外で未発音のものがあるとして、判定はYESとなりステップC10に移行する。候補音高バッファ2に音高データが格納されていない、或いは音高データが1つ以上格納され、且つフラグが未設定のもの全てがAnyKeyバッファの音高フィールドに格納されている場合には、テンションノート以外で未発音の構成音は存在しないとして、判定はNOとなりステップD6に移行する。
ステップD6では、図6(b)の候補音高バッファ2の音高フィールドに格納された、フラグが未設定の音高データの中から1つの音高データを選択する。その選択後はステップC18に移行する。ステップC18〜C22については処理内容は第1の実施形態と基本的に同じであるため、説明は省略する。
ステップD6への移行は、発音させるべきコード自体が存在しない場合にも行われる。その場合、特には図示していないが、音高データの選択を行うことなく、鍵盤処理を終了するようになっている。
一方、ステップC10では、今回押鍵されたキーは前回押鍵されたキーより割り当てられた音高が下か否か判定する。前回押鍵したキーより低い音高のキーを演奏者が今回押鍵した場合、つまり前回押鍵バッファの鍵盤フィールドに格納された鍵盤番号より小さい鍵盤番号が割り当てられたキーを演奏者が今回押鍵した場合、判定はYESとなってステップD5に移行し、そうでない場合には、判定はNOとなってステップD4に移行する。
ステップD4では、演奏者が前回の押鍵時よりも高い音高の楽音を発音させようとしたと見なし、候補音高バッファ2に格納されたフラグが未設定の音高データのなかで、AnyKeyバッファの音高フィールドに対応する音高データが格納されてなく、且つ前回、発音させた構成音の音高データ以上、高音の音高データを探す。その後はステップC12に移行する。ステップC12及びC13についての説明は省略する。
ステップD5では、演奏者が前回の押鍵時よりも低音の構成音を発音させようとしていると見なし、候補音高バッファ2に格納されたフラグが未設定の音高データのなかで、AnyKeyバッファの音高フィールドに音高データが格納されてなく、且つ前回、発音させた構成音の音高データより低音の音高データを探す。その後はステップC15に移行する。ステップC15及びC16についての説明は省略する。
このようにして、演奏者が白鍵を押鍵した場合、発音タイミングとなったコードが存在していれば、フラグが未設定の構成音に限定し、その構成音を音高データに従って、或いはその音高データが示す音高から1オクターブ高く、若しくは下げた音高で発音させる。それにより、演奏者の意図を反映しつつ自然と感じられるようにコードのテンションノート以外の構成音を発音させる。
上記ステップD2の判定がNO、つまり黒鍵が押鍵されたと判定した場合に移行する図11のステップD7〜D18では、その黒鍵の押鍵に対応するための処理が行われる。
上述したように黒鍵に対する押鍵は、テンションノートを発音させるための操作と見なすようにしている。このことから、ステップD7では、図6(b)の候補音高バッファ2に、フラグが設定された音高データの中で未発音の構成音(テンションノート)のものが格納されているか否か判定する。候補音高バッファ2に1つ以上の音高データが格納されており、且つそれらのうちで図7(a)のAnyKeyバッファの音高フィールドに格納されていないフラグが設定のものがある場合、テンションノートで未発音のものがあるとして、判定はYESとなりステップD8に移行する。候補音高バッファ2に音高データが格納されていない、或いは音高データが1つ以上格納され、且つフラグが設定のもの全てがAnyKeyバッファの音高フィールドに格納されている場合には、テンションノートで未発音のものは存在しないとして、判定はNOとなりステップD15に移行する。
ステップD15では、図6の候補音高バッファ2の音高フィールドに格納された、フラグが設定の音高データの中から1つの音高データを選択する。その選択後はステップD16に移行する。ステップD16〜D18については、上記ステップC18〜C20と処理内容が基本的に同じであるため、説明は省略する。ステップD17或いはD18の処理の実行後は図10のステップC21に移行する。
ステップD15への移行は、発音させるべきコード自体が存在しない場合にも行われる。その場合、特には図示していないが、音高データの選択を行うことなく、鍵盤処理を終了するようになっている。
一方、ステップD8では、今回押鍵されたキーは前回押鍵されたキーより割り当てられた音高が下か否か判定する。前回押鍵したキーより低い音高のキー(ここでは黒鍵)を演奏者が今回押鍵した場合、つまり前回押鍵バッファの鍵盤フィールドに格納された鍵盤番号より小さい鍵盤番号が割り当てられた黒鍵を演奏者が今回押鍵した場合、判定はYESとなってステップD9に移行し、そうでない場合には、判定はNOとなってステップD12に移行する。
ステップD9では、演奏者が前回の押鍵時よりも高い音高の楽音を発音させようとしたと見なし、候補音高バッファ2に格納されたフラグが設定の音高データのなかで、AnyKeyバッファの音高フィールドに対応する音高データが格納されてなく、且つ前回、発音させた構成音の音高データ以上、高音の音高データを探す。その後はステップD10に移行する。ステップD10及びD11については、上記ステップC12及びC13と処理内容が基本的に同じであるため、説明は省略する。ステップD10でのYESの判定、或いはステップD11の処理の実行により図10のステップC21に移行する。
ステップD12では、演奏者が前回の押鍵時よりも低音の構成音を発音させようとしていると見なし、候補音高バッファ2に格納されたフラグが設定の音高データのなかで、AnyKeyバッファの音高フィールドに音高データが格納されてなく、且つ前回、発音させた構成音の音高データより低音の音高データを探す。その後はステップD13に移行する。ステップD13及びD14については、上記ステップC15及びC16と処理内容が基本的に同じであるため、説明は省略する。ステップD13でのYESの判定、或いはステップD14の処理の実行により図10のステップC21に移行する。
このようにして、演奏者が黒鍵を押鍵した場合には、発音タイミングとなったコードが存在していれば、フラグが設定の構成音であるテンションノートに限定し、そのテンションノートを音高データに従って、或いはその音高データが示す音高から1オクターブ高く、若しくは下げた音高で発音させる。それにより、演奏者の意図を反映しつつ自然と感じられるようにテンションノートを発音させる。
なお、第2の実施形態では、鍵盤4上のキーを白鍵、黒鍵でグループ分けし、そのグループ分けに合わせてコードの構成音(候補音高)をテンションノート、及びそれ以外の構成音に分類することにより、テンションノート、及びそれ以外の構成音を演奏者が選択して発音させることができるようにしているが、グループ分けは白鍵、黒鍵のキーの種類ではなく、割り当てられた音高の範囲(鍵域)により行っても良い。そのようなグループ分けを採用した場合には、コードパート以外の対象演奏パートの演奏用の鍵域を別に設けることにより、複数の演奏パートの演奏を演奏者が行えるようにしても良い。候補音高を分類する対象演奏パートとしては、楽音間でそれが持つ機能、或いは役割に違いがある演奏パートであれば幅広く採用することができる。
本実施形態(第1及び第2の実施形態)による演奏装置は、CPU1に実行させるプログラムをROM2に格納し実行させることで実現させているが、そのようなプログラムは、CD−ROM、DVD、或いは着脱自在なフラッシュメモリ等の記録媒体に記録させて配布しても良い。公衆網等の通信ネットワークを介して、そのプログラムの一部、若しくは全部を配信するようにしても良い。そのようにした場合には、ユーザーはプログラムを取得して、演奏装置として用いることが可能なコンピュータにロードすることにより、そのコンピュータに本発明を適用させることができる。このことから、記録媒体は、プログラムを配信する装置がアクセスできるものであっても良い。そのコンピュータは演奏装置を構成するものであっても良いが、鍵盤4のような複数の演奏操作子を備えた装置を接続できるもの、つまり行われた演奏操作の内容を示すデータを受信できるものであっても良い。