JP3809789B2 - 演奏案内装置および演奏案内方法 - Google Patents
演奏案内装置および演奏案内方法 Download PDFInfo
- Publication number
- JP3809789B2 JP3809789B2 JP2001324365A JP2001324365A JP3809789B2 JP 3809789 B2 JP3809789 B2 JP 3809789B2 JP 2001324365 A JP2001324365 A JP 2001324365A JP 2001324365 A JP2001324365 A JP 2001324365A JP 3809789 B2 JP3809789 B2 JP 3809789B2
- Authority
- JP
- Japan
- Prior art keywords
- note
- pitch
- control track
- key
- stored
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Electrophonic Musical Instruments (AREA)
- Auxiliary Devices For Music (AREA)
Description
【発明の属する技術分野】
本発明は、電子楽器に用いて好適な演奏案内装置および演奏案内方法に関する。
【0002】
【従来の技術】
従来より、鍵盤の各鍵下部に発光手段を対向配置しておき、発音すべき音高とその発音タイミングとを表す曲データの再生に同期して、押鍵すべき鍵に対応して配設される発光手段を点灯させてユーザーに弾くべき鍵を案内する演奏案内装置が知られている。
【0003】
【発明が解決しようとする課題】
ところで、従来の演奏案内装置では、左鍵域の演奏を表す左パートの曲データと右鍵域の演奏を表す右パートの曲データとを備えておけば、これら左右両パートの曲データの再生に同期して連弾演奏を案内し得るようになる。
しかしながら、連弾演奏を練習する際に、一方のパートを担う演奏者が鍵操作に不慣れな場合には、なるべく黒鍵操作が少なくなるように該当パートの曲データをトランスポーズ(移調)させるが、そのようにすると左右パート間で鍵域競合して連弾演奏し難くなる、という問題がある。
そこで本発明は、このような事情に鑑みてなされたもので、左右パート間の鍵域競合を生じさせることなく連弾演奏を練習することができる演奏案内装置および演奏案内方法を提供することを目的としている。
【0004】
【課題を解決するための手段】
上記目的を達成するため、請求項1記載の発明では、発音すべき音高とその発音タイミングとを表す曲データを、連弾演奏に対応した左右パート別に記憶する曲データ記憶手段と、この曲データ記憶手段に記憶される左右パートの曲データの内、一方のパートの曲データを読み出し、当該読み出された一方のパートの曲データの音高に基づいて左右パートの分割位置を表すスプリットポイントを表す音高を抽出して時系列順に並べた制御トラックを生成する制御トラック生成手段と、前記制御トラックに格納されるスプリットポイントを表す音高とトランスポーズ設定された他方のパートの曲データの音高とを順次比較して他方のパートの曲データの音高が前記スプリットポイントを表す音高を超える際の最大侵入幅を検出し、その最大侵入幅に応じて他方のパートに設定されたトランスポーズ値をシフトするトランスポーズ調整手段とを具備することを特徴とする。
【0005】
請求項2に記載の発明では、発音すべき音高とその発音タイミングとを表すデータであって、連弾演奏に対応した左右パート別の曲データを曲データ記憶手段に記憶しておき、これら左右パートの曲データの内、一方のパートの曲データを読み出し、当該読み出された一方のパートの曲データの音高に基づいて左右パートの分割位置を表すスプリットポイントを表す音高を抽出して時系列順に並べた制御トラックを生成する制御トラック生成過程と、この制御トラック生成過程にて生成された制御トラックに格納されるスプリットポイントを表す音高とトランスポーズ設定された他方のパートの曲データの音高とを順次比較して他方のパートの曲データの音高が前記スプリットポイントを表す音高を超える際の最大侵入幅を検出し、その最大侵入幅に応じて他方のパートに設定されたトランスポーズ値をシフトするトランスポーズ調整過程とを具備することを特徴とする。
【0006】
本発明では、連弾演奏に対応した左右パート別の曲データの内、一方のパートの曲データを読み出し、当該読み出された一方のパートの曲データの音高に基づいて左右パートの分割位置を表すスプリットポイントを表す音高を抽出して時系列順に並べた制御トラックを生成し、この制御トラックに格納されるスプリットポイントを表す音高とトランスポーズ設定された他方のパートの曲データの音高とを順次比較して他方のパートの曲データの音高が前記スプリットポイントを表す音高を超える際の最大侵入幅を検出し、その最大侵入幅に応じて他方のパートに設定されたトランスポーズ値をシフトするので、左右パート間の鍵域競合を防止することが可能になっている。また、左右パート間の鍵域競合を防止することによって、演奏者は自己担当のパートをトランスポーズしても、スプリットポイントを意識せずに自然な演奏を違和感なく練習し得るようになる。
【0007】
【発明の実施の形態】
以下、本発明の実施の一形態による演奏案内装置を搭載した電子楽器を実施例に挙げ、これについて図面を参照して説明する。
A.構成
図1は、本発明の一実施例による電子楽器の全体構成を示すブロック図である。この図において、1は押離鍵操作(演奏操作)に応じたキーオン/キーオフイベントやキーコード等の演奏情報を発生する鍵盤である。
2はCPU5の制御の下に、押鍵すべき鍵を案内表示する押鍵ガイド部である。押鍵ガイド部2は、半透明樹脂材等で形成された各鍵下部に対向配置される発光手段2a(図示略)と、これら各鍵毎に配設される発光手段2aを点灯駆動するドライバ2b(図示略)とから構成され、CPU5から供給される点灯制御信号に従って、対応する発光手段2aについて点灯駆動して押鍵すべき鍵を案内する。
【0008】
3は各種スイッチを有し、操作されたスイッチに応じたスイッチイベントを発生するパネルスイッチ群である。このパネルスイッチ群3には、図示していないが、電源をオンオフする電源スイッチの他、演奏案内用の曲データを選択する曲選択スイッチ、演奏案内の開始を指示するスタートスイッチ等が設けられている。4はLCDパネル等から構成される表示部であり、後述するCPU5から供給される表示制御信号に応じて楽器各部の動作モードなどを表示する。
【0009】
CPU5は鍵盤1から供給される演奏情報に応じて、音源8に楽音発生を指示したり、選択された曲データに基づき演奏案内するものであり、本発明の要旨に係わる特徴的な処理動作については追って詳述する。
ROM6は、上記CPU5にロードされる各種制御プログラムの他、演奏案内用の曲データを記憶する。ここで、図2(イ)を参照してROM6に格納される曲データKDの構成について説明する。ROM6には、複数の曲データKD(1)〜KD(n)が格納されており、これら曲データKD(1)〜KD(n)は曲選択スイッチの操作に応じて選択される。
【0010】
曲データKDは、右パート開始アドレスRPA、左パート開始アドレスLPA、テンポTMPおよび演奏データPDから構成される。演奏データPDは、上記右パート開始アドレスRPAおよび左パート開始アドレスLPAにより指定されるアドレス領域にそれぞれ格納される左右パートの演奏データPDR、PDLからなる。演奏データPDR、PDLは、所謂相対時間形式で形成されており、発音/消音すべき音高を表すイベント(ノートオンイベント・ノートナンバ/ノートオフイベント・ノートナンバ)、その発音タイミングを表す次イベントまでのステップタイムΔtおよび曲の終わりを表すENDマークからなる。
【0011】
RAM7は、図2(ロ)に示すように、各種レジスタ・フラグデータを一時記憶するワークエリアWE、演奏データPDR、PDLを一時記憶するノートバッファエリアNBEおよびイベント毎の鍵域分割鍵(以下、スプリットポイントと記す)が時系列順に格納される制御トラックエリアCTEを備える。なお、このRAM7が備えるノートバッファエリアNBEおよび制御トラックエリアCTEが意図する点については追って述べる。
【0012】
音源8は周知の波形メモリ読み出し方式によって構成され、時分割動作する複数の発音チャンネルを備える。この音源8は、各種音色の波形データを記憶しており、これらの内、CPU5が指定する波形データを読み出し、それを演奏情報や曲データに応じて波形修飾してなる楽音波形Wを形成する。
9はD/A変換回路であり、上記音源8の出力をアナログ波形信号に変換して次段のサウンドシステム10に供給する。サウンドシステム10は、例えば、前段から供給されるアナログ波形信号に対して不要ノイズを除去する等のフィルタリングを施した後、これを増幅してスピーカSPから発音する。
【0013】
B.動作
次に、図3〜図17を参照して実施例の動作について説明する。
(1)メインルーチンの動作
電源投入に応じて、CPU5はROM6から所定の制御プログラムを読み出して自身にロードすると、図3に示すメインルーチンを実行してステップSA1に処理を進め、RAM7のワークエリアWEに設けられる各種レジスタ・フラグを初期化したり、音源8に初期値を設定する等のイニシャライズ処理を行う。この後、ステップSA2に進み、操作されたスイッチが発生するスイッチイベントに対応したスイッチ処理を実行する。
【0014】
続いて、ステップSA3では、演奏案内の開始を指示するスタートスイッチがオン操作されていれば、曲選択スイッチ操作に応じて選択された曲番号の曲データを再生しつつ演奏案内する曲データ再生処理を実行する。
そして、ステップSA4では、押離鍵操作に応じて音源8に対して発音/消音を指示する鍵盤処理を実行する。そしてこの後、ステップSA2に処理を戻し、以後、電源スイッチがオフされる迄、ステップSA2〜SA4を繰り返す。
【0015】
(2)タイマ割込み処理ルーチンの動作
次に、図4を参照してタイマ割込み処理ルーチンの動作について説明する。CPU5は上述したメインルーチンと並列的に一定周期毎にタイマ割込み処理を実行する。一定周期毎にタイマ割込みがかかると、CPU5は図4に示すステップSB1に処理を進め、曲データ再生中であるか否かを判断する。
曲データ再生中でなければ、判断結果は「NO」となり、何も処理せずに本ルーチンを完了させるが、曲データ再生中であると判断結果が「YES」となり、次のステップSB2に進み、テンポカウンタTMPCの値をインクリメントして歩進させる。
【0016】
次いで、ステップSB3では、歩進したテンポカウンタTMPCの値が再生中にある曲のテンポTMPの値と一致したか否かを判断する。一致していなければ、判断結果は「NO」となり、本ルーチンを完了させるが、一致すると、判断結果が「YES」となり、ステップSB4に処理を進める。ステップSB4では、テンポカウンタTMPCをゼロリセットし、続くステップSB5では各パートの経過時間をインクリメントして歩進させてから本ルーチンを完了する。なお、ここで言う各パートとは、左右パートおよび後述する制御トラックからなる。
【0017】
このように、タイマ割込み処理ルーチンでは、曲データ再生中であると、一定周期毎にテンポカウンタTMPCを歩進させ、歩進させたテンポカウンタTMPCが曲のテンポTMPに一致すると、テンポカウンタTMPCをゼロリセットして各パート(左右パートおよび制御トラック)の経過時間をインクリメントして曲再生を進行させるようになっている。
【0018】
(3)スイッチ処理ルーチンの動作
次に、図5〜図13を参照してスイッチ処理ルーチンの動作について説明する。上述のメインルーチン(図3参照)のステップSA2を介してスイッチ処理ルーチンが実行されると、操作されたスイッチ種類に応じたスイッチ処理を実行する。以下、発明の要旨に係わる代表的なスイッチ処理として、「曲選択スイッチ処理」および「スタートスイッチ処理」の各動作について述べる。
【0019】
▲1▼曲選択スイッチ処理ルーチンの動作
曲選択スイッチが操作されると、図5に示す曲選択スイッチ処理ルーチンが実行され、CPU5はステップSC1〜SC3を介して、スイッチ操作に応じて選択された曲番号nに対応した曲データKD(n)の曲テンポTMPや左右パートの各開始アドレスRPA,LPAを読み出し、それらをRAM7のワークエリアWEにセットする。
【0020】
この後、ステップSC4では、左パートの演奏データPDLに基づき、イベント毎のスプリットポイントを探し出して時系列順に並べて制御トラックエリアCTEに格納する制御トラック生成処理を実行し、続くステップSC5では、上記ステップSC4にて探し出したスプリットポイントに基づき、左右パート間の鍵域競合を生じさせないトランスポーズ値を求めるトランスポーズ処理を実行する。
なお、本実施例では、右パート優先としている為、上記ステップSC4においては左パートの演奏データPDに基づき制御トラックを生成するようにしているが、これに替えて左パート優先とするには、右パートの演奏データPDに基づき制御トラックを生成すれば良い。
【0021】
(a)制御トラック生成処理ルーチンの動作
次に、図6を参照して制御トラック生成処理ルーチンの動作について説明する。上述のステップSC4を介して本ルーチンが実行されると、CPU5はステップSD1に処理を進め、RAM7に設けられる制御トラックエリアCTEの書き込みアドレスを初期化し、続くステップSD2では、ワークエリアWEに設けられるレジスタSPNTに「1」を、レジスタtimeをゼロリセットして初期化する。
【0022】
なお、このレジスタtimeにはステップタイムΔtがストアされる。レジスタSPNTにはスプリットポイントに相当する左パートの最高音のノートナンバ(後述するmaxノート)がストアされる。したがって、本実施例では、後述のmaxノートに対応する鍵までが左鍵域となり、maxノート+1に対応する鍵より右鍵域とされる。
【0023】
さて、初期化が完了すると、CPU5はステップSD3に処理を進め、曲選択スイッチ操作により選択された曲の左パート演奏データPDLを読み出す。次いで、ステップSD4では、読み出した演奏データPDLが曲終端を表すENDマークであるか否かを判断するが、ここでは先頭イベントの読み出しであるから、判断結果は「NO」となり、ステップSD5に進む。
ステップSD5では、読み出したイベントがノートオンイベントであるか否かを判断する。ノートオンイベントであれば、判断結果は「YES」となり、ステップSD6に処理を進め、ノートBUF ON処理を実行する。一方、ノートオフイベントであれば、判断結果は「NO」となり、ステップSD7に処理を進め、ノートBUF OFF処理を実行する。
【0024】
ノートBUF ON処理およびノートBUF OFF処理とは、RAM7のノートバッファエリアNBEに格納されたノートオンイベントあるいはノートオフイベントの内から最高音のノートナンバ(maxノート)を探し出す処理である。これら処理の詳細については追って述べる。
【0025】
ノートBUF ON処理あるいはノートBUF OFF処理が完了すると、CPU5はステップSD8に処理を進め、これら処理にて得られるmaxノートがレジスタSPNTにストアされる値と一致するか、つまり、スプリットポイントが確定したかどうかを判断する。スプリットポイントが確定した場合には、判断結果が「YES」となり、後述のステップSD11に処理を進めるが、そうでない場合には判断結果が「NO」となり、ステップSD9に進む。
【0026】
ステップSD9では、制御トラックアドレスに応じて、現在得られたSPNT+1を制御トラックエリアCTEに書き込む。次いで、ステップSD10では、後述するノートBUF ON処理あるいはノートBUF OFF処理にて得られるmaxノートをレジスタSPNTにストアすると共に、レジスタtimeをゼロリセットし、続くステップSD11では、制御トラックアドレスをインクリメントして歩進させる。この後、ステップSD12に進み、左パート読み出しアドレスをインクリメントして歩進させて上述のステップSD3に処理を戻す。
【0027】
そして、ステップSD3にて読み出される左パート演奏データPDLがステップタイムΔtであると、ステップSD5を介してステップSD13に処理を進め、更新された制御トラックアドレスに従い、time+Δtを制御トラックエリアCTEにストアする。この後、ステップSD12に進み、左パート読み出しアドレスをインクリメントして歩進させて上述のステップSD3に処理を戻す。
【0028】
このように、制御トラック生成処理では、左パート演奏データPDLを順次読み出してイベント毎のスプリットポイント(左鍵域での最高音のノートナンバ(maxノート))を探し出し、探し出したイベント毎のスプリットポイントと、それに対応するステップタイムΔtとを時系列順に並べて制御トラックエリアCTEに書き込んで行く。
そして、読み出した演奏データPDLがENDマークになると、ステップSD14に進み、制御トラックの内容を補正する制御トラック補正処理(後述する)を実行する。
【0029】
(b)ノートBUF ON処理ルーチンの動作
次に、図7を参照してノートBUF ON処理ルーチンの動作について説明する。前述のステップSD6(図6参照)を介して本処理ルーチンが実行されると、CPU5は図7に示すステップSE1,SE2にてノートバッファアドレスおよびレジスタminNOTEを初期化する。次いで、ステップSE3に進むと、ノートバッファアドレスがEND+1に達したか、つまりノートバッファ終端を超えたかどうかを判断する。
【0030】
バッファ終端を超えていなければ、判断結果は「NO」となり、次のステップSE4に進む。ステップSE4では、現アドレスに応じてノートバッファエリアNBEを読み出す。続いて、ステップSE5では、読み出した値が「0」、つまりノートバッファに空きがあるか否かを判断する。
【0031】
ノートバッファに空きが無ければ、ステップSE5の判断結果は「NO」となり、ステップSE6に進む。ステップSE6では、ノートバッファから読み出したノートナンバがレジスタminNOTEに格納されるノートナンバより小さいか否かを判断する。このレジスタminNOTEとは、ノートバッファに格納されるノートナンバの内、最も低い音高のノートナンバ(以下、最小ノートと記す)を保持するものである。
【0032】
ノートバッファから読み出したノートナンバが最小ノートより高ければ、判断結果は「NO」となり、後述するステップSE9に処理を進めるが、最小ノートより低ければ、判断結果が「YES」となり、ステップSE7に進む。ステップSE7では、読み出したノートナンバを最小ノートとしてレジスタminNOTEにストアし、続くステップSE8では、この最小ノートが格納されるノートバッファのアドレス値をレジスタminNOTEadrに保持する。
【0033】
この後、ステップSE9に処理を進め、ノートバッファアドレスを歩進させてステップSE3に処理を戻す。そして、バッファ終端を超えていなければ、上述したステップSE4を介してノートバッファを読み出し、そこが空き領域でなければ、ステップSE5の判断結果が「YES」となり、ステップSE10に進み、前述の制御トラック生成処理ルーチンから与えられるノートオンイベント中のノートナンバ(以下、これをオンノートと記す)を、その空き領域に書き込む。こうして、ノートバッファに新たなオンノートを書き込むと、CPU5はステップSE11を介して後述するmaxノートサーチ処理を実行し、ノートバッファに格納されるオンノートの内から最も高い音高のノートナンバを検索する。
【0034】
さて一方、ノートバッファに空きが無く、ノートバッファアドレスがバッファ終端を超えた場合には、ステップSE3の判断結果が「YES」となり、ステップSE12に進む。ステップSE12では、制御トラック生成処理ルーチンから与えられるオンノートがレジスタminNOTEに格納される最小ノートより高い音高であるかどうかを判断する。
最小ノートより低ければ、判断結果は「NO」となり、ステップSE11のmaxノートサーチ処理に進むが、最小ノートより高い場合には、レジスタminNOTEadrに保持されたアドレスに従い、ノートバッファにオンノートを書き込む。
【0035】
このように、ノートBUF ON処理ルーチンでは、ノートバッファに空きがあれば、制御トラック生成処理ルーチンから与えられるオンノートをその空き領域に書き込んだ後、maxノートサーチ処理を実行してノートバッファに格納されるオンノートの内から最も高い音高のノートナンバを検索する。
一方、ノートバッファに空きが無い場合には、ノートバッファ中の最小ノートとオンノートとを比較し、そのオンノートが最小ノートより高ければ、ノートバッファ中の最小ノートをオンノートに更新した後、maxノートサーチ処理を実行してノートバッファに格納されるオンノートの内から最も高い音高のノートナンバを検索する。
したがって、左パート演奏データPDLに含まれるノートオンイベントの内で最高音のノートナンバを検索し、これをスプリットポイントとなるmaxノートとして抽出するようになっている。
【0036】
(c)maxノートサーチ処理ルーチンの動作
次に、図8を参照してmaxノートサーチ処理ルーチンの動作について説明する。上述したノートBUF ON処理ルーチンのステップSE11(図7参照)を介して本処理ルーチンが実行されると、CPU5は図8のステップSF1に処理を進め、ノートバッファアドレスを初期化し、続くステップSF2では、レジスタmaxNOTEをゼロリセットする。
【0037】
次いで、ステップSF3に進むと、ノートバッファアドレスがEND+1に達したか、つまりノートバッファ終端を超えたかどうかを判断する。ここで、バッファ終端を超えていなければ、判断結果は「NO」となり、次のステップSF4に進み、現アドレスに応じてノートバッファエリアNBEを読み出す。
【0038】
そして、ステップSF5に進み、読み出したノートナンバがレジスタmaxNOTEの値より大きいか否かを比較する。ここで、読み出したノートナンバがレジスタmaxNOTEの値より大きければ、判断結果は「YES」となり、次のステップSF6に処理を進め、その読み出したノートナンバをレジスタmaxNOTEにストアした後、ステップSF7に進む。
一方、読み出したノートナンバがレジスタmaxNOTEの値より小さければ、上記ステップSF5の判断結果は「NO」となり、ステップSF7に進み、ノートバッファアドレスを歩進させてステップSF3に処理を戻す。
【0039】
以後、ノートバッファアドレスがバッファ終端を超える迄、順次ノートバッファからノートナンバを読み出し、読み出したノートナンバとレジスタmaxNOTEに格納されるノートナンバとを大小比較し、読み出したノートナンバがレジスタmaxNOTEの値より大きければ、その読み出したノートナンバをレジスタmaxNOTEにストアすることによって、ノートバッファに格納されるノートナンバの内、最も高い音高のノートナンバがレジスタmaxNOTEに格納される。そして、ノートバッファアドレスがバッファ終端を超えると、ステップSF3の判断結果が「YES」となり、本処理ルーチンを完了させる。
【0040】
(d)ノートBUF OFF処理ルーチンの動作
次に、図9を参照してノートBUF OFF処理ルーチンの動作について説明する。前述のステップSD7(図6参照)を介して本処理ルーチンが実行されると、CPU5は図9に示すステップSG1にてノートバッファアドレスを初期化し、続くステップSG2では、レジスタmaxNOTEをゼロリセットする。
次いで、ステップSG3に進むと、ノートバッファアドレスがバッファ終端を超えたかどうかを判断する。バッファ終端を超えていなければ、判断結果は「NO」となり、ステップSG4に進み、現アドレスに応じてノートバッファエリアNBEを読み出す。
【0041】
続いて、ステップSG5では、前述の制御トラック生成処理ルーチンから与えられるノートオフイベント中のノートナンバ(以下、これをオフノートと記す)が、読み出したノートナンバと一致するか否かを判断する。一致しなければ、判断結果は「NO」となり、ステップSG6に処理を進め、ノートバッファアドレスを歩進させてステップSG3に処理を戻す。
【0042】
一方、ノートバッファ中にオフノートと一致するノートナンバがあると、上記ステップSG5の判断結果は「YES」となり、ステップSG7に進む。ステップSG7では、オフノートに一致したノートナンバを読み出したノートバッファアドレスに応じてノートバッファに「0」を書き込み、空き状態に設定する。この後、ステップSG8に進み、上述したmaxノートサーチ処理ルーチン(図8参照)を実行し、ノートバッファに格納されるノートナンバの内、最も高い音高のノートナンバを抽出する。
【0043】
このように、ノートBUF OFF処理ルーチンでは、ノートバッファ中にオフノートと一致するノートナンバがあると、そのノートナンバを「0」に書き換えて空き状態にしてから、ノートバッファ中に格納されるノートオンイベントの内で最高音のノートナンバを検索し、これをスプリットポイントとなるmaxノートとして抽出するようになっている。
【0044】
(e)制御トラック補正処理ルーチンの動作
次に、図10を参照して制御トラック補正処理ルーチンの動作について説明する。前述した制御トラック生成処理ルーチンのステップSD14(図6参照)を介して本処理ルーチンが実行されると、CPU5は図10に示すステップSH1に処理を進め、制御トラックアドレスを初期化する。次いで、ステップSH2では、制御トラックアドレスに応じて制御トラックエリアCTEを読み出す。以下、イベント、ステップタイムΔtおよびENDマークを読み出した場合の各動作について述べる。
【0045】
<イベントを読み出した場合>
この場合、ステップSH3,SH4の判断結果がいずれも「NO」となり、ステップSH5に進み、次イベントとそのステップタイムΔtとを読み出す。その際、ENDマークを読み出すと、ステップSH6の判断結果が「YES」となり、本ルーチンを完了させるが、そうでなければ、判断結果が「NO」となり、ステップSH7に進む。
【0046】
ステップSH7では、次のイベントノートが先のイベントノートよりも大きいか否か、つまり先のスプリットポイントより次のスプリットポイントの方が高いかどうかを判断する。先のスプリットポイントの方が高い場合には、判断結果が「NO」となり、ステップSH11に処理を進めて制御トラックアドレスを歩進させるが、次のスプリットポイントの方が高ければ、判断結果は「YES」となり、ステップSH8に処理を進める。
【0047】
ステップSH8では、先のイベントに対応したステップタイムΔtが所定値より大きいか否かを判断する。所定値より小さければ、判断結果は「NO」となり、ステップSH11に処理を進めるが、所定値より大きければ、判断結果が「YES」となり、ステップSH9に進む。
ステップSH9では、先のイベントに対応したステップタイムΔtから所定値αを減算し、続くステップSH10では、次のイベントに対応したステップタイムΔtに所定値αを加算する。この後、ステップSH11にて制御トラックアドレスを歩進させた後、ステップSH2に処理を戻す。
【0048】
このように、制御トラックエリアCTEからイベントを読み出した場合には、、先のスプリットポイントより次のスプリットポイントが高くなるイベントを探し出し、そうしたイベントでは押鍵タイミングを前倒しするよう時間調整(ステップSH9,SH10)しており、このようにすることで実際の押鍵タイミングよりも早いタイミングで押鍵されても適正に発音し得るようにしている。
【0049】
<ステップタイムΔtを読み出した場合>
この場合、ステップSH3の判断結果が「NO」となり、ステップSH4に進む。ステップSH4では、読み出したステップタイムΔtが「0」であるか否かを判断する。「0」でなければ判断結果は「NO」となり、上述したステップSH5以降の処理を実行するが、「0」であると判断結果が「YES」となり、ステップSH12に処理を進め、ステップタイムΔtが「0」のイベントを削除し、これに応じて制御トラックにおける次イベント以降を順次1イベント分シフトさせる。
【0050】
<ENDマークを読み出した場合>
上述したイベント読み出しもしくはステップタイム読み出しが行われている過程で、曲終端を表すENDマークが読み出されると、ステップSH3あるいはステップSH6の判断結果が「NO」となり、本ルーチンを完了させる。
【0051】
(f)トランスポーズ処理ルーチンの動作
次に、図11〜図12を参照してトランスポーズ処理ルーチンの動作について説明する。前述した曲選択スイッチ処理ルーチンのステップSC5(図5参照)を介して本処理ルーチンが実行されると、CPU5は図11に示すステップSJ1に進み、右パートアドレスを初期化する。右パートアドレスとは、ROM6から右パート演奏データPDRを読み出すためのアドレスを指す。
次いで、ステップSJ2では、制御トラックアドレスを初期化する。制御トラックアドレスとは、左パート演奏データPDLに基づき、イベント毎のスプリットポイントを探し出して時系列順に並べた制御トラックエリアCTEを読み出すアドレスである。
【0052】
続いて、ステップSJ3〜SJ5では、レジスタmaxα、レジスタOCTおよびレジスタSPNTをそれぞれゼロリセットする。なお、これらレジスタに格納される値が意図するところについては追って述べる。次に、ステップSJ6〜SJ9では、右パートおよび制御トラックの各経過時間をゼロリセットすると共に、右パートおよび制御トラックの各イベント間の時間をゼロリセットする。
こうして、ステップSJ1〜SJ9を介した各種初期化が完了すると、CPU5は実際に曲データを再生するタイミングとは異なる早送りタイミングに従い、ステップSJ10〜SJ18では制御トラックを読み出し、ステップSJ19〜SJ30では右パート演奏データPDRを読み出す。
【0053】
すなわち、ステップSJ10〜SJ18では、制御トラックの読み出しタイミングになる毎に制御トラックからイベントもしくはステップタイムΔtを読み出し、イベントを読み出した場合にはそれに含まれるノートナンバをスプリットポイントとしてレジスタSPNTにストアした後、制御トラックアドレスおよび経過時間をインクリメントして歩進させる。
【0054】
次に、ステップSJ19〜SJ30では、右パート演奏データPDRの読み出しタイミングになる毎に右パートのイベントもしくはステップタイムΔtを読み出す。読み出したイベントがノートオンイベントである場合、そのノートナンバを右パート側に設定されるトランスポーズ値に加算し、加算した結果がレジスタSPNTに格納されるスプリットポイントより低音側にあるか、つまり、左パート側に侵入しているかどうかを判断する。侵入している場合には、侵入幅αを算出する。侵入幅αは、レジスタmaxαの値と大小比較され、α>maxαであれば、その侵入幅αがレジスタmaxαに最大侵入幅として格納される。
【0055】
このように、ステップSJ10〜SJ30では、制御トラックと右パートとを交互に読み出し、トランスポーズされた右パートのノートオンイベント(ノートナンバ)がスプリットポイントを超えて左パート側に侵入する際の最大侵入幅をレジスタmaxαに確保する。なお、レジスタmaxαに格納される最大侵入幅は半音数で表される。
【0056】
そして、制御トラックと右パートとを読み出し終えると、ステップSJ31〜SJ33を実行し、レジスタmaxαに格納される最大侵入幅をオクターブ数に変換してレジスタOCTにストアする。
次いで、ステップSJ34では、右パートに設定されたトランスポーズ値を、レジスタOCTにストアしたオクターブ数分シフトさせて本ルーチンを完了させる。これにより、右パート側がスプリットポイントを超えてしまう左右パート間の鍵域競合を防止するようになっている。
【0057】
▲2▼スタートスイッチ処理ルーチンの動作
次に、図13を参照してスタートスイッチ処理ルーチンの動作について説明する。スタートスイッチがオン操作されると、CPU5はメインルーチンのステップSA2(図3参照)を介して図13に示すステップSK1に処理を進め、先ずテンポカウンタTMPCをゼロリセットする。
次いで、ステップSK2に進むと、各パートの先頭アドレスを、それぞれ対応するパートの現在アドレスとしてセットする。そして、ステップSK3,SK4では、各パートの次イベントまでの時間および各パートの経過時間をそれぞれゼロリセットする。
【0058】
(4)曲データ再生処理ルーチンの動作
次に、図14を参照して曲データ再生処理ルーチンの動作について説明する。前述したメインルーチン(図3参照)のステップSA3を介して曲データ再生処理ルーチンが実行されると、CPU5はステップSL1に処理を進め、パート番号を初期化する。なお、ここで言うパート番号とは、左右パートおよび制御トラックを識別する番号である。続いて、ステップSL2では左右パートの演奏データおよび制御トラックを再生し終えたかどうかを判断する。
再生し終えたならば、判断結果が「YES」となり、本ルーチンを完了させるが、再生終了していなければ判断結果は「NO」となり、次のステップSL3に進み、現在設定されているパートの演奏データもしくは制御トラックを、現在アドレスに応じて読み出す。
【0059】
次いで、ステップSL4では、イベントタイミングに達したどうかを判断し、イベントタイミングに達していなければ、判断結果は「NO」となり、ステップSL9に進み、次パートの演奏データもしくは制御トラックの読み出しを進めるべく、パート番号を更新してステップSL2に処理を戻す。
一方、イベントタイミングに達すると、ステップSL4の判断結果が「YES」となり、ステップSL5に進み、経過時間をゼロリセットする。そして、ステップSL6では、演奏データが読み出された場合にはそのイベント内容に応じてノートオンあるいはノートオフを音源8に指示し、制御トラックが読み出された場合には読み出したノートナンバをスプリットポイントとしてレジスタSPNTにストアするイベント処理を実行する。次に、ステップSL7では、次イベント迄の待ち時間をワークエリアにセットした後、ステップSL8にて読み出しアドレスをインクリメントして歩進させてからステップSL3に処理を戻す。
【0060】
(5)イベント処理ルーチンの動作
次に、図15〜図16を参照してイベント処理ルーチンの動作について説明する。上述したステップSL6を介してイベント処理が実行されると、CPU5は処理すべきイベントがノートオンイベントであればステップSM1にて音源8に発音を指示するノートオン処理ルーチンを実行し、処理すべきイベントがノートオフイベントであればステップSM2にて音源8に消音を指示するノートオフ処理ルーチンを実行する。そして、ステップSM3では、制御トラックからノートナンバが読み出された場合に、それをスプリットポイントとしてレジスタSPNTにストアする。
【0061】
上記ステップSM1を介してノートオン処理ルーチンが実行されると、CPU5は図16に示すステップSN1に処理を進め、通常再生モードであるかどうかを判断する。ここで、通常再生モードであれば、判断結果は「YES」となり、ステップSN2に進む。ステップSN2では、ノートオンイベントに含まれるノートナンバの楽音を発音するよう音源8に指示した後、ステップSN4に処理を進める。
【0062】
一方、通常再生モードでない場合、すなわち、演奏案内するガイドモード下にあると、上記ステップSN1の判断結果が「NO」となり、ステップSN3に進み、ノートオンイベントに含まれるノートナンバに対し、現在再生中のパート側に設定されているトランスポーズ値を加算する。
そして、ステップSN4では、通常再生モード下であれば、ノートナンバに対応する鍵の発光手段2aを点灯駆動して押鍵案内し、一方、演奏案内モード下にあると、ノートナンバに対し現在再生中のパート側に設定されているトランスポーズ値を加算した結果に対応する鍵の発光手段2aを点灯駆動して押鍵案内して本ルーチンを完了する。
【0063】
(6)鍵盤処理ルーチンの動作
次に、図17を参照して鍵盤処理ルーチンの動作について説明する。前述したメインルーチン(図3参照)のステップSA4を介して鍵盤処理ルーチンが実行されると、CPU5はステップSP1に処理を進め、キーオンイベントの有無を判断する。ここで、押鍵操作に応じて発生するキーオンイベントを検出すると、判断結果が「YES」となり、ステップSP2〜SP8の押鍵時処理を実行する。
押鍵操作に応じてステップSP2に進むと、演奏案内するガイドモード下にあるか否かを判断する。ガイドモード下になければ、判断結果は「NO」となり、ステップSP3に進み、押鍵操作に応じて発生するキーオンイベントおよびキーコードを音源8に送出して発音指示するノートオン処理を実行する。
【0064】
ガイドモード下であると、上記ステップSP2の判断結果は「YES」となり、ステップSP4に進み、押鍵された鍵のキーコードがレジスタSPNTに格納されるスプリットポイントより小さいか否か、すなわち、左パート鍵域の押鍵であるかどうかを判断する。
【0065】
左パート鍵域の押鍵であると、判断結果は「YES」となり、ステップSP5に処理を進め、押鍵された鍵のキーコードを、左パート側に設定されるトランスポーズ値分シフトさせ、続くステップSP6では、そうして音高シフトされた鍵の楽音を発音するよう音源8に指示する左側パートノートオン処理を実行する。これに対し、右パート鍵域の押鍵であると、上記ステップSP4の判断結果が「NO」となり、ステップSP7に処理を進め、押鍵された鍵のキーコードを、右パート側に設定されるトランスポーズ値分シフトさせ、続くステップSP8では、そうして音高シフトされた鍵の楽音を発音するよう音源8に指示する右側パートノートオン処理を実行する。
【0066】
さて一方、キーオンイベントが検出されない場合には、上記ステップSP1の判断結果は「NO」となり、ステップSP9に進み、キーオフイベントの有無を判断する。ここで、押鍵操作に応じて発生するキーオフイベントを検出すると、判断結果が「YES」となり、ステップSP10〜SP16の離鍵時処理を実行する。
離鍵操作に応じてステップSP10に進むと、演奏案内するガイドモード下にあるか否かを判断する。ガイドモード下になければ、判断結果は「NO」となり、ステップSP11に進み、離鍵操作に応じて発生するキーオフイベントおよびキーコードを音源8に送出して消音指示するノートオフ処理を実行する。
【0067】
ガイドモード下であると、上記ステップSP10の判断結果が「YES」となり、ステップSP12に進み、離鍵された鍵のキーコードがレジスタSPNTに格納されるスプリットポイントより小さいか否か、すなわち、左パート鍵域の離鍵であるかどうかを判断する。
左パート鍵域の離鍵であると、判断結果は「YES」となり、ステップSP13に処理を進め、離鍵された鍵のキーコードを、左パート側に設定されるトランスポーズ値分シフトさせ、続くステップSP6では、そうして音高シフトされた鍵の楽音を消音するよう音源8に指示する左側パートノートオフ処理を実行する。
【0068】
これに対し、右パート鍵域の離鍵であると、上記ステップSP12の判断結果が「NO」となり、ステップSP15に処理を進め、離鍵された鍵のキーコードを、右パート側に設定されるトランスポーズ値分シフトさせ、続くステップSP16では、そうして音高シフトされた鍵の楽音を消音するよう音源8に指示する右側パートノートオフ処理を実行する。
なお、キーオン/キーオフイベントが共に検出されない場合、つまり鍵操作されない場合には、上記ステップSP1,SP9の各判断結果がいずれも「NO」となり、何も処理せずに本ルーチンを完了させる。
【0069】
以上のように、本実施例によれば、連弾演奏を練習する曲データを選択すると、その曲データを構成する左右パートの演奏データの内、左パート演奏データPDLを順次読み出してイベント毎のスプリットポイントを探し出し、探し出したイベント毎のスプリットポイントと、それに対応するステップタイムΔtとを時系列順に並べて制御トラックを生成する。
そして、右パートにトランスポーズ設定されている場合、そのトランスポーズ設定を加味した右パートの演奏データPDRと制御トラックに格納されるスプリットポイントとを順次比較して右パートのノートオンイベントがスプリットポイントを超えて鍵域競合する際の最大侵入幅を検出してオクターブ数に変換し、その分、右パートに設定されたトランスポーズ値をシフトさせて左右パートの演奏データPDL,PDRに応じて連弾演奏を案内するので、右パート側がスプリットポイントを超えてしまう左右パート間の鍵域競合を防止することが可能になっている。
また、左右パート間の鍵域競合を防止する為、演奏者は自己担当パートをトランスポーズしても、スプリットポイントを意識せずに自然な演奏を違和感なく練習し得るようになっている。
【0070】
請求項1、2記載の発明によれば、連弾演奏に対応した左右パート別の曲データの内、一方のパートの曲データを読み出し、当該読み出された一方のパートの曲データの音高に基づいて左右パートの分割位置を表すスプリットポイントを表す音高を抽出して時系列順に並べた制御トラックを生成し、この制御トラックに格納されるスプリットポイントを表す音高とトランスポーズ設定された他方のパートの曲データの音高とを順次比較して他方のパートの曲データの音高が前記スプリットポイントを表す音高を超える際の最大侵入幅を検出し、その最大侵入幅に応じて他方のパートに設定されたトランスポーズ値をシフトするので、左右パート間の鍵域競合を防止することができる。
また、左右パート間の鍵域競合を防止することによって、演奏者は自己担当のパートをトランスポーズしても、スプリットポイントを意識せずに自然な演奏を違和感なく練習することができる。
【図面の簡単な説明】
【図1】本発明による一実施例の構成を示すブロック図である。
【図2】ROM6に記憶される曲データの構成およびRAM7の構成を示す図である。
【図3】メインルーチンの動作を示すフローチャートである。
【図4】タイマ割込み処理ルーチンの動作を示すフローチャートである。
【図5】曲選択スイッチ処理ルーチンの動作を示すフローチャートである。
【図6】制御トラック生成処理ルーチンの動作を示すフローチャートである。
【図7】ノートBUF ON処理ルーチンの動作を示すフローチャートである。
【図8】maxノートサーチ処理ルーチンの動作を示すフローチャートである。
【図9】ノートBUF OFF処理ルーチンの動作を示すフローチャートである。
【図10】制御トラック補正処理ルーチンの動作を示すフローチャートである。
【図11】トランスポーズ処理ルーチンの動作を示すフローチャートである。
【図12】トランスポーズ処理ルーチンの動作を示すフローチャートである。
【図13】スタートスイッチ処理ルーチンの動作を示すフローチャートである。
【図14】曲データ再生処理ルーチンの動作を示すフローチャートである。
【図15】イベント処理ルーチンの動作を示すフローチャートである。
【図16】ノートオン処理ルーチンの動作を示すフローチャートである。
【図17】鍵盤処理ルーチンの動作を示すフローチャートである。
【符号の説明】
1 鍵盤
2 押鍵ガイド部
2a 発光手段
2b ドライバ
3 パネルスイッチ群
4 表示部
5 CPU
6 ROM
7 RAM
8 音源
9 D/A変換回路
10 サウンドシステム
Claims (2)
- 発音すべき音高とその発音タイミングとを表す曲データを、連弾演奏に対応した左右パート別に記憶する曲データ記憶手段と、
この曲データ記憶手段に記憶される左右パートの曲データの内、一方のパートの曲データを読み出し、当該読み出された一方のパートの曲データの音高に基づいて左右パートの分割位置を表すスプリットポイントを表す音高を抽出して時系列順に並べた制御トラックを生成する制御トラック生成手段と、
前記制御トラックに格納されるスプリットポイントを表す音高とトランスポーズ設定された他方のパートの曲データの音高とを順次比較して他方のパートの曲データの音高が前記スプリットポイントを表す音高を超える際の最大侵入幅を検出し、その最大侵入幅に応じて他方のパートに設定されたトランスポーズ値をシフトするトランスポーズ調整手段と
を具備することを特徴とする演奏案内装置。 - 発音すべき音高とその発音タイミングとを表すデータであって、連弾演奏に対応した左右パート別の曲データを曲データ記憶手段に記憶しておき、これら左右パートの曲データの内、一方のパートの曲データを読み出し、当該読み出された一方のパートの曲データの音高に基づいて左右パートの分割位置を表すスプリットポイントを表す音高を抽出して時系列順に並べた制御トラックを生成する制御トラック生成過程と、
この制御トラック生成過程にて生成された制御トラックに格納されるスプリットポイントを表す音高とトランスポーズ設定された他方のパートの曲データの音高とを順次比較して他方のパートの曲データの音高が前記スプリットポイントを表す音高を超える際の最大侵入幅を検出し、その最大侵入幅に応じて他方のパートに設定されたトランスポーズ値をシフトするトランスポーズ調整過程と
を具備することを特徴とする演奏案内方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001324365A JP3809789B2 (ja) | 2001-10-23 | 2001-10-23 | 演奏案内装置および演奏案内方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001324365A JP3809789B2 (ja) | 2001-10-23 | 2001-10-23 | 演奏案内装置および演奏案内方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003131663A JP2003131663A (ja) | 2003-05-09 |
JP3809789B2 true JP3809789B2 (ja) | 2006-08-16 |
Family
ID=19141099
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001324365A Expired - Fee Related JP3809789B2 (ja) | 2001-10-23 | 2001-10-23 | 演奏案内装置および演奏案内方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3809789B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4821505B2 (ja) * | 2006-08-25 | 2011-11-24 | ヤマハ株式会社 | 電子鍵盤楽器、及びそれに用いるプログラム |
JP5347278B2 (ja) * | 2008-02-13 | 2013-11-20 | カシオ計算機株式会社 | 演奏制御装置及び演奏制御処理のプログラム |
-
2001
- 2001-10-23 JP JP2001324365A patent/JP3809789B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2003131663A (ja) | 2003-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2007147792A (ja) | 演奏教習装置および演奏教習プログラム | |
JP2001242859A (ja) | 自動伴奏装置および自動伴奏方法 | |
JPH06274160A (ja) | 自動演奏装置 | |
JP3358292B2 (ja) | 電子楽器 | |
JP3809789B2 (ja) | 演奏案内装置および演奏案内方法 | |
JP4221567B2 (ja) | 演奏練習装置、演奏練習方法および演奏練習プログラム | |
JP2002182642A (ja) | 演奏案内装置および演奏案内方法 | |
JP3812729B2 (ja) | 演奏案内装置および演奏案内方法 | |
JP2008015315A (ja) | 楽音発生装置および楽音発生処理プログラム | |
JP4645282B2 (ja) | 電子楽器 | |
JP4496882B2 (ja) | 演奏教習装置および演奏教習処理のプログラム | |
JP2712851B2 (ja) | 電子楽器 | |
JP3743993B2 (ja) | コード判定装置、コード判定方法およびコード判定方法を記録した媒体 | |
JP5163928B2 (ja) | 演奏情報補正装置および演奏情報補正プログラム | |
JP3940999B2 (ja) | 演奏装置および演奏方法 | |
JP4345433B2 (ja) | 演奏装置および演奏処理プログラム | |
JP3744667B2 (ja) | 自動伴奏装置および自動伴奏方法 | |
JPH1185153A (ja) | 演奏装置 | |
JPH05204297A (ja) | 階名発生装置 | |
JP2722880B2 (ja) | 電子楽器 | |
JPH11119777A (ja) | サンプリング装置 | |
JP3931551B2 (ja) | 演奏装置および演奏方法 | |
JP2738217B2 (ja) | 電子楽器 | |
JP2009294678A (ja) | 演奏教習装置および演奏教習プログラム | |
JP3543159B2 (ja) | 自動伴奏装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040617 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20051219 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051227 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060130 |
|
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: 20060502 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060515 |
|
R150 | Certificate of patent (=grant) or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100602 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110602 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120602 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120602 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130602 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |