(57)【特許請求の範囲】
【請求項１】
鍵盤部の押鍵・離鍵に対応する楽音のオン状態及びオフ状態を表わすイベントデータを入力する入力手段と、
表示するイベントデータの音高範囲の上限と下限との差分が定められている表示手段に対して、前記入力手段から入力されたイベントデータを制御指令に応じて出力するデータ出力手段と、
所定の音高範囲にオン状態のイベントデータが少なくとも１つあるときは当該所定の音高範囲の入力イベントデータを出力する制御指令を前記データ出力手段に与え、前記所定の音高範囲のイベントデータがすべてオフ状態であるときは前記所定の音高範囲外におけるオン状態の入力イベントデータを含む新たな音高範囲を設定して当該新たな音高範囲の入力イベントデータを出力する制御指令を前記データ出力手段に与え、前記入力イベントデータが黒鍵の押鍵に対応する場合には、臨時記号のデータを出力する制御指令を前記データ出力手段に与えるとともに、前記入力イベントデータが黒鍵及び白鍵の押鍵に共通した同一音符を表示する場合には、当該黒鍵の押鍵に対応する臨時記号を点滅させる表示制御指令を前記データ出力手段に与える表示制御手段と、
備えたことを特徴とする楽音表示制御装置。
【請求項２】
鍵盤部の押鍵・離鍵に対応する楽音のオン状態及びオフ状態を表わすイベントデータの入力に応答して、表示するイベントデータの音高範囲の上限と下限との差分が定められている表示手段に対して楽音のイベントデータを出力する際は、所定の音高範囲にオン状態のイベントデータが少なくとも１つあるときは当該所定の音高範囲の入力イベントデータを出力し、前記所定の音高範囲のイベントデータがすべてオフ状態であるときは前記所定の音高範囲外におけるオン状態の入力イベントデータを含む新たな音高範囲を設定して当該新たな音高範囲の入力イベントデータを出力し、前記入力イベントデータが黒鍵の押鍵に対応する場合には、臨時記号のデータを出力するとともに、前記入力イベントデータが黒鍵及び白鍵の押鍵に共通した同一音符を表示する場合には、当該黒鍵の押鍵に対応する臨時記号を点滅させることを特徴とする楽音表示制御方法。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
この発明は、楽音データの音高の表示を制御する楽音表示制御装置及びその制御方法に関する。
【０００２】
【従来の技術】
従来の楽音表示制御装置及びその制御方法において、鍵盤情報、内蔵楽音データ、ＭＩＤＩの外部楽音データ等のイベントデータに対応して、音高位置を表示できる表示装置付きのものが知られている。この場合、表示装置の初期画面に５線譜や音記号等を表示させ、押鍵等によって入力された１つのイベントデータすなわちモノフォニックの音符や臨時記号である＃及び♭をその５線譜上に表示させる。通常、このような楽音表示制御装置においては、安価で小型であることが要求されているため、イベントデータの音高位置を表示する表示装置の音高範囲を広くすることが困難である。このため、最新の楽音データの音高位置に応じて音高範囲をオクターブ単位でシフトさせて表示する技術が提案されている。
また、液晶表示装置の場合には、音符及び黒鍵の音高表示のための＃、♭の臨時記号を表示するセグメントが設けられている。黒鍵は隣接する両側の白鍵と半音差であるので、半音低い白鍵の音高に＃の臨時記号を付けて表すか、又は半音高い白鍵に♭の臨時記号を付けて表す。このため、各黒鍵の音高ごとに＃、♭の２つの臨時記号用のセグメントが設けられている。
【０００３】
【発明が解決しようとする課題】
ところで最近は、音域の異なる複数の音色の楽音、和音とメロディ音からなる楽音等のように、複数の音高すなわちポリフォニックのイベントデータを処理することが多くなっている。しかしながら、従来の楽音表示制御装置及びその制御方法においては、モノフォニックの音符や臨時記号を最新の入力イベントデータに応じてその音高位置を表示する構成になっているので、ポリフォニックの音高位置を表示する際に、あらかじめ設定した音高範囲内の音高位置と音高範囲外の音高位置を適切に表示することができないという問題があった。
【０００４】
例えば、音高範囲をオクターブ単位でシフトさせて表示する場合には、あらかじめ設定した音高範囲の上限又は下限の近傍でイベントデータの音高が変化すると、そのたびに音高範囲のシフトが頻繁に行われる。このため、シフトによって消去されるオクターブと追加されるオクターブの両方に音高をもつイベントデータの場合には、押鍵操作のわずかなタイミングでシフト方向が変化する。
【０００５】
一方、あらかじめ設定した音高範囲内の音高位置のみを表示して、音高範囲外の音高位置は表示しない構成にした場合には、イベントデータのすべてあるいはその大部分の音高が音高範囲外になったときに、表示画面にはまったく音高位置が表示されないか、あるいはわずかしか音高位置が表示されない。
【０００６】
この発明の課題は、音高範囲のシフトを頻繁に行うことなく、設定した所定の音高範囲内の音高位置と音高範囲外の音高位置を適切に表示できるようにすることである。
【０００７】
【課題を解決するための手段】
この発明は、上記課題を解決するために、鍵盤情報、内蔵楽音データ、ＭＩＤＩの外部楽音データ等の、鍵盤部の押鍵・離鍵に対応する楽音のオン状態及びオフ状態を表わすイベントデータを入力する入力手段と、表示するイベントデータの音高範囲の上限と下限との差分、すなわち相対的な音高範囲が定められている表示手段に対して、入力手段から入力されたイベントデータを出力するデータ出力手段と、このデータ出力手段に制御指令を与える表示制御手段とを備えている。
表示制御手段は、曲の主要な音高範囲としてあらかじめ設定された所定の音高範囲に、オン状態のイベントデータが少なくとも１つあるときは、音高範囲のシフトは行わず、所定の音高範囲の入力イベントデータを出力する制御指令をデータ出力手段に与える。一方、所定の音高範囲のイベントデータがすべてオフ状態であるときは、所定の音高範囲外におけるオン状態の入力イベントデータを含む新たな音高範囲にシフトして、新たな音高範囲の入力イベントデータを出力する制御指令をデータ出力手段に与える。さらに、前記入力イベントデータが黒鍵の押鍵に対応する場合には、臨時記号のデータを出力する制御指令を前記データ出力手段に与えるとともに、前記入力イベントデータが黒鍵及び白鍵の押鍵に共通した同一音符を表示する場合には、当該黒鍵の押鍵に対応する臨時記号を点滅させる表示制御指令を前記データ出力手段に与える。
【０００８】
したがってこの発明によれば、主要な音高範囲にオン状態のイベントデータが存在する場合には音高範囲をシフトせず、主要な音高範囲から外れた例外的なイベントデータについては表示しない。一方、主要な音高範囲のイベントデータがすべてオフ状態になったときは、音高範囲をシフトして例外的なイベントデータを表示する。
【０００９】
【発明の実施の形態】
以下、図１〜図７を参照してこの発明の第１実施形態を説明する。
図１は、第１実施形態における楽音表示制御装置のシステム構成を示すブロック図である。ＣＰＵ１は、システムバス２を介して接続された以下の各部を制御する。鍵盤部３は、ユーザの押鍵・離鍵の演奏操作により、音高その他の鍵盤情報であるイベントを入力する。押鍵検出回路４は、ＣＰＵ１の検索走査により押鍵イベント・離鍵イベントを検出してそのイベントデータをＣＰＵ１に入力する。スイッチ群５は、ユーザの操作により音量、音色、オクターブ切換、その他の設定データを入力する。スイッチ検出回路６は、ＣＰＵ１の検索走査によりスイッチ群５からの入力を検出してＣＰＵ１に入力する。
【００１０】
プログラムＲＯＭ７は、ＣＰＵ１が実行するプログラムを記憶している。ワークＲＡＭ８は、ＣＰＵ１に入力されたイベントデータＫＣｎを記憶するデータエリア、ポインタｎ、表示する音高範囲を設定するレジスタＷ、５つのフラグＬＦ〜ＤＦからなるエリア８ａを備えている。データＲＯＭ９は、自動演奏のための内蔵楽音データやイニシャライズのためのデフォルトデータを記憶している。表示部１０は、図には示さないが液晶表示装置及び表示ドライブ回路からなり、入力されたイベントデータの音高を表示する。ただし、この表示部１０は、表示するイベントデータの音高範囲の上限と下限との差分が４オクターブに定められている。楽音発生回路１１は、ＣＰＵ１から与えられる楽音データに応じて楽音信号を発生してＤ／Ａコンバータ１２に供給する。Ｄ／Ａコンバータ１２は、この楽音信号をディジタル信号からアナログ信号に変換し、電力増幅回路１３を介してスピーカ１４に供給して発音させる。シリアルインタフェース１５は、外部機器との間でＭＩＤＩのイベントデータを送受信する。
【００１１】
図１の構成において、楽音のイベントデータを入力する入力手段としては、押鍵イベント及び離鍵イベントを入力する鍵盤部３や押鍵検出回路４の他に、ＭＩＤＩのイベントデータを入力するシリアルインタフェース１５も含まれるとともに、さらに、自動演奏のための内蔵楽音データを記憶しているデータＲＯＭ９も含まれる。ＣＰＵ１は、表示部１０に対して入力されたイベントデータを制御指令に応じて出力するデータ出力手段の機能と、その制御指令をデータ出力手段の機能に与える表示制御手段の機能をもつが、これについては後述する。
【００１２】
次に、第１実施形態の動作について、図２〜図６のフローを参照して説明する。図２は、ＣＰＵ１のメインフローであり、ステップＳ１において所定のイニシャライズ処理の後、データ入力処理（ステップＳ２）、データ判別処理（ステップＳ３）、表示処理（ステップＳ４）を繰り返すループ処理を実行する。
【００１３】
図２のステップＳ１のイニシャライズ処理では、ワークＲＡＭ８のデータエリア、ポインタｎ、各種フラグＬＦ〜ＤＦをクリアするとともに、レジスタＷにイベントデータの音高を表示する所定の音高範囲をセットする。所定の音高範囲は、曲の主要な音高範囲としてスイッチ群５からの演奏者の設定で決定される。以下、この音高範囲をデフォルトの音高範囲とする。この場合、表示可能な相対的な音高範囲は４オクターブであり、デフォルトの音高範囲の下限はＣ２上限はＣ６である。また、あらかじめ設定されている固定データを記憶する。固定データとしては鍵盤部３の鍵数Ｎ等がある。
【００１４】
図２のステップＳ２のデータ入力処理は、図３に示すように、ポインタｎを１にセットし（ステップＳ５）、以下のループ処理を繰り返し実行する。すなわち、鍵盤部３を検索し（ステップＳ６）、押鍵・離鍵のイベントデータＫＣｎをワークＲＡＭ８のデータエリアに記憶する（ステップＳ７）。次に、ｎをインクリメントして（ステップＳ８）、ｎが鍵盤部３の鍵数Ｎを超えたか否かを判別する（ステップＳ９）。ｎが鍵数Ｎを超えていない場合には、ステップＳ６に移行してループ処理を繰り返す。そして、ｎがＮを超えた場合すなわちすべての鍵を検索してイベントデータを入力した場合には、図２のメインフローに戻る。
【００１５】
図２のステップＳ３のデータ判別処理は、図４に示すように、ワークＲＡＭ８に記憶したイベントデータが最前に記憶したイベントデータに対して変化したか否かを判別する（ステップＳ１０）。変化がない場合にはメインフローに戻るが、変化があった場合には、変化ありを示すフラグＤＦを１にセットする（ステップＳ１１）。次に、ステップＳ１２に移行して、Ｃ２〜Ｂ２の音高範囲にオン状態のイベントデータがあるか否かを判別する。イベントデータがある場合には、フラグＬＦが１であるか否かを判別し（ステップＳ１３）、ＬＦが１でない場合には１をセットして（ステップＳ１４）、ステップＳ１５に移行する。ステップＳ１３において、ＬＦが１になっている場合には、そのままステップＳ１５に移行する。
【００１６】
一方、ステップＳ１２においてＣ２〜Ｂ２の音高範囲のイベントデータがすべてオフ状態である場合には、フラグＬＦが０であるか否かを判別し（ステップＳ１６）、ＬＦが０でない場合には０をセットして（ステップＳ１７）、ステップＳ１５に移行する。ステップＳ１６において、ＬＦが０になっている場合には、そのままステップＳ１５に移行する。
【００１７】
ステップＳ１５においては、Ｃ３〜Ｃ６の音高範囲にオン状態のイベントデータがあるか否かを判別する。イベントデータがある場合には、フラグＭＦが１であるか否かを判別し（ステップＳ１８）、ＭＦが１でない場合には１をセットして（ステップＳ１９）、ステップＳ２０に移行する。ステップＳ１８において、ＭＦが１になっている場合には、そのままステップＳ２０に移行する。
【００１８】
一方、ステップＳ１５においてＣ３〜Ｃ６の音高範囲のイベントデータがすべてオフ状態である場合には、フラグＭＦが０であるか否かを判別し（ステップＳ２１）、ＭＦが０でない場合には０をセットして（ステップＳ２２）、ステップＳ２０に移行する。ステップＳ２１において、ＭＦが０になっている場合には、そのままステップＳ２０に移行する。
【００１９】
ステップＳ２０においては、Ｃ＃６以上の音高範囲にオン状態のイベントデータがあるか否かを判別する。イベントデータがある場合には、フラグＨＦが１であるか否かを判別し（ステップＳ２３）、ＨＦが１でない場合には１をセットして（ステップＳ２４）、図５のステップＳ２７に移行する。ステップＳ２３において、ＨＦが１になっている場合には、そのまま図５のステップＳ２７に移行する。
【００２０】
一方、ステップＳ２０においてＣ＃６以上の音高範囲のイベントデータがすべてオフ状態である場合には、フラグＨＦが０であるか否かを判別し（ステップＳ２５）、ＨＦが０でない場合には０をセットして（ステップＳ２６）、図５のステップＳ２７に移行する。ステップＳ２５において、ＨＦが０になっている場合には、そのまま図５のステップＳ２７に移行する。
【００２１】
図５のステップＳ２７においては、イベントデータを表示する音高範囲をシフトするか否かを示すフラグＳＦが１であるか否かを判別する。ＳＦが０である場合には、ＬＦが０であるか否かを判別し（ステップＳ２８）、ＬＦが０である場合にはＭＦが０であるか否かを判別する（ステップＳ２９）。ＭＦが０である場合にはＨＦが１であるか否かを判別する（ステップＳ３０）。ＨＦが１である場合にはＳＦを１にセットして（ステップＳ３１）、レジスタＷにイニシャライズ時におけるデフォルトの音高範囲Ｃ２〜Ｃ６より１オクターブ高い音高範囲にシフトアップするために下限Ｃ３上限Ｃ７をセットする（ステップＳ３２）。この後、図２のメインフローに戻る。
ステップＳ２８においてＬＦが０でない場合、ステップＳ２９においてＭＦが０でない場合、ステップＳ３０においてＨＦが１でない場合には、いずれも音高範囲のシフトをすることなく図２のメインフローに戻る。
【００２２】
一方、ステップＳ２７においてＳＦが１である場合には、ＷにはＣ３〜Ｃ７がセットされ、デフォルトの音高範囲Ｃ２〜Ｃ６より１オクターブ高い音高範囲Ｃ３〜Ｃ７にシフトされている。この場合には、ＭＦが０であるか否かを判別し（ステップＳ３３）、ＭＦが０である場合にはＨＦが０であるか否かを判別する（ステップＳ３４）。ＨＦが０である場合にはＳＦを０にセットして（ステップＳ）、デフォルトの音高範囲にシフトダウンするためにＷにＣ２〜Ｃ６をセットする（ステップＳ３６）。この後、図２のメインフローに戻る。
ステップＳ３３においてＭＦが０である場合、ステップＳ３４においてＨＦが０である場合には、いずれも音高範囲のシフトをすることなく図２のフローに戻る。
【００２３】
図２のステップＳ４の表示処理は、図６示すように、ＬＦが０であるか否かを判別し（ステップＳ３７）、ＭＦが０であるか否かを判別し（ステップＳ３８）、ＨＦが０であるか否かを判別し（ステップＳ３９）、これらのフラグがすべて０である場合には、すべてのイベントデータがオフ状態であるので、ＤＦが０であるか否かを判別する（ステップＳ４０）。ＤＦが０である場合は、メインフローにおける前回のループ処理でもすべてのイベントデータがオフ状態で、表示部１０には音高表示がされていないので、そのまま図２のメインフローに戻る。
【００２４】
ステップＳ３７においてＬＦが１である場合、ステップＳ３８においてＭＦが１である場合、ステップＳ３９においてＨＦが１である場合、すなわちイベントデータが１つでもオン状態である場合には、ＤＦが１であるか否かを判別する（ステップＳ４１）。ＤＦが０である場合には、イベントデータがメインフローにおける前回のループ処理と同じ状態であるので、そのまま図２のメインフローに戻る。
【００２５】
ステップＳ４１においてＤＦが１である場合、すなわちイベントデータがメインフローにおける前回のループ処理から変化した場合には、Ｗの音高範囲に基づく音高表示をする（ステップＳ４２）。この場合に、ＳＦが１であるか否かを判別し（ステップＳ４３）、ＳＦが１である場合にはオクターブシフト表示「８ｖａ」をする（ステップＳ４４）。次に、ステップＳ４５においてＤＦを０にリセットして、図２のメインフローに戻る。
なお、音高表示とともに、押鍵イベントに対応する楽音データが楽音発生回路１１から出力されて、スピーカ１４から発音され、離鍵イベントがあったときはそれまでスピーカ１４から発音されていた離鍵イベントに対応する楽音が停止する。
【００２６】
ステップＳ４０においてＤＦが１である場合には、メインフローにおける前回のループ処理ではイベントデータがオン状態で現在その表示がなされており、今回そのすべてのイベントデータがオフ状態になったので、現在表示されている音高を消去する（ステップＳ４６）。この後は、ステップＳ４５に移行してＤＦを０にリセットする。また、ステップＳ４３においてＳＦが０である場合には、オクターブシフト表示「８ｖａ」が表示されているか否かを判別し（ステップＳ４７）、表示されている場合には「８ｖａ」を消去して（ステップＳ４８）、ステップＳ４５に移行してＤＦを０にリセットする。「８ｖａ」が表示されていない場合には、ステップＳ４５に移行してＤＦを０にリセットする。
【００２７】
図７にこの実施形態における５線譜遷移を示す。この図において、状態１は前回のイベントデータがすべてオフ状態であり、音高の表示はされていない。そして、表示する音高範囲はデフォルトのＣ２〜Ｃ６になっている。また、ワークＲＡＭ８のすべてのフラグＬＦ、ＭＦ、ＨＦ、ＳＦ、ＤＦは０にリセットされている。この状態において、Ｃ２〜Ｂ２、Ｃ３〜Ｃ６、Ｃ＃６以上のいずれかの押鍵イベントがあると、状態１から他の状態に遷移する。
【００２８】
例えば、Ｃ３〜Ｃ６の押鍵イベントがあると状態１から状態３に遷移する。この場合のデータ判別処理は、図４のステップＳ１１でＤＦに１をセットし、ステップＳ１９でＭＦを１にセットして図２のメインフローに戻る。また、表示処理では、図６のステップＳ４２でＣ３〜Ｃ６の音高表示をして、ステップＳ４５でＤＦを０にリセットする。したがって、図７の状態３に示すように、Ｃ２〜Ｂ２は表示なし、Ｃ３〜Ｃ６は表示中、Ｃ＃６以上は表示なしとなる。この状態では、ＳＦは０のままであるので音高範囲のシフトアップはされない。
【００２９】
次に、Ｃ＃６以上の押鍵イベントがあると状態３から状態６に遷移する。この場合のデータ判別処理は、図４のステップＳ１１でＤＦに１をセットし、ステップＳ２４でＨＦを１にセットする。また、表示処理では、図６のステップＳ４２でＣ３〜Ｃ６の音高表示をして、ステップＳ４５でＤＦを０にリセットする。したがって、図７の状態６に示すように、Ｃ２〜Ｂ２は表示なし、Ｃ３〜Ｃ６は表示中となる。この状態ではＳＦは０のままであるので音高範囲のシフトアップはせず、Ｃ＃６以上は押鍵イベントがあるにもかかわらず表示されない。
【００３０】
すなわち、この場合には主要な音高範囲Ｃ２〜Ｃ６のイベントデータのオン状態が維持されているので、たとえ、Ｃ＃６以上のイベントデータがオン状態であっても、次の入力イベントでＣ２〜Ｃ６の押鍵イベントの可能性が強いので、音高範囲のシフトアップはされない。したがって、音高範囲のシフトを頻繁に行うことなく、設定した音高範囲内の音高位置を適切に表示できる。
【００３１】
次に、Ｃ３〜Ｃ６のすべてに離鍵イベントがあると状態６から状態１０に遷移する。この場合のデータ判別処理は、図４のステップＳ１１でＤＦに１をセットし、ステップＳ１７でＬＦを０にリセットする。さらに、図５のステップＳ２８〜ステップＳ３０において、ＬＦ＝０、ＭＦ＝０、ＨＦ＝１と判別されるので、ステップＳ３１でＳＦを１にセットし、ステップＳ３２でデフォルトの音高範囲を１オクターブシフトアップするために下限Ｃ３上限Ｃ７をＷにセットする。また、表示処理では、図６のステップＳ４２でＣ＃６の音高表示をして、ステップＳ４５でＤＦを０にリセットする。したがって、図７の状態１０に示すように、Ｃ２〜Ｂ２は表示なし、Ｃ３〜Ｃ６は表示なし、Ｃ＃６以上は表示中となる。
【００３２】
すなわち、この場合には主要な音高範囲Ｃ２〜Ｃ６のイベントデータがすべてオフ状態で、主要な音高範囲外のＣ＃６以上のイベントデータがオン状態であるので、次の入力イベントでＣ３〜Ｃ７の押鍵イベントの可能性があるので、音高範囲のシフトアップをする。したがって、音高範囲のシフトを頻繁に行うことなく、あらかじめ設定した所定の音高範囲外の音高位置を適切に表示できる。
【００３３】
次に、Ｃ２〜Ｂ２の押鍵イベントがあると状態１０から状態１１に遷移する。この場合のデータ判別処理は、図４のステップＳ１１でＤＦに１をセットし、ステップＳ１４でＬＦを１にセットする。また、表示処理では、図６のステップＳ４２でＣ＃６の音高表示をして、ステップＳ４５でＤＦを０にリセットする。したがって、図７の状態１１に示すように、Ｃ３〜Ｃ６は表示なし、Ｃ＃６以上は表示中となる。この状態ではＳＦは１のままであるのでデフォルトの音高範囲へのシフトダウンはせず、Ｃ２〜Ｂ２は押鍵イベントがあるにもかかわらず表示されない。
【００３４】
すなわち、この場合にはシフトアップした音高範囲Ｃ＃Ｃ６のイベントデータがオン状態を維持しているので、次の入力イベントでＣ３〜Ｃ７の押鍵イベントの可能性があるので、音高範囲のシフトダウンはされない。したがって、音高範囲のシフトを頻繁に行うことなく、あらかじめ設定した所定の音高範囲外の音高位置を適切に表示できる。
【００３５】
次に、Ｃ＃６以上のすべてに離鍵イベントがあると状態１１から状態２に遷移する。この場合のデータ判別処理は、図４のステップＳ１１でＤＦに１をセットし、ステップＳ２６でＨＦを０にリセットし、図５のステップＳ３３、ステップＳ３４において、ＭＦ＝０、ＨＦ＝０と判別されて、ステップＳ３５でＳＦを０にリセットする。さらに、ステップＳ３６でＷにシフトダウンしたデフォルトの音高範囲の下限Ｃ２上限Ｃ６をセットする。また、表示処理では、ステップＳ４２でＣ２〜Ｂ２の音高表示をするとともに、ＳＦ＝０であるのでステップＳ４８でオクターブシフト表示を消去する。したがって、図７の状態２に示すように、Ｃ２〜Ｂ２は表示中、Ｃ３〜Ｃ６は表示なし、Ｃ＃６以上は表示なしとなる。さらに「８ｖａ」の表示が消去される。
【００３６】
すなわち、この場合にはシフトアップした音高範囲Ｃ＃６以上のイベントデータがすべてオフ状態になるので、次の入力イベントでＣ２〜Ｃ６の押鍵イベントの可能性が強いので、音高範囲のシフトダウンをする。したがって、音高範囲のシフトを頻繁に行うことなく、あらかじめ設定した所定の音高範囲内の音高位置を適切に表示できる。
【００３７】
このように上記第１実施形態によれば、主要な音高範囲であるＣ２〜Ｃ６にオン状態のイベントデータが存在する場合には音高範囲をシフトアップせず、主要な音高範囲から外れた例外的なＣ＃６以上のイベントデータについては表示しない。一方、主要な音高範囲のイベントデータがすべてオフ状態になったときは、音高範囲を１オクターブシフトアップしてＣ＃６以上のイベントデータを表示する。
したがって、音高範囲のシフトを頻繁に行うことなく、設定した所定の音高範囲内の音高位置と音高範囲外の音高位置を適切に表示できる。
【００３８】
なお、上記第１実施形態においては、デフォルトの主要な音高範囲をＣ２〜Ｃ６とし、条件に応じて１オクターブシフトアップして主要な音高範囲外のＣ＃６のイベントデータを表示する構成にしたが、この構成の他に、条件に応じて１オクターブシフトダウンして主要な音高範囲外のＢ１以下のイベントデータを表示する構成をさらに付加してもよい。また、シフトする単位は２オクターブ以上にしてもよく、あるいは１オクターブ未満でもよい。
【００３９】
次に、この発明の第２実施形態について図８〜図１４を参照して説明する。
第２実施形態におけるシステム構成は、図８に示すように、ワークＲＡＭ８のエリア８ａの他にエリア８ｂが用意されている点、及びプログラムＲＯＭ７のプログラムが若干異なる点を除けば、図１に示す第１実施形態のシステム構成と同じである。したがってその説明は省略する。ワークＲＡＭ８のエリア８ｂには、２つのポインタｍ、ｉ、タイマレジスタＴ、３つのフラグＲＦ、ＴＦ、ＯＦがある。
【００４０】
表示部１０についても、第１実施形態と同じであるが、詳細に説明すると、表示部１０の液晶表示装置（図示せず）には、音符及び＃、♭の臨時記号を表示するためのセグメントが設けられている。この場合、従来の液晶表示装置とは異なり、黒鍵を表示するための臨時記号は、各音高ごとに＃又は♭のいずれか１つの臨時記号用のセグメントが設けられている。したがって、すべてのセグメントをＯＮにすると、図１４（Ａ）に示すようになる。
このため、４オクターブの音高範囲を表示するのに、従来の液晶表示装置より大幅にセグメント数を削減できるとともに、表示ドライブ回路、表示処理プログラムが簡単になり、ワークＲＡＭの容量も少なくてすむ。したがって、楽音表示制御装置のコストを低減する効果がある。
【００４１】
次に、第２実施形態の動作について説明するが、ＣＰＵ１のメインフロー、メインフローにおけるステップＳ１のイニシャライズ処理、ステップＳ２のデータ入力処理については第１実施形態と同じであるので、図面及び説明は省略する。なお、イニシャライズ処理では、ワークＲＡＭ８のデータエリア、ポインタｎ、ｍ、ｉ、各種フラグＬＦ〜ＯＦ及びタイマレジスタＴをクリアするとともに、レジスタＷにイベントデータの音高を表示する所定の音高範囲をセットする。
第１実施形態におけるデータ判別処理で、図４のステップＳ１０から図５のステップＳ３６までの処理については第２実施形態も同じである。したがって、第１実施形態と異なる部分を図９に示すとともに、第１実施形態と同じ部分については説明を省略する。さらに、図１０に示す表示処理についても、第１実施形態と異なる部分を中心に説明する。
【００４２】
図９のステップＳ３２又はステップＳ３６において、ワークＲＡＭレジスタＷに表示する音高範囲の下限と上限をセットした後は、押鍵イベントの白鍵と黒鍵とが半音差で、同一の音符で表示される音高であるか否かを判別する（ステップＳ４９）。同一音符表示である場合には、フラグＲＦが１であるか否かを判別し（ステップＳ５０）、ＲＦが１である場合には図２のメインフローに戻るが、ＲＦが０である場合にはＲＦを１にセットして（ステップＳ５１）、メインフローに戻る。一方、ステップＳ４９において白鍵と黒鍵とが同一音符表示でない場合には、フラグＲＦが０であるか否かを判別し（ステップＳ５２）、ＲＦが０である場合には図２のメインフローに戻るが、ＲＦが１である場合にはＲＦを０にリセットして（ステップＳ５３）、メインフローに戻る。
【００４３】
第２実施形態の表示処理は、図１０に示すように、ステップＳ３７においてＬＦが１である場合、ステップＳ３８においてＭＦが１である場合、ステップＳ３９においてＨＦが１である場合、すなわちイベントデータが１つでもオン状態である場合には、ＲＦが０であるか否かを判別する（ステップＳ５４）。ＲＦが１である場合には、白鍵と黒鍵とが同一音符表示であるので、ＤＦが０でイベントデータがメインフローにおける前回のループ処理と同じ状態である場合でも、表示状態が一定時間Ｍごとに変化する。このため、ＤＦの状態にかかわらずステップＳ５５に移行してＷの音高範囲に基づく音高表示をする。
【００４４】
一方、ステップＳ５４においてＲＦが０である場合には、ステップＳ４１に移行してＤＦが１であるか否かを判別し、ＤＦが１である場合に第１実施形態と同様に、ステップＳ５５に移行してＷの音高範囲に基づく音高表示をする。そして、音高表示とともに、押鍵イベントに対応する楽音データが楽音発生回路１１から出力されて、スピーカ１４から発音され、離鍵イベントの場合にはそれまでスピーカ１４から発音されていた離鍵イベントに対応する楽音が停止する。
【００４５】
第２実施形態におけるＷに基づく音高表示を図１１及び図１２に示す。図１１において、点滅表示を示すフラグＴＦが０（点滅表示なし）か否かを判別する（ステップＳ５６Ａ）。最初はＴＦ＝０であるので、ポインタｍを１にセットして（ステップＳ５６Ｂ）、ｍをインクリメントしながら以下のループ処理を行う。ステップＳ５７において、ＫＣｍは押鍵イベントであるか又は離鍵イベントであるかを判別する。ＫＣｍが押鍵イベントである場合には、音符表示がＯＮであるか否かを判別する（ステップＳ５８）。すなわち、半音違いの他の押鍵イベントの処理によってすでに同一音符がＯＮになっているか否かを判別する。その音符がＯＮでない場合は、ＫＣｍの音符表示をＯＮにする（ステップＳ５９）。
【００４６】
音符表示をＯＮにした後、又はステップＳ５８において音符表示がすでにＯＮになっている場合には、ステップＳ６０に移行して、ＫＣｍが黒鍵であるか否かを判別する。黒鍵である場合にはＫＣｍの臨時記号表示をＯＮにする（ステップＳ６１）。臨時記号表示をＯＮにした後、又はステップＳ６０においてＫＣｍが白鍵である場合には、ステップＳ６２に移行して、ＫＣｍ+1があるか否か、すなわち次のイベントデータがあるか否かを判別する。次のイベントデータがある場合には、ｍをインクリメントして（ステップＳ６３）、ステップＳ５７に移行してループ処理を繰り返す。
【００４７】
例えば、イベントデータがＣ４の押鍵イベントの場合には、白鍵の押鍵イベントであるので、図１１のステップＳ５９でＣ４の音符表示をＯＮにする。したがって、図１４（Ｂ）の左側のような表示になる。一方、イベントデータがＣ＃４の押鍵イベントの場合には、黒鍵の押鍵イベントであるので、図１１のステップＳ５９でＣ４の音符表示をＯＮにするとともに、ステップＳ６１で＃の臨時記号表示をＯＮにする。したがって、図１４（Ｂ）の右側のような表示になる。
【００４８】
ステップＳ５７においてＫＣｍが離鍵イベントである場合には、ＫＣｍは黒鍵であるか否かを判別する（ステップＳ６４）。黒鍵である場合にはＫＣｍの臨時記号表示をＯＦＦにする（ステップＳ６５）。臨時記号表示をＯＦＦにした後、又はステップＳ６４においてＫＣｍが白鍵である場合には、ステップＳ６６に移行して、同一音符の半音違いの押鍵イベントがあるか否かを判別する。同一音符の押鍵イベントがある場合にはその音符表示のＯＮを維持し、同一音符の押鍵イベントがない場合にはその音符表示をＯＦＦにする（ステップＳ６７）。この後、ステップＳ６２に移行してＫＣｍ+1があるか否かを判別する。ステップＳ６６において、同一音符の押鍵イベントがある場合には、ＫＣｍの音符表示のＯＮを維持したままステップＳ６２に移行する。
【００４９】
ステップＳ６２において、ＫＣｍ+1がある場合すなわち次のイベントデータがある場合には、ｍをインクリメントして（ステップＳ６３）、ステップＳ５７に移行してループ処理を繰り返す。ステップＳ６２において、ＫＣｍ+1がない場合には、ステップＳ６８Ａに移行してＲＦが１であるか否かを判別する。ＲＦが０である場合には、白鍵と黒鍵とが同一音符表示となるイベントデータが存在しないので、図１０のステップＳ４３に移行する。一方、ＲＦが１である場合には、白鍵と黒鍵とが同一音符表示となるイベントデータが存在するので、ＴＦに１をセットするとともに、Ｔに点滅の変化する一定時間Ｍ（例えば、１秒）をセットして（ステップＳ６８Ｂ）、図１２に移行する。
【００５０】
図１２のステップＳ６９において、タイマレジスタＴが０であるか否かを判別する。最初はＴ＝０であるので、ステップＳ７０においてポインタｉを１にセットして、フラグＯＦが０であるか否かを判別する（ステップＳ７１）。最初はＯＦは０であるので、図１１のステップＳ６１でＯＮにした臨時記号のうち、白鍵と同一音符表示の黒鍵ＫＣｉの臨時記号表示をＯＦＦにする（ステップＳ７２）。そして、ＫＣｉ+1があるか否か、すなわち白鍵と黒鍵とが同一音符表示となる次のイベントデータがあるか否かを判別する（ステップＳ７３）。次のイベントデータがある場合には、ｉをインクリメントして（ステップＳ７４）、ステップＳ７２に移行してＫＣｉの臨時記号表示をＯＦＦにする。ステップＳ７３において、次のイベントデータがない場合には、ＯＦを１にセットして（ステップＳ７５）、ＴにＭをセットして（ステップＳ７６）、図１０のステップＳ４３に移行する。
【００５１】
次に図１１のＷに基づく音高表示のフローに入ったときには、ＴＦ＝１であるので、ただちに図１２の点滅処理に移行して、タイマレジスタＴが０であるか否かを判別する。Ｔの値は、図１３に示すように、タイマインタラプトが入るごとに（ステップＳ７７）、デクリメントされる（ステップＳ７８）。したがって、図１２のステップＳ６９においてＴが０になっていない場合には、臨時記号表示をＯＦＦにした状態を維持し、図１０のステップＳ４３に移行する。
【００５２】
Ｔ＝０になった場合には、ステップＳ７０においてポインタｉを１にセットして、ＯＦが１であるか否かを判別する（ステップＳ７１）。この場合にはＯＦは１に替わっているので、ステップＳ７２でＯＦＦにしたＫＣｉの臨時記号表示を再びＯＮにする（ステップＳ７９）。そして、ＫＣｉ+1があるか否か、すなわち白鍵と黒鍵とが同一音符表示となる次のイベントデータがあるか否かを判別する（ステップＳ８０）。次のイベントデータがある場合には、ｉをインクリメントして（ステップＳ８１）、ステップＳ７９に移行してＫＣｉの臨時記号表示をＯＮにする。ステップＳ８０において、次のイベントデータがない場合には、ＯＦを０にリセットして（ステップＳ８２）、ＴにＭをセットして（ステップＳ７６）、図１０のステップＳ４３に移行する。
【００５３】
そして、一定時間Ｍごとに白鍵黒鍵の同一音符表示の臨時記号を点滅させる。例えば、イベントデータＣ４及びＣ＃４の音高を同時に表示する場合は、図１１のステップＳ５９でＣ４の音符表示をＯＮにするとともに、ステップＳ６１で＃の臨時記号表示をＯＮにする。そして、一定時間Ｍ経過したら図１２のステップＳ７２で＃をＯＦＦにし、次に一定時間Ｍ経過したらステップＳ７９で＃をＯＮにし、以下、一定時間Ｍごとにこの点滅を繰り返す。したがって、図１４（Ｃ）に示すように、臨時記号＃が一定時間ごとに点滅する。
【００５４】
このように、上記第２実施形態によれば、押鍵イベントの白鍵と黒鍵とが半音違いで同一音符の表示になった場合に、一定時間ごとに臨時記号を点滅させることにより、白鍵の押鍵イベントがあることを容易に認識することができる。
【００５５】
【発明の効果】
この発明によれば、主要な音高範囲にオン状態のイベントデータが存在する場合には音高範囲をシフトせず、主要な音高範囲から外れた例外的なイベントデータについては表示しない。一方、主要な音高範囲のイベントデータがすべてオフ状態になったときは、音高範囲をシフトしてそのイベントデータを表示するので、音高範囲のシフトを頻繁に行うことなく、設定した所定の音高範囲内の音高位置と音高範囲外の音高位置を適切に表示できる。
【図面の簡単な説明】
【図１】第１実施形態のシステム構成を示すブロック図。
【図２】第１実施形態におけるＣＰＵのメインフローチャート。
【図３】図２のデータ入力処理のフローチャート。
【図４】図２のデータ判別処理のフローチャート。
【図５】図４に続くデータ判別処理のフローチャート。
【図６】図２の表示処理のフローチャート。
【図７】第１実施形態における５線譜遷移を示す図。
【図８】第２実施形態のシステム構成を示すブロック図。
【図９】第２実施形態におけるＣＰＵのデータ判別処理の一部のフローチャート。
【図１０】第２実施形態における表示処理のフローチャート。
【図１１】図１０の音高表示のフローチャート。
【図１２】図１１に続く音高表示のフローチャート。
【図１３】第２実施形態におけるタイマインタラプトのフローチャート。
【図１４】第２実施形態における音高表示の具体例を示す図。
【符号の説明】
１  ＣＰＵ
３  鍵盤部
４  押鍵検出回路
８  ワークＲＡＭ
１０  表示部
【図１】
0003680464.tif 000002
【図２】
0003680464.tif 000003
【図３】
0003680464.tif 000004
【図４】
0003680464.tif 000005
【図５】
0003680464.tif 000006
【図６】
0003680464.tif 000007
【図７】
0003680464.tif 000008
【図８】
0003680464.tif 000009
【図９】
0003680464.tif 000010
【図１０】
0003680464.tif 000011
【図１１】
0003680464.tif 000012
【図１２】
0003680464.tif 000013
【図１３】
0003680464.tif 000014
【図１４】
0003680464.tif 000015