JP2004177893A - 楽音演奏装置および楽音演奏処理のプログラム - Google Patents

楽音演奏装置および楽音演奏処理のプログラム Download PDF

Info

Publication number
JP2004177893A
JP2004177893A JP2002347323A JP2002347323A JP2004177893A JP 2004177893 A JP2004177893 A JP 2004177893A JP 2002347323 A JP2002347323 A JP 2002347323A JP 2002347323 A JP2002347323 A JP 2002347323A JP 2004177893 A JP2004177893 A JP 2004177893A
Authority
JP
Japan
Prior art keywords
pitch
candidate
chord
event
key
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2002347323A
Other languages
English (en)
Other versions
JP2004177893A5 (ja
JP4158502B2 (ja
Inventor
Mitsuhiro Matsumoto
光広 松本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Casio Computer Co Ltd
Original Assignee
Casio Computer Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Casio Computer Co Ltd filed Critical Casio Computer Co Ltd
Priority to JP2002347323A priority Critical patent/JP4158502B2/ja
Publication of JP2004177893A publication Critical patent/JP2004177893A/ja
Publication of JP2004177893A5 publication Critical patent/JP2004177893A5/ja
Application granted granted Critical
Publication of JP4158502B2 publication Critical patent/JP4158502B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

【課題】演奏のタイミングだけで自動演奏を行う場合であっても、演奏者の和音演奏やアルペジオ演奏が反映できるとともに、自然な感じの演奏が実現できるようにする。
【解決手段】CPU1は、和音の楽音データを有する特定のパート、および他のパートからなる複数のパートで構成された自動演奏曲を曲メモリ5から読み出して、特定のパートにおける複数の音高を発音の候補音高として設定し、鍵盤6において少なくとも1つの鍵の演奏結果に基づいて、候補音高の中から選択した音高又は選択した音高をオクターブ単位で修正した音高を発音すべき音高として指定して、音源8に転送する。
【選択図】 図1

Description

【0001】
【発明の属する技術分野】
本発明は、楽音演奏装置および楽音演奏処理のプログラムに関する。
【0002】
【従来の技術】
従来の楽音演奏装置の中には、押鍵に応じて分散和音であるアルペジオをアルペジオパターンに基づいて生成する機能を持つものがある。このような楽音演奏装置はアルペジエータと称される。この種のアルペジエータは、アルペジオパターンとして、複数のキー番号とその発音タイミングが記憶されている。一方、同時に押鍵された複数のノート番号に所定のルールにしたがって番号を割り振り、アルペジオパターン中のキー番号に対応した番号が割り振られているノート番号を、その発音タイミングにおいて発生させるようにして、押鍵音を元にアルペジオを発生している。
【0003】
しかし、アルペジオパターンを作成した意図の通りに発音させるには、演奏者が特定の複数キーを正確に押鍵する必要がある。そこで、どのアルペジオパターンを選んだ場合であっても、そのアルペジオパターンの意図を再現することができ、かつ押鍵数を増加させることにより新しい音を随時付加することができ、更に、押鍵数が不足しているときの代理発音を所望の音で安定して行うような提案がなされている。
【0004】
この提案のアルペジオ生成装置によれば、第1の数のアルペジオノート情報および第2の数のノートについてのアルペジオ発音タイミング情報から成るアルペジオデータを記憶する記憶手段と、演奏進行に伴い第3の演奏ノート情報を入力する手段と、演奏ノート情報の入力に応じて、記憶手段からアルペジオノート情報およびアルペジオ発音タイミング情報を読み出す手段と、読み出されたアルペジオノート情報、入力された演奏ノート情報、および、読み出されたアルペジオ発音タイミング情報に基づいて第2の数のノート情報から成るアルペジオを生成する手段であって、第3の数が第1の数以下の場合、該アルペジオノート情報および該アルペジオ発音タイミング情報に基づいてアルペジオを生成し、第3の数が第1の数よりも大きい場合、該アルペジオノート情報、該演奏ノート情報および該アルペジオ発音タイミング情報に基づいてアルペジオを生成する(特許文献1参照)。
【0005】
【特許文献1】
特開平2001−22354号公報(段落番号「0002」〜「0007」)
【0006】
【発明が解決しようとする課題】
しかしながら従来の楽音演奏装置においては、予め決められている固定のアルペジオ発音タイミング情報のアルペジオパターンで発音されるので、演奏のタイミングだけで自動演奏を行う場合に、自然な感じの演奏にならない上、演奏者の和音演奏やアルペジオ演奏が反映されないという問題があった。
また、従来の楽音演奏装置においては、スタンダードMIDIファイル(SMF)のように、イベントデータの中にコードデータを持たず、ノートデータとタイムデータとで和音を構成しているものについては、演奏のタイミングだけで自動演奏を行う場合に、和音を認識することができないという問題があった。
【0007】
本発明の課題は、演奏のタイミングだけで自動演奏を行う場合であっても、自然な感じの演奏が実現できるとともに、演奏者の和音演奏やアルペジオ演奏が反映できるようにすることである。
また、本発明の課題は、スタンダードMIDIファイルのように、イベントデータの中にコードデータを持たない場合であっても、発音開始時間とイベントとで構成されている和音を容易に認識して自動演奏ができるようにすることである。
【0008】
【課題を解決するための手段】
本発明の楽音演奏装置は、演奏を行うための複数の操作子(実施形態においては、図1の鍵盤6に相当する)と、和音の楽音データを有する特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において特定のパートにおける複数の音高を発音の候補音高として設定する候補音高設定手段(実施形態においては、図1のCPU1に相当する)と、少なくとも1つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する発音音高指定手段(実施形態においては、図1のCPU1に相当する)とを備えた構成になっている。
【0009】
本発明において、候補音高設定手段は、特定のパートにおけるコードデータに基づいて変換した複数の音高を候補音高として設定するような構成にしてもよい。
【0010】
本発明において、発音音高指定手段は、候補音高の中から未発音の音高を選択する構成にしてもよい。
さらにこの場合において、発音音高指定手段は、今回操作された操作子に対応する音高が前回操作された操作子に対応する音高より高い場合又は低い場合に応じて、前回指定した音高よりも高い未発音の音高又は低い未発音の音高を候補音高の中から選択する構成にしてもよい。
さらにこの場合において、発音音高指定手段は、候補音高の中に未発音の音高がない場合には、今回操作された操作子に対応する音高が前回操作された操作子に対応する音高より高い場合又は低い場合に応じて、すでに選択した音高を1オクターブアップ又は1オクターブダウンする修正を行なって発音すべき音高として指定する構成にしてもよい。
【0011】
本発明において、発音音高指定手段は、予め設定された基準のオクターブと操作子の演奏位置のオクターブとが異なる場合には、基準のオクターブと演奏位置のオクターブとのオクターブ差に応じて、候補音高の中から選択した音高のオクターブを修正して発音すべき音高として指定する構成にしてもよい。
【0012】
本発明において、候補音高設定手段は、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートにおいて、予め設定されている和音認定のための所定時間(実施形態においては、窓時間に相当する)が経過するごとにその所定時間内における最初のノートオンのイベントから最後のノートオンのイベントまでの音高を候補音高として設定する構成にしてもよい。
この場合において、発音音高指定手段によって指定された音高の発音開始時間まで他のパートの音高の発音開始時間を遅延させる発音遅延手段(実施形態においては、図1のCPU1に相当する)をさらに備えた構成にしてもよい。
あるいは、候補音高設定手段は、和音認定のための所定時間が経過した後にさらに所定時間が経過したときは設定中のすべての候補音高を消去する構成にしてもよい。
【0013】
本発明の楽音演奏処理のプログラムは、コードデータによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲においてコードデータに基づいて変換した複数の音高を候補音高として設定する第1のステップと、複数の操作子の中で少なくとも1つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第2のステップとを有する。この場合において、第1及び第2のステップは、実施形態においては、図1のCPU1によって実行されるフローチャートの処理機能に相当する。
【0014】
また、本発明の楽音演奏処理のプログラムは、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において予め設定されている和音認定のための所定時間が経過するごとにその所定時間内の特定のパートにおける最初のノートオンのイベントから最後のノートオンのイベントまでを候補音高として設定する第1のステップと、複数の操作子の中で少なくとも1つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第2のステップとを有する。この場合において、第1及び第2のステップは、実施形態においては、図1のCPU1によって実行されるフローチャートの処理機能に相当する。
【0015】
【発明の実施の形態】
以下、本発明による楽音演奏装置の第1の実施形態ないし第4の実施形態について、電子鍵盤楽器を例に採って、図を参照して説明する。
図1は、各実施形態における楽音演奏装置のシステム構成を示すブロック図である。この図において、CPU1は、システムバス2を介して、ROM3、RAM4、曲メモリ5、鍵盤6、スイッチ部7、および音源8に接続され、これら各部との間で、コマンドおよびデータを授受しながら、この装置全体を制御する。
【0016】
ROM3は、CPU1によって実行される楽音発生処理のプログラムを含む制御プログラムや、この装置の起動時のイニシャライズにおける初期データなどをあらかじめ記憶している。RAM4は、CPU1のワークエリアであり、各種のレジスタやフラグ、鍵番号や音高のデータ、音源8に出力する発音および消音のコマンドを記憶するバッファが設けられている。曲メモリ5は、予め入力された自動演奏曲の楽音データを記憶している。鍵盤6は、押鍵をガイドする機能を具備し、演奏結果である鍵番号およびベロシティのデータをCPU1のキー検出走査により入力する。
スイッチ部7は、自動演奏を開始又は停止するスタート/ストップスイッチ(START/STOP・SW)、音色設定スイッチ、メロディパートを自動演奏するか、又は、コードパートを自動演奏するかを設定したり、1本の指でもコード演奏が可能なエニキー(Any Key)モードに設定するためのいくつかのモード設定スイッチなどで構成されている。CPU1は、これら各パートを音源8の複数のチャンネルにおいて少なくとも1つのチャンネルに割り当てる。1つのパートを2つ以上のチャンネルに割り当てることもあるが、各実施形態において、コードパートを1つのチャンネル(これを「特定のチャンネル」という)に割り当てるものとする。
音源8は、CPU1によるコマンドに基づいて楽音波形を生成し、接続されている発音回路9に送出する。発音回路9は、D/A変換回路、増幅回路、スピーカなどで構成され、音源6からの楽音波形に応じて楽音を発生する。
【0017】
次に、図2ないし図24に基づいて第1の実施形態における楽音演奏装置について説明する。
図2は、エニキーモードに設定されている場合のRAM4のメモリマップを示している。
図2(1)は、発音する和音の候補となる候補音高を最大6個まで記憶するエリアであるKonko(0)〜(5)と、各エリアの候補音高が発音中か否かを示すフラグONF(0)〜(5)のエリアとで構成された候補音高バッファ(koho Buffer)であり、各候補音高およびフラグはポインタA又はAPによって指定される。
図2(2)は、押鍵された鍵番号を最大10個まで記憶するエリアであるKey(0)〜(9)と、各鍵番号の発音のために指定される音高のエリアであるSonko(0)〜(9)とで構成されたエニキーバッファ(Any Key Buffer)であり、各鍵番号および音高はポインタWPによって指定される。図2(3)は、最後すなわち前回に押鍵された鍵番号のエリアであるLKeyと、その鍵番号の発音のために指定された前回の音高のエリアであるLonkoとで構成されたラストバッファ(Last Buffer)である。
【0018】
次に、第1実施形態における楽音演奏装置の動作について、CPU1によって実行されるフローチャートに基づいて説明する。なお、この第1実施形態および他の実施形態においては、モード設定スイッチが和音のパートを自動演奏するモードに設定されている。さらに、1本の指の演奏によっても曲の自動演奏が可能なエニキーモードモードに設定されている。
【0019】
図3はメインフローチャートであり、所定のイニシャライズ(ステップA1)の後、自動演奏処理(ステップA2)、鍵盤処理(ステップA3)、発音処理(ステップA4)、その他の処理(ステップA5)を繰り返し実行する。
図4は、タイマインタラプトのフローチャートであり、一定時間ごとのタイマインタラプトに応じて、レジスタTの値をデクリメントする(ステップA6)。
【0020】
図5ないし図8は、メインフローにおけるステップA2の自動演奏処理のフローチャートである。
図5において、スタート/ストップスイッチがオンされたか否かを判別し(ステップB1)、このスイッチがオンされたときは、自動演奏のフラグSTFの値を反転する(ステップB2)。そして、STFが「1」に反転したか否かを判別する(ステップB3)。すなわち、自動演奏開始になったか否かを判別する。STFが「1」に反転した場合には、自動演奏データのスタートアドレスに読み出しのポインタを移動して(ステップB4)、曲メモリの自動演奏データの読み出しを行う(ステップB5)。
【0021】
そして、読み出したデータが何か判別する(ステップB6)。データがタイムである場合には、そのデータをレジスタTにストアして(ステップB7)、タイマインタラプトの禁止状態を解除する(ステップB8)。そして、メインフローに戻る。したがって、この後は一定時間経過ごとに図1のタイマインタラプト処理を実行する。
ステップB3において、STFが「0」に反転した場合、すなわち、自動演奏停止の場合には、すべての発音を停止するためにオールノートオフ処理を行い(ステップB9)、タイマインタラプトを禁止状態にする(ステップB10)。そして、メインフローに戻る。
【0022】
ステップB6における判別結果で、読み出したデータがイベントである場合には、図6のフローにおいて、イベントのチャンネルが和音パート用の特定のチャンネルであるか否かを判別する(ステップB11)。特定のチャンネルである場合には、さらにそのイベントがコードイベントであるか否かを判別する(ステップB12)。コードイベントである場合には、そのコードデータに基づきコード和音構成の音高を生成する(ステップB13)。そして、各和音構成の音高を図2(1)に示したkoho BufferのKonko(0)〜(5)のエリアに順次ストアする(ステップB14)。また、ストアした候補音高は未発音状態であるので、ONF(0)〜(5)を「0(消音)」にリセットしておく(ステップB16)。次に、Konko(0)〜(5)のエリアを指定するポインタを「0」にセットする(ステップB16)。この後、アドレスポインタを進める(ステップB17)。
ステップB11においてイベントのチャンネルが特定のチャンネルでない場合、又はステップB12において特定のチャンネルのイベントがコードイベントでない場合には、イベントを出力バッファに転送し(ステップB18)、ステップB16に移行して、アドレスポインタを進める。
【0023】
図5のステップB1において、スタート/ストップスイッチがオンでない場合には、図7において、STFが「1(自動演奏)」であるか否かを判別する(ステップB19)。STFが「1」である場合には、レジスタTの値が「0」に達したか否かを判別する(ステップB20)。STFが「0(自動演奏停止)」である場合、又はTが「0」に達していない場合には、メインフローに戻る。
Tが「0」に達したときは曲メモリ5の自動演奏データのアドレスを進める(ステップB21)。そして、データがあるか否かを判別する(ステップB22)。データがない場合には、STFを「0」にリセットして(ステップB23)、メインフローに戻る。一方、データがある場合には、そのデータを読み出し(ステップB24)、読み出したデータは何か判別する(ステップB25)。データがタイムである場合には、そのデータをTにストアする(ステップB26)。そして、メインフローに戻る。
【0024】
ステップB25において、読み出したデータがイベントである場合には、図8において、イベントのチャンネルがコードパート用の特定のチャンネルであるか否かを判別する(ステップB27)。特定のチャンネルである場合には、さらにそのイベントがコードイベントであるか否かを判別する(ステップB28)。コードイベントであると判別したときは、そのコードデータに基づきコード和音構成の音高を生成する(ステップB29)。そして、koho Bufferをクリアして(ステップB30)、各和音構成の音高を図2(1)に示したkohoBufferのKonko(0)〜(5)のエリアに順次ストアする(ステップB31)。また、ストアした候補音高は未発音状態であるので、ONF(0)〜(5)を「0」にリセットする(ステップB32)。次に、Konko(0)〜(5)のエリアを指定するポインタPを「0」にセットする(ステップB33)。この後、図7のステップB21に移行して、アドレスポインタを進める。
ステップB27においてイベントのチャンネルが特定のチャンネルでない場合、又はステップB28において特定のチャンネルのイベントがコードイベントでない場合には、イベントを出力バッファに転送し(ステップB34)、図7のステップB21に移行して、アドレスポインタを進める。
【0025】
図9ないし図23は、メインフローにおけるステップA3の鍵盤処理のフローチャートである。
図9において、鍵走査を行って(ステップC1)、鍵変化があるか否かを判別する(ステップC2)。鍵変化がない場合にはメインフローに戻るが、鍵変化があったときは、キー検出処理を行う(ステップC3)。キー検出処理は、図13に示すように、オン(押鍵)された鍵番号をレジスタKEYにストアする(ステップC101)。この鍵走査は鍵番号が小さい鍵すなわち低い音高の鍵の側から行う。したがって、和音パートの自動演奏のモードにおいては、例えば、発光ダイオードなどで押鍵する複数の鍵をガイドするが、1本の指でもコード演奏が可能なエニキーモードに設定されている場合には、演奏者が同時に複数の鍵を押鍵した場合でも、最も小さい鍵番号がKEYにストアされる。
【0026】
図9のステップC3におけるキー検出処理の後は、押鍵の強さを示すベロシティをレジスタVELOCITYにストアする(ステップC4)。次に、図2(2)のAny Key Bufferのエリアを指定するポインタWPを「0」にセットして、WPをインクリメントしながらNODATA(空き)エリアを捜す。すなわち、Key(WP)がNODATAであるか否かを判別し(ステップC6)、NODATAでなく既にデータがストアされている場合には、WPをインクリメントして次のエリアを指定する(ステップC7)。このとき、WPの値が「10」に達したか否かを判別する(ステップC8)。すなわち、すべてのエリアが空きでないか否かを判別する。WPの値が「10」未満である場合には、ステップC6においてNODATAのエリアを捜す。
【0027】
Key(WP)がNODATAである場合には、自動演奏処理における図6のステップB16又は図8のステップB33においてセットしたポインタPの値をポインタAPにセットする(ステップC9)。Pはkoho Bufferのエリアを指定するポインタであるので、その値の範囲は「0」から「5」までである。次に、APで指定するフラグONF(AP)が「0(未発音)」であるか否かを判別する(ステップC10)。ONF(AP)が「1(発音中)」である場合には、APの値をインクリメントする(ステップC11)。
【0028】
そして、APの値が「6」に達したか否かを判別する(ステップC12)。APの値が「6」に達したときは、APの値を「0」に戻す(ステップC13)。次に、APの値がPの値に一致したか否かを判別する(ステップC14)。すなわち、koho Bufferのすべての候補音高が発音中であるか否かを判別する。APの値がPの値に一致しない場合には、ステップC10においてONF(AP)が「0」で未発音の候補音高を捜す。ONF(AP)が「0」のエリアが存在する場合には、AP+1の値をPの値にセットする(ステップC15)。すなわち、今回指定した未発音の候補音高は発音すべき音高として指定するので、次の押鍵に応じて発音すべき候補音高を予定する。
ステップC14においてAPの値とPの値とが一致して、すべての候補音高が既に発音中である場合には、AP+1の値をPに値としてセットする(ステップC16)。すなわち、今回指定した候補音高が発音中であるので、次のエリアにある候補音高を指定する。
【0029】
ステップC15において、AP+1の値をPの値にセットした後は、図10において、前回の鍵番号をストアするレジスタLKeyがNODATA(空き)でないか否かを判別する(ステップC17)。LKeyがNODATAでなく、前回の音高がストアされている場合には、KEYにストアした音高がLKeyにストアされている音高より高いか又は同じであるか、すなわちKEYの音高がLKeyの音高以上であるか、又は、KEYの音高がLKeyの音高より低いかを判別する(ステップC18)。
【0030】
KEYの音高がLKeyの音高以上である場合には、ポインタAPを「0」にセットして(ステップC19)、APの値をインクリメントしながら、候補音高バッファにおける未発音の音高候補を検出する。すなわち、APで指定するエリアの発音フラグONF(AP)が「0」であるか否かを判別する(ステップC20)。ONF(AP)が「0」である候補音高を検出したときは、そのKonko(AP)の音高が、前回発音した音高であるLonko以上であるか否かを判別する(ステップC21)。
【0031】
ステップC20において、ONF(AP)が「1(発音中)」である場合、又は、ステップC21において、Konko(AP)の音高がLonkoの音高より低い場合には、APの値をインクリメントする(ステップC22)。この後、APの値が「6」に達したか否かを判別する(ステップC23)。APの値が「6」未満で、まだ検出するエリアが残っている場合には、ステップC20に移行する。ステップC21において、Konko(AP)の音高がLonkoの音高以上である場合には、ノート生成処理(1)を実行する(ステップC24)。ノート生成処理(1)は、図14のフローチャートに示すように、レジスタNOTEにKonko(AP)の音高を発音すべき指定の音高としてストアする(ステップC102)。
【0032】
図10において、ステップC24のノート生成処理(1)の後は、Any Key Buffer入力処理(1)を実行する(ステップC25)。Any Key Buffer入力処理(1)は、図16に示すように、ノート生成処理(1)でNOTEにストアしたKonko(AP)の音高を、図2(2)に示したAny Key BufferにおいてポインタWPで指定されるエリアであるSonko(WP)に、発音すべき指定の音高としてストアする(ステップC108)。次に、ステップC3のキー検出処理でKEYにストアした鍵番号を、図2(2)に示したAny Key BufferにおいてポインタWPで指定されるエリアであるKey(WP)にストアする(ステップC109)。そして、図10のフローのステップC26aに移行する。
【0033】
ステップC26aでは、Last Buffer入力処理(1)を実行する。Last Buffer入力処理(1)は、図20に示すように、KEYにストアした鍵番号を、図2(3)に示したLast BufferのLKeyのエリアにストアする(ステップC112)。次に、現在ポインタAPで指定しているKonko(AP)の候補音高を、図2(3)に示したLast BufferのLonkoのエリアにストアする(ステップC113)。そして、図10のフローのステップC26bに移行する。
【0034】
ステップC26bでは、発音フラグONF(AP)を「1」にセットする。次に、特定したチャンネルCH、レジスタNOTEおよびVELOCITYにより、ノートオンコマンドを作成して(ステップC27)、MIDIの出力バッファに転送する(ステップC28)。そして、メインフローに戻る。
【0035】
図10のステップC23において、APの値が「6」以上で、図2(1)に示したkoho Bufferのすべての候補音高が発音中である場合には、オクターブアップ処理を実行する(ステップC29)。オクターブアップ処理は、図19に示すように、まず図15に示したノート生成処理(2)を実行する(ステップC104)。すなわち、ポインタPで指定するKonko(P)の音高をレジスタNOTEにストアする。次に、NOTEの音高を1オクターブアップする(ステップC105)。そして、図10のステップC30に移行する。
【0036】
ステップC30では、Any Key Buffer入力処理(2)を実行する。Any Key Buffer入力処理(2)は、図17に示すように、ポインタPで指定する発音中のKonko(P)の音高を、図2(2)に示したAny Key BufferにおいてポインタWPで指定されるエリアであるSonko(WP)に、発音すべき指定の音高としてストアする(ステップC110)。次に、ステップC3のキー検出処理でKEYにストアした鍵番号を、図2(2)に示したAny Key BufferにおいてポインタWPで指定されるエリアであるKey(WP)にストアする(ステップC111)。そして、図10のフローのステップC31aに移行する。
【0037】
ステップC31aでは、Last Buffer入力処理(2)を実行する。Last Buffer入力処理(2)は、図21に示すように、KEYにストアした鍵番号を、図2(3)に示したLast BufferのLKeyのエリアにストアする(ステップC114)。次に、現在ポインタPで指定しているKonko(P)の音高を、図2(3)に示したLast BufferのLonkoのエリアにストアする(ステップC115)。そして、図10のフローのステップC31bに移行する。
【0038】
ステップC31bでは、発音フラグONF(P)を「1」にセットする。次に、特定したパートCH、レジスタNOTEおよびVELOCITYにより、ノートオンコマンドを作成して(ステップC27)、MIDIの出力バッファに転送する(ステップC28)。そして、メインフローに戻る。すなわち、図2(1)に示したkoho Bufferのすべての候補音高が発音中で、かつ、今回の押鍵の鍵番号が前回の押鍵の鍵番号以上である場合には、発音中の1つの候補音高を用いて、その音高を1オクターブアップしてノートオンコマンドを作成する。
【0039】
ステップC17において、LkeyがNODATAでそのエリアに音高がストアされていない場合には、押鍵に応じて最初に発音する音高を作成するために、ノート生成処理(2)を実行する(ステップC32)。ノート生成処理(2)は、図15に示すように、自動演奏処理で最初に指定したKonko(P)の音高をNOTEにストアする(ステップC103)。そして、図10のステップC30に移行して、ステップC31a、ステップC31bを経て、ステップC27においてNOTEの音高に基づいてノートオンコマンドを作成し、そのノートオンコマンドをステップC28においてMIDIの出力バッファに転送する。
【0040】
図10のステップC18において、KEYにストアした鍵番号がLKeyにストアした前回の鍵番号よりも小さい場合には、図11のフローにおいて、ポインタAPを「0」にセットして(ステップC33)、APの値をインクリメントしながら、図2(1)のkoho Bufferのエリアを検索する。すなわち、発音フラグONF(AP)が「0(未発音)」であるか否かを判別し(ステップC34)、このフラグが「0」である場合には、そのKonko(AP)の音高がLonkoにストアした前回の音高よりも低いか否かを判別する(ステップC35)。
【0041】
ステップC34において、ONF(AP)が「1(発音中)」である場合、又は、ステップC35において、Konko(AP)の音高がLonkoにストアした前回の音高以上である場合には、APの値をインクリメントする(ステップC36)。このとき、インクリメントしたAPの値が「6」に達したか否かを判別する(ステップC37)。APの値が「5」以下である場合には、ステップC34に移行して、未発音でかつLonkoの音高より低い候補音高を捜す。ステップC37において、APの値が「6」に達した場合には、オクターブダウン処理を実行する(ステップC38)。
【0042】
オクターブダウン処理は、図19に示すように、まず図15に示したノート生成処理(2)を実行する(ステップC106)。すなわち、ポインタPで指定するKonko(P)の音高をレジスタNOTEにストアする。次に、NOTEの音高を1オクターブダウンする(ステップC107)。そして、図10のステップC30に移行して、ステップC31a、ステップC31bを経て、ステップC27においてNOTEの音高に基づいてノートオンコマンドを作成し、そのノートオンコマンドをステップC28においてMIDIの出力バッファに転送する。
【0043】
図9のステップC10の発音フラグONFの判別結果において、図2(1)のkoho Bufferのすべての候補音高が発音中で、ステップC16において、一巡したポインタAPの値に「1」を加算した値をポインタPにセットした後は、図11のフローにおいて、KEYにストアした鍵番号がLonkoにストアした前回の鍵番号以上であるか否かを判別する(ステップC39)。
【0044】
KEYの鍵番号がLonkoの鍵番号より小さい場合には、オクターブダウン処理を実行する(ステップC38)。KEYの鍵番号がLonkoの鍵番号以上である場合には、図10のステップC29に移行して、オクターブアップ処理を実行する。オクターブダウン処理又はオクターブアップ処理の後は、図10のステップC30に移行して、NOTEの音高を1オクターブダウンした音高、又は、1オクターブアップした音高に基づいて、ノートオンコマンドを作成するステップC27、MIDIの出力バッファに転送するステップC28に至る各ステップを実行する。
【0045】
図9のステップC2において、鍵変化がオフである場合、すなわち離鍵がされた場合には、図12のフローにおいて、オフされた鍵番号をレジスタKEYにストアし(ステップC40)、レジスタVELOCITYに「0」をストアする(ステップC41)。次に、図2(2)に示したAny Key Bufferの各エリアを検索する。すなわち、ポインタWPを「0」にセットして(ステップC42)、WPの値をインクリメントしながら、KEYの鍵番号と一致する鍵番号のKey(WP)を捜す(ステップC43)。
【0046】
鍵番号が一致しない場合には、WPの値をインクリメントして次のエリアを指定する(ステップC44)。このとき、WPの値が「10」に達したか否かを判別する(ステップC45)。WPの値が「9」以下である場合には、ステップC43に移行してKEYの鍵番号と一致する鍵番号のKey(WP)を捜す。WPの値が「10」に達した場合には、メインフローに戻る。
【0047】
ステップC43において、KEYの鍵番号と一致する鍵番号のKey(WP)があったときは、図2(2)のAny Key Bufferにおいてその鍵番号に対応する音高と一致する候補音高を、図2(1)のonko Bufferの中から捜す。すなわち、ポインタAPを「0」にセットして(ステップC46)、APの値をインクリメントしながら、消音すべきSonko(WP)の音高とKonko(AP)の音高が一致するか否かを判別する(ステップC47)。音高が一致しない場合には、APの値をインクリメントして次の候補音高のエリアを指定する(ステップC48)。このとき、APの値が「6」に達したか否かを判別する(ステップC49)。APの値が「5」以下である場合には、ステップC47に移行して、Sonko(WP)の音高とKonko(AP)の音高が一致するか否かを判別する。APの値が「6」に達したときは、メインフローに戻る。
【0048】
ステップC47において、Sonko(WP)の音高とKonko(AP)の音高とが一致する場合、すなわち発音中の音高に消音すべき音高があった場合には、発音フラグONF(AP)を「0(消音)」にセットし(ステップC50)、Key(WP)にNODATA(空き)をストアする(ステップC51)。次に、ノート生成処理(3)を実行し(ステップC52)、Any Key Buffer消去処理を実行する(ステップC53)。
【0049】
ノート生成処理(3)は、図22に示すように、消音すべきSonko(WP)の指定音高をNOTEにストアする(ステップC116)。Any Key Buffer消去処理は、図23に示すように、Key(WP)にNODATAをストアし(ステップC117)、Sonko(WP)にNODATAをストアする(ステップC118)。すなわち、オフされた鍵番号に対応するAny Key Bufferのエリアをクリアにする。この後は、図10のステップC27に移行して、ステップC27においてノートオフコマンドを作成し、ステップC28においてMIDIの出力バッファにそのノートオフコマンドを転送する。そして、メインフローに戻る。
【0050】
図24は、メインフローにおけるステップA4の発音処理のフローチャートである。このフローに入ると、イベントの出力タイミングになったか否かを判別し(ステップD1)、出力タイミングになったときは、MIDIの出力バッファ内のイベントを音源に送出する(ステップD2)。そして、出力バッファをクリアにして(ステップD3)、メインフローに戻る。
【0051】
以上のように、この第1の実施形態によれば、CPU1は、和音の楽音データを有する特定のパート、および他のパートからなる複数のパートで構成された自動演奏曲において、特定のパートにおける複数の音高を発音の候補音高として設定し、鍵盤6において少なくとも1つの鍵の演奏結果に基づいて、候補音高の中から選択した音高又は選択した音高をオクターブ単位で修正した音高を発音すべき音高として指定する。したがって、演奏のタイミングだけで自動演奏を行う場合であっても、自然な感じの演奏が実現できるとともに、演奏者の和音演奏やアルペジオ演奏が反映できる。
【0052】
また、第1の実施形態によれば、CPU1は、特定のパートにおけるコードデータに基づいて変換した複数の音高を候補音高として設定する。したがって、装置のメーカで指定された専用の自動演奏曲に応じて演奏する際に、演奏のタイミングだけで、自然な感じで和音演奏やアルペジオ演奏ができる。
また、第1の実施形態によれば、CPU1は、候補音高の中から未発音の音高を選択する。したがって、発音中の音高を重複して発音しないので、和音演奏やアルペジオ演奏が単調にならず、自然な感じの演奏が実現できる。
さらに、この場合において、CPU1は、今回の押鍵に対応する音高が前回の押鍵に対応する音高より高い場合又は低い場合に応じて、前回指定した音高よりも高い未発音の音高又は低い未発音の音高を候補音高の中から選択する。したがって、押鍵の位置関係に応じて発音する音高が指定され、演奏の鍵と発音の音高との関係に違和感がなく、自然な感じの演奏が実現できる。
さらにまた、この場合において、CPU1は、候補音高の中に未発音の音高がない場合には、今回の押鍵に対応する音高が前回の押鍵に対応する音高より高い場合又は低い場合に応じて、すでに選択した音高を1オクターブアップ又は1オクターブダウンする修正して発音すべき音高として指定する。したがって、発音中の音高を重複して発音しないので、和音演奏やアルペジオ演奏が単調にならず、さらに、バリエーションに富んだ演奏が実現できる。
【0053】
次に、第2の実施形態における楽音演奏装置について、図25ないし図32に基づいて説明する。
図25は、エニキーモードに設定されている場合に、RAM4のメモリマップのうち、エニキーバッファ(Any Key Buffer)を示している。候補音高バッファ(koho Buffer)およびラストバッファ(Last Buffer)については、図2に示した第1の実施形態と同じであるので、図面および説明は省略する。
Any Key Bufferには、押鍵された鍵番号を最大10個まで記憶するエリアであるKey(0)〜(9)、各鍵番号の発音のために指定される音高のエリアであるSonko(0)〜(9)、およびオクターブのデータを記憶するエリアであるOct(0)〜(9)とで構成されている。各鍵番号、音高、およびオクターブのエリアはポインタWPによって指定される。
【0054】
次に、第2の実施形態における楽音演奏処理の動作について、CPU1によって実行されるフローチャートに基づいて説明する。第2の実施形態におけるCPU1のメインフローチャートの動作、およびメインフローチャートにおける自動演奏処理、発音処理については、第1の実施形態と同じである。また、鍵盤処理においても、大部分は第1の実施形態と同じである。したがって、第1の実施形態と異なる部分の動作について説明する。
【0055】
図26は、押鍵演奏がされたときのキー検出処理のフローチャートである。オンされた鍵番号をレジスタKEYにストアして(ステップC201)、そのストアした鍵番号の値を1オクターブの鍵数である「12」で除算し、除算結果の余りの値をKEYに再ストアして更新する(ステップC202)。次に、除算結果の整数部すなわち商の値をレジスタOCTAVEにストアして(ステップC203)、さらにそのストアした値からオクターブ基準値を減算する(ステップC204)。
【0056】
図27は、ノート生成処理(1)のフローチャートである。候補音高Konko(AP)をNOTEにストアし(ステップC217)、さらに、図26のステップC204において、OCTAVEにストアされている値に「12」を乗算してレジスタSIFTにストアし(ステップC218a)、SIFTの値をNOTEに加算する(ステップC218b)。
図28は、ノート生成処理(2)のフローチャートである。候補音高Konko(P)をNOTEにストアし(ステップC219)、さらに、図26のステップC204において、OCTAVEにストアされている値に「12」を乗算してレジスタSIFTにストアし(ステップC220a)、SIFTの値をNOTEに加算する(ステップC220b)。
【0057】
図29は、Any Key Buffer入力処理(1)のフローチャートである。NOTEにストアしたKonko(AP)の音高を、図25に示したAny Key BufferにおいてポインタWPで指定されるSonko(WP)にストアする(ステップC205)。次に、図26のキー検出処理のステップC201でKEYにストアした鍵番号を、Any Key BufferにおいてポインタWPで指定されるKey(WP)にストアする(ステップC206)。次に、図26のキー検出処理のステップC204でOCTAVEにストアした値を、Any Key BufferにおいてポインタWPで指定されるOct(WP)にストアする(ステップC207)。
【0058】
図30は、Any Key Buffer入力処理(2)のフローチャートである。NOTEにストアしたKonko(P)の音高を、図25に示したAnyKey BufferにおいてポインタWPで指定されるSonko(WP)にストアする(ステップC208)。次に、図26のキー検出処理のステップC201でKEYにストアした鍵番号を、Any Key BufferにおいてポインタWPで指定されるKey(WP)にストアする(ステップC209)。次に、図26のキー検出処理のステップC204でOCTAVEにストアした値を、Any Key BufferにおいてポインタWPで指定されるOct(WP)にストアする(ステップC210)。
【0059】
図31は、ノート生成処理(3)のフローチャートである。このフローでは、図25に示したAny Key BufferにおいてポインタWPで指定されるSonko(WP)をNOTEにストアする(ステップC211)。次に、Any Key BufferにおいてポインタWPで指定されるOct(WP)をOCTAVEにストアする(ステップC212)。次に、OCTAVEの値に「12」を乗算してレジスタSIFTにストアし(ステップC213a)、NOTEにストアした音高にSIFTの値を加算する(ステップC213b)。
【0060】
図32は、Any Key Buffer消去処理のフローチャートである。このフローでは、Any Key BufferにおいてポインタWPで指定されるKey(WP)にNODATAをストアする(ステップC214)。次に、Any Key BufferにおいてポインタWPで指定されるSonko(WP)にNODATAをストアする(ステップC215)。次に、Any Key BufferにおいてポインタWPで指定されるOct(WP)にNODATAをストアする(ステップC216)。
【0061】
以上のように、この第2の実施形態によれば、CPU1は、予め設定された基準のオクターブと鍵の演奏位置のオクターブとが異なる場合には、基準のオクターブと鍵の演奏位置のオクターブ差に応じて、候補音高の中から選択した音高のオクターブを修正して発音すべき音高として指定する。したがって、バリエーションに富んだ和音演奏やアルペジオ演奏が実現できる。
【0062】
次に、本発明の楽音演奏装置の第3の実施形態について、図33ないし図40に基づいて説明する。
この第3の実施形態においては、図1に示した曲メモリ5には、外部から取り込んだスタンダードMIDIファイル(SMF)としての自動演奏曲の楽音データが記憶されている。したがって、この場合の楽音データにはコードデータが含まれていない。スタンダードMIDIファイルにおいては、和音は発音開始時間とノートオンのイベントとで構成されている。
【0063】
次に、第3実施形態における楽音演奏装置の動作について、CPU1のフローチャートに基づいて説明する。
図33はメインフローチャートであり、所定のイニシャライズ(ステップE1)の後、和音窓時間設定処理(ステップE2)、自動演奏処理(ステップE3)、鍵盤処理(ステップE4)、発音処理(ステップE5)、その他の処理(ステップE6)を繰り返し実行する。
図34は、タイマインタラプトのフローチャートであり、一定時間ごとのタイマインタラプトに応じて、レジスタTの値をデクリメントする(ステップE7)。そして、フラグWFが「1」であるか否かを判別する(ステップE8)。WFが「1」である場合には、待ち時間のレジスタWTの値をインクリメントする(ステップE9)。WFの機能については後述する。
【0064】
図35は、メインフローにおけるステップE2の和音窓時間設定処理のフローチャートである。まず、STFが「0(自動演奏停止)」であるか否かを判別し(ステップF)、STFが「0」である場合には、和音窓時間(和音認定のための所定時間)が設定値として入力されたか否かを判別する(ステップF2)。設定値が入力されたときは、その設定値をレジスタSTにストアする(ステップF3)。そして、メインフローに戻る。
【0065】
図36ないし図39は、メインフローにおけるステップE3の自動演奏処理のフローチャートである。なお、この自動演奏処理においては、第1の実施形態において、図2(1)に示した候補音高および発音フラグの値をストアするkoho Bufferのエリアを使用する。
図36において、スタート/ストップスイッチがオンされたか否かを判別し(ステップG1)、このスイッチがオンされたときは、自動演奏のフラグSTFの値を反転する(ステップG2)。そして、STFが「1(自動演奏)」に反転したか、又は「0(自動演奏停止)」に反転したか判別する(ステップG3)。STFが「0」に反転した場合には、すべての発音を停止するためにオールノートオフ処理を行い(ステップG4)、フラグWFを「0」にリセットし(ステップG5)、タイマインタラプトを禁止状態にする(ステップG6)。そして、メインフローに戻る。
なお、WFは、特定のチャンネルにおける和音パートの発音が開始するまで、他のチャンネルにおけるパートの発音開始を待たせるか否かを決定するためのフラグである。待たせる場合は「1(待ち状態)」にセットされ、待たせない場合は「0」にリセットされる。
【0066】
ステップG3において、STFが「1」に反転した場合には、自動演奏データのスタートアドレスに読み出しのポインタを移動する(ステップG7)。次に、待ち時間をストアするレジスタWTに「0」をストアしてクリアし(ステップG8)、曲メモリの自動演奏データの読み出しを行う(ステップG9)。そして、読み出したデータが何か判別する(ステップG10)。データがタイムである場合には、そのタイムデータをレジスタTにストアして(ステップG11)、タイマインタラプトの禁止状態を解除する(ステップG12)。この後は一定時間経過ごとに図34のタイマインタラプト処理を実行する。そして、メインフローに戻る。タイマインタラプトに応じてWTの値がインクリメントされる。
【0067】
ステップG10における判別結果で、読み出したデータがイベントである場合には、イベントのチャンネルがコードパート用の特定のチャンネルであるか否かを判別する(ステップG13)。特定のチャンネルである場合には、さらにそのイベントがノートイベントであるか否かを判別する(ステップG14)。ステップG13においてイベントのチャンネルが特定のチャンネルでない場合、又は、ステップG14においてイベントがノートイベントでない場合には、そのイベントは和音でないのでMIDIの出力バッファに転送する(ステップG15)。
【0068】
ステップG14においてイベントがノートイベントである場合には、そのイベントがノートオンであるか否かを判別する(ステップG16)。ノートオンである場合には、図37のフローにおいて、フラグWTに「1(待ち状態)」をセットし(ステップG17)、ポインタAPを「0」にセットする(ステップG18)。そして、和音の候補音高をストアするkoho Bufferにおいて、APで指定するKonko(AP)に、ノートオンイベントの音高をストアし(ステップG19)、発音フラグONF(AP)に「0(未発音)」をセットする(ステップG20)。そして、APの値をインクリメントして、koho Bufferの次のエリアを指定する(ステップG21)。次に、曲メモリのアドレスを進める(ステップG22)。
図36のステップG15において、和音以外のイベントをMIDIの出力バッファに転送した後、又は、図36のステップG16において、イベントがノートオンでない場合には、図37のステップG22に移行して、曲メモリのアドレスを進める。
【0069】
図36のステップG1において、スタート/ストップスイッチがオンでない場合には、図38のフローにおいて、フラグSTFが「1(自動演奏)」であるか否かを判別する(ステップG23)。STFが「0(自動演奏停止)」である場合にはこのフローを終了するが、STFが「1」である場合には、タイマインタラプタに応じて増加するレジスタWTの待ち時間が、レジスタSTの設定時間に達したか否かを判別する(ステップG24)。すなわち、和音検出の窓時間として設定した所定時間が経過したか否かを判別する。WTの待ち時間がSTの設定時間に達したときは、フラグWTを「0」にリセットする(ステップG25)。WTをリセットした後、又は、WTの待ち時間がSTの設定時間に達しない場合には、Tの値が「0」になったか否かを判別する(ステップG26)。Tの値がまだ「0」でないときは、メインフローに戻るが、Tの値が「0」になったときは、曲メモリのアドレスを進める(ステップG27)。そして、そのアドレスのエリアにデータがあるかないか否かを判別する(ステップG28)。データがない場合には、STFを「0(自動演奏停止)」にリセットする(ステップG29)。そして、図36のステップG4に移行してオールノートオフの処理を行い、WFを「0」にリセットし(ステップG5)、タイマインタラプトを禁止して(ステップG6)、メインフローに戻る。
【0070】
図38のステップG28の判別結果、指定したアドレスのエリアにデータがある場合には、図39のフローにおいて、データを読み出し(ステップG30)、そのデータは何か判別する(ステップG31)。データがタイムである場合には、レジスタTにそのタイムデータをストアして(ステップG32)、メインフローに戻る。
データがイベントである場合には、そのデータのチャンネルがコードパート用の特定のチャンネルであるか否かを判別する(ステップG33)。特定のチャンネルである場合には、そのイベントがノートイベントであるか否かを判別する(ステップG34)。
ステップG33において、データのチャンネルが特定のチャンネルでない場合、又は、ステップG34において、イベントがノートイベントでない場合には、和音以外のそのイベントをMIDIの出力バッファに転送する(ステップG35)。イベントがノートイベントである場合には、そのノートイベントがノートオンであるか否かを判別する(ステップG36)。
【0071】
ノートイベントがノートオンである場合には、フラグWFが「0」であるか否かを判別する(ステップG37)。WFが「0」である場合は、前回の和音処理が終了し、新たなノートオンによって次の和音処理が開始するので、WFを「1」にセットして(ステップG38)、koho Bufferをクリアする(ステップG39)。そして、ポインタAPを「0」のセットして(ステップG40)、候補音高のエリアKonko(AP)にノートオンイベントの音高をストアして(ステップG41)、発音フラグONF(AP)を「0(未発音)」にセットする(ステップG42)。次に、ポインタPを「0」にセットし(ステップG43)、レジスタWTに「0」をストアしてクリアする(ステップG44)。
【0072】
ステップG37において、WFがすでに「1」である場合には、現在の和音処理が継続している待ち状態であるので、ポインタAPをインクリメントして、koho Bufferの次のエリアを指定する(ステップG45)。このときAPの値が「6」未満であるか否かを判別する(ステップG46)。すなわち、koho Bufferに空きエリアがあるか否かを判別する。APの値が「6」未満である場合には、Konko(AP)にノートオンイベントの音高をストアして(ステップG47)、発音フラグONF(AP)を「0(未発音)」にセットする(ステップG48)。
【0073】
ステップG35において和音以外のイベントを出力バッファに転送した後、ステップG36においてノートイベントがノートオンでない場合、ステップG44においてWTに「0」をストアした後、ステップG46においてAPの値が「6」以上でkoho Bufferに空きエリアがない場合、又は、ステップGにおいてONF(AP)を「0」にセットした後は、図38のフローのステップG27に移行して、曲メモリのアドレスを進める。
【0074】
図40は、メインフローにおけるステップE5の発音処理のフローチャートである。このフローに入ると、イベントの出力タイミングになったか否かを判別し(ステップH1)、出力タイミングになったときは、MIDIの出力バッファ内にイベントがあるか否かを判別する(ステップH2)。まだ出力タイミングになっていない場合、又は、出力バッファにイベントがない場合には、メインフローに戻る。
【0075】
出力バッファにイベントがある場合には、そのイベントを指定する(ステップH3)。次に、指定したイベントのチャンネルがコードパート用の特定のチャンネルでないか否かを判別する(ステップH4)。すなわち、指定したイベントが和音の音高でないか否かを判別する。指定イベントが特定のチャンネルでない場合には、出力バッファ内でSTに設定した時間が経過したか否かを判別する(ステップH5)。STに設定した時間が経過したときは、和音以外のそのイベントを音源に転送する(ステップH6)。ステップH4において、指定イベントのチャンネルが特定のチャンネルである場合にも、その指定イベントを音源に転送する(ステップH6)。特定のチャンネルの指定イベント又は他のチャンネルの指定イベントを音源に転送した後は、その指定イベントを消去する(ステップH7)。
【0076】
イベントを消去した後、又は、ステップH5において、出力バッファ内でSTに設定した時間が経過していないときは、出力バッファのイベントをすべて指定したか否かを判別する(ステップH8)。まだ指定していないイベントが残っている場合には、ステップH3に移行して、次のイベントを指定する。
ステップH8において、出力バッファのイベントをすべて指定した場合には、メインフローに戻る。
【0077】
以上のように、この第3の実施形態によれば、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートにおいて、予め設定されている窓時間が経過するごとに、その窓時間内における最初のノートオンのイベントから最後のノートオンのイベントまでの音高を候補音高として設定する。したがって、スタンダードMIDIファイルのように、イベントデータの中にコードデータを持たない場合であっても、演奏のタイミングだけで自然な感じの演奏が実現できるとともに、演奏者の和音演奏やアルペジオ演奏が反映できる。
【0078】
また、この場合において、特定のパートにおいて指定された音高の発音開始時間まで、他のパートの音高の発音開始時間を遅延させる。したがって、メロディパートなどの他のパートの発音タイミングと、和音のパートの発音タイミングにずれが生じるのを防止できる。
【0079】
次に、第4の実施形態における楽音演奏装置の動作について、図41ないし図43に基づいて説明する。この第4の実施形態においては、自動演奏処理の一部の動作が第3の実施形態と異なる。したがって、重複する動作の説明は省略して、第3の実施形態のフローチャートを援用しながら、異なる部分の動作のみを説明する。
【0080】
図36の自動演奏処理のステップG1において、スタート/ストップスイッチがオンでない場合には、第3の実施形態では、図41ないし図43のフローを実行する。
図41のフローにおいて、フラグSTFが「1(自動演奏)」であるか否かを判別する(ステップG51)。STFが「0(自動演奏停止)」である場合にはこのフローを終了するが、STFが「1」である場合には、レジスタWTの待ち時間がレジスタSTの設定時間に達したか否かを判別する(ステップG52)。すなわち、和音検出の窓時間として設定した所定時間が経過したか否かを判別する。WTの待ち時間がSTの設定時間に達したときは、フラグWTを「0」にリセットする(ステップG53)。次に、WTの待ち時間が、STの設定時間からさらに4拍分の時間を加算した時間に達したか否かを判別する(ステップG54)。4拍分の時間は休符の時間である。WTの待ち時間がこの加算した時間に達したときは、koho Bufferをクリアする(ステップG55)。すなわち、ノートオンによって候補音高に設定した音高がこの加算した時間に達したときも、ノートオフに変化しない場合には、すべての候補音高を削除する。
【0081】
koho Bufferをクリアした後、又は、WTの待ち時間がSTの設定時間に達しない場合、若しくは、WTの待ち時間が加算した時間に達しない場合には、Tの値が「0」になったか否かを判別する(ステップG56)。Tの値がまだ「0」でないときは、メインフローに戻るが、Tの値が「0」になったときは、曲メモリのアドレスを進める(ステップG57)。そして、そのアドレスのエリアにデータがあるかないかを判別する(ステップG58)。データがない場合には、STFを「0(自動演奏停止)」にリセットする(ステップG59)。
【0082】
そのアドレスのエリアにデータがある場合には、図42のフローにおいて、データを読出し(ステップG60)、そのデータは何か判別する(ステップG61)。データがタイムである場合には、レジスタTにそのタイムデータをストアして(ステップG62)、メインフローに戻る。
データがイベントである場合には、そのデータのチャンネルがコードパート用の特定のチャンネルであるか否かを判別する(ステップG63)。特定のチャンネルである場合には、そのイベントがノートイベントであるか否かを判別する(ステップG64)。
【0083】
ステップG63において、データのチャンネルが特定のチャンネルでない場合、又は、ステップG64において、イベントがノートイベントでない場合には、そのイベントをMIDIの出力バッファに転送する(ステップG65)。イベントがノートイベントである場合には、そのノートイベントがノートオンであるか否かを判別する(ステップG66)。
ノートオンである場合には、フラグWFが「0」であるか否かを判別する(ステップG67)。WFが「0」である場合は、前回の窓時間における和音処理が終了しているので、次の窓時間における和音処理のために、WFを「1」にセットする(ステップG68)。
【0084】
次に、ポインタAPを「0」にセットして(ステップG69)、候補音高であるKonko(AP)が、Any Key Bufferの指定音高Sonko(0)〜(9)に存在するか又はしないかを判別する(ステップG70)。Konko(AP)がSonko(0)〜(9)に存在する場合、すなわち、Konko(AP)の音高が発音中である場合には、APをインクリメントして次のSonko(AP)を指定する(ステップG72)。このとき、APの値が「6」に達したか否かを判別する(ステップG73)。APの値が「5」以下である場合には、ステップG70において、Konko(AP)がSonko(0)〜(9)に存在するか又は存在しないかを判別する。
【0085】
ステップG73において、APの値が「6」に達したときは、図43のフローにおいて、ポインタAPを「0」にセットして(ステップG74)、Konko(AP)がNODATA(空き)であるか否かを判別する(ステップG75)。Konko(AP)がNODATAでなくデータがある場合には、APの値をインクリメントして、次のKonko(AP)を指定する(ステップG76)。このとき、APの値が「6」に達したか否かを判別する(ステップG77)。
APの値が「5」以下である場合、又は、図42のステップG67においてWFが「1」である場合には、ステップG75において、Konko(AP)がNODATAであるか否かを判別する。
Konko(AP)がNODATAである場合には、発音フラグONF(AP)を「0」にリセットして(ステップG79)、APの値をインクリメントする(ステップG80)。
【0086】
ステップG65において和音以外のイベントを出力バッファに転送した後は、図41のフローのステップG57に移行して、曲メモリのアドレスを進める。また、ステップG66においてノートイベントがノートオンでない場合、ステップG77においてAPの値が「6」以上でkoho Bufferに空きエリアがない場合、又は、ステップG80においてAPをインクリメントした後も、図41のフローのステップG57に移行して、曲メモリのアドレスを進める。
【0087】
以上のように、この第4の実施形態によれば、窓時間が経過した後にさらに4拍の時間が経過したときは、設定中のすべての候補音高を消去する。したがって、自動演奏曲の途中に長い休符が入る場合でも、休符の前に設定された和音のイベントが休符の後にある別の和音のイベントに混入するのを防止できる。
【0088】
なお、この第4の実施形態において、窓時間内に発音した音高が、窓時間が経過した後でも継続する場合があるが、窓時間の経過に応じてその音高が消去されるのを防ぐために、RAM4のAny Key Bufferに、ノートオフのイベントが入力されたか否かを判別する消音フラグのエリアを設けて、窓時間の経過後にノートオフのイベントが入力されたときに、そのノートオフの音高を消去する構成にしてもよい。
【0089】
また、上記各実施形態においては、図1のROM3に記憶されている楽音演奏処理のプログラムをCPU1によって実行する楽音演奏装置について説明したが、FD(フレキシブルディスク)、CD−ROMなどの外部記憶媒体に記憶されている楽音演奏処理のプログラムや、インターネットなどの通信網を介してダウンロードされる楽音演奏処理のプログラムを、パソコンなどの汎用の情報処理装置にインストールして実行することも可能である。この場合には、下記に記載するように、楽音演奏処理のプログラムの発明を構成する。
【0090】
すなわち、本発明の楽音演奏処理のプログラムは、コードデータによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲においてコードデータに基づいて変換した複数の音高を候補音高として設定する第1のステップと、複数の操作子の中で少なくとも1つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第2のステップとを有する。したがって、演奏のタイミングだけで自動演奏を行う場合であっても、自然な感じの演奏が実現できるとともに、演奏者の和音演奏やアルペジオ演奏が反映できる。
【0091】
また、本発明の楽音演奏処理のプログラムは、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において予め設定されている和音認定のための所定時間が経過するごとにその所定時間内の特定のパートにおける最初のノートオンのイベントから最後のノートオンのイベントまでを候補音高として設定する第1のステップと、複数の操作子の中で少なくとも1つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第2のステップとを有する。したがって、スタンダードMIDIファイルのように、イベントデータの中にコードデータを持たない場合であっても、発音開始時間とイベントとで構成されている和音を容易に認識して自動演奏ができる。
【0092】
また、上記各実施形態においては、操作子としての鍵盤を有する電子鍵盤楽器を例に採って本発明の楽音演奏装置を説明したが、操作子としては鍵盤に限定するものではない。例えば、弦を操作子とする電子弦楽器やその他和音を発生する電子楽器などの楽音演奏装置にも本発明を適用することができる。
【0093】
【発明の効果】
本発明によれば、コードデータによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲においてコードデータに基づいて変換した複数の音高を候補音高として設定して、複数の操作子の中で少なくとも1つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する。したがって、演奏のタイミングだけで自動演奏を行う場合であっても、演奏者の和音演奏やアルペジオ演奏が反映できるとともに、自然な感じの演奏が実現できる。
【0094】
また、本発明によれば、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において予め設定されている和音認定のための所定時間が経過するごとにその所定時間内の特定のパートにおける最初のノートオンのイベントから最後のノートオンのイベントまでを候補音高として設定して、複数の操作子の中で少なくとも1つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する。したがって、スタンダードMIDIファイルのように、イベントデータの中にコードデータを持たない場合であっても、発音開始時間とイベントとで構成されている和音を容易に認識して自動演奏ができる。
【図面の簡単な説明】
【図1】各実施形態における楽音演奏装置のシステム構成を示すブロック図。
【図2】第1の実施形態におけるRAMのメモリマップを示す図。
【図3】第1および第2の実施形態におけるCPUのメインフローチャート。
【図4】第1および第2の実施形態におけるタイマインタラプトのフローチャート。
【図5】第1および第2の実施形態における自動演奏処理のフローチャート。
【図6】図5に続く自動演奏処理のフローチャート。
【図7】図5に続く自動演奏処理のフローチャート。
【図8】図7に続く自動演奏処理のフローチャート。
【図9】第1および第2の実施形態における鍵盤処理のフローチャート。
【図10】図9に続く鍵盤処理のフローチャート。
【図11】図10に続く鍵盤処理のフローチャート。
【図12】図9に続く鍵盤処理のフローチャート。
【図13】第1の実施形態におけるキー検出処理のフローチャート。
【図14】第1の実施形態におけるノート生成処理(1)のフローチャート。
【図15】第1の実施形態におけるノート生成処理(2)のフローチャート。
【図16】第1の実施形態におけるAny Key Buffer入力処理(1)のフローチャート。
【図17】第1の実施形態におけるAny Key Buffer入力処理(2)のフローチャート。
【図18】第1および第2の実施形態におけるオクターブアップ処理のフローチャート。
【図19】第1および第2の実施形態におけるオクターブダウン処理のフローチャート。
【図20】第1および第2の実施形態におけるLast Buffer入力処理(1)のフローチャート。
【図21】第1および第2の実施形態におけるLast Buffer入力処理(2)のフローチャート。
【図22】第1の実施形態におけるノート生成処理(3)のフローチャート。
【図23】第1の実施形態におけるAny Key Buffer消去処理のフローチャート。
【図24】図3のメインフローチャートにおける発音処理のフローチャート。
【図25】第2の実施形態におけるRAMのメモリマップを示す図。
【図26】第2の実施形態におけるキー検出処理のフローチャート。
【図27】第2の実施形態におけるノート生成処理(1)のフローチャート。
【図28】第2の実施形態におけるノート生成処理(2)のフローチャート。
【図29】第2の実施形態におけるAny Key Buffer入力処理(1)のフローチャート。
【図30】第2の実施形態におけるAny Key Buffer入力処理(2)のフローチャート。
【図31】第2の実施形態におけるノート生成処理(3)のフローチャート。
【図32】第2の実施形態におけるAny Key Buffer消去処理のフローチャート。
【図33】第3および第4の実施形態におけるCPU1のメインフローチャート。
【図34】第3および第4の実施形態におけるタイマインタラプトのフローチャート。
【図35】第3および第4の実施形態における和音窓時間設定処理のフローチャート。
【図36】第3の実施形態における自動演奏処理のフローチャート。
【図37】図36に続く自動演奏処理のフローチャート。
【図38】図36に続く自動演奏処理のフローチャート。
【図39】図38に続く自動演奏処理のフローチャート。
【図40】第3および第4の実施形態における発音処理のフローチャート。
【図41】第4の実施形態における自動演奏処理の一部のフローチャート。
【図42】第4の実施形態における自動演奏処理の一部のフローチャート。
【図43】第4の実施形態における自動演奏処理の一部のフローチャート。
【符号の説明】
1 CPU
3 ROM
4 RAM
5 曲メモリ
6 鍵盤
7 スイッチ部
8 音源
9 発音回路

Claims (11)

  1. 演奏を行うための複数の操作子と、
    和音の楽音データを有する特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において前記特定のパートにおける複数の音高を発音の候補音高として設定する候補音高設定手段と、
    少なくとも1つの操作子の演奏結果に基づいて前記候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する発音音高指定手段と、
    を備えた楽音演奏装置。
  2. 前記候補音高設定手段は、前記特定のパートにおけるコードデータに基づいて変換した複数の音高を前記候補音高として設定することを特徴とする請求項1記載の楽音演奏装置。
  3. 前記発音音高指定手段は、前記候補音高の中から未発音の音高を選択することを特徴とする請求項1記載の楽音演奏装置。
  4. 前記発音音高指定手段は、今回操作された操作子に対応する音高が前回操作された操作子に対応する音高より高い場合又は低い場合に応じて、前回指定した音高よりも高い未発音の音高又は低い未発音の音高を前記候補音高の中から選択することを特徴とする請求項3記載の楽音演奏装置。
  5. 前記発音音高指定手段は、前記候補音高の中に未発音の音高がない場合には、今回操作された操作子に対応する音高が前回操作された操作子に対応する音高より高い場合又は低い場合に応じて、すでに選択した音高を1オクターブアップ又は1オクターブダウンする修正を行なって発音すべき音高として指定することを特徴とする請求項4記載の楽音演奏装置。
  6. 前記発音音高指定手段は、予め設定された基準のオクターブと操作子の演奏位置のオクターブとが異なる場合には、前記基準のオクターブと前記演奏位置のオクターブとのオクターブ差に応じて、前記候補音高の中から選択した音高のオクターブを修正して発音すべき音高として指定することを特徴とする請求項1記載の楽音演奏装置。
  7. 前記候補音高設定手段は、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートにおいて、予め設定されている和音認定のための所定時間が経過するごとにその所定時間内における最初のノートオンのイベントから最後のノートオンのイベントまでの音高を候補音高として設定することを特徴とする請求項1記載の楽音演奏装置。
  8. 前記発音音高指定手段によって指定された音高の発音開始時間まで他のパートの音高の発音開始時間を遅延させる発音遅延手段をさらに備えたことを特徴とする請求項7記載の楽音演奏装置。
  9. 前記候補音高設定手段は、前記和音認定のための所定時間が経過した後にさらに所定時間が経過したときは設定中のすべての候補音高を消去することを特徴とする請求項7記載の楽音演奏装置。
  10. コードデータによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において前記コードデータに基づいて変換した複数の音高を候補音高として設定する第1のステップと、
    複数の操作子の中で少なくとも1つの操作子の演奏結果に基づいて前記候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第2のステップと、
    を有する楽音演奏処理のプログラム。
  11. コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において予め設定されている和音認定のための所定時間が経過するごとにその所定時間内の特定のパートにおける最初のノートオンのイベントから最後のノートオンのイベントまでを候補音高として設定する第1のステップと、
    複数の操作子の中で少なくとも1つの操作子の演奏結果に基づいて前記候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第2のステップと、
    を有する楽音演奏処理のプログラム。
JP2002347323A 2002-11-29 2002-11-29 楽音演奏装置および楽音演奏処理のプログラム Expired - Fee Related JP4158502B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002347323A JP4158502B2 (ja) 2002-11-29 2002-11-29 楽音演奏装置および楽音演奏処理のプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002347323A JP4158502B2 (ja) 2002-11-29 2002-11-29 楽音演奏装置および楽音演奏処理のプログラム

Publications (3)

Publication Number Publication Date
JP2004177893A true JP2004177893A (ja) 2004-06-24
JP2004177893A5 JP2004177893A5 (ja) 2005-10-27
JP4158502B2 JP4158502B2 (ja) 2008-10-01

Family

ID=32707963

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002347323A Expired - Fee Related JP4158502B2 (ja) 2002-11-29 2002-11-29 楽音演奏装置および楽音演奏処理のプログラム

Country Status (1)

Country Link
JP (1) JP4158502B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007334065A (ja) * 2006-06-15 2007-12-27 Casio Comput Co Ltd 演奏装置およびプログラム
JP2011033752A (ja) * 2009-07-31 2011-02-17 Casio Computer Co Ltd 演奏教習装置および演奏教習プログラム
JP2011039223A (ja) * 2009-08-10 2011-02-24 Casio Computer Co Ltd 演奏教習装置および演奏教習プログラム
JP2021026141A (ja) * 2019-08-07 2021-02-22 株式会社河合楽器製作所 コード検出装置及びコード検出プログラム

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007334065A (ja) * 2006-06-15 2007-12-27 Casio Comput Co Ltd 演奏装置およびプログラム
JP4556915B2 (ja) * 2006-06-15 2010-10-06 カシオ計算機株式会社 演奏装置およびプログラム
JP2011033752A (ja) * 2009-07-31 2011-02-17 Casio Computer Co Ltd 演奏教習装置および演奏教習プログラム
JP2011039223A (ja) * 2009-08-10 2011-02-24 Casio Computer Co Ltd 演奏教習装置および演奏教習プログラム
JP2021026141A (ja) * 2019-08-07 2021-02-22 株式会社河合楽器製作所 コード検出装置及びコード検出プログラム
JP7425558B2 (ja) 2019-08-07 2024-01-31 株式会社河合楽器製作所 コード検出装置及びコード検出プログラム

Also Published As

Publication number Publication date
JP4158502B2 (ja) 2008-10-01

Similar Documents

Publication Publication Date Title
CN108630176B (zh) 电子管乐器及其控制方法以及记录介质
JP2009145696A (ja) 楽音発生装置、及びプログラム
US8053658B2 (en) Electronic musical instrument using on-on note times to determine an attack rate
US8729377B2 (en) Generating tones with a vibrato effect
JP4158502B2 (ja) 楽音演奏装置および楽音演奏処理のプログラム
JP3844286B2 (ja) 電子楽器の自動伴奏装置
JPH0627960A (ja) 自動伴奏装置
US8759660B2 (en) Electronic musical instrument
US9214145B2 (en) Electronic musical instrument to generate musical tones to imitate a stringed instrument
JP4978177B2 (ja) 演奏装置、演奏実現方法およびプログラム
JP4268920B2 (ja) 電子楽器
JPH03242697A (ja) 電子楽器
JP5470728B2 (ja) 演奏制御装置及び演奏制御処理のプログラム
US8878046B2 (en) Adjusting a level at which to generate a new tone with a current generated tone
JP4172335B2 (ja) 自動伴奏生成装置及びプログラム
JP2009230610A (ja) 命令処理装置及び命令処理方法。
JP3156284B2 (ja) 電子楽器
JPH06337674A (ja) 電子楽器の自動演奏装置
JP2760346B2 (ja) 電子楽器システム
JP3123521B2 (ja) 電子楽器
JPH09106284A (ja) 和音発生指示装置
JP3241813B2 (ja) 演奏情報処理装置
JP2002162964A (ja) 自動演奏装置
JP2595796B2 (ja) 電子楽器
JP2005010458A (ja) 自動アルペジオ装置および同装置に適用されるコンピュータプログラム

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050825

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050825

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20060208

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20060406

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20071227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080115

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080125

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080519

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080624

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080707

R150 Certificate of patent or registration of utility model

Ref document number: 4158502

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110725

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110725

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120725

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120725

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130725

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees