JP3395202B2 - 演奏練習装置 - Google Patents
演奏練習装置Info
- Publication number
- JP3395202B2 JP3395202B2 JP13977492A JP13977492A JP3395202B2 JP 3395202 B2 JP3395202 B2 JP 3395202B2 JP 13977492 A JP13977492 A JP 13977492A JP 13977492 A JP13977492 A JP 13977492A JP 3395202 B2 JP3395202 B2 JP 3395202B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- address
- tempo
- practice
- music
- 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
Landscapes
- Auxiliary Devices For Music (AREA)
- Electrophonic Musical Instruments (AREA)
Description
【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ファジー推論を応用し
て予め指定された課題曲を演奏者のレベルに最も適した
速度で練習演奏させる演奏練習装置に関する。 【0002】 【従来の技術】一般的に、鍵盤楽器などがスムーズに演
奏できるようになるのは容易でなく、かなりの練習を要
する。 【0003】そのため、本発明の出願人は、先に予め指
定された課題曲を練習演奏させる演奏練習装置を提案し
ている。この装置では、課題曲を演奏させてそのミス回
数をカウントし、そのカウント数が多いときは、課題曲
のレベルを下げ、少ないときはレベルの高い課題曲を選
択させている(実願平2ー91089参照)。これによ
り、練習者のレベルに応じた曲が選択され、練習演奏す
ることができる。 【0004】また、このように演奏者のレベルに合せて
課題曲を切り換えていく方法もあるが、課題曲のレベル
を変えずに、ゆっくり演奏したり速く演奏させたりする
方法もある。 【0005】 【発明が解決しようとする課題】ところで、上述したよ
うに課題曲のレベルを変えずに、演奏者のレベルに合せ
てゆっくり演奏したり速く演奏させたりする方法(すな
わち、曲の速さを可変する方法)の場合、練習者のレベ
ル判定を2値論理的に行っているため、速さレベルの変
化程度が自然でなく、必ずしも最適でないという問題点
があった。 【0006】すなわち、曲の速さ(=テンポ)をどの程
度にするかは、演奏者のレベルに応じてまちまちであ
り、ある場合には「前よりちょっと速く」とか、「やや
遅めに」などというように、デジタル的に割切れる数値
で表現されるものではなく、実際上はかなり「あいま
い」なものである。この「あいまい」な概念に対して好
ましい判定がなされているとは、いえなかった。 【0007】こうした人間の感覚的な量で調整するよう
な処理は非常に自然であるが、通常の演算でこれを行お
うとすると、膨大な処理時間がかかるという欠点があ
る。すなわち、「あいまい」な概念に対して好ましい判
定を行い、演奏者の能力に一致した曲の速さを選択しよ
うとすると、演奏者のレベルに関連すると思われる数多
くの入力パラメータを用いて複雑で、しかも大量の演算
を行う必要があり、処理数が飛躍的に多くなって現実的
な演奏練習装置を実現することが困難である。 【0008】そこで本発明は、ファジー推論を応用して
曲の速さの変化程度をより自然に最適に可変できる演奏
練習装置を提供することを目的としている。 【0009】 【課題を解決するための手段】上記目的達成のため、本
発明による演奏評価装置は、一連の音符データからなる
課題曲を記憶する曲データ記憶手段と、この曲データ記
憶手段から課題曲の音符データを最初から曲の終了まで
順次読み出す動作を繰り返す曲読出し手段と、外部操作
に応答して音高及びその発生タイミングを順次入力する
演奏操作子と、前記曲読出し手段により順次読み出され
る音符データの音高及びその発生タイミングと、当該読
み出される音符データに対応して前記演奏操作子により
順次入力される音高及びその発生タイミングとを比較
し、両者の不一致を検出すると共に、課題曲が最初から
曲終了まで読み出される間に検出された不一致回数をカ
ウントするミスカウント手段と、前記曲読出し手段によ
り前記曲データ記憶手段から課題曲を最初から曲終了ま
で読出した回数をカウントする練習回数カウント手段
と、前記ミスカウント手段により前記課題曲の最初から
曲終了までに発生する不一致回数のカウントが終了する
毎に、前記ミスカウント手段と練習回数カウント手段か
らのデータを入力パラメータとして所定のファジールー
ルに従ってファジー推論を行い、該推論出力に対応して
前記曲データ出力手段の音符データの読み出し速度を変
更する変更制御手段と、を備えたことを特徴とする。 【0010】 【作用】本発明では、課題曲演奏のミス回数および練習
回数を入力データとするファジー推論により音符データ
の読み出し速度が可変される。 【0011】したがって、演奏者のレベルという「あい
まい」な概念に対して好ましい判定が行われこととな
り、簡単な演算で演奏者の能力に最適のテンポで課題曲
の練習演奏ができる。 【0012】 【実施例】以下、図面を参照して本発明の実施例につい
て説明する。図1は本発明に係る演奏練習装置を電子鍵
盤楽器に適用したときの一実施例の全体構成図である。 【0013】図1において、この演奏練習装置は鍵盤部
1、CPU2、ROM3、テーブルROM4、ワーキン
グRAM5、スイッチ部6、タイマ7、時計部8、楽音
生成部9、表示部10、表示装置11、D/A変換器1
2、アンプ13およびスピーカ14によって構成され
る。 【0014】鍵盤部(演奏操作子に相当)1は鍵盤、押
鍵検出および発音割当て回路などからなり、CPU2と
の間で信号やデータの授受を行う。スイッチ部6はスタ
ートスイッチ、モード切換スイッチ、音色スイッチ、設
定スイッチなどを有し、例えば演奏をスタートさせた
り、演奏モードを切り換えたりするための操作を行うた
めに使用される。また、自分の演奏レベルにふさわしい
と思われる課題曲を設定スイッチによって設定する。 【0015】CPU2はROM3に格納されているプロ
グラムに従って演奏練習制御のために必要な処理を行
い、この処理は後述のフローチャートによって示され
る。ROM3は制御プログラムの他に、演奏の難易度の
異なる種々の曲データも記憶している。したがって、R
OM3は曲データ記憶手段を構成する。 【0016】テーブルROM4は後述するファジー推論
において使用するメンバシップ関数を表すテーブルデー
タを記憶している。ワーキングRAM5はCPU2が制
御を実行する際にワーキングエリアとして用いられるも
ので、例えば隣接する音符間の時間を示す音符長データ
や押圧鍵の音高を示す音高データなどの鍵情報を一時的
に記憶する。 【0017】楽音生成部9はCPU2からの命令に基づ
いて押鍵操作により鍵盤部1より出力されたキーコード
に対応した音高を有する楽音波形を生成して出力する。
このデジタルの楽音波形はその後、D/A変換器12で
アナログ信号に変換され、アンプ13で増幅されスピー
カ14より楽音として放音される。 【0018】タイマ7は練習者が押鍵するときのタイミ
ングを計時するために用いられる。表示部10は楽曲の
拍子を、例えばLED等の点滅で表示するメトロノーム
や、押鍵すべきキーをLED等で点灯表示するガイドラ
ンプ等を有する他に、各種のモード切り換えに伴う状態
の変化を表示する。 【0019】表示装置11は選択された曲の内容や演奏
者の練習に関する各種のデータを表示するもので、例え
ば練習者が練習を行った日の日付や、練習した回数、時
間、曲目、演奏ミスの回数など、練習に関するデータを
表示ためのテンキーやディスプレイなどを備えている。 【0020】時計部8は上述の表示装置11で表示され
る練習した日の日付や練習時間に関するデータを得るた
めの装置である。上記CPU2およびテーブルROM4
は全体として読み出し手段、ミスカウント手段、練習回
数カウント手段および可変制御手段を構成する。 【0021】この場合、CPU2は鍵盤部1からの情報
に基づきテーブルROM4に格納されているメンバーシ
ップ関数を参照しながら所定のファジールールに従って
ファジー推論を行い、課題曲に対応する音符データの読
み出し速度(すなわち、曲のテンポ)を可変するような
制御を行う。 【0022】ここで、テンポ可変のファジールールにつ
いて説明する。図2(a)、(b)は前件部のメンバー
シップ関数で、そのうち図2(a)はミス回数に関する
メンバーシップ関数、図2(b)は練習回数に関するメ
ンバーシップ関数である。また、図2(c)は後件部に
おけるファジー出力で、曲のテンポに関するメンバーシ
ップ関数である。 【0023】なお、各メンバーシップ関数におけるラベ
ルの意味は、次の通りである。 MS:「ミス回数が少ない」 MM:「ミス回数が多い」 LS:「練習回数が少ない」 LM:「練習回数が多い」 TS:「テンポを下げる」 TC:「テンポはそのまま」 TL:「テンポを上げる」 【0024】ファジィルールは、いわゆるIF、THE
N(もし、ならば)の形式で表現される。本実施例で
は、以下の4つのルールを採用している。 ルールA:IF ミス回数=MS AND 練習回数=
LS THEN ファジー出力=TC(テンポはそのまま) ファジィルールAは、「もし、ミス回数が少なく、かつ
練習回数が少ない場合にはテンポはそのままにする。」
という意味である。 【0025】ルールB:IF ミス回数=MM AN
D 練習回数=LS THEN ファジー出力=TC(テンポはそのまま) ファジィルールBは、「もし、ミス回数が多く、かつ練
習回数が少ない場合にはテンポはそのままにする。」と
いう意味である。 【0026】ルールC:IF 演奏ミス=MM AN
D 練習回数=LM THEN ファジー出力=TS(テンポを下げる) ファジィルールCは、「もし、演奏ミスが多く、かつ練
習回数が多い場合にはテンポを下げる。」という意味で
ある。 【0027】ルールD:IF 演奏ミス=MS AND
練習回数=LM THEN ファジー出力=TL(テンポを上げる) ファジィルールDは、「もし、演奏ミスが少なく、かつ
練習回数が多い場合にはテンポを上げる。」という意味
である。 【0028】次に、本実施例の演奏練習装置の動作につ
いて説明する。演奏方法 演奏者は、自分の演奏レベルにふさわしいと思われる課
題曲を設定スイッチによってとりあえず設定し、前述の
表示部10のメトロノームの表示するテンポに従って演
奏を行う。この場合、演奏者は楽譜を見ながら押鍵操作
をするか、あるいは楽譜を用いずに、前述のガイドラン
プに従って押鍵操作を行う。そうすると、以下に述べる
演奏練習制御によって演奏レベルがファジー推論され、
「あいまい」な概念に対して好ましい判定が行われる。 【0029】メインプログラム 図3は演奏練習制御の処理を示すメインプログラムであ
る。まず、本装置の電源がオンすると、まずステップS
1でイニシャライズ処理を行う。例えば、ワーキングR
AM5のクリアや後述のサブルーチンのイニシャライズ
などが行われる。また、テンポ可変データTVを[1]
に設定する。TV=[1]という状態は、曲の演奏テン
ポが基準の値であり、「テンポはそのままにする」とい
う状態に相当する。 【0030】次いで、ステップS2で設定スイッチがオ
ンしているか否かを判別する。設定スイッチは演奏者が
練習に先立って操作するもので、多数の課題曲の中から
自分の演奏レベルにふさわしいと思われる課題曲を設定
スイッチによって設定する。例えば、「10段階」の曲
レベルがあるとした場合、今回、「5段階」の課題曲が
ふさわしいと思われるときは、設定スイッチで[5]を
選択する。 【0031】設定スイッチがオンしていれば、ステップ
S3で今回の設定スイッチ量(すなわち、設定レベル:
ここでは例えば、[5]のレベル)をレベルカウンタL
に格納し、その後、ステップS4に進む。したがって、
ステップS3の処理ではL=[5]となる。一方、設定
スイッチがオンしていなければ、ステップS3〜5をジ
ャンプしてステップS6に進む。 【0032】ステップS4ではレベルカウンタLの値に
対応した曲データの指定する。今回は「5段階」の課題
曲が設定されているので、「5段階」の課題曲の曲デー
タのが指定され、この指定された曲データ(例えば、最
初のルーチンではその先頭位置、次回以降のルーチンで
はその対応する位置)の内容が表示装置11に表示され
る。 【0033】次いで、ステップS5で曲データ内のテン
ポデータTEMPを設定する。テンポデータTEMPは
課題曲の演奏速度を決定しているもので、このテンポデ
ータTEMPは前述したテンポ可変データTVによって
可変される。曲のテンポは1分間の拍数であり、例えば
テンポ=120に設定される。その後、演奏者は、表示
部10のガイドランプの点灯に従って設定されたテンポ
で曲の演奏を開始する。 【0034】演奏者による曲の演奏が開始されると、続
くステップS6においてミスカウンタ計測処理を行う。
ミスカウンタ計測処理は、練習者が正しい鍵を押してい
るかと、押鍵のタイミングが許容範囲内の誤差にあるか
を調べる処理で、詳しい処理内容は後述のサブルーチン
で説明する。ステップS6の処理により演奏ミス回数が
カウントされる。 【0035】次いで、ステップS7で練習回数カウンタ
Mをインクリメントする。これは、今回の練習を1回と
してカウントアップするものである。次いで、ステップ
S8では演奏ミス回数および練習回数に基づいて前述し
たファジールールAの演算を行う。同様に、ステップS
9、ステップS10、ステップS11では演奏ミス回数
および練習回数に基づいてそれぞれ前述したファジール
ールB、ファジールールC、ファジールールDの演算を
行う。これらファジールールA、B、C、Dの詳しい処
理内容は後述のサブルーチンで説明する。これにより、
ファジー推論における前件部の処理が行われ、各メンバ
ーシップ関数に対する適合度が求められる。 【0036】次いで、ステップS12でルール演算で得
られたデータの最大値をとる処理(すなわち、MAX演
算=OR処理)を行うとともに、ステップS13でこの
データの重心計算を行って脱ファジー化する。これによ
り、ファジー推論における後件部の処理が行われて演奏
者のテンポレベルPが求められる。なお、最大値演算お
よび重心演算の詳しい処理内容は後述のサブルーチンで
説明する。 【0037】次いで、ステップS14で今回得られたテ
ンポレベルPが先に設定スイッチによって設定したテン
ポ可変データTVと同一であるか否か判別し、同一(す
なわち、P=1)であるときはステップS16に進んで
テンポデータTEMPにテンポ可変データTVを乗ずる
処理(すなわち、TEMP=TEMP×TVの演算処
理)を実行する。この場合、TV=1であるから、今回
のルーチンでは曲のテンポが変らず、例えば先に設定し
たようにテンポ=120のままとなる。ステップS14
の処理を経ると、ステップS2に戻る。 【0038】一方、ステップS14で今回得られたテン
ポレベルPが先に設定スイッチによって設定したテンポ
可変データTVと同一でない(例えば、P=0.9)と
きはステップS15に進んで今回得られたテンポレベル
Pをテンポ可変データTVに置き換えるとともに、練習
回数カウンタMを[0]にクリアする。これは、次回の
ルーチンで曲のテンポを変えるために、新たな曲テンポ
での練習回数のカウンタを開始するためである。 【0039】その後、ステップS16に進み、テンポデ
ータTEMPに対して今回得られたテンポレベルPで置
き換えられたテンポ可変データTVを乗ずる処理(TE
MP=TEMP×TV)を実行する。この場合、TV=
P(P=0.9)であるから、次回のルーチンでは曲の
テンポが可変され、先に設定したテンポとは異なり、例
えばTEMP=TEMP×TV=120×0.9=10
8となってテンポが上げられる。 【0040】タイマインターラプト処理 図4はタイマインターラプト処理を示すフローチャート
である。この処理は、一定時間毎に割り込みがかかって
テンポの計算を行うものである。一定時間毎の割り込み
がかかると、最初にステップS201でテンポインクリ
メントデータl(エル)を[1]だけインクリメント
し、ステップS202でメインプログラムにおけるテン
ポデータTEMP(例えば、TEMP=120)がテン
ポインクリメントデータlに等しいか否かを判別する。 【0041】等しいときにはステップS203で曲の演
算速度に対応するタイミングデータTをインクリメント
する。なお、タイミングデータTはCPU2内のカウン
タの時間データであり、曲の開始時から順次カウントア
ップしているものである。 【0042】次いで、ステップS204でテンポインク
リメントデータlを[0]にリセットしてリターンす
る。一方、ステップS202でテンポデータTEMPが
テンポインクリメントデータlに等しくないときは、今
回の割込みルーチンを終了してリターンする。このよう
に、タイマ割込みによってテンポインクリメントデータ
lをインクリメントしていき、曲のテンポデータTEM
Pと等しいときに曲の演算速度をインクリメントするこ
とで、テンポの計算が行われる。 【0043】ミスカウンタ計測処理 図5はミスカウンタ計測処理のサブルーチンを示すフロ
ーチャートである。このフローは練習者が練習演奏時
に、誤った押鍵操作を行った場合の誤押鍵操作回数のカ
ウント(ミスカウント)処理を行うものである。 【0044】本実施例では、押鍵すべき鍵の押し間違い
の他に、押鍵時のタイミングの間違いも誤押鍵操作回数
にカウントされる。すなわち、練習者が例えば図6
(a)に示すメロディを演奏する場合、同図(b)に示
すように演奏者の各押鍵タイミングが、1拍目、2拍
目、3拍目、・・・の各々のタイミングにおける許容範
囲tに入っているか否かを判定し、入っていない場合に
ミスカウントするようにする。 【0045】また、図7はROM3に記憶される曲デー
タの一例である。このデータは図6(a)に示すメロデ
ィに対応し、ノートナンバー(音階)と音符長データが
交互に書き込まれているとともに、曲データの先頭部分
にはテンポデータTEMPが、また曲データの最終部分
にはENDマークである“00 00”が記憶されてい
る。 【0046】そして、これらノートナンバー(音階)お
よび音符長データという2つのパラメータにより1つの
音符データが決定される。音符長データは、例えば「2
分音符」の場合、“48”として表され、「4分音符」
の場合、“24”として表され、さらに「8分音符」の
場合、“12”として表される。また、テンポデータT
EMPにより曲の演算速度が決定される。 【0047】最初に、1拍目の音を発音する処理から説
明する。サブルーチンがスタートすると、まずステップ
S21でミスカウンタをクリアして[0]に戻し、ステ
ップS22で後述の音符長データBの累算値Xを[0]
にリセットする。Xは、例えばCPU2の図示しない時
間レジスタにその値が書き込まれる。 【0048】次いで、ステップS23で次の音符の曲デ
ータをロードする。曲データはノートナンバーAnと、
音符長Bとによって構成される。これにより、ROM3
より音高データAn(すなわち、図7のノートナンバ
ー)が順次読み出され、CPU2内の特には図示しない
音高レジスタに書き込まれる。 【0049】また、同様にROM3に対してノートナン
バーAnと対で記憶されている音符長データBが、RO
M3より順次読み出され、CPU2内の図示しない音符
長レジスタに書き込まれる。 【0050】次いで、ステップS24では曲の終りか否
か(すなわち、An=B=0か)を判別し、曲の終りの
ときはメインプログラムにリターンし、終りでなければ
ステップS25に進む。 【0051】さて、上述のようにして音符の曲データが
ロードされると、練習者はメトロノームの表示するテン
ポに従って演奏を行うが、楽譜を見ながら押鍵操作をす
るか、あるいは楽譜を用いずに、前述のガイドランプに
従って押鍵操作を行うかの何れかの態様となる。例え
ば、練習者は前述のメトロノームのテンポ表示と押鍵位
置を示すガイドラインに従って鍵盤部1を演奏操作す
る。 【0052】そこで、押鍵操作情報を検出するために、
ステップS25では鍵盤部1の鍵を走査し、ステップS
26で鍵がオンしたか否かを判別する。例えば、オンし
ていれば、ステップS27に進んで押鍵処理を行う。こ
の場合、鍵盤部1から押鍵された鍵のデータ(音高デー
タ)が出力され、その鍵データは上述とは別のCPU2
内の特には図示しない押鍵検出レジスタA1に書き込ま
れる。これにより、1拍目の音高データに対応する楽音
が生成され、発音が行われる。 【0053】続いてステップS28で、今回、押鍵検出
レジスタA1に書き込まれた鍵データが先にロードされ
たノートナンバーAnと等しいか(A1=Anか:すな
わち、正しい鍵が押されたか)否かを判別する。そし
て、A1=Anのときは正しい鍵が押されたと判断し、
ステップS31に進む。 【0054】一方、A1≠Anのときは正しい鍵が押さ
れていないと判断し、ステップS30でミスカウンタを
カウントアップした後にステップS31に進む。具体的
には、上記2つのレジスタの各内容がCPU2内で比較
され、両者が一致していなければ、練習者の誤打鍵があ
ったとして、ワーキングRAM5内に設けられたミスカ
ウンタがカウントアップされる。このようにして、押鍵
すべき鍵の押し間違いが誤押鍵操作回数としてカウント
される。 【0055】次に、押鍵時のタイミングの間違いを誤押
鍵操作回数としてカウントする場合について説明する。
前述したように、音符長データBはノートナンバーAn
と対でROM3に記憶されており、音符の曲データをロ
ードする際に、順次読み出され、CPU2内の音符長レ
ジスタに書き込まれが、この音符長データBは1音毎に
累算される。そして、この累算値Xは曲の開始時にリセ
ットされる(ステップS22の処理)ため、曲の開始時
から現在の曲位置までの時間を示すことになる。 【0056】これに対して、練習者が鍵盤部1を演奏操
作することにより、鍵盤部1からは前述のように押鍵さ
れた鍵のデータ(音高データ)が出力されるとともに、
その押鍵タイミングで曲の開始時から順次カウントアッ
プしているCPU2内のカウンタの時間データがタイミ
ングデータTとして出力される。 【0057】上記タイミングデータTが前述の音符長デ
ータBの累算値Xに対して、許容値t(図6(b)参
照)以内に入るか否かが次のようにして判定される。す
なわち、音符長データBの累算値Xと許容値tを用いて
CPU2内で上限許容値(X+t/2)と、下限許容値
(X−t/2)とが演算される。これにより、タイミン
グデータTが上述の許容範囲(X±t/2)に入ってい
るか否かが判定される。 【0058】この判定処理をサブルーチンで説明する
と、ステップS26で鍵がオンしていない場合には、続
くステップS29で上記タイミングデータTが T≧X+t/2 なる式を満足するか否を判別する。 【0059】例えば、今回のルーチンは1拍目であるか
ら、X=0であり、図6(b)に示すようにタイミング
データTがゾーンに入っていれば(T<t/2のと
き)、このとき押鍵するとそのタイミングが正しいこと
になる。 【0060】このときはステップS29の判別結果がN
Oとなり、ステップS25に戻ってステップS26に進
み、ここで押鍵されると、ステップS27に分岐する。
したがって、この場合は押鍵タイミングが正しく、少な
くともタイミングの判定ではミスカウントされない。 【0061】一方、ステップS29でYESの場合は、
押鍵するタイミングが経過してしまい、タイミングデー
タTがゾーンから外れたと判断する。したがって、こ
のときは続くステップS30でミスカウンタをカウント
アップする。これにより、押鍵時のタイミングの間違い
が誤押鍵操作回数としてカウントされる。 【0062】次いで、ステップS31では音符長データ
Bの累算値Xを音符長データBの長さ分だけインクリメ
ントする。今回は1拍目であるから、X=0であり、次
の2拍目に対応するようにX=Bにインクリメントされ
る。次いで、ステップS32で鍵盤部1の鍵を走査し、
ステップS33で鍵がオンしたか否か、また続くステッ
プS34で鍵がオフしたか否かを判別する。この処理は
1拍目の離鍵と、2拍目の押鍵をそれぞれ判別するため
のものである。 【0063】ステップS34で鍵がオフしていれば、1
拍目の離鍵と判断し、ステップS35で離鍵処理(すな
わち、消音処理)を行う。これにより、1拍目の音高デ
ータに対応する楽音の生成が停止する。一方、ステップ
S34で鍵がオフしていなければ、1拍目の離鍵が未だ
行われていないと判断し、ステップS36でタイミング
データTが T≧X−t/2 なる式を満足するか否を判別する。 【0064】例えば、このステップ時点では1拍目がオ
ンされた後であるから、X=Bであり、図6(b)に示
すようにタイミングデータTがゾーンを超えると(T
≧B−t/2のとき)、このとき離鍵すれば、そのタイ
ミングが正しいことになる。 【0065】このときはステップS36の判別結果がY
ESとなり、ステップS23に戻って次の音符データ、
すなわち2拍目の音符データをロードする処理に移る。
したがって、この場合は離鍵タイミングが正しく、少な
くともタイミングの判定ではミスカウントされない。 【0066】一方、ステップS36の判別結果がNOの
ときは、未だオフしていないか、あるいはオフしたが離
鍵タイミングが正しくない場合であり、ステップS32
に戻る。そして、ステップS32以降の上記処理を実行
する。 【0067】このケースで、ステップS33において鍵
がオンすると、2拍目の押鍵がされたと判断し、ステッ
プS37に進んで押鍵処理を行う。これにより、鍵盤部
1から2拍目に対応する押鍵された鍵のデータ(音高デ
ータ)が出力され、その鍵データはCPU2内の2拍目
の押鍵検出レジスタA2に書き込まれる。その結果、2
拍目の音高データに対応する楽音が生成され、発音が行
われる。 【0068】ただし、今回の2拍目の発音処理は押鍵タ
イミングが正しくないので、続くステップS38でミス
カウンタをカウントアップする。これにより、2拍目の
押鍵時のタイミングの間違いが誤押鍵操作回数としてカ
ウントされる。 【0069】その後、ステップS36に進み、タイミン
グデータTがゾーンを超えると(T≧B−t/2のと
き)、YESに分岐してステップS23に戻る。一方、
上記ケースで、ステップS33において鍵がオンしなけ
れば、ステップS34以降の処理を繰り返す。そして、
鍵がオフして時点のタイミングから上述と同様の判断を
行う。 【0070】このようにして、1拍目の離鍵時のタイミ
ングの間違いが誤離鍵操作回数としてミスカウントされ
る。 【0071】以下、同様にして2拍目、3拍目、・・・
について押鍵時のタイミングおよび離鍵時のタイミング
のそれぞれについて、誤鍵操作回数を判断する処理が行
われる。 【0072】この場合、図6(a)、(b)に示すよう
に、例えば2拍目のジャストタイミングはの位置であ
り、2拍目の押鍵タイミングの許容ゾーンは〜の期
間である。同様に、2拍目の離鍵タイミングおよび3拍
目の押鍵タイミングの許容ゾーン開始はの位置であ
る。 【0073】ファジールールA演算処理 図8はファジールールA演算処理のサブルーチンを示す
フローチャートである。まず、ステップS41でミスカ
ウント値をアドレスとして、テーブルROM4における
「ミス回数が少ない」というメンバーシップ関数が格納
されているMSテーブルからデータ(前件部データ)D
aを読み出す。この場合のデータは、図2(a)に示す
メンバーシップ関数MSの適合度(グレード)に相当
し、0〜1の範囲の値である。 【0074】すなわち、データDaはミスカウント値と
いう入力値に対してルールAが示した適合度である。デ
ータDaは、例えばCPU2内の同名のレジスタに格納
され、これは後述のデータDbについても同様である。 【0075】同様に、ステップS42で練習回数Mをア
ドレスとして、テーブルROM4における「練習回数が
少ない」というメンバーシップ関数が格納されているL
Sテーブルからデータ(前件部データ)Dbを読み出
す。この場合のデータは、図2(b)に示すメンバーシ
ップ関数LSの適合度に相当し、0〜1の範囲の値であ
る。すなわち、データDbは練習回数Mという入力値に
対してルールAが示した適合度である。 【0076】次いで、ステップS43でデータDaがデ
ータDb以上であるか否かを判別し、Da≧Dbのとき
はステップS44に進んで、値の小さい方をデータDと
して採用する。このケースではD=Dbとなる。 【0077】この処理は、各データの論理積をとるもの
で、いわゆる「MINをとる」ことに相当するものであ
る。これは、「MINをとる」ことにより、2つの入力
値に対して少なくとも両方を満足する状態を得るためで
ある。これにより、データDaとデータDbのうち、最
小のものが今回のルーチンにおいてルールAが示す判断
として採用される。一方、Da<Dbのときはステップ
S45に進んで、D=Daを採用する。 【0078】このように、ルールAに対して、その時点
での2つの入力値(ミスカウント値および練習回数M)
が判断され、ルールAの前件部に対する適合度が求めら
れる。 【0079】次いで、ステップS46でアドレスポイン
タiを[0]にリセットし、ステップS47でアドレス
ポインタiが終了アドレスに等しいか否か判別する。終
了アドレスでなければ、続くステップS48でiをアド
レスとしてテーブルROM4の「テンポそのまま」とい
うメンバーシップ関数が格納されているTCテーブルか
らデータ(後件部データ)Eを読み出す。この場合のデ
ータは、図2(c)に示すメンバーシップ関数TCの適
合度に相当する。データEは、例えばCPU2内の同名
のレジスタに格納される。 【0080】次いで、ステップS49でデータDとデー
タEを比較し、D>EのときはステップS50に進んで
iをアドレスとしてワーキングRAM5に入っているP
1メモリにデータEを書き込む。一方、D≦Eのときは
ステップS51に進んで同じくiをアドレスとしてワー
キングRAM5に入っているP1メモリにデータDを書
き込む。このように、小さい方の値が採用されてメンバ
ーシップ関数TCをカットする処理が行われる。 【0081】この処理は、後件部たるメンバーシップ関
数TCを前件部の適合度に応じてカットする「いわゆる
頭切り法」を行うものである。 【0082】次いで、ステップS52でアドレスポイン
タiを[1]だけインクリメントし、その後、ステップ
S47に戻る。そして、ステップS47でアドレスポイ
ンタiが終了アドレスに等しくなるまで、同様の処理を
繰り返し、アドレスポインタiが終了アドレスに等しく
なると、メインプログラムにリターンする。アドレスポ
インタiを終了アドレスまでインクリメントすることに
より、メンバーシップ関数TCをすべてサーチすること
になる。これにより、メンバーシップ関数TCの全てに
対して前件部の適合度に応じた「頭切り法」が実行され
る。 【0083】このようにして、演奏ミス回数および練習
回数に基づいてファジールールAの演算が行われ、「演
奏ミスが少なく、かつ練習回数が少ない場合にはテンポ
はそのまま」という処理に対してどの程度適合している
かが算出される。すなわち、テンポはそのままにするフ
ァジー操作量が、頭切りしたメンバーシップ関数TCの
大きさとして求められる。 【0084】ファジールールB演算処理 図9はファジールールB演算処理のサブルーチンを示す
フローチャートである。まず、ステップS61でミスカ
ウント値をアドレスとして、テーブルROM4における
「ミス回数が多い」というメンバーシップ関数が格納さ
れているMMテーブルからデータ(前件部データ)Da
を読み出す。この場合のデータは、図2(a)に示すメ
ンバーシップ関数MMの適合度(グレード)に相当し、
0〜1の範囲の値である。 【0085】すなわち、データDaはミスカウント値と
いう入力値に対してルールBが示した適合度である。デ
ータDaは、例えばCPU2内の同名のレジスタに格納
され、これは後述のデータDbについても同様である。 【0086】同様に、ステップS62で練習回数Mをア
ドレスとして、テーブルROM4における「練習回数が
少ない」というメンバーシップ関数が格納されているL
Sテーブルからデータ(前件部データ)Dbを読み出
す。この場合のデータは、図2(b)に示すメンバーシ
ップ関数LSの適合度に相当し、0〜1の範囲の値であ
る。すなわち、データDbは練習回数Mという入力値に
対してルールBが示した適合度である。 【0087】次いで、ステップS63でデータDaがデ
ータDb以上であるか否かを判別し、Da≧Dbのとき
はステップS64に進んで、値の小さい方をデータDと
して採用する。このケースではD=Dbとなる。 【0088】この処理は、各データの論理積をとるもの
で、いわゆる「MINをとる」ことに相当するものであ
る。これは、「MINをとる」ことにより、2つの入力
値に対して少なくとも両方を満足する状態を得るためで
ある。これにより、データDaとデータDbのうち、最
小のものが今回のルーチンにおいてルールBが示す判断
として採用される。一方、Da<Dbのときはステップ
S65に進んで、D=Daを採用する。 【0089】このように、ルールBに対して、その時点
での2つの入力値(ミスカウント値および練習回数M)
が判断され、ルールBの前件部に対する適合度が求めら
れる。 【0090】次いで、ステップS66でアドレスポイン
タiを[0]にリセットし、ステップS67でアドレス
ポインタiが終了アドレスに等しいか否か判別する。終
了アドレスでなければ、続くステップS68でiをアド
レスとしてテーブルROM4の「テンポはそのまま」と
いうメンバーシップ関数が格納されているTCテーブル
からデータ(後件部データ)Eを読み出す。この場合の
データは、図2(c)に示すメンバーシップ関数TCの
適合度に相当する。データEは、例えばCPU2内の同
名のレジスタに格納される。 【0091】次いで、ステップS69でデータDとデー
タEを比較し、D>EのときはステップS70に進んで
iをアドレスとしてワーキングRAM5に入っているP
2メモリにデータEを書き込む。一方、D≦Eのときは
ステップS71に進んで同じくiをアドレスとしてワー
キングRAM5に入っているP2メモリにデータDを書
き込む。このように、小さい方の値が採用されてメンバ
ーシップ関数TCをカットする処理が行われる。 【0092】この処理は、後件部たるメンバーシップ関
数TCを前件部の適合度に応じてカットする「いわゆる
頭切り法」を行うものである。 【0093】次いで、ステップS72でアドレスポイン
タiを[1]だけインクリメントし、その後、ステップ
S77に戻る。そして、ステップS77でアドレスポイ
ンタiが終了アドレスに等しくなるまで、同様の処理を
繰り返し、アドレスポインタiが終了アドレスに等しく
なると、メインプログラムにリターンする。アドレスポ
インタiを終了アドレスまでインクリメントすることに
より、メンバーシップ関数TCをすべてサーチすること
になる。これにより、メンバーシップ関数TCの全てに
対して前件部の適合度に応じた「頭切り法」が実行され
る。 【0094】このようにして、演奏ミス回数および練習
回数に基づいてファジールールBの演算が行われ、「演
奏ミスが多く、かつ練習回数が少ない場合にはテンポは
そのまま」という処理に対してどの程度適合しているか
が算出される。すなわち、テンポはそのままにするとい
うファジー操作量が、頭切りしたメンバーシップ関数T
Cの大きさとして求められる。 【0095】ファジールールC演算処理 図10はファジールールC演算処理のサブルーチンを示
すフローチャートである。まず、ステップS81でミス
カウント値をアドレスとして、テーブルROM4におけ
る「ミス回数が多い」というメンバーシップ関数が格納
されているMMテーブルからデータ(前件部データ)D
aを読み出す。この場合のデータは、図2(a)に示す
メンバーシップ関数MMの適合度(グレード)に相当
し、0〜1の範囲の値である。すなわち、データDaは
ミスカウント値という入力値に対してルールCが示した
適合度である。データDaは、例えばCPU2内の同名
のレジスタに格納され、これは後述のデータDbについ
ても同様である。 【0096】同様に、ステップS82で練習回数Mをア
ドレスとして、テーブルROM4における「練習回数が
多い」というメンバーシップ関数が格納されているLM
テーブルからデータ(前件部データ)Dbを読み出す。
この場合のデータは、図2(b)に示すメンバーシップ
関数LMのグレードに相当し、0〜1の範囲の値であ
る。すなわち、データDbは練習回数Mという入力値に
対してルールCが示した適合度である。 【0097】次いで、ステップS83でデータDaがデ
ータDb以上であるか否かを判別し、Da≧Dbのとき
はステップS84に進んで、値の小さい方をデータDと
して採用する。このケースではD=Dbとなる。 【0098】この処理は、各データの論理積をとるもの
で、いわゆる「MINをとる」ことに相当するものであ
る。これは、「MINをとる」ことにより、2つの入力
値に対して少なくとも両方を満足する状態を得るためで
ある。これにより、データDaとデータDbのうち、最
小のものが今回のルーチンにおいてルールCが示す判断
として採用される。一方、Da<Dbのときはステップ
S85に進んで、D=Daを採用する。 【0099】このように、ルールCに対して、その時点
での2つの入力値(ミスカウント値および練習回数M)
が判断され、ルールCの前件部に対する適合度が求めら
れる。 【0100】次いで、ステップS86でアドレスポイン
タiを[0]にリセットし、ステップS87でアドレス
ポインタiが終了アドレスに等しいか否か判別する。終
了アドレスでなければ、続くステップS88でiをアド
レスとしてテーブルROM4の「テンポを下げる」とい
うメンバーシップ関数が格納されているTSテーブルか
らデータ(後件部データ)Eを読み出す。この場合のデ
ータは、図2(c)に示すメンバーシップ関数TSの適
合度に相当する。データEは、例えばCPU2内の同名
のレジスタに格納される。 【0101】次いで、ステップS89でデータDとデー
タEを比較し、D>EのときはステップS90に進んで
iをアドレスとしてワーキングRAM5に入っているP
3メモリにデータEを書き込む。一方、D≦Eのときは
ステップS91に進んで同じくiをアドレスとしてワー
キングRAM5に入っているP3メモリにデータDを書
き込む。このように、小さい方の値が採用されてメンバ
ーシップ関数TSをカットする処理が行われる。 【0102】この処理は、後件部たるメンバーシップ関
数TSを前件部の適合度に応じてカットする「いわゆる
頭切り法」を行うものである。 【0103】次いで、ステップS92でアドレスポイン
タiを[1]だけインクリメントし、その後、ステップ
S87に戻る。そして、ステップS87でアドレスポイ
ンタiが終了アドレスに等しくなるまで、同様の処理を
繰り返し、アドレスポインタiが終了アドレスに等しく
なると、メインプログラムにリターンする。アドレスポ
インタiを終了アドレスまでインクリメントすることに
より、メンバーシップ関数TSをすべてサーチすること
になる。これにより、メンバーシップ関数TSの全てに
対して前件部の適合度に応じた「頭切り法」が実行され
る。 【0104】このようにして、演奏ミス回数および練習
回数に基づいてファジールールCの演算が行われ、「演
奏ミスが多く、かつ練習回数が多い場合にはテンポを下
げる」という処理に対してどの程度適合しているかが算
出される。すなわち、テンポを下げるというファジー操
作量が、頭切りしたメンバーシップ関数TSの大きさと
して求められる。 【0105】ファジールールD演算処理 図11はファジールールD演算処理のサブルーチンを示
すフローチャートである。まず、ステップS101でミ
スカウント値をアドレスとして、テーブルROM4にお
ける「ミス回数が少ない」というメンバーシップ関数が
格納されているMSテーブルからデータ(前件部デー
タ)Daを読み出す。この場合のデータは、図2(a)
に示すメンバーシップ関数MSの適合度(グレード)に
相当し、0〜1の範囲の値である。すなわち、データD
aはミスカウント値という入力値に対してルールDが示
した適合度である。データDaは、例えばCPU2内の
同名のレジスタに格納され、これは後述のデータDbに
ついても同様である。 【0106】同様に、ステップS102で練習回数Mを
アドレスとして、テーブルROM4における「練習回数
が多い」というメンバーシップ関数が格納されているL
Mテーブルからデータ(前件部データ)Dbを読み出
す。この場合のデータは、図2(b)に示すメンバーシ
ップ関数LMのグレードに相当し、0〜1の範囲の値で
ある。すなわち、データDbは練習回数Mという入力値
に対してルールDが示した適合度である。 【0107】次いで、ステップS103でデータDaが
データDb以上であるか否かを判別し、Da≧Dbのと
きはステップS104に進んで、値の小さい方をデータ
Dとして採用する。このケースではD=Dbとなる。 【0108】この処理は、各データの論理積をとるもの
で、いわゆる「MINをとる」ことに相当するものであ
る。これは、「MINをとる」ことにより、2つの入力
値に対して少なくとも両方を満足する状態を得るためで
ある。これにより、データDaとデータDbのうち、最
小のものが今回のルーチンにおいてルールDが示す判断
として採用される。一方、Da<Dbのときはステップ
S105に進んで、D=Daを採用する。 【0109】このように、ルールDに対して、その時点
での2つの入力値(ミスカウント値および練習回数M)
が判断され、ルールDの前件部に対する適合度が求めら
れる。 【0110】次いで、ステップS106でアドレスポイ
ンタiを[0]にリセットし、ステップS107でアド
レスポインタiが終了アドレスに等しいか否か判別す
る。終了アドレスでなければ、続くステップS108で
iをアドレスとしてテーブルROM4の「テンポを上げ
る」というメンバーシップ関数が格納されているTLテ
ーブルからデータ(後件部データ)Eを読み出す。この
場合のデータは、図2(c)に示すメンバーシップ関数
TLの適合度に相当する。データEは、例えばCPU2
内の同名のレジスタに格納される。 【0111】次いで、ステップS109でデータDとデ
ータEを比較し、D>EのときはステップS100に進
んでiをアドレスとしてワーキングRAM5に入ってい
るP4メモリにデータEを書き込む。一方、D≦Eのと
きはステップS111に進んで同じくiをアドレスとし
てワーキングRAM5に入っているP4メモリにデータ
Dを書き込む。このように、小さい方の値が採用されて
メンバーシップ関数TLをカットする処理が行われる。 【0112】この処理は、後件部たるメンバーシップ関
数TLを前件部の適合度に応じてカットする「いわゆる
頭切り法」を行うものである。 【0113】次いで、ステップS112でアドレスポイ
ンタiを[1]だけインクリメントし、その後、ステッ
プS107に戻る。そして、ステップS107でアドレ
スポインタiが終了アドレスに等しくなるまで、同様の
処理を繰り返し、アドレスポインタiが終了アドレスに
等しくなると、メインプログラムにリターンする。アド
レスポインタiを終了アドレスまでインクリメントする
ことにより、メンバーシップ関数TLをすべてサーチす
ることになる。これにより、メンバーシップ関数TLの
全てに対して前件部の適合度に応じた「頭切り法」が実
行される。 【0114】このようにして、演奏ミス回数および練習
回数に基づいてファジールールての演算が行われ、「演
奏ミスが少なく、かつ練習回数が多い場合にはテンポを
上げる」という処理に対してどの程度適合しているかが
算出される。すなわち、テンポを上げるというファジー
操作量が、頭切りしたメンバーシップ関数TLの大きさ
として求められる。 【0115】最大値演算処理 図12は最大値演算処理のサブルーチンを示すフローチ
ャートである。まず、ステップS121でアドレスポイ
ンタiを[0]にリセットし、ステップS122でアド
レスポインタiをアドレスとしてワーキングRAM5に
入っているP1メモリからデータD1を読み出す。 【0116】データD1は、ファジールールAについて
の演算結果であり、具体的には、「演奏ミスが少なく、
かつ練習回数が少ない場合にはテンポはそのまま」とい
う処理に対してどの程度適合しているか算出して頭切り
したメンバーシップ関数TCに対応する。 【0117】また、ステップS123でアドレスポイン
タiをアドレスとしてワーキングRAM5に入っている
P2メモリからデータD2を読み出す。 【0118】データD2は、ファジールールBについて
の演算結果であり、具体的には、「演奏ミスが多く、か
つ練習回数が少ない場合にはテンポはそのまま」という
処理に対してどの程度適合しているか算出して頭切りし
たメンバーシップ関数TCに対応する。 【0119】さらに、ステップS124で同様にアドレ
スポインタiをアドレスとしてワーキングRAM5に入
っているP3メモリからデータD3を読み出す。 【0120】データD3は、ファジールールCについて
の演算結果であり、具体的には、「演奏ミスが多く、か
つ練習回数が多い場合にはテンポを下げる」という処理
に対してどの程度適合しているか算出して頭切りしたメ
ンバーシップ関数TSに対応する。 【0121】次いで、ステップS125で同様にアドレ
スポインタiをアドレスとしてワーキングRAM5に入
っているP4メモリからデータD4を読み出す。 【0122】データD4は、ファジールールDについて
の演算結果であり、具体的には、「演奏ミスが少なく、
かつ練習回数が多い場合にはテンポを上げる」という処
理に対してどの程度適合しているか算出して頭切りした
メンバーシップ関数TLに対応する。 【0123】次いで、ステップS126で上記各データ
D1〜D4のうちの最大値を判別する。そして、データ
D1〜D4の最大値判別結果に応じてそれぞれステップ
S127、ステップS128、ステップS129、ステ
ップS130に進む。 【0124】このような最大値判別を行っているのは、
各ファジールールA〜D毎の推論結果を統合するために
論理和(OR論理)をとる必要がかあるからで、いわゆ
る「MAXをとる」という処理に相当するものである。 【0125】具体的には、例えばある瞬間の練習演奏状
態がファジールールAからファジールールDまでの、ど
のルールに影響されるのか、少しでも影響されるなら、
それは課題曲のレベル判断に反映しておきたいという要
求に答えるもので、これが「OR論理」の関係の基本の
考え方である。そして、この考え方を集合論では「和を
とる」としており、本実施例では、どれかひとつでも影
響がある限り、考察の対象にするとして上記処理が実行
される。 【0126】さて、ステップS127ではアドレスポイ
ンタiをアドレスとしてワーキングRAM5に入ってい
るP4メモリにデータD1を書き込む。これにより、今
回のアドレスポインタi(最初のルーチンではi=0)
の値によって指定されるファジールールAの演算結果で
ある頭切りしたメンバーシップ関数TCの一部がP4メ
モリに書き込まれる。 【0127】なお、後述のように、アドレスポインタi
を終了アドレスまでインクリメントすることにより、頭
切りされたメンバーシップ関数TCがすべてサーチされ
てP4メモリに書き込まれることになる。 【0128】ステップS128ではアドレスポインタi
をアドレスとしてワーキングRAM5に入っているP4
メモリにデータD2を書き込む。これにより、今回のア
ドレスポインタiの値によって指定されるファジールー
ルBの演算結果である頭切りしたメンバーシップ関数T
Cの一部がP4メモリに書き込まれる。 【0129】同様に、ステップS129ではアドレスポ
インタiをアドレスとしてワーキングRAM5に入って
いるP4メモリにデータD3を書き込む。これにより、
今回のアドレスポインタiの値によって指定されるファ
ジールールCの演算結果である頭切りしたメンバーシッ
プ関数TSの一部がP4メモリに書き込まれる。 【0130】また、同様にステップS130ではアドレ
スポインタiをアドレスとしてワーキングRAM5に入
っているP4メモリにデータD4を書き込む。これによ
り、今回のアドレスポインタiの値によって指定される
ファジールールDの演算結果である頭切りしたメンバー
シップ関数TLの一部がP4メモリに書き込まれる。 【0131】次いで、ステップS131でアドレスポイ
ンタiが終了アドレスに等しいか否か判別する。終了ア
ドレスでなければ、続くステップS132でアドレスポ
インタiを[1]だけインクリメントし、その後、ステ
ップS122に戻る。そして、ステップS131でアド
レスポインタiが終了アドレスに等しくなるまで、上記
処理を繰り返し、アドレスポインタiが終了アドレスに
等しくなると、メインプログラムにリターンする。 【0132】アドレスポインタiを終了アドレスまでイ
ンクリメントすることにより、頭切りされた各メンバー
シップ関数TC、TS、TLがすべてサーチされてP4
メモリにデータD1〜D4として書き込まれる。 【0133】このようにして、各ファジールールA〜D
毎の推論結果を統合するために論理和をとる(「MAX
をとる」)処理が実行され、頭切りされた各メンバーシ
ップ関数TC、TS、TLがOR合成される。すなわ
ち、MAX合成処理によって各ファジールールA〜D毎
の推論結果が重ね合わせられて合成出力が生成される。 【0134】重心計算処理 図13は重心計算処理のサブルーチンを示すフローチャ
ートである。まず、ステップS151でアドレスポイン
タiを[0]にリセットするとともに、面積レジスタa
reaおよび重心レジスタhafを同様に[0]にリセ
ットする。面積レジスタareaは重心計算に必要な面
積areaのデータを格納するもので、重心レジスタh
afは重心計算に必要な重心値hafを格納するもので
ある。 【0135】次いで、ステップS152でアドレスポイ
ンタiをアドレスとしてワーキングRAM5に入ってい
るP4メモリからデータD5を読み出す。データD5
は、前述の最大値演算処理によって頭切りされた後件部
の各メンバーシップ関数TC、TS、TLをOR合成し
たものの一部(iをアドレスとして指定された部分)
で、言い換えると、MAX合成処理によって各ファジー
ルールA〜D毎の推論結果が重ね合わせられた合成出力
データ(後に、OR合成関数として表す)の一部であ
る。 【0136】今回は、i(最初のルーチンではi=0)
をアドレスとしてP4メモリから合成出力データの一部
を読み出したことになる。なお、後述のように、アドレ
スポインタiを終了アドレスまでインクリメントするこ
とにより、合成出力データがすべてサーチされて読み出
されることになる。 【0137】すなわち、続くステップS153では面積
レジスタareaの値を、今回読み出した合成出力デー
タD5だけインクリメントして面積areaの積算値を
算出する。 【0138】次いで、ステップS154でアドレスポイ
ンタiが終了アドレスに等しいか否か判別する。終了ア
ドレスでなければ、続くステップS155でアドレスポ
インタiを[1]だけインクリメントし、その後、ステ
ップS152に戻る。そして、ステップS154でアド
レスポインタiが終了アドレスに等しくなるまで、上記
処理を繰り返し、アドレスポインタiが終了アドレスに
等しくなると、ステップS156に抜ける。 【0139】アドレスポインタiを終了アドレスまでイ
ンクリメントすることにより、頭切りされた後件部の各
メンバーシップ関数TC、TS、TLのOR合成出力デ
ータがすべてサーチされて読み出されることになる。言
い換えれば、最大値演算処理で得られたデータの集合を
2次元図形に対応させ、このデータ集合部分の面積を積
分演算によってすべてサーチして読み出して計算したこ
とになる。その後、データ集合部分の面積に対応する積
分値が1/2になる値を重心値として算出する。 【0140】すなわち、ステップS156に進み、ステ
ップS153で求めた積算面積areaの1/2の値を
重心値hafとして重心レジスタhafに記憶する。次
いで、ステップS157で各メンバーシップ関数TC、
TS、TLのOR合成関数の横軸に対応するjおよび面
積積算エリアbalを共に[0]にリセットする。 【0141】OR合成関数は、最大値演算処理で得られ
たデータ集合を2次元図形に対応させた場合の関数であ
り、その横軸がjに相当し、その面積の積算エリアがb
alに相当する。なお、jおよびbalの値は、例えば
同名のレジスタに格納される。 【0142】次いで、ステップS158で横軸jをアド
レスとしてワーキングRAM5に入っているP4メモリ
からOR合成関数に対応するデータD5を読み出す。続
くステップS159では面積積算エリアbalの値を、
今回読み出したデータD5だけインクリメントして面積
積算エリアbalを積算する。 【0143】次いで、ステップS160で積算した面積
積算エリアbalを重心値hafと比較し、面積積算エ
リアbalが重心値hafより小さいときはステップS
162に進んで横軸jをインクリメントした後、ステッ
プS158に戻る。そして、ステップS160で面積積
算エリアbalが重心値haf以上になるまで上記処理
を繰り返し、bal≧hafとなると、そのときの横軸
jの値が重心点であると判断してステップS161に抜
ける。 【0144】ステップS161ではOR合成関数の横軸
jのビットを今回のルーチンにおける課題曲のテンポレ
ベルをレベルカウンタPに格納する。 【0145】このようにして、2次元図形に対応してい
るOR合成関数の重心をとり、その値を論理和の代表と
する脱ファジー化処理(ディファジファイア処理)が行
われ、推論処理での結論の全体が1つの確定値、すなわ
ち、この場合はテンポレベルPとして算出される。 【0146】このように、本実施例では課題曲演奏のミ
ス回数および練習回数を入力データとするファジー推論
により「あいまい」な概念に対して好ましい判定が行わ
れ、課題曲のテンポの変化程度がより自然なものにな
る。 【0147】したがって、最適なテンポが自動的に選択
され、演奏者の能力に一致したレベルで演奏の練習をす
ることができる。また、ファジー推論が用いられている
ので、判定の演算処理に対して膨大な処理が必要でな
く、演算負担を軽減することができる。その結果、既在
のCPUにより容易に演算を行うことができ、高機能の
演奏練習装置を低コストで実現することができる。 【0148】なお、本実施例ではファジー推論をCPU
2およびテーブルROM4を用いてソフトによって実現
しているが、例えばファジーチップを用いてハード的に
実現してもい。 【0149】また、ファジー推論で用いるメンバーシッ
プ関数の値は、対象となる楽器の種類、課題曲のテンポ
レベルを上げ下げする変化程度などに応じて適切に設定
するとよい。このようにすれば、テンポ可変のいろいろ
な味付けが可能になる。 【0150】さらに、上記実施例では、演奏練習装置を
電子鍵盤楽器に適用した例であるが、鍵盤楽器への適用
に限らず、例えば電気ギターなどの他の楽器にも適用す
ることができる。 【0151】加えて、上記実施例は本発明を楽音信号を
発生する電子楽器に適用した例であるが、本発明はこれ
に限るものではなく、電子楽器以外の他の音響装置、例
えば、カラオケ装置についても適用が可能で、カラオケ
を練習する場合にも応用できる。パーソナルコンピュー
タによって楽音信号を発生する装置にも適用することが
でき、例えば、キーボードを演奏操作子として応用が可
能である。 【0152】 【発明の効果】本発明によれば、課題曲演奏のミス回数
および練習回数を入力データとするファジー推論により
「あいまい」な概念に対して好ましい判定を行うことが
でき、課題曲のテンポ変化程度をより自然なものとする
ことができる。 【0153】したがって、最適なテンポが自動的に選択
され、演奏者の能力に一致したレベルで演奏の練習をす
ることができる。また、ファジー推論が用いられている
ので、判定の演算処理に必要な処理数が少なく、演算負
担を軽減することができる。その結果、高機能の演奏練
習装置を低コストで実現することができる。
て予め指定された課題曲を演奏者のレベルに最も適した
速度で練習演奏させる演奏練習装置に関する。 【0002】 【従来の技術】一般的に、鍵盤楽器などがスムーズに演
奏できるようになるのは容易でなく、かなりの練習を要
する。 【0003】そのため、本発明の出願人は、先に予め指
定された課題曲を練習演奏させる演奏練習装置を提案し
ている。この装置では、課題曲を演奏させてそのミス回
数をカウントし、そのカウント数が多いときは、課題曲
のレベルを下げ、少ないときはレベルの高い課題曲を選
択させている(実願平2ー91089参照)。これによ
り、練習者のレベルに応じた曲が選択され、練習演奏す
ることができる。 【0004】また、このように演奏者のレベルに合せて
課題曲を切り換えていく方法もあるが、課題曲のレベル
を変えずに、ゆっくり演奏したり速く演奏させたりする
方法もある。 【0005】 【発明が解決しようとする課題】ところで、上述したよ
うに課題曲のレベルを変えずに、演奏者のレベルに合せ
てゆっくり演奏したり速く演奏させたりする方法(すな
わち、曲の速さを可変する方法)の場合、練習者のレベ
ル判定を2値論理的に行っているため、速さレベルの変
化程度が自然でなく、必ずしも最適でないという問題点
があった。 【0006】すなわち、曲の速さ(=テンポ)をどの程
度にするかは、演奏者のレベルに応じてまちまちであ
り、ある場合には「前よりちょっと速く」とか、「やや
遅めに」などというように、デジタル的に割切れる数値
で表現されるものではなく、実際上はかなり「あいま
い」なものである。この「あいまい」な概念に対して好
ましい判定がなされているとは、いえなかった。 【0007】こうした人間の感覚的な量で調整するよう
な処理は非常に自然であるが、通常の演算でこれを行お
うとすると、膨大な処理時間がかかるという欠点があ
る。すなわち、「あいまい」な概念に対して好ましい判
定を行い、演奏者の能力に一致した曲の速さを選択しよ
うとすると、演奏者のレベルに関連すると思われる数多
くの入力パラメータを用いて複雑で、しかも大量の演算
を行う必要があり、処理数が飛躍的に多くなって現実的
な演奏練習装置を実現することが困難である。 【0008】そこで本発明は、ファジー推論を応用して
曲の速さの変化程度をより自然に最適に可変できる演奏
練習装置を提供することを目的としている。 【0009】 【課題を解決するための手段】上記目的達成のため、本
発明による演奏評価装置は、一連の音符データからなる
課題曲を記憶する曲データ記憶手段と、この曲データ記
憶手段から課題曲の音符データを最初から曲の終了まで
順次読み出す動作を繰り返す曲読出し手段と、外部操作
に応答して音高及びその発生タイミングを順次入力する
演奏操作子と、前記曲読出し手段により順次読み出され
る音符データの音高及びその発生タイミングと、当該読
み出される音符データに対応して前記演奏操作子により
順次入力される音高及びその発生タイミングとを比較
し、両者の不一致を検出すると共に、課題曲が最初から
曲終了まで読み出される間に検出された不一致回数をカ
ウントするミスカウント手段と、前記曲読出し手段によ
り前記曲データ記憶手段から課題曲を最初から曲終了ま
で読出した回数をカウントする練習回数カウント手段
と、前記ミスカウント手段により前記課題曲の最初から
曲終了までに発生する不一致回数のカウントが終了する
毎に、前記ミスカウント手段と練習回数カウント手段か
らのデータを入力パラメータとして所定のファジールー
ルに従ってファジー推論を行い、該推論出力に対応して
前記曲データ出力手段の音符データの読み出し速度を変
更する変更制御手段と、を備えたことを特徴とする。 【0010】 【作用】本発明では、課題曲演奏のミス回数および練習
回数を入力データとするファジー推論により音符データ
の読み出し速度が可変される。 【0011】したがって、演奏者のレベルという「あい
まい」な概念に対して好ましい判定が行われこととな
り、簡単な演算で演奏者の能力に最適のテンポで課題曲
の練習演奏ができる。 【0012】 【実施例】以下、図面を参照して本発明の実施例につい
て説明する。図1は本発明に係る演奏練習装置を電子鍵
盤楽器に適用したときの一実施例の全体構成図である。 【0013】図1において、この演奏練習装置は鍵盤部
1、CPU2、ROM3、テーブルROM4、ワーキン
グRAM5、スイッチ部6、タイマ7、時計部8、楽音
生成部9、表示部10、表示装置11、D/A変換器1
2、アンプ13およびスピーカ14によって構成され
る。 【0014】鍵盤部(演奏操作子に相当)1は鍵盤、押
鍵検出および発音割当て回路などからなり、CPU2と
の間で信号やデータの授受を行う。スイッチ部6はスタ
ートスイッチ、モード切換スイッチ、音色スイッチ、設
定スイッチなどを有し、例えば演奏をスタートさせた
り、演奏モードを切り換えたりするための操作を行うた
めに使用される。また、自分の演奏レベルにふさわしい
と思われる課題曲を設定スイッチによって設定する。 【0015】CPU2はROM3に格納されているプロ
グラムに従って演奏練習制御のために必要な処理を行
い、この処理は後述のフローチャートによって示され
る。ROM3は制御プログラムの他に、演奏の難易度の
異なる種々の曲データも記憶している。したがって、R
OM3は曲データ記憶手段を構成する。 【0016】テーブルROM4は後述するファジー推論
において使用するメンバシップ関数を表すテーブルデー
タを記憶している。ワーキングRAM5はCPU2が制
御を実行する際にワーキングエリアとして用いられるも
ので、例えば隣接する音符間の時間を示す音符長データ
や押圧鍵の音高を示す音高データなどの鍵情報を一時的
に記憶する。 【0017】楽音生成部9はCPU2からの命令に基づ
いて押鍵操作により鍵盤部1より出力されたキーコード
に対応した音高を有する楽音波形を生成して出力する。
このデジタルの楽音波形はその後、D/A変換器12で
アナログ信号に変換され、アンプ13で増幅されスピー
カ14より楽音として放音される。 【0018】タイマ7は練習者が押鍵するときのタイミ
ングを計時するために用いられる。表示部10は楽曲の
拍子を、例えばLED等の点滅で表示するメトロノーム
や、押鍵すべきキーをLED等で点灯表示するガイドラ
ンプ等を有する他に、各種のモード切り換えに伴う状態
の変化を表示する。 【0019】表示装置11は選択された曲の内容や演奏
者の練習に関する各種のデータを表示するもので、例え
ば練習者が練習を行った日の日付や、練習した回数、時
間、曲目、演奏ミスの回数など、練習に関するデータを
表示ためのテンキーやディスプレイなどを備えている。 【0020】時計部8は上述の表示装置11で表示され
る練習した日の日付や練習時間に関するデータを得るた
めの装置である。上記CPU2およびテーブルROM4
は全体として読み出し手段、ミスカウント手段、練習回
数カウント手段および可変制御手段を構成する。 【0021】この場合、CPU2は鍵盤部1からの情報
に基づきテーブルROM4に格納されているメンバーシ
ップ関数を参照しながら所定のファジールールに従って
ファジー推論を行い、課題曲に対応する音符データの読
み出し速度(すなわち、曲のテンポ)を可変するような
制御を行う。 【0022】ここで、テンポ可変のファジールールにつ
いて説明する。図2(a)、(b)は前件部のメンバー
シップ関数で、そのうち図2(a)はミス回数に関する
メンバーシップ関数、図2(b)は練習回数に関するメ
ンバーシップ関数である。また、図2(c)は後件部に
おけるファジー出力で、曲のテンポに関するメンバーシ
ップ関数である。 【0023】なお、各メンバーシップ関数におけるラベ
ルの意味は、次の通りである。 MS:「ミス回数が少ない」 MM:「ミス回数が多い」 LS:「練習回数が少ない」 LM:「練習回数が多い」 TS:「テンポを下げる」 TC:「テンポはそのまま」 TL:「テンポを上げる」 【0024】ファジィルールは、いわゆるIF、THE
N(もし、ならば)の形式で表現される。本実施例で
は、以下の4つのルールを採用している。 ルールA:IF ミス回数=MS AND 練習回数=
LS THEN ファジー出力=TC(テンポはそのまま) ファジィルールAは、「もし、ミス回数が少なく、かつ
練習回数が少ない場合にはテンポはそのままにする。」
という意味である。 【0025】ルールB:IF ミス回数=MM AN
D 練習回数=LS THEN ファジー出力=TC(テンポはそのまま) ファジィルールBは、「もし、ミス回数が多く、かつ練
習回数が少ない場合にはテンポはそのままにする。」と
いう意味である。 【0026】ルールC:IF 演奏ミス=MM AN
D 練習回数=LM THEN ファジー出力=TS(テンポを下げる) ファジィルールCは、「もし、演奏ミスが多く、かつ練
習回数が多い場合にはテンポを下げる。」という意味で
ある。 【0027】ルールD:IF 演奏ミス=MS AND
練習回数=LM THEN ファジー出力=TL(テンポを上げる) ファジィルールDは、「もし、演奏ミスが少なく、かつ
練習回数が多い場合にはテンポを上げる。」という意味
である。 【0028】次に、本実施例の演奏練習装置の動作につ
いて説明する。演奏方法 演奏者は、自分の演奏レベルにふさわしいと思われる課
題曲を設定スイッチによってとりあえず設定し、前述の
表示部10のメトロノームの表示するテンポに従って演
奏を行う。この場合、演奏者は楽譜を見ながら押鍵操作
をするか、あるいは楽譜を用いずに、前述のガイドラン
プに従って押鍵操作を行う。そうすると、以下に述べる
演奏練習制御によって演奏レベルがファジー推論され、
「あいまい」な概念に対して好ましい判定が行われる。 【0029】メインプログラム 図3は演奏練習制御の処理を示すメインプログラムであ
る。まず、本装置の電源がオンすると、まずステップS
1でイニシャライズ処理を行う。例えば、ワーキングR
AM5のクリアや後述のサブルーチンのイニシャライズ
などが行われる。また、テンポ可変データTVを[1]
に設定する。TV=[1]という状態は、曲の演奏テン
ポが基準の値であり、「テンポはそのままにする」とい
う状態に相当する。 【0030】次いで、ステップS2で設定スイッチがオ
ンしているか否かを判別する。設定スイッチは演奏者が
練習に先立って操作するもので、多数の課題曲の中から
自分の演奏レベルにふさわしいと思われる課題曲を設定
スイッチによって設定する。例えば、「10段階」の曲
レベルがあるとした場合、今回、「5段階」の課題曲が
ふさわしいと思われるときは、設定スイッチで[5]を
選択する。 【0031】設定スイッチがオンしていれば、ステップ
S3で今回の設定スイッチ量(すなわち、設定レベル:
ここでは例えば、[5]のレベル)をレベルカウンタL
に格納し、その後、ステップS4に進む。したがって、
ステップS3の処理ではL=[5]となる。一方、設定
スイッチがオンしていなければ、ステップS3〜5をジ
ャンプしてステップS6に進む。 【0032】ステップS4ではレベルカウンタLの値に
対応した曲データの指定する。今回は「5段階」の課題
曲が設定されているので、「5段階」の課題曲の曲デー
タのが指定され、この指定された曲データ(例えば、最
初のルーチンではその先頭位置、次回以降のルーチンで
はその対応する位置)の内容が表示装置11に表示され
る。 【0033】次いで、ステップS5で曲データ内のテン
ポデータTEMPを設定する。テンポデータTEMPは
課題曲の演奏速度を決定しているもので、このテンポデ
ータTEMPは前述したテンポ可変データTVによって
可変される。曲のテンポは1分間の拍数であり、例えば
テンポ=120に設定される。その後、演奏者は、表示
部10のガイドランプの点灯に従って設定されたテンポ
で曲の演奏を開始する。 【0034】演奏者による曲の演奏が開始されると、続
くステップS6においてミスカウンタ計測処理を行う。
ミスカウンタ計測処理は、練習者が正しい鍵を押してい
るかと、押鍵のタイミングが許容範囲内の誤差にあるか
を調べる処理で、詳しい処理内容は後述のサブルーチン
で説明する。ステップS6の処理により演奏ミス回数が
カウントされる。 【0035】次いで、ステップS7で練習回数カウンタ
Mをインクリメントする。これは、今回の練習を1回と
してカウントアップするものである。次いで、ステップ
S8では演奏ミス回数および練習回数に基づいて前述し
たファジールールAの演算を行う。同様に、ステップS
9、ステップS10、ステップS11では演奏ミス回数
および練習回数に基づいてそれぞれ前述したファジール
ールB、ファジールールC、ファジールールDの演算を
行う。これらファジールールA、B、C、Dの詳しい処
理内容は後述のサブルーチンで説明する。これにより、
ファジー推論における前件部の処理が行われ、各メンバ
ーシップ関数に対する適合度が求められる。 【0036】次いで、ステップS12でルール演算で得
られたデータの最大値をとる処理(すなわち、MAX演
算=OR処理)を行うとともに、ステップS13でこの
データの重心計算を行って脱ファジー化する。これによ
り、ファジー推論における後件部の処理が行われて演奏
者のテンポレベルPが求められる。なお、最大値演算お
よび重心演算の詳しい処理内容は後述のサブルーチンで
説明する。 【0037】次いで、ステップS14で今回得られたテ
ンポレベルPが先に設定スイッチによって設定したテン
ポ可変データTVと同一であるか否か判別し、同一(す
なわち、P=1)であるときはステップS16に進んで
テンポデータTEMPにテンポ可変データTVを乗ずる
処理(すなわち、TEMP=TEMP×TVの演算処
理)を実行する。この場合、TV=1であるから、今回
のルーチンでは曲のテンポが変らず、例えば先に設定し
たようにテンポ=120のままとなる。ステップS14
の処理を経ると、ステップS2に戻る。 【0038】一方、ステップS14で今回得られたテン
ポレベルPが先に設定スイッチによって設定したテンポ
可変データTVと同一でない(例えば、P=0.9)と
きはステップS15に進んで今回得られたテンポレベル
Pをテンポ可変データTVに置き換えるとともに、練習
回数カウンタMを[0]にクリアする。これは、次回の
ルーチンで曲のテンポを変えるために、新たな曲テンポ
での練習回数のカウンタを開始するためである。 【0039】その後、ステップS16に進み、テンポデ
ータTEMPに対して今回得られたテンポレベルPで置
き換えられたテンポ可変データTVを乗ずる処理(TE
MP=TEMP×TV)を実行する。この場合、TV=
P(P=0.9)であるから、次回のルーチンでは曲の
テンポが可変され、先に設定したテンポとは異なり、例
えばTEMP=TEMP×TV=120×0.9=10
8となってテンポが上げられる。 【0040】タイマインターラプト処理 図4はタイマインターラプト処理を示すフローチャート
である。この処理は、一定時間毎に割り込みがかかって
テンポの計算を行うものである。一定時間毎の割り込み
がかかると、最初にステップS201でテンポインクリ
メントデータl(エル)を[1]だけインクリメント
し、ステップS202でメインプログラムにおけるテン
ポデータTEMP(例えば、TEMP=120)がテン
ポインクリメントデータlに等しいか否かを判別する。 【0041】等しいときにはステップS203で曲の演
算速度に対応するタイミングデータTをインクリメント
する。なお、タイミングデータTはCPU2内のカウン
タの時間データであり、曲の開始時から順次カウントア
ップしているものである。 【0042】次いで、ステップS204でテンポインク
リメントデータlを[0]にリセットしてリターンす
る。一方、ステップS202でテンポデータTEMPが
テンポインクリメントデータlに等しくないときは、今
回の割込みルーチンを終了してリターンする。このよう
に、タイマ割込みによってテンポインクリメントデータ
lをインクリメントしていき、曲のテンポデータTEM
Pと等しいときに曲の演算速度をインクリメントするこ
とで、テンポの計算が行われる。 【0043】ミスカウンタ計測処理 図5はミスカウンタ計測処理のサブルーチンを示すフロ
ーチャートである。このフローは練習者が練習演奏時
に、誤った押鍵操作を行った場合の誤押鍵操作回数のカ
ウント(ミスカウント)処理を行うものである。 【0044】本実施例では、押鍵すべき鍵の押し間違い
の他に、押鍵時のタイミングの間違いも誤押鍵操作回数
にカウントされる。すなわち、練習者が例えば図6
(a)に示すメロディを演奏する場合、同図(b)に示
すように演奏者の各押鍵タイミングが、1拍目、2拍
目、3拍目、・・・の各々のタイミングにおける許容範
囲tに入っているか否かを判定し、入っていない場合に
ミスカウントするようにする。 【0045】また、図7はROM3に記憶される曲デー
タの一例である。このデータは図6(a)に示すメロデ
ィに対応し、ノートナンバー(音階)と音符長データが
交互に書き込まれているとともに、曲データの先頭部分
にはテンポデータTEMPが、また曲データの最終部分
にはENDマークである“00 00”が記憶されてい
る。 【0046】そして、これらノートナンバー(音階)お
よび音符長データという2つのパラメータにより1つの
音符データが決定される。音符長データは、例えば「2
分音符」の場合、“48”として表され、「4分音符」
の場合、“24”として表され、さらに「8分音符」の
場合、“12”として表される。また、テンポデータT
EMPにより曲の演算速度が決定される。 【0047】最初に、1拍目の音を発音する処理から説
明する。サブルーチンがスタートすると、まずステップ
S21でミスカウンタをクリアして[0]に戻し、ステ
ップS22で後述の音符長データBの累算値Xを[0]
にリセットする。Xは、例えばCPU2の図示しない時
間レジスタにその値が書き込まれる。 【0048】次いで、ステップS23で次の音符の曲デ
ータをロードする。曲データはノートナンバーAnと、
音符長Bとによって構成される。これにより、ROM3
より音高データAn(すなわち、図7のノートナンバ
ー)が順次読み出され、CPU2内の特には図示しない
音高レジスタに書き込まれる。 【0049】また、同様にROM3に対してノートナン
バーAnと対で記憶されている音符長データBが、RO
M3より順次読み出され、CPU2内の図示しない音符
長レジスタに書き込まれる。 【0050】次いで、ステップS24では曲の終りか否
か(すなわち、An=B=0か)を判別し、曲の終りの
ときはメインプログラムにリターンし、終りでなければ
ステップS25に進む。 【0051】さて、上述のようにして音符の曲データが
ロードされると、練習者はメトロノームの表示するテン
ポに従って演奏を行うが、楽譜を見ながら押鍵操作をす
るか、あるいは楽譜を用いずに、前述のガイドランプに
従って押鍵操作を行うかの何れかの態様となる。例え
ば、練習者は前述のメトロノームのテンポ表示と押鍵位
置を示すガイドラインに従って鍵盤部1を演奏操作す
る。 【0052】そこで、押鍵操作情報を検出するために、
ステップS25では鍵盤部1の鍵を走査し、ステップS
26で鍵がオンしたか否かを判別する。例えば、オンし
ていれば、ステップS27に進んで押鍵処理を行う。こ
の場合、鍵盤部1から押鍵された鍵のデータ(音高デー
タ)が出力され、その鍵データは上述とは別のCPU2
内の特には図示しない押鍵検出レジスタA1に書き込ま
れる。これにより、1拍目の音高データに対応する楽音
が生成され、発音が行われる。 【0053】続いてステップS28で、今回、押鍵検出
レジスタA1に書き込まれた鍵データが先にロードされ
たノートナンバーAnと等しいか(A1=Anか:すな
わち、正しい鍵が押されたか)否かを判別する。そし
て、A1=Anのときは正しい鍵が押されたと判断し、
ステップS31に進む。 【0054】一方、A1≠Anのときは正しい鍵が押さ
れていないと判断し、ステップS30でミスカウンタを
カウントアップした後にステップS31に進む。具体的
には、上記2つのレジスタの各内容がCPU2内で比較
され、両者が一致していなければ、練習者の誤打鍵があ
ったとして、ワーキングRAM5内に設けられたミスカ
ウンタがカウントアップされる。このようにして、押鍵
すべき鍵の押し間違いが誤押鍵操作回数としてカウント
される。 【0055】次に、押鍵時のタイミングの間違いを誤押
鍵操作回数としてカウントする場合について説明する。
前述したように、音符長データBはノートナンバーAn
と対でROM3に記憶されており、音符の曲データをロ
ードする際に、順次読み出され、CPU2内の音符長レ
ジスタに書き込まれが、この音符長データBは1音毎に
累算される。そして、この累算値Xは曲の開始時にリセ
ットされる(ステップS22の処理)ため、曲の開始時
から現在の曲位置までの時間を示すことになる。 【0056】これに対して、練習者が鍵盤部1を演奏操
作することにより、鍵盤部1からは前述のように押鍵さ
れた鍵のデータ(音高データ)が出力されるとともに、
その押鍵タイミングで曲の開始時から順次カウントアッ
プしているCPU2内のカウンタの時間データがタイミ
ングデータTとして出力される。 【0057】上記タイミングデータTが前述の音符長デ
ータBの累算値Xに対して、許容値t(図6(b)参
照)以内に入るか否かが次のようにして判定される。す
なわち、音符長データBの累算値Xと許容値tを用いて
CPU2内で上限許容値(X+t/2)と、下限許容値
(X−t/2)とが演算される。これにより、タイミン
グデータTが上述の許容範囲(X±t/2)に入ってい
るか否かが判定される。 【0058】この判定処理をサブルーチンで説明する
と、ステップS26で鍵がオンしていない場合には、続
くステップS29で上記タイミングデータTが T≧X+t/2 なる式を満足するか否を判別する。 【0059】例えば、今回のルーチンは1拍目であるか
ら、X=0であり、図6(b)に示すようにタイミング
データTがゾーンに入っていれば(T<t/2のと
き)、このとき押鍵するとそのタイミングが正しいこと
になる。 【0060】このときはステップS29の判別結果がN
Oとなり、ステップS25に戻ってステップS26に進
み、ここで押鍵されると、ステップS27に分岐する。
したがって、この場合は押鍵タイミングが正しく、少な
くともタイミングの判定ではミスカウントされない。 【0061】一方、ステップS29でYESの場合は、
押鍵するタイミングが経過してしまい、タイミングデー
タTがゾーンから外れたと判断する。したがって、こ
のときは続くステップS30でミスカウンタをカウント
アップする。これにより、押鍵時のタイミングの間違い
が誤押鍵操作回数としてカウントされる。 【0062】次いで、ステップS31では音符長データ
Bの累算値Xを音符長データBの長さ分だけインクリメ
ントする。今回は1拍目であるから、X=0であり、次
の2拍目に対応するようにX=Bにインクリメントされ
る。次いで、ステップS32で鍵盤部1の鍵を走査し、
ステップS33で鍵がオンしたか否か、また続くステッ
プS34で鍵がオフしたか否かを判別する。この処理は
1拍目の離鍵と、2拍目の押鍵をそれぞれ判別するため
のものである。 【0063】ステップS34で鍵がオフしていれば、1
拍目の離鍵と判断し、ステップS35で離鍵処理(すな
わち、消音処理)を行う。これにより、1拍目の音高デ
ータに対応する楽音の生成が停止する。一方、ステップ
S34で鍵がオフしていなければ、1拍目の離鍵が未だ
行われていないと判断し、ステップS36でタイミング
データTが T≧X−t/2 なる式を満足するか否を判別する。 【0064】例えば、このステップ時点では1拍目がオ
ンされた後であるから、X=Bであり、図6(b)に示
すようにタイミングデータTがゾーンを超えると(T
≧B−t/2のとき)、このとき離鍵すれば、そのタイ
ミングが正しいことになる。 【0065】このときはステップS36の判別結果がY
ESとなり、ステップS23に戻って次の音符データ、
すなわち2拍目の音符データをロードする処理に移る。
したがって、この場合は離鍵タイミングが正しく、少な
くともタイミングの判定ではミスカウントされない。 【0066】一方、ステップS36の判別結果がNOの
ときは、未だオフしていないか、あるいはオフしたが離
鍵タイミングが正しくない場合であり、ステップS32
に戻る。そして、ステップS32以降の上記処理を実行
する。 【0067】このケースで、ステップS33において鍵
がオンすると、2拍目の押鍵がされたと判断し、ステッ
プS37に進んで押鍵処理を行う。これにより、鍵盤部
1から2拍目に対応する押鍵された鍵のデータ(音高デ
ータ)が出力され、その鍵データはCPU2内の2拍目
の押鍵検出レジスタA2に書き込まれる。その結果、2
拍目の音高データに対応する楽音が生成され、発音が行
われる。 【0068】ただし、今回の2拍目の発音処理は押鍵タ
イミングが正しくないので、続くステップS38でミス
カウンタをカウントアップする。これにより、2拍目の
押鍵時のタイミングの間違いが誤押鍵操作回数としてカ
ウントされる。 【0069】その後、ステップS36に進み、タイミン
グデータTがゾーンを超えると(T≧B−t/2のと
き)、YESに分岐してステップS23に戻る。一方、
上記ケースで、ステップS33において鍵がオンしなけ
れば、ステップS34以降の処理を繰り返す。そして、
鍵がオフして時点のタイミングから上述と同様の判断を
行う。 【0070】このようにして、1拍目の離鍵時のタイミ
ングの間違いが誤離鍵操作回数としてミスカウントされ
る。 【0071】以下、同様にして2拍目、3拍目、・・・
について押鍵時のタイミングおよび離鍵時のタイミング
のそれぞれについて、誤鍵操作回数を判断する処理が行
われる。 【0072】この場合、図6(a)、(b)に示すよう
に、例えば2拍目のジャストタイミングはの位置であ
り、2拍目の押鍵タイミングの許容ゾーンは〜の期
間である。同様に、2拍目の離鍵タイミングおよび3拍
目の押鍵タイミングの許容ゾーン開始はの位置であ
る。 【0073】ファジールールA演算処理 図8はファジールールA演算処理のサブルーチンを示す
フローチャートである。まず、ステップS41でミスカ
ウント値をアドレスとして、テーブルROM4における
「ミス回数が少ない」というメンバーシップ関数が格納
されているMSテーブルからデータ(前件部データ)D
aを読み出す。この場合のデータは、図2(a)に示す
メンバーシップ関数MSの適合度(グレード)に相当
し、0〜1の範囲の値である。 【0074】すなわち、データDaはミスカウント値と
いう入力値に対してルールAが示した適合度である。デ
ータDaは、例えばCPU2内の同名のレジスタに格納
され、これは後述のデータDbについても同様である。 【0075】同様に、ステップS42で練習回数Mをア
ドレスとして、テーブルROM4における「練習回数が
少ない」というメンバーシップ関数が格納されているL
Sテーブルからデータ(前件部データ)Dbを読み出
す。この場合のデータは、図2(b)に示すメンバーシ
ップ関数LSの適合度に相当し、0〜1の範囲の値であ
る。すなわち、データDbは練習回数Mという入力値に
対してルールAが示した適合度である。 【0076】次いで、ステップS43でデータDaがデ
ータDb以上であるか否かを判別し、Da≧Dbのとき
はステップS44に進んで、値の小さい方をデータDと
して採用する。このケースではD=Dbとなる。 【0077】この処理は、各データの論理積をとるもの
で、いわゆる「MINをとる」ことに相当するものであ
る。これは、「MINをとる」ことにより、2つの入力
値に対して少なくとも両方を満足する状態を得るためで
ある。これにより、データDaとデータDbのうち、最
小のものが今回のルーチンにおいてルールAが示す判断
として採用される。一方、Da<Dbのときはステップ
S45に進んで、D=Daを採用する。 【0078】このように、ルールAに対して、その時点
での2つの入力値(ミスカウント値および練習回数M)
が判断され、ルールAの前件部に対する適合度が求めら
れる。 【0079】次いで、ステップS46でアドレスポイン
タiを[0]にリセットし、ステップS47でアドレス
ポインタiが終了アドレスに等しいか否か判別する。終
了アドレスでなければ、続くステップS48でiをアド
レスとしてテーブルROM4の「テンポそのまま」とい
うメンバーシップ関数が格納されているTCテーブルか
らデータ(後件部データ)Eを読み出す。この場合のデ
ータは、図2(c)に示すメンバーシップ関数TCの適
合度に相当する。データEは、例えばCPU2内の同名
のレジスタに格納される。 【0080】次いで、ステップS49でデータDとデー
タEを比較し、D>EのときはステップS50に進んで
iをアドレスとしてワーキングRAM5に入っているP
1メモリにデータEを書き込む。一方、D≦Eのときは
ステップS51に進んで同じくiをアドレスとしてワー
キングRAM5に入っているP1メモリにデータDを書
き込む。このように、小さい方の値が採用されてメンバ
ーシップ関数TCをカットする処理が行われる。 【0081】この処理は、後件部たるメンバーシップ関
数TCを前件部の適合度に応じてカットする「いわゆる
頭切り法」を行うものである。 【0082】次いで、ステップS52でアドレスポイン
タiを[1]だけインクリメントし、その後、ステップ
S47に戻る。そして、ステップS47でアドレスポイ
ンタiが終了アドレスに等しくなるまで、同様の処理を
繰り返し、アドレスポインタiが終了アドレスに等しく
なると、メインプログラムにリターンする。アドレスポ
インタiを終了アドレスまでインクリメントすることに
より、メンバーシップ関数TCをすべてサーチすること
になる。これにより、メンバーシップ関数TCの全てに
対して前件部の適合度に応じた「頭切り法」が実行され
る。 【0083】このようにして、演奏ミス回数および練習
回数に基づいてファジールールAの演算が行われ、「演
奏ミスが少なく、かつ練習回数が少ない場合にはテンポ
はそのまま」という処理に対してどの程度適合している
かが算出される。すなわち、テンポはそのままにするフ
ァジー操作量が、頭切りしたメンバーシップ関数TCの
大きさとして求められる。 【0084】ファジールールB演算処理 図9はファジールールB演算処理のサブルーチンを示す
フローチャートである。まず、ステップS61でミスカ
ウント値をアドレスとして、テーブルROM4における
「ミス回数が多い」というメンバーシップ関数が格納さ
れているMMテーブルからデータ(前件部データ)Da
を読み出す。この場合のデータは、図2(a)に示すメ
ンバーシップ関数MMの適合度(グレード)に相当し、
0〜1の範囲の値である。 【0085】すなわち、データDaはミスカウント値と
いう入力値に対してルールBが示した適合度である。デ
ータDaは、例えばCPU2内の同名のレジスタに格納
され、これは後述のデータDbについても同様である。 【0086】同様に、ステップS62で練習回数Mをア
ドレスとして、テーブルROM4における「練習回数が
少ない」というメンバーシップ関数が格納されているL
Sテーブルからデータ(前件部データ)Dbを読み出
す。この場合のデータは、図2(b)に示すメンバーシ
ップ関数LSの適合度に相当し、0〜1の範囲の値であ
る。すなわち、データDbは練習回数Mという入力値に
対してルールBが示した適合度である。 【0087】次いで、ステップS63でデータDaがデ
ータDb以上であるか否かを判別し、Da≧Dbのとき
はステップS64に進んで、値の小さい方をデータDと
して採用する。このケースではD=Dbとなる。 【0088】この処理は、各データの論理積をとるもの
で、いわゆる「MINをとる」ことに相当するものであ
る。これは、「MINをとる」ことにより、2つの入力
値に対して少なくとも両方を満足する状態を得るためで
ある。これにより、データDaとデータDbのうち、最
小のものが今回のルーチンにおいてルールBが示す判断
として採用される。一方、Da<Dbのときはステップ
S65に進んで、D=Daを採用する。 【0089】このように、ルールBに対して、その時点
での2つの入力値(ミスカウント値および練習回数M)
が判断され、ルールBの前件部に対する適合度が求めら
れる。 【0090】次いで、ステップS66でアドレスポイン
タiを[0]にリセットし、ステップS67でアドレス
ポインタiが終了アドレスに等しいか否か判別する。終
了アドレスでなければ、続くステップS68でiをアド
レスとしてテーブルROM4の「テンポはそのまま」と
いうメンバーシップ関数が格納されているTCテーブル
からデータ(後件部データ)Eを読み出す。この場合の
データは、図2(c)に示すメンバーシップ関数TCの
適合度に相当する。データEは、例えばCPU2内の同
名のレジスタに格納される。 【0091】次いで、ステップS69でデータDとデー
タEを比較し、D>EのときはステップS70に進んで
iをアドレスとしてワーキングRAM5に入っているP
2メモリにデータEを書き込む。一方、D≦Eのときは
ステップS71に進んで同じくiをアドレスとしてワー
キングRAM5に入っているP2メモリにデータDを書
き込む。このように、小さい方の値が採用されてメンバ
ーシップ関数TCをカットする処理が行われる。 【0092】この処理は、後件部たるメンバーシップ関
数TCを前件部の適合度に応じてカットする「いわゆる
頭切り法」を行うものである。 【0093】次いで、ステップS72でアドレスポイン
タiを[1]だけインクリメントし、その後、ステップ
S77に戻る。そして、ステップS77でアドレスポイ
ンタiが終了アドレスに等しくなるまで、同様の処理を
繰り返し、アドレスポインタiが終了アドレスに等しく
なると、メインプログラムにリターンする。アドレスポ
インタiを終了アドレスまでインクリメントすることに
より、メンバーシップ関数TCをすべてサーチすること
になる。これにより、メンバーシップ関数TCの全てに
対して前件部の適合度に応じた「頭切り法」が実行され
る。 【0094】このようにして、演奏ミス回数および練習
回数に基づいてファジールールBの演算が行われ、「演
奏ミスが多く、かつ練習回数が少ない場合にはテンポは
そのまま」という処理に対してどの程度適合しているか
が算出される。すなわち、テンポはそのままにするとい
うファジー操作量が、頭切りしたメンバーシップ関数T
Cの大きさとして求められる。 【0095】ファジールールC演算処理 図10はファジールールC演算処理のサブルーチンを示
すフローチャートである。まず、ステップS81でミス
カウント値をアドレスとして、テーブルROM4におけ
る「ミス回数が多い」というメンバーシップ関数が格納
されているMMテーブルからデータ(前件部データ)D
aを読み出す。この場合のデータは、図2(a)に示す
メンバーシップ関数MMの適合度(グレード)に相当
し、0〜1の範囲の値である。すなわち、データDaは
ミスカウント値という入力値に対してルールCが示した
適合度である。データDaは、例えばCPU2内の同名
のレジスタに格納され、これは後述のデータDbについ
ても同様である。 【0096】同様に、ステップS82で練習回数Mをア
ドレスとして、テーブルROM4における「練習回数が
多い」というメンバーシップ関数が格納されているLM
テーブルからデータ(前件部データ)Dbを読み出す。
この場合のデータは、図2(b)に示すメンバーシップ
関数LMのグレードに相当し、0〜1の範囲の値であ
る。すなわち、データDbは練習回数Mという入力値に
対してルールCが示した適合度である。 【0097】次いで、ステップS83でデータDaがデ
ータDb以上であるか否かを判別し、Da≧Dbのとき
はステップS84に進んで、値の小さい方をデータDと
して採用する。このケースではD=Dbとなる。 【0098】この処理は、各データの論理積をとるもの
で、いわゆる「MINをとる」ことに相当するものであ
る。これは、「MINをとる」ことにより、2つの入力
値に対して少なくとも両方を満足する状態を得るためで
ある。これにより、データDaとデータDbのうち、最
小のものが今回のルーチンにおいてルールCが示す判断
として採用される。一方、Da<Dbのときはステップ
S85に進んで、D=Daを採用する。 【0099】このように、ルールCに対して、その時点
での2つの入力値(ミスカウント値および練習回数M)
が判断され、ルールCの前件部に対する適合度が求めら
れる。 【0100】次いで、ステップS86でアドレスポイン
タiを[0]にリセットし、ステップS87でアドレス
ポインタiが終了アドレスに等しいか否か判別する。終
了アドレスでなければ、続くステップS88でiをアド
レスとしてテーブルROM4の「テンポを下げる」とい
うメンバーシップ関数が格納されているTSテーブルか
らデータ(後件部データ)Eを読み出す。この場合のデ
ータは、図2(c)に示すメンバーシップ関数TSの適
合度に相当する。データEは、例えばCPU2内の同名
のレジスタに格納される。 【0101】次いで、ステップS89でデータDとデー
タEを比較し、D>EのときはステップS90に進んで
iをアドレスとしてワーキングRAM5に入っているP
3メモリにデータEを書き込む。一方、D≦Eのときは
ステップS91に進んで同じくiをアドレスとしてワー
キングRAM5に入っているP3メモリにデータDを書
き込む。このように、小さい方の値が採用されてメンバ
ーシップ関数TSをカットする処理が行われる。 【0102】この処理は、後件部たるメンバーシップ関
数TSを前件部の適合度に応じてカットする「いわゆる
頭切り法」を行うものである。 【0103】次いで、ステップS92でアドレスポイン
タiを[1]だけインクリメントし、その後、ステップ
S87に戻る。そして、ステップS87でアドレスポイ
ンタiが終了アドレスに等しくなるまで、同様の処理を
繰り返し、アドレスポインタiが終了アドレスに等しく
なると、メインプログラムにリターンする。アドレスポ
インタiを終了アドレスまでインクリメントすることに
より、メンバーシップ関数TSをすべてサーチすること
になる。これにより、メンバーシップ関数TSの全てに
対して前件部の適合度に応じた「頭切り法」が実行され
る。 【0104】このようにして、演奏ミス回数および練習
回数に基づいてファジールールCの演算が行われ、「演
奏ミスが多く、かつ練習回数が多い場合にはテンポを下
げる」という処理に対してどの程度適合しているかが算
出される。すなわち、テンポを下げるというファジー操
作量が、頭切りしたメンバーシップ関数TSの大きさと
して求められる。 【0105】ファジールールD演算処理 図11はファジールールD演算処理のサブルーチンを示
すフローチャートである。まず、ステップS101でミ
スカウント値をアドレスとして、テーブルROM4にお
ける「ミス回数が少ない」というメンバーシップ関数が
格納されているMSテーブルからデータ(前件部デー
タ)Daを読み出す。この場合のデータは、図2(a)
に示すメンバーシップ関数MSの適合度(グレード)に
相当し、0〜1の範囲の値である。すなわち、データD
aはミスカウント値という入力値に対してルールDが示
した適合度である。データDaは、例えばCPU2内の
同名のレジスタに格納され、これは後述のデータDbに
ついても同様である。 【0106】同様に、ステップS102で練習回数Mを
アドレスとして、テーブルROM4における「練習回数
が多い」というメンバーシップ関数が格納されているL
Mテーブルからデータ(前件部データ)Dbを読み出
す。この場合のデータは、図2(b)に示すメンバーシ
ップ関数LMのグレードに相当し、0〜1の範囲の値で
ある。すなわち、データDbは練習回数Mという入力値
に対してルールDが示した適合度である。 【0107】次いで、ステップS103でデータDaが
データDb以上であるか否かを判別し、Da≧Dbのと
きはステップS104に進んで、値の小さい方をデータ
Dとして採用する。このケースではD=Dbとなる。 【0108】この処理は、各データの論理積をとるもの
で、いわゆる「MINをとる」ことに相当するものであ
る。これは、「MINをとる」ことにより、2つの入力
値に対して少なくとも両方を満足する状態を得るためで
ある。これにより、データDaとデータDbのうち、最
小のものが今回のルーチンにおいてルールDが示す判断
として採用される。一方、Da<Dbのときはステップ
S105に進んで、D=Daを採用する。 【0109】このように、ルールDに対して、その時点
での2つの入力値(ミスカウント値および練習回数M)
が判断され、ルールDの前件部に対する適合度が求めら
れる。 【0110】次いで、ステップS106でアドレスポイ
ンタiを[0]にリセットし、ステップS107でアド
レスポインタiが終了アドレスに等しいか否か判別す
る。終了アドレスでなければ、続くステップS108で
iをアドレスとしてテーブルROM4の「テンポを上げ
る」というメンバーシップ関数が格納されているTLテ
ーブルからデータ(後件部データ)Eを読み出す。この
場合のデータは、図2(c)に示すメンバーシップ関数
TLの適合度に相当する。データEは、例えばCPU2
内の同名のレジスタに格納される。 【0111】次いで、ステップS109でデータDとデ
ータEを比較し、D>EのときはステップS100に進
んでiをアドレスとしてワーキングRAM5に入ってい
るP4メモリにデータEを書き込む。一方、D≦Eのと
きはステップS111に進んで同じくiをアドレスとし
てワーキングRAM5に入っているP4メモリにデータ
Dを書き込む。このように、小さい方の値が採用されて
メンバーシップ関数TLをカットする処理が行われる。 【0112】この処理は、後件部たるメンバーシップ関
数TLを前件部の適合度に応じてカットする「いわゆる
頭切り法」を行うものである。 【0113】次いで、ステップS112でアドレスポイ
ンタiを[1]だけインクリメントし、その後、ステッ
プS107に戻る。そして、ステップS107でアドレ
スポインタiが終了アドレスに等しくなるまで、同様の
処理を繰り返し、アドレスポインタiが終了アドレスに
等しくなると、メインプログラムにリターンする。アド
レスポインタiを終了アドレスまでインクリメントする
ことにより、メンバーシップ関数TLをすべてサーチす
ることになる。これにより、メンバーシップ関数TLの
全てに対して前件部の適合度に応じた「頭切り法」が実
行される。 【0114】このようにして、演奏ミス回数および練習
回数に基づいてファジールールての演算が行われ、「演
奏ミスが少なく、かつ練習回数が多い場合にはテンポを
上げる」という処理に対してどの程度適合しているかが
算出される。すなわち、テンポを上げるというファジー
操作量が、頭切りしたメンバーシップ関数TLの大きさ
として求められる。 【0115】最大値演算処理 図12は最大値演算処理のサブルーチンを示すフローチ
ャートである。まず、ステップS121でアドレスポイ
ンタiを[0]にリセットし、ステップS122でアド
レスポインタiをアドレスとしてワーキングRAM5に
入っているP1メモリからデータD1を読み出す。 【0116】データD1は、ファジールールAについて
の演算結果であり、具体的には、「演奏ミスが少なく、
かつ練習回数が少ない場合にはテンポはそのまま」とい
う処理に対してどの程度適合しているか算出して頭切り
したメンバーシップ関数TCに対応する。 【0117】また、ステップS123でアドレスポイン
タiをアドレスとしてワーキングRAM5に入っている
P2メモリからデータD2を読み出す。 【0118】データD2は、ファジールールBについて
の演算結果であり、具体的には、「演奏ミスが多く、か
つ練習回数が少ない場合にはテンポはそのまま」という
処理に対してどの程度適合しているか算出して頭切りし
たメンバーシップ関数TCに対応する。 【0119】さらに、ステップS124で同様にアドレ
スポインタiをアドレスとしてワーキングRAM5に入
っているP3メモリからデータD3を読み出す。 【0120】データD3は、ファジールールCについて
の演算結果であり、具体的には、「演奏ミスが多く、か
つ練習回数が多い場合にはテンポを下げる」という処理
に対してどの程度適合しているか算出して頭切りしたメ
ンバーシップ関数TSに対応する。 【0121】次いで、ステップS125で同様にアドレ
スポインタiをアドレスとしてワーキングRAM5に入
っているP4メモリからデータD4を読み出す。 【0122】データD4は、ファジールールDについて
の演算結果であり、具体的には、「演奏ミスが少なく、
かつ練習回数が多い場合にはテンポを上げる」という処
理に対してどの程度適合しているか算出して頭切りした
メンバーシップ関数TLに対応する。 【0123】次いで、ステップS126で上記各データ
D1〜D4のうちの最大値を判別する。そして、データ
D1〜D4の最大値判別結果に応じてそれぞれステップ
S127、ステップS128、ステップS129、ステ
ップS130に進む。 【0124】このような最大値判別を行っているのは、
各ファジールールA〜D毎の推論結果を統合するために
論理和(OR論理)をとる必要がかあるからで、いわゆ
る「MAXをとる」という処理に相当するものである。 【0125】具体的には、例えばある瞬間の練習演奏状
態がファジールールAからファジールールDまでの、ど
のルールに影響されるのか、少しでも影響されるなら、
それは課題曲のレベル判断に反映しておきたいという要
求に答えるもので、これが「OR論理」の関係の基本の
考え方である。そして、この考え方を集合論では「和を
とる」としており、本実施例では、どれかひとつでも影
響がある限り、考察の対象にするとして上記処理が実行
される。 【0126】さて、ステップS127ではアドレスポイ
ンタiをアドレスとしてワーキングRAM5に入ってい
るP4メモリにデータD1を書き込む。これにより、今
回のアドレスポインタi(最初のルーチンではi=0)
の値によって指定されるファジールールAの演算結果で
ある頭切りしたメンバーシップ関数TCの一部がP4メ
モリに書き込まれる。 【0127】なお、後述のように、アドレスポインタi
を終了アドレスまでインクリメントすることにより、頭
切りされたメンバーシップ関数TCがすべてサーチされ
てP4メモリに書き込まれることになる。 【0128】ステップS128ではアドレスポインタi
をアドレスとしてワーキングRAM5に入っているP4
メモリにデータD2を書き込む。これにより、今回のア
ドレスポインタiの値によって指定されるファジールー
ルBの演算結果である頭切りしたメンバーシップ関数T
Cの一部がP4メモリに書き込まれる。 【0129】同様に、ステップS129ではアドレスポ
インタiをアドレスとしてワーキングRAM5に入って
いるP4メモリにデータD3を書き込む。これにより、
今回のアドレスポインタiの値によって指定されるファ
ジールールCの演算結果である頭切りしたメンバーシッ
プ関数TSの一部がP4メモリに書き込まれる。 【0130】また、同様にステップS130ではアドレ
スポインタiをアドレスとしてワーキングRAM5に入
っているP4メモリにデータD4を書き込む。これによ
り、今回のアドレスポインタiの値によって指定される
ファジールールDの演算結果である頭切りしたメンバー
シップ関数TLの一部がP4メモリに書き込まれる。 【0131】次いで、ステップS131でアドレスポイ
ンタiが終了アドレスに等しいか否か判別する。終了ア
ドレスでなければ、続くステップS132でアドレスポ
インタiを[1]だけインクリメントし、その後、ステ
ップS122に戻る。そして、ステップS131でアド
レスポインタiが終了アドレスに等しくなるまで、上記
処理を繰り返し、アドレスポインタiが終了アドレスに
等しくなると、メインプログラムにリターンする。 【0132】アドレスポインタiを終了アドレスまでイ
ンクリメントすることにより、頭切りされた各メンバー
シップ関数TC、TS、TLがすべてサーチされてP4
メモリにデータD1〜D4として書き込まれる。 【0133】このようにして、各ファジールールA〜D
毎の推論結果を統合するために論理和をとる(「MAX
をとる」)処理が実行され、頭切りされた各メンバーシ
ップ関数TC、TS、TLがOR合成される。すなわ
ち、MAX合成処理によって各ファジールールA〜D毎
の推論結果が重ね合わせられて合成出力が生成される。 【0134】重心計算処理 図13は重心計算処理のサブルーチンを示すフローチャ
ートである。まず、ステップS151でアドレスポイン
タiを[0]にリセットするとともに、面積レジスタa
reaおよび重心レジスタhafを同様に[0]にリセ
ットする。面積レジスタareaは重心計算に必要な面
積areaのデータを格納するもので、重心レジスタh
afは重心計算に必要な重心値hafを格納するもので
ある。 【0135】次いで、ステップS152でアドレスポイ
ンタiをアドレスとしてワーキングRAM5に入ってい
るP4メモリからデータD5を読み出す。データD5
は、前述の最大値演算処理によって頭切りされた後件部
の各メンバーシップ関数TC、TS、TLをOR合成し
たものの一部(iをアドレスとして指定された部分)
で、言い換えると、MAX合成処理によって各ファジー
ルールA〜D毎の推論結果が重ね合わせられた合成出力
データ(後に、OR合成関数として表す)の一部であ
る。 【0136】今回は、i(最初のルーチンではi=0)
をアドレスとしてP4メモリから合成出力データの一部
を読み出したことになる。なお、後述のように、アドレ
スポインタiを終了アドレスまでインクリメントするこ
とにより、合成出力データがすべてサーチされて読み出
されることになる。 【0137】すなわち、続くステップS153では面積
レジスタareaの値を、今回読み出した合成出力デー
タD5だけインクリメントして面積areaの積算値を
算出する。 【0138】次いで、ステップS154でアドレスポイ
ンタiが終了アドレスに等しいか否か判別する。終了ア
ドレスでなければ、続くステップS155でアドレスポ
インタiを[1]だけインクリメントし、その後、ステ
ップS152に戻る。そして、ステップS154でアド
レスポインタiが終了アドレスに等しくなるまで、上記
処理を繰り返し、アドレスポインタiが終了アドレスに
等しくなると、ステップS156に抜ける。 【0139】アドレスポインタiを終了アドレスまでイ
ンクリメントすることにより、頭切りされた後件部の各
メンバーシップ関数TC、TS、TLのOR合成出力デ
ータがすべてサーチされて読み出されることになる。言
い換えれば、最大値演算処理で得られたデータの集合を
2次元図形に対応させ、このデータ集合部分の面積を積
分演算によってすべてサーチして読み出して計算したこ
とになる。その後、データ集合部分の面積に対応する積
分値が1/2になる値を重心値として算出する。 【0140】すなわち、ステップS156に進み、ステ
ップS153で求めた積算面積areaの1/2の値を
重心値hafとして重心レジスタhafに記憶する。次
いで、ステップS157で各メンバーシップ関数TC、
TS、TLのOR合成関数の横軸に対応するjおよび面
積積算エリアbalを共に[0]にリセットする。 【0141】OR合成関数は、最大値演算処理で得られ
たデータ集合を2次元図形に対応させた場合の関数であ
り、その横軸がjに相当し、その面積の積算エリアがb
alに相当する。なお、jおよびbalの値は、例えば
同名のレジスタに格納される。 【0142】次いで、ステップS158で横軸jをアド
レスとしてワーキングRAM5に入っているP4メモリ
からOR合成関数に対応するデータD5を読み出す。続
くステップS159では面積積算エリアbalの値を、
今回読み出したデータD5だけインクリメントして面積
積算エリアbalを積算する。 【0143】次いで、ステップS160で積算した面積
積算エリアbalを重心値hafと比較し、面積積算エ
リアbalが重心値hafより小さいときはステップS
162に進んで横軸jをインクリメントした後、ステッ
プS158に戻る。そして、ステップS160で面積積
算エリアbalが重心値haf以上になるまで上記処理
を繰り返し、bal≧hafとなると、そのときの横軸
jの値が重心点であると判断してステップS161に抜
ける。 【0144】ステップS161ではOR合成関数の横軸
jのビットを今回のルーチンにおける課題曲のテンポレ
ベルをレベルカウンタPに格納する。 【0145】このようにして、2次元図形に対応してい
るOR合成関数の重心をとり、その値を論理和の代表と
する脱ファジー化処理(ディファジファイア処理)が行
われ、推論処理での結論の全体が1つの確定値、すなわ
ち、この場合はテンポレベルPとして算出される。 【0146】このように、本実施例では課題曲演奏のミ
ス回数および練習回数を入力データとするファジー推論
により「あいまい」な概念に対して好ましい判定が行わ
れ、課題曲のテンポの変化程度がより自然なものにな
る。 【0147】したがって、最適なテンポが自動的に選択
され、演奏者の能力に一致したレベルで演奏の練習をす
ることができる。また、ファジー推論が用いられている
ので、判定の演算処理に対して膨大な処理が必要でな
く、演算負担を軽減することができる。その結果、既在
のCPUにより容易に演算を行うことができ、高機能の
演奏練習装置を低コストで実現することができる。 【0148】なお、本実施例ではファジー推論をCPU
2およびテーブルROM4を用いてソフトによって実現
しているが、例えばファジーチップを用いてハード的に
実現してもい。 【0149】また、ファジー推論で用いるメンバーシッ
プ関数の値は、対象となる楽器の種類、課題曲のテンポ
レベルを上げ下げする変化程度などに応じて適切に設定
するとよい。このようにすれば、テンポ可変のいろいろ
な味付けが可能になる。 【0150】さらに、上記実施例では、演奏練習装置を
電子鍵盤楽器に適用した例であるが、鍵盤楽器への適用
に限らず、例えば電気ギターなどの他の楽器にも適用す
ることができる。 【0151】加えて、上記実施例は本発明を楽音信号を
発生する電子楽器に適用した例であるが、本発明はこれ
に限るものではなく、電子楽器以外の他の音響装置、例
えば、カラオケ装置についても適用が可能で、カラオケ
を練習する場合にも応用できる。パーソナルコンピュー
タによって楽音信号を発生する装置にも適用することが
でき、例えば、キーボードを演奏操作子として応用が可
能である。 【0152】 【発明の効果】本発明によれば、課題曲演奏のミス回数
および練習回数を入力データとするファジー推論により
「あいまい」な概念に対して好ましい判定を行うことが
でき、課題曲のテンポ変化程度をより自然なものとする
ことができる。 【0153】したがって、最適なテンポが自動的に選択
され、演奏者の能力に一致したレベルで演奏の練習をす
ることができる。また、ファジー推論が用いられている
ので、判定の演算処理に必要な処理数が少なく、演算負
担を軽減することができる。その結果、高機能の演奏練
習装置を低コストで実現することができる。
【図面の簡単な説明】
【図1】本発明による演奏練習装置の一実施例の全体構
成を示す図である。 【図2】同実施例の課題曲選択のメンバーシップ関数を
示す図である。 【図3】同実施例の演奏練習制御の処理を示すメインプ
ログラムである。 【図4】同実施例のタイマインターラプト処理を示すフ
ローチャートである。 【図5】同実施例のミスカウンタ計測処理のサブルーチ
ンを示すフローチャートである。 【図6】同実施例の演奏メロディを説明する図である。 【図7】同実施例のROM3に記憶される曲データの一
例を示す図である。 【図8】同実施例のファジールールA演算処理のサブル
ーチンを示すフローチャートである。 【図9】同実施例のファジールールB演算処理のサブル
ーチンを示すフローチャートである。 【図10】同実施例のファジールールC演算処理のサブ
ルーチンを示すフローチャートである。 【図11】同実施例のファジールールD演算処理のサブ
ルーチンを示すフローチャートである。 【図12】同実施例の最大値演算処理のサブルーチンを
示すフローチャートである。 【図13】同実施例の重心計算処理のサブルーチンを示
すフローチャートである。 【符号の説明】 1 鍵盤部(演奏操作子) 2 CPU(テーブルROMとともに、読み出し手段、
ミスカウント手段、練習回数カウント手段、可変制御手
段を構成) 3 ROM(曲データ記憶手段) 4 テーブルROM 5 ワーキングRAM 6 スイッチ部 7 タイマ 8 時計部 9 楽音生成部 10 表示部 11 表示装置 12 D/A変換器 13 アンプ 14 スピーカ
成を示す図である。 【図2】同実施例の課題曲選択のメンバーシップ関数を
示す図である。 【図3】同実施例の演奏練習制御の処理を示すメインプ
ログラムである。 【図4】同実施例のタイマインターラプト処理を示すフ
ローチャートである。 【図5】同実施例のミスカウンタ計測処理のサブルーチ
ンを示すフローチャートである。 【図6】同実施例の演奏メロディを説明する図である。 【図7】同実施例のROM3に記憶される曲データの一
例を示す図である。 【図8】同実施例のファジールールA演算処理のサブル
ーチンを示すフローチャートである。 【図9】同実施例のファジールールB演算処理のサブル
ーチンを示すフローチャートである。 【図10】同実施例のファジールールC演算処理のサブ
ルーチンを示すフローチャートである。 【図11】同実施例のファジールールD演算処理のサブ
ルーチンを示すフローチャートである。 【図12】同実施例の最大値演算処理のサブルーチンを
示すフローチャートである。 【図13】同実施例の重心計算処理のサブルーチンを示
すフローチャートである。 【符号の説明】 1 鍵盤部(演奏操作子) 2 CPU(テーブルROMとともに、読み出し手段、
ミスカウント手段、練習回数カウント手段、可変制御手
段を構成) 3 ROM(曲データ記憶手段) 4 テーブルROM 5 ワーキングRAM 6 スイッチ部 7 タイマ 8 時計部 9 楽音生成部 10 表示部 11 表示装置 12 D/A変換器 13 アンプ 14 スピーカ
フロントページの続き
(58)調査した分野(Int.Cl.7,DB名)
G09B 15/00
G10G 1/00 - 1/04
G10H 1/00 101 - 102
Claims (1)
- (57)【特許請求の範囲】 【請求項1】 一連の音符データからなる課題曲を記憶
する曲データ記憶手段と、 この曲データ記憶手段から課題曲の音符データを最初か
ら曲の終了まで順次読み出す動作を繰り返す曲読出し手
段と、 外部操作に応答して音高及びその発生タイミングを順次
入力する演奏操作子と、前記曲読出し手段により順次読み出される音符データの
音高及びその発生タイミングと、当該読み出される音符
データに対応して前記演奏操作子により順次入力される
音高及びその発生タイミングとを比較し、両者の不一致
を検出すると共に、課題曲が最初から曲終了まで読み出
される間に検出された 不一致回数をカウントするミスカ
ウント手段と、前記曲読出し手段により前記曲データ記憶手段から課題
曲を最初から曲終了まで読出した回数 をカウントする練
習回数カウント手段と、前記ミスカウント手段により前記課題曲の最初から曲終
了までに発生する不一致回数のカウントが終了する毎
に、 前記ミスカウント手段と練習回数カウント手段から
のデータを入力パラメータとして所定のファジールール
に従ってファジー推論を行い、該推論出力に対応して前
記曲データ出力手段の音符データの読み出し速度を変更
する変更制御手段と、 を備えたことを特徴とする演奏練習装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP13977492A JP3395202B2 (ja) | 1992-05-01 | 1992-05-01 | 演奏練習装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP13977492A JP3395202B2 (ja) | 1992-05-01 | 1992-05-01 | 演奏練習装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH05313561A JPH05313561A (ja) | 1993-11-26 |
JP3395202B2 true JP3395202B2 (ja) | 2003-04-07 |
Family
ID=15253106
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP13977492A Expired - Fee Related JP3395202B2 (ja) | 1992-05-01 | 1992-05-01 | 演奏練習装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3395202B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4646140B2 (ja) * | 2006-04-12 | 2011-03-09 | 株式会社河合楽器製作所 | 練習機能付き電子楽器 |
JP5419171B2 (ja) * | 2011-02-15 | 2014-02-19 | 株式会社河合楽器製作所 | 電子楽器 |
JP5392510B2 (ja) * | 2011-07-29 | 2014-01-22 | ブラザー工業株式会社 | 楽曲演奏装置及び楽曲演奏用プログラム |
-
1992
- 1992-05-01 JP JP13977492A patent/JP3395202B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH05313561A (ja) | 1993-11-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109559725B (zh) | 电子乐器及电子乐器的控制方法 | |
US4539882A (en) | Automatic accompaniment generating apparatus | |
JPH07146640A (ja) | 電子鍵盤楽器の演奏練習装置及びその制御方法 | |
US5278348A (en) | Musical-factor data and processing a chord for use in an electronical musical instrument | |
US8946533B2 (en) | Musical performance training device, musical performance training method and storage medium | |
EP2022549A1 (en) | Data computing unit for music game, data computing program for music game, and data computing method for music game | |
JPH02189572A (ja) | 自動押鍵指示装置 | |
JP3395202B2 (ja) | 演奏練習装置 | |
US5262583A (en) | Keyboard instrument with key on phrase tone generator | |
JP3275362B2 (ja) | 演奏練習装置 | |
JP2522928Y2 (ja) | 電子楽器 | |
JP2900753B2 (ja) | 自動伴奏装置 | |
JP4232299B2 (ja) | 演奏カロリー消費量測定装置 | |
JP3997671B2 (ja) | 電子楽器および演奏カロリー消費量測定装置 | |
JP3005915B2 (ja) | 電子楽器 | |
JPH06301333A (ja) | 演奏教習装置 | |
JPH0876750A (ja) | 押鍵指示機能付き楽器 | |
JP4136556B2 (ja) | 演奏独習装置 | |
JPH05313560A (ja) | 演奏練習装置 | |
JP2714557B2 (ja) | 演奏練習装置 | |
JPH0352061B2 (ja) | ||
JP3835131B2 (ja) | 自動作曲装置及び方法並びに記憶媒体 | |
JP2019180445A (ja) | 音あてクイズシステム、プログラム及びプログラムを記録した記録媒体 | |
JPH0619388A (ja) | 演奏練習装置 | |
JPH10187020A (ja) | 練習支援装置、練習支援方法および記憶媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |