(57)【要約】【課題】  複音同時発音される音の構成音を聴き分ける能力を重点的に教習できる音楽教習装置を実現する。【解決手段】  課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とが登録された課題履歴管理データベースＤＢから根音に対する課題音毎の正答数および誤答数を集計する。次に、この集計結果から聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音を判定する。そして、聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音とからなる訓練課題音を作成して出題するので、複音同時発音される音の構成音を聴き分ける能力を重点的に教習できる。【選択図】  図２１
2005156951.tif 000002
【特許請求の範囲】
【請求項１】
課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶手段と、
前記課題履歴記憶手段に記憶された課題履歴から根音に対する課題音毎の正答数および誤答数を集計する集計手段と、
前記集計手段の集計結果から聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音を判定する判定手段と、
前記判定手段により判定された、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音からなる訓練課題音を作成して出題する出題手段と
を具備することを特徴とする音楽教習装置。
【請求項２】
課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶手段と、
前記課題履歴記憶手段に記憶された課題履歴を参照して課題の根音およびその根音に対する構成音となる課題音毎に回答音の正誤を判定し、根音に対する課題音毎の正答数および誤答数を集計する集計手段と、
前記集計手段によって集計された根音に対する課題音毎の正答数および誤答数から聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音とを判定する判定手段と、
前記判定手段により判定された、聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音との各音高を決定し、決定した音高で最初に根音を、続いて聴き分けが不得意な課題音を順番に発音させる訓練課題を、聴き取りを苦手とする根音毎に作成する訓練課題作成手段と、
前記訓練課題作成手段により作成された訓練課題に対応した一連の訓練課題音の発音を指示して出題する訓練課題出題手段と
を具備することを特徴とする音楽教習装置。
【請求項３】
課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶手段と、
前記課題履歴記憶手段に記憶された課題履歴を参照して課題の根音およびその根音に対する構成音となる課題音毎に回答音の正誤を判定し、根音に対する課題音毎の正答数および誤答数を集計する集計手段と、
前記集計手段によって集計された根音に対する課題音毎の正答数および誤答数から聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音とを判定する判定手段と、
前記判定手段により判定された、聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音との音高を決定し、両音を和音と見做して同時発音させる訓練課題を、聴き取りを苦手とする根音毎に作成する訓練課題作成手段と、
前記訓練課題作成手段により作成された訓練課題に対応した一連の訓練課題音の発音を指示して出題する訓練課題出題手段と
を具備することを特徴とする音楽教習装置。
【請求項４】
課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶手段と、
前記課題履歴記憶手段に記憶された課題履歴から根音に対する課題音毎の正答数および根音に対する課題音毎の誤答数を集計する集計手段と、
前記集計手段の集計結果から聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音を判定する判定手段と、
前記判定手段により判定された、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音の内、和音として成立する根音および課題音を検索し、該当する根音および課題音で構成される和音の発音を指示して出題する出題手段と
を具備することを特徴とする音楽教習装置。
【請求項５】
課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶過程と、
前記課題履歴記憶過程で記憶された課題履歴から根音に対する課題音毎の正答数および誤答数を集計する集計過程と、
前記集計過程で得られた集計結果から聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音を判定する判定過程と、
前記判定過程にて判定された、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音からなる訓練課題音を作成して出題する出題過程と
をコンピュータで実行させることを特徴とする音楽教習プログラム。
【請求項６】
課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶過程と、
前記課題履歴記憶過程で記憶された課題履歴を参照して課題の根音およびその根音に対する構成音となる課題音毎に回答音の正誤を判定し、根音に対する課題音毎の正答数および誤答数を集計する集計過程と、
前記集計過程で集計された根音に対する課題音毎の正答数および誤答数から聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音とを判定する判定過程と、
前記判定過程で判定された、聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音との各音高を決定し、決定した音高で最初に根音を、続いて聴き分けが不得意な課題音を順番に発音させる訓練課題を、聴き取りを苦手とする根音毎に作成する訓練課題作成過程と、
前記訓練課題作成過程で作成された訓練課題に対応した一連の訓練課題音の発音を指示して出題する訓練課題出題過程と
をコンピュータで実行させることを特徴とする音楽教習プログラム。
【請求項７】
課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶過程と、
前記課題履歴記憶過程で記憶された課題履歴を参照して課題の根音およびその根音に対する構成音となる課題音毎に回答音の正誤を判定し、根音に対する課題音毎の正答数および誤答数を集計する集計過程と、
前記集計過程で集計された根音に対する課題音毎の正答数および誤答数から聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音とを判定する判定過程と、
前記判定過程で判定された、聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音との音高を決定し、両音を和音と見做して同時発音させる訓練課題を、聴き取りを苦手とする根音毎に作成する訓練課題作成過程と、
前記訓練課題作成過程で作成された訓練課題に対応した一連の訓練課題音の発音を指示して出題する訓練課題出題過程と
をコンピュータで実行させることを特徴とする音楽教習プログラム。
【請求項８】
課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶過程と、
前記課題履歴記憶過程で記憶された課題履歴から根音に対する課題音毎の正答数および誤答数を集計する集計過程と、
前記集計過程の集計結果から聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音を判定する判定過程と、
前記判定過程で判定された、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音の内、和音として成立する根音および課題音を検索し、該当する根音および課題音で構成される和音の発音を指示して出題する出題過程と
をコンピュータで実行させることを特徴とする音楽教習プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パーソナルコンピュータを用いたＤＴＭ（デスクトップミュージック）装置や電子楽器などに用いて好適な音楽教習装置および音楽教習プログラムに関する。
【背景技術】
【０００２】
音楽教習をする装置として、例えば特許文献１には、問題音（任意の音高の楽音）をランダムに放音出題する問題出題手段と、放音出題された問題音の音高を演奏操作で解答する解答手段と、解答が正解すると過去に放音出題した問題音の数に新たな問題音の数を加えた数の問題音を問題出題手段からランダムに出題させる問題出題制御手段とを備え、正解する毎に放音出題数を増加させてランダムに出題させることによって、絶対音感を効果的に向上させる技術が開示されている。
【０００３】
【特許文献１】特公平７−１３４８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、上記特許文献１に開示の音楽教習装置は、放音出題された問題音の音高を演奏操作で回答し、その回答が正解する毎に放音出題数を増加させるだけなので、和音のように複音同時発音される音の構成音を聴き分ける能力を重点的に教習させることができない、という問題がある。
そこで本発明は、このような事情に鑑みてなされたもので、複音同時発音される音の構成音を聴き分ける能力を重点的に教習することができる音楽教習装置および音楽教習プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００５】
上記目的を達成するため、請求項１に記載の発明では、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶手段と、前記課題履歴記憶手段に記憶された課題履歴から根音に対する課題音毎の正答数および誤答数を集計する集計手段と、前記集計手段の集計結果から聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音を判定する判定手段と、前記判定手段により判定された、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音からなる訓練課題音を作成して出題する出題手段とを具備することを特徴とする。
【０００６】
請求項２に記載の発明では、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶手段と、前記課題履歴記憶手段に記憶された課題履歴を参照して課題の根音およびその根音に対する構成音となる課題音毎に回答音の正誤を判定し、根音に対する課題音毎の正答数および誤答数を集計する集計手段と、前記集計手段によって集計された根音に対する課題音毎の正答数および誤答数から聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音とを判定する判定手段と、前記判定手段により判定された、聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音との各音高を決定し、決定した音高で最初に根音を、続いて聴き分けが不得意な課題音を順番に発音させる訓練課題を、聴き取りを苦手とする根音毎に作成する訓練課題作成手段と、前記訓練課題作成手段により作成された訓練課題に対応した一連の訓練課題音の発音を指示して出題する訓練課題出題手段とを具備することを特徴とする。
【０００７】
請求項３に記載の発明では、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶手段と、前記課題履歴記憶手段に記憶された課題履歴を参照して課題の根音およびその根音に対する構成音となる課題音毎に回答音の正誤を判定し、根音に対する課題音毎の正答数および誤答数を集計する集計手段と、前記集計手段によって集計された根音に対する課題音毎の正答数および誤答数から聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音とを判定する判定手段と、前記判定手段により判定された、聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音との音高を決定し、両音を和音と見做して同時発音させる訓練課題を、聴き取りを苦手とする根音毎に作成する訓練課題作成手段と、前記訓練課題作成手段により作成された訓練課題に対応した一連の訓練課題音の発音を指示して出題する訓練課題出題手段とを具備することを特徴とする。
【０００８】
請求項４に記載の発明では、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶手段と、前記課題履歴記憶手段に記憶された課題履歴から根音に対する課題音毎の正答数および根音に対する課題音毎の誤答数を集計する集計手段と、前記集計手段の集計結果から聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音を判定する判定手段と、前記判定手段により判定された、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音の内、和音として成立する根音および課題音を検索し、該当する根音および課題音で構成される和音の発音を指示して出題する出題手段とを具備することを特徴とする。
【０００９】
請求項５に記載の発明では、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶過程と、前記課題履歴記憶過程で記憶された課題履歴から根音に対する課題音毎の正答数および誤答数を集計する集計過程と、前記集計過程で得られた集計結果から聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音を判定する判定過程と、前記判定過程にて判定された、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音からなる訓練課題音を作成して出題する出題過程とをコンピュータで実行させることを特徴とする。
【００１０】
請求項６に記載の発明では、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶過程と、前記課題履歴記憶過程で記憶された課題履歴を参照して課題の根音およびその根音に対する構成音となる課題音毎に回答音の正誤を判定し、根音に対する課題音毎の正答数および誤答数を集計する集計過程と、前記集計過程で集計された根音に対する課題音毎の正答数および誤答数から聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音とを判定する判定過程と、前記判定過程で判定された、聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音との各音高を決定し、決定した音高で最初に根音を、続いて聴き分けが不得意な課題音を順番に発音させる訓練課題を、聴き取りを苦手とする根音毎に作成する訓練課題作成過程と、前記訓練課題作成過程で作成された訓練課題に対応した一連の訓練課題音の発音を指示して出題する訓練課題出題過程とをコンピュータで実行させることを特徴とする。
【００１１】
請求項７に記載の発明では、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶過程と、前記課題履歴記憶過程で記憶された課題履歴を参照して課題の根音およびその根音に対する構成音となる課題音毎に回答音の正誤を判定し、根音に対する課題音毎の正答数および誤答数を集計する集計過程と、前記集計過程で集計された根音に対する課題音毎の正答数および誤答数から聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音とを判定する判定過程と、前記判定過程で判定された、聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音との音高を決定し、両音を和音と見做して同時発音させる訓練課題を、聴き取りを苦手とする根音毎に作成する訓練課題作成過程と、前記訓練課題作成過程で作成された訓練課題に対応した一連の訓練課題音の発音を指示して出題する訓練課題出題過程とをコンピュータで実行させることを特徴とする。
【００１２】
請求項８に記載の発明では、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを課題履歴として記憶する課題履歴記憶過程と、前記課題履歴記憶過程で記憶された課題履歴から根音に対する課題音毎の正答数および誤答数を集計する集計過程と、前記集計過程の集計結果から聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音を判定する判定過程と、前記判定過程で判定された、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音の内、和音として成立する根音および課題音を検索し、該当する根音および課題音で構成される和音の発音を指示して出題する出題過程とをコンピュータで実行させることを特徴とする。
【発明の効果】
【００１３】
請求項１、５に記載の発明によれば、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを記憶した課題履歴から根音に対する課題音毎の正答数および誤答数を集計し、そこから聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音を判定する。そして、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音からなる訓練課題音を作成して出題するので、複音同時発音される音の構成音を聴き分ける能力を重点的に教習することができる。
【００１４】
請求項２、６に記載の発明によれば、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを記憶した課題履歴を参照して課題の根音およびその根音に対する構成音となる課題音毎に回答音の正誤を判定し、根音に対する課題音毎の正答数および誤答数を集計する。そして、根音に対する課題音毎の正答数および誤答数から聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音とを判定した後、聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音との各音高を決定し、決定した音高で最初に根音を、続いて聴き分けが不得意な課題音を順番に発音させる為、聴き取りが苦手な根音や聴き分けが不得意な課題音を１音ずつ聴かせることによって、複音同時発音される音の構成音を聴き分ける能力を重点的に教習することができる。
【００１５】
請求項３、７に記載の発明によれば、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを記憶した課題履歴を参照して課題の根音およびその根音に対する構成音となる課題音毎に回答音の正誤を判定し、根音に対する課題音毎の正答数および誤答数を集計する。そして、根音に対する課題音毎の正答数および誤答数から聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音とを判定した後、聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音との各音高を決定し、両音を和音と見做して同時発音させる為、複音同時発音される音の構成音を聴き分ける能力を重点的に教習することができる。
【００１６】
請求項４、８に記載の発明によれば、課題の根音と、根音に対する構成音となる課題音と、出題された課題音に対応して回答入力された回答音とを記憶した課題履歴から根音に対する課題音毎の正答数および誤答数を集計し、そこから聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音を判定する。そして、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音の内、和音として成立する根音および課題音を検索し、該当する根音および課題音で構成される和音を発音するので、苦手な和音を聴き分ける能力を重点的に教習することができる。
【発明を実施するための最良の形態】
【００１７】
本発明による音楽教習装置および音楽教習プログラムは、周知の電子楽器もしくはパーソナルコンピュータを用いたＤＴＭ（デスクトップミュージック）装置などに適用され得る。以下では、本発明による最良の実施形態について図面を参照して説明する。
【００１８】
Ａ．構成
（１）全体構成
図１は実施形態の全体構成を示すブロック図である。この図において、１０は構成要素１〜７を備えたＤＴＭ（デクストップミュージック）装置、２０はＤＴＭ装置１０とＭＩＤＩ接続される電子楽器である。電子楽器２０は、ＤＴＭ装置１０からＭＩＤＩ入力される課題音（もしくは訓練課題音）のノートデータを発音する一方、その発音された課題音（もしくは訓練課題音）を聴いたユーザの回答操作として鍵盤が押鍵された場合には、この押鍵された鍵に対応したノートデータを発生してＤＴＭ装置１０にＭＩＤＩ出力する。
【００１９】
ＤＴＭ装置１０は問題モードおよび分析モードを有する。問題モードで動作するＤＴＭ装置１０は複数の課題音の再生を電子楽器２０側に指示し、一連の課題音を再生し終えた後、回答制限時間以内に回答操作が行われた場合に、その操作で入力された回答音を保存する。回答入力を終えると、再生された課題音と回答入力された回答音との比較結果に基づき算出される得点を画面表示する他、出題された課題音および回答された回答音を表す課題履歴を作成してデータベース登録する。
【００２０】
一方、分析モードで動作するＤＴＭ装置１０は、データベース登録された課題履歴を参照して課題の根音と、その根音に対する課題音（構成音）と、この課題音に対応して入力された回答音とを検索し、検索された根音および課題音（構成音）毎に、回答音の音高の適否を判断して根音に対する課題音（構成音）毎の正答数および誤答数を集計する。次に、集計結果から聴き取りを苦手とする根音およびその根音に対する課題音（構成音）の聴き分けの得手・不得手を表す判定結果を抽出し、その判定結果に基づき聴き取りを苦手とする根音とその根音に対して聴き分けが不得意な課題音（構成音）とを含む訓練課題音を作成し、作成した訓練課題音の再生／回答を行うことで構成音を聴き分ける能力を重点的に教習させる。
【００２１】
（２）ＤＴＭ装置１０の構成
次に、図１を参照してＤＴＭ装置１０の構成を説明する。図１において、１は装置各部を制御するＣＰＵであり、本発明の要旨にかかわる処理動作については追って詳述する。２はプログラムエリアおよびデータエリアを有するＲＯＭである。ＲＯＭ２のプログラムエリアには、ＣＰＵ１が実行するメインルーチン、再生開始処理、回答処理、音階判定処理、集計処理、判定処理および課題音作成処理を含む各種制御プログラムが記憶される。ＲＯＭ２のデータエリアには、後述のメインルーチン実行時に表示部７に画面表示される問題モード画面ＴＭＧおよび分析モード画面ＡＭＧの各画面データが記憶される。問題モード画面ＴＭＧおよび分析モード画面ＡＭＧの構成については追って詳述する。
【００２２】
３はワークエリア、データエリアおよびバッファエリアを備えるＲＡＭである。ＲＡＭ３のワークエリアには、各種レジスタ・フラグデータが一時記憶される。ＲＡＭ３のデータエリアには、課題情報管理テーブルＴ１、課題音管理テーブルＴ２、課題履歴管理データベースＤＢ、回答音データテーブルＴ３、訓練課題情報管理テーブルＴ４および訓練課題音管理テーブルＴ５が設けられる。これらテーブルＴ１〜Ｔ５およびデータベースＤＢの構成については追って詳述する。ＲＡＭ３のバッファエリアには、後述する再生開始処理や音階判定処理で用いられる各種バッファが設けられる。
【００２３】
ＭＩＤＩインタフェース４は、ＣＰＵ１の制御の下に、電子楽器２０にＭＩＤＩデータをシリアル転送したり、電子楽器２０側から送出されるＭＩＤＩデータを取り込む。マウス５は右ボタンおよび左ボタンを備え、例えば表示画面上に配置されるアイコンにマウスカーソルをポインティングさせた状態で左ボタンを押下する周知のクリック操作に応じてクリックイベントを発生させる。キーボード６はキー入力操作に応じたキーイベントを発生する。表示部７はＬＣＤパネル等から構成され、ＣＰＵ１から供給される表示制御信号に応じて、後述する問題モード画面ＴＭＧや分析モード画面ＡＭＧなどを画面表示する。
【００２４】
（３）画面構成
次に、図２〜図３を参照して問題モード画面ＴＭＧおよび分析モード画面ＡＭＧの構成を説明する。図２は問題モード画面ＴＭＧの一例を示す図である。問題モード画面ＴＭＧは後述する問題モード下で表示部７に画面表示される。図２において、Ｅ１は回答操作に用いる鍵盤表示エリアである。鍵盤表示エリアＥ１の回答操作とは、放音された出題音（課題音あるいは訓練課題音）の音高に一致する鍵位置にマウスカーソルをポインティングさせてマウス５をクリックする操作を言う。Ｅ２は出題音の音符を楽譜表示する出題表示エリア、Ｅ３は回答操作に応じて入力された回答音の音符を楽譜表示する回答表示エリアである。Ｅ４は問題回答の正解数で算出される得点を表示する得点表示エリアである。なお、本実施例では、上記の鍵盤表示エリアＥ１を用いた回答の他、キーボード６のキー操作による回答入力あるいは電子楽器２０が備える鍵盤を用いた回答入力を可能にしている。
【００２５】
ＩＣ１〜ＩＣ６はそれぞれマウス５によりクリック操作されるアイコンである。問題アイコンＩＣ１はクリック操作に応じて出題開始を指示するイベントを発生する。分析アイコンＩＣ２はクリック操作に応じて分析モードへの遷移を指示するイベントを発生する。もう一度聞くアイコンＩＣ３はクリック操作に応じて出題音の再発音を指示するイベントを発生する。やめるアイコンＩＣ４はクリック操作に応じて回答キャンセルを指示するイベントを発生する。次の問題へアイコンＩＣ５はクリック操作に応じて設問更新を指示するイベントを発生する。決定アイコンＩＣ６はクリック操作に応じて回答決定を指示するイベントを発生する。
【００２６】
図３は分析モード画面ＡＭＧの一例を示す図である。分析モード画面ＡＭＧは後述する分析モード下で表示部７に画面表示される。分析モード画面ＡＭＧでは、上述の問題モード画面ＴＭＧと同様、鍵盤表示エリアＥ１、出題表示エリアＥ２、回答表示エリアＥ３、もう一度聞くアイコンＩＣ３、やめるアイコンＩＣ４、次の問題へアイコンＩＣ５および決定アイコンＩＣ６を有する。分析モード画面ＡＭＧが問題モード画面ＴＭＧと相違する点は、根音選択枠Ｗ１、コード種選択枠Ｗ２およびアイコンＩＣ７〜ＩＣ９を備えることにある。根音選択枠Ｗ１およびコード種類選択枠Ｗ２は、問題モードに遷移して出題される課題音（和音）の根音（ルート）およびコード種（タイプ）を選択する。テストアイコンＩＣ７は、クリック操作に応じて、上記選択枠Ｗ１，Ｗ２で選択された根音とコード種とで指定される和音を問題モードで出題するよう指示するイベントを発生する。訓練アイコンＩＣ８は、クリック操作に応じて訓練課題の出題開始を指示するイベントを発生する。分析開始アイコンＩＣ９は、クリック操作に応じて回答分析の開始を指示するイベントを発生する。
【００２７】
（４）データ構造
次に、図４〜図９を参照してＲＡＭ３のデータエリアに格納される課題情報管理テーブルＴ１、課題音管理テーブルＴ２、課題履歴管理データベースＤＢ、回答音データテーブルＴ３、訓練課題情報管理テーブルＴ４および訓練課題音管理テーブルＴ５の各データ構造について説明する。
【００２８】
図４は課題情報管理テーブルＴ１のデータ構造を示すメモリマップである。課題情報管理テーブルＴ１は、課題の内容を表す課題データａｓｓｉｇｎ［０］〜ａｓｓｉｇｎ［ｎ］から構成される。一つの課題データａｓｓｉｇｎ［ｉ］は、課題を識別する課題番号ａｓｓｉｇｎ＃（ａｓｓｉｇｎ［ｉ］［０］）、根音となる課題音を指定するポインタｋｅｙ（ａｓｓｉｇｎ［ｉ］［１］）、回答制限時間ｌｉｍｉｔ（ａｓｓｉｇｎ［ｉ］［２］）、出題音数ｉＮｏｔｅｓ（ａｓｓｉｇｎ［ｉ］［３］）およびポインタｐＮｏｔｅ（ａｓｓｉｇｎ［ｉ］［４］）を有する。後述する課題音管理テーブルＴ２では、課題番号ａｓｓｉｇｎ＃で指定される複数の課題音データａｓＮｏｔｅを記憶しており、その内の先頭の課題音データａｓＮｏｔｅが上記ポインタｐＮｏｔｅ（ａｓｓｉｇｎ［ｉ］［４］）で指定される。
【００２９】
図５は課題音管理テーブルＴ２のデータ構造を示すメモリマップである。課題音管理テーブルＴ２は、上述した課題データａｓｓｉｇｎで定義される課題音の属性を表す課題音データａｓＮｏｔｅ［０］〜ａｓＮｏｔｅ［ｎ］から構成される。一つの課題音データａｓＮｏｔｅ［ｉ］は、識別番号ａｓＮｏｔｅ＃（ａｓＮｏｔｅ［ｉ］［０］）、課題番号ａｓｓｉｇｎ＃（ａｓＮｏｔｅ［ｉ］［１］）、音高ｐｉｔｃｈ（ａｓＮｏｔｅ［ｉ］［２］）、再生開始時点からの経過時間で表される発音タイミングｔｉｍｅ＿ｏｎ（ａｓＮｏｔｅ［ｉ］［３］）、再生開始時点からの経過時間で表される消音タイミングｔｉｍｅ＿ｏｆｆ（ａｓＮｏｔｅ［ｉ］［４］）および次に再生する課題音データを指定するポインタｐＮｅｘｔＮｏｔｅ（ａｓＮｏｔｅ［ｉ］［５］）を有する。
【００３０】
図６は課題履歴管理データベースＤＢのデータ構造を示すメモリマップである。課題履歴管理データベースＤＢは、出題した課題音とそれに回答した回答音とを履歴記憶するデータベースであり、課題履歴データｔｅｓｔＨｉｓｔ［０］〜ｔｅｓｔＨｉｓｔ［ｎ］から構成される。一つの課題履歴データｔｅｓｔＨｉｓｔ［ｉ］は、識別番号Ｈｉｓｔ＃（ｔｅｓｔＨｉｓｔ［ｉ］［０］）、課題番号ａｓｓｉｇｎ＃（ｔｅｓｔＨｉｓｔ［ｉ］［１］）、回答音数ｉＮｏｔｅｓ（ｔｅｓｔＨｉｓｔ［ｉ］［２］）、最初の回答音を指定するポインタｐＡＮｏｔｅ（ｔｅｓｔＨｉｓｔ［ｉ］［３］）および最初の課題音を指定するポインタｐＱＮｏｔｅ（ｔｅｓｔＨｉｓｔ［ｉ］［４］）を有する。
【００３１】
図７は回答音データテーブルＴ３のデータ構造を示すメモリマップである。回答音データテーブルＴ３は、前述した課題情報管理テーブルＴ１（図４参照）を用いて出題された課題音について回答した回答音を格納するテーブルであり、回答音データａｎｓＮｏｔｅ［０］〜ａｎｓＮｏｔｅ［ｎ］から構成される。一つ回答音データａｎｓＮｏｔｅ［ｉ］は、識別番号ａｓＮｏｔｅ＃（ａｎｓＮｏｔｅ［ｉ］［０］）、課題番号ａｓｓｉｇｎ＃（ａｎｓＮｏｔｅ［ｉ］［１］）、音高ｐｉｔｃｈ（ａｎｓＮｏｔｅ［ｉ］［２］）、再生開始時点からの経過時間で表される発音タイミングｔｉｍｅ＿ｏｎ（ａｎｓＮｏｔｅ［ｉ］［３］）、再生開始時点からの経過時間で表される消音タイミングｔｉｍｅ＿ｏｆｆ（ａｎｓＮｏｔｅ［ｉ］［４］）、対応する課題音データを示す課題音番号ＨｉｔＯｒｇ（ａｎｓＮｏｔｅ［ｉ］［５］）および次の回答音データを指定するポインタｐＮｅｘｔＮｏｔｅ（ａｎｓＮｏｔｅ［ｉ］［６］）を有する。
【００３２】
図８は訓練課題情報管理テーブルＴ４のデータ構造を示すメモリマップである。訓練課題情報管理テーブルＴ４は、訓練課題の内容を表す訓練課題データｔｒａｉｎ［０］〜ｔｒａｉｎ［ｎ］から構成される。一つの訓練課題データｔｒａｉｎ［ｉ］は、訓練課題番号ｔｒａｉｎ＃（ｔｒａｉｎ［ｉ］［０］）、根音となる課題音を指定するポインタｋｅｙ（ｔｒａｉｎ［ｉ］［１］）、回答制限時間ｌｉｍｉｔ（ｔｒａｉｎ［ｉ］［２］）、出題音数ｉＮｏｔｅｓ（ｔｒａｉｎ［ｉ］［３］）およびポインタｐＮｏｔｅ（ｔｒａｉｎ［ｉ］［４］）を有する。後述する訓練課題音管理テーブルＴ５では、訓練課題番号ｔｒａｉｎ＃で指定される複数の訓練課題音データｔｒＮｏｔｅを記憶しており、その内の先頭の訓練課題音データｔｒＮｏｔｅがポインタｐＮｏｔｅで指定される。
【００３３】
図９は訓練課題音管理テーブルＴ５のデータ構造を示すメモリマップである。訓練課題音管理テーブルＴ５は、上述した訓練課題データｔｒａｉｎで定義される訓練課題音の属性を表す訓練課題音データｔｒＮｏｔｅ［０］〜ｔｒＮｏｔｅ［ｎ］から構成される。一つの訓練課題音データｔｒＮｏｔｅ［ｉ］は、識別番号ｔｒＮｏｔｅ＃（ｔｒＮｏｔｅ［ｉ］［０］）、訓練課題番号ｔｒａｉｎ＃（ｔｒＮｏｔｅ［ｉ］［１］）、音高ｐｉｔｃｈ（ｔｒＮｏｔｅ［ｉ］［２］）、再生開始時点からの経過時間で表される発音タイミングｔｉｍｅ＿ｏｎ（ｔｒＮｏｔｅ［ｉ］［３］）、再生開始時点からの経過時間で表される消音タイミングｔｉｍｅ＿ｏｆｆ（ｔｒＮｏｔｅ［ｉ］［４］）および次に再生する訓練課題音データｔｒＮｏｔｅを指定するポインタｐＮｅｘｔＮｏｔｅ（ｔｒＮｏｔｅ［ｉ］［５］）を有する。
【００３４】
Ｂ．動作
次に、図１０〜図３０を参照して上記構成による実施形態の動作を説明する。  
（１）メインルーチンの動作
ＤＴＭ装置１０において、メインルーチンが実行されると、ＣＰＵ１は図１０に示すステップＳＡ１に進み、装置各部を初期化するイニシャライズを行った後、ステップＳＡ２に進む。ステップＳＡ２では、ＲＯＭ２のデータエリアから画面データを読み出して問題モード画面ＴＭＧ（図２参照）を表示部７に画面表示する。次いで、ステップＳＡ３では、動作モードを表すフラグＭＯＤＥに「０」をセットする。フラグＭＯＤＥは「０」の場合に問題モードを、「１」の場合に分析モードを表す。したがって、このステップＳＡ３では、問題モードをデフォルト設定している。以下では、問題モード下のメインルーチンの動作と、分析モード下のメインルーチンの動作とに分けて説明を進める。
【００３５】
＜問題モード下の動作＞
問題モードでは、ステップＳＡ４の判断結果が「ＹＥＳ」になり、ステップＳＡ５以降を実行する。ステップＳＡ５〜ＳＡ１６では、問題モード画面ＴＭＧにおけるアイコン操作に対応した処理を実行する。以下、問題モード画面ＴＭＧに配設される「問題アイコンＩＣ１」、「決定アイコンＩＣ６」、「もう一度聞くアイコンＩＣ３」、「次の問題へアイコンＩＣ５」、「やめるアイコンＩＣ４」および「分析アイコンＩＣ２」をそれぞれクリック操作した場合に実行される各動作を説明する。
【００３６】
ａ．問題アイコンＩＣ１をクリック操作した場合
問題アイコンＩＣ１をクリック操作すると、ステップＳＡ５の判断結果が「ＹＥＳ」になり、ステップＳＡ６に進み、ポインタｉａｓｓｉｇｎをゼロリセットする。続いて、ステップＳＡ７では再生開始処理を実行する。再生開始処理では、後述するように、課題情報管理テーブルＴ１（図４参照）中でポインタｉａｓｓｉｇｎに対応した課題データａｓｓｉｇｎ［ｉａｓｓｉｇｎ］が指定する出題音数分の課題音データを、課題音管理テーブルＴ２（図５参照）を参照して再生する。次いで、ステップＳＡ８では回答処理を実行する。回答処理では、後述するように、回答制限時間ｌｉｍｉｔ（ａｓｓｉｇｎ［ｉａｓｓｉｇｎ］［２］）以内の回答操作が行われた場合、その操作に応じて生じる回答音のノートオン属性（音高ｐｉｔｃｈ、発音タイミングｔｉｍｅ＿ｏｎ、識別番号ａｓＮｏｔｅ＃および課題番号ａｓｓｉｇｎ＃）とノートオフ属性（消音タイミングｔｉｍｅ＿ｏｆｆ）とを回答音データテーブルＴ３（図７参照）に登録する。そして、回答制限時間ｌｉｍｉｔを超えると、課題情報管理テーブルＴ１および回答音データテーブルＴ３を参照して、回答操作を終えた課題音および回答音を表す課題履歴データｔｅｓｔＨｉｓｔを作成して課題履歴管理データベースＤＢ（図６参照）に登録する。
【００３７】
ｂ．決定アイコンＩＣ６をクリック操作した場合
問題アイコンＩＣ１のクリック操作に応じて課題音が再生され、それに対応する回答音を入力し終えた後、決定アイコンＩＣ６をクリック操作したとする。そうすると、ステップＳＡ９の判断結果が「ＹＥＳ」となり、ステップＳＡ１０を介して音階判定処理を実行する。音階判定処理では、後述するように、再生された課題音と回答入力された回答音との比較結果に基づき算出される正解率を問題モード画面ＴＭＧ（図２参照）の得点表示エリアＥ４に数値表示する。
【００３８】
ｃ．もう一度聞くアイコンＩＣ３をクリック操作した場合
もう一度聞くアイコンＩＣ３をクリック操作すると、ステップＳＡ１１の判断結果が「ＹＥＳ」となり、上述したステップＳＡ７に処理を戻して再び再生開始処理を実行する。この場合、前回再生した課題音、つまり前回と同一のポインタｉａｓｓｉｇｎに対応した課題データａｓｓｉｇｎ［ｉａｓｓｉｇｎ］が指定する出題音数分の課題音データを再生する。
【００３９】
ｄ．次の問題へアイコンＩＣ５をクリック操作した場
次の問題へアイコンＩＣ５をクリック操作すると、ステップＳＡ１２の判断結果が「ＹＥＳ」になり、ステップＳＡ１３に進み、ポインタｉａｓｓｉｇｎをインクリメントして歩進させてからステップＳＡ７に処理を戻して再生開始処理を実行する。
【００４０】
ｅ．やめるアイコンＩＣ４をクリック操作した場合
やめるアイコンＩＣ４をクリック操作すると、ステップＳＡ１６の判断結果が「ＹＥＳ」となり、メインルーチンを完了させる。
【００４１】
ｆ．分析アイコンＩＣ２をクリック操作した場合
分析アイコンＩＣ２をクリック操作すると、ステップＳＡ１４の判断結果が「ＹＥＳ」になり、ステップＳＡ１５に進み、フラグＭＯＤＥを「１」にセットした後、前述したステップＳＡ４に処理を戻す。そうすると、ステップＳＡ４の判断結果が「ＮＯ」となり、図１１に図示するステップＳＡ１７以降の分析モードに遷移する。
【００４２】
＜分析モード下の動作＞
分析モードでは、ステップＳＡ４の判断結果が「ＮＯ」になり、図１１に示すステップＳＡ１７に処理を進める。ステップＳＡ１７では、ＲＯＭ２のデータエリアから画面データを読み出して分析モード画面ＡＭＧ（図３参照）を表示部７に画面表示する。次いで、ステップＳＡ１８〜ＳＡ３１では、分析モード画面ＡＭＧにおけるアイコン操作に対応した処理を実行する。以下、「訓練アイコンＩＣ８」、「決定アイコンＩＣ６」、「もう一度聞くアイコンＩＣ３」、「次の問題へアイコンＩＣ５」、「分析開始アイコンＩＣ９」、「やめるアイコンＩＣ４」および「テストアイコンＩＣ７」をそれぞれクリック操作した場合に分けて各動作を説明する。
【００４３】
ａ．訓練アイコンＩＣ８をクリック操作した場合
訓練アイコンＩＣ８をクリック操作すると、ステップＳＡ１８の判断結果が「ＹＥＳ」になり、ステップＳＡ１９に進み、ポインタｉｔｒａｉｎをゼロリセットする。続いて、ステップＳＡ２０では、訓練課題情報管理テーブルＴ４（図８参照）中でポインタｉｔｒａｉｎに対応した訓練課題データｔｒａｉｎ［ｉｔｒａｉｎ］が指定する出題音数分の訓練課題音を、訓練課題音管理テーブルＴ５（図９参照）を参照して再生する再生開始処理を実行する。そして、ステップＳＡ２１では回答処理を実行する。分析モード下の回答処理では、後述するように、回答制限時間ｌｉｍｉｔ（ａｓｓｉｇｎ［ｉａｓｓｉｇｎ］［１］）以内の回答操作が行われた場合、その操作に応じて生じる回答音のノートオン属性（音高ｐｉｔｃｈ、発音タイミングｔｉｍｅ＿ｏｎ、識別番号ａｓＮｏｔｅ＃および課題番号ａｓｓｉｇｎ＃）とノートオフ属性（消音タイミングｔｉｍｅ＿ｏｆｆ）とを回答音データテーブルＴ３に登録する。
【００４４】
ｂ．決定アイコンＩＣ６をクリック操作した場合
訓練アイコンＩＣ８のクリック操作に応じて訓練課題音が再生され、それに対応する回答音を入力し終えた後、決定アイコンＩＣ６をクリック操作したとする。そうすると、ステップＳＡ２２の判断結果が「ＹＥＳ」となり、ステップＳＡ２３に進み、ポインタｉｔｒａｉｎに対応する訓練課題音データｔｒＮｏｔｅ［ｉｔｒａｉｎ］および回答音データａｎｓＮｏｔｅ［ｉｔｒａｉｎ］を、分析モード画面ＡＭＧの出題表示エリアＥ２および回答表示エリアＥ３にそれぞれ楽譜表示する表示処理を実行する。
【００４５】
ｃ．もう一度聞くアイコンＩＣ３をクリック操作した場合
もう一度聞くアイコンＩＣ３をクリック操作すると、ステップＳＡ２４の判断結果が「ＹＥＳ」となり、上述したステップＳＡ２０に処理を戻して再生開始処理を実行する。この場合、前回再生した訓練課題音、つまり前回と同一のポインタｉｔｒａｉｎに対応した訓練課題データｔｒａｉｎ［ｉｔｒａｉｎ］が指定する出題音数分の訓練課題音データｔｒＮｏｔｅを再生する。
【００４６】
ｄ．次の問題へアイコンＩＣ５をクリック操作した場
次の問題へアイコンＩＣ５をクリック操作すると、ステップＳＡ２５の判断結果が「ＹＥＳ」になり、ステップＳＡ２６に進み、ポインタｉｔｒａｉｎをインクリメントして歩進させてからステップＳＡ２０に処理を戻して再生開始処理を実行する。
【００４７】
ｅ．分析開始アイコンＩＣ９をクリック操作した場合
分析開始アイコンＩＣ９をクリック操作すると、ステップＳＡ２７の判断結果が「ＹＥＳ」になり、ステップＳＡ２８に進み、分析処理（後述する）を実行した後、ステップＳＡ１８に処理を戻す。
【００４８】
ｆ．やめるアイコンＩＣ４をクリック操作した場合
やめるアイコンＩＣ４をクリック操作すると、ステップＳＡ３１の判断結果が「ＹＥＳ」となり、メインルーチンを完了させる。
【００４９】
ｇ．テストアイコンＩＣ７をクリック操作した場合
テストアイコンＩＣ７をクリック操作すると、ステップＳＡ２９の判断結果が「ＹＥＳ」になり、ステップＳＡ３０に進み、フラグＭＯＤＥを「０」にセットする。次いで、図１２に示すステップＳＡ３２に進み、分析モード画面ＡＭＧ中の根音選択枠Ｗ１にて根音が指定されているか否かを判断する。根音が指定されると、判断結果は「ＹＥＳ」となり、ステップＳＡ３３を介して根音指定時課題作成処理を実行する。
【００５０】
根音指定時課題作成処理では、指定された根音とランダムに選択されるコード種とで定まる和音を出題する第１問目およびその和音を形成する根音と和音構成音とを順番に発音させる第２問目からなる課題を作成し、その内容を課題情報管理テーブルＴ１と課題音管理テーブルＴ２とに登録する。そして、根音指定時課題作成処理が完了すると、図１０に示すステップＳＡ２に処理を戻す。これにより、ユーザは根音指定時課題作成処理で作成した課題に基づき再生開始処理および回答処理を実行することによって、ユーザ自ら指定した根音を備える和音について聴き分けを教習することが可能になっている。
【００５１】
一方、根音選択枠Ｗ１にて根音が指定されていない場合には、上記ステップＳＡ３２の判断結果が「ＮＯ」となり、ステップＳＡ３４に進む。ステップＳＡ３４では、分析モード画面ＡＭＧ中のコード種選択枠Ｗ２にてコード種が指定されているか否かを判断する。コード種が指定されていなければ、判断結果は「ＮＯ」になり、何も処理せずに図１０に示すステップＳＡ２に処理を戻して問題モードに遷移する。
【００５２】
これに対し、コード種が指定されると、上記ステップＳＡ３４の判断結果が「ＹＥＳ」となり、ステップＳＡ３５を介してコード種指定時課題作成処理を実行する。コード種指定時課題作成処理では、根音をＣ音として、指定されたコード種の和音を作成し、作成した和音を転回するかあるいは転調するかをランダムに選択する。転回が選択された場合にはその転回形をランダムに設定する。転調が選択された場合には転調度数をランダムに設定する。そして、転回もしくは転調された和音を出題する第１問目およびその和音を形成する根音と和音構成音とを順番に発音させる第２問目からなる課題を作成し、その内容を課題情報管理テーブルＴ１と課題音管理テーブルＴ２とに登録する。そして、コード種指定時課題作成処理が完了すると、図１０に示すステップＳＡ２に処理を戻す。これにより、ユーザはコード種指定時課題作成処理で作成した課題に基づき再生開始処理および回答処理を実行することによって、ユーザ自ら指定したコード種で転回された和音もしくは転調された和音について聴き分けを教習することが可能になっている。
【００５３】
（２）再生開始処理の動作
次に、図１３〜図１５を参照して、問題モード下で実行される再生開始処理の動作を説明する。上述したメインルーチンのステップＳＡ７（図１０参照）を介して本処理が実行されると、ＣＰＵ１は図１３に示すステップＳＢ１に処理を進め、ＲＡＭ３のバッファエリアに設けられるノートオフバッファＯｆｆＢｕｆを初期化する。次に、ステップＳＢ２では、レジスタｐｌａｙｓｔａｒｔに現時刻をストアする。次いで、ステップＳＢ３に進むと、課題情報管理テーブルＴ１（図４参照）において、ポインタｉａｓｓｉｇｎで指定される課題データａｓｓｉｇｎ［ｉａｓｓｉｇｎ］［４］（ポインタｐＮｏｔｅ）を読み出してレジスタｐＮｏｔｅにストアする。ステップＳＢ４〜ＳＢ５では、検索ポインタｉＯｆｆＣｎｔ、ｉＯｆｆＢｕｆＣｎｔをそれぞれゼロリセットする。続いて、ステップＳＢ６では、ポインタｉａｓｓｉｇｎに対応した課題データａｓｓｉｇｎ［ｉａｓｓｉｇｎ］［３］の出題音数ｉＮｏｔｅｓと検索ポインタｉＯｆｆＣｎｔとが一致したか否か、つまり出題し終えたかどうかを判断する。
【００５４】
出題音数ｉＮｏｔｅｓ分の課題音を発音し終えていなければ、判断結果は「ＮＯ」になり、図１４のステップＳＢ７に処理を進める。ステップＳＢ７では、現時刻からレジスタｐｌａｙｓｔａｒｔにストアされた時刻を減算してレジスタｎｏｗＴｉｍｅにストアする。以後、レジスタｎｏｗＴｉｍｅを再生時刻ｎｏｗＴｉｍｅと称す。そして、ステップＳＢ８に進むと、再生時刻ｎｏｗＴｉｍｅが、課題音データａｓＮｏｔｅ［ｐＮｏｔｅ］［３］の発音タイミングｔｉｍｅ＿ｏｎを過ぎているか否かを判断する。以下、再生時刻ｎｏｗＴｉｍｅが発音タイミングｔｉｍｅ＿ｏｎを過ぎている場合と過ぎていない場合とに分けて動作説明を進める。
【００５５】
＜発音タイミングｔｉｍｅ＿ｏｎを過ぎている場合＞
再生時刻ｎｏｗＴｉｍｅが発音タイミングｔｉｍｅ＿ｏｎを過ぎていると、ステップＳＢ８の判断結果は「ＹＥＳ」になり、ステップＳＢ９に進む。ステップＳＢ９では、音高ｐｉｔｃｈ（ａｓＮｏｔｅ［ｐＮｏｔｅ］［２］）を含む課題音のノートオンイベントを生成し、これをＭＩＤＩインタフェース４を介して電子楽器２０側に送出して当該課題音を再生させる。課題音を再生させると、ＣＰＵ１はステップＳＢ１０に処理を進め、ポインタｉＯｆｆＢｕｆＣｎｔをインクリメントして歩進させ、続くステップＳＢ１１では、レジスタｐＮｏｔｅの値を、ポインタｉＯｆｆＢｕｆＣｎｔで指定されるノートオフバッファＯｆｆＢｕｆ［ｉＯｆｆＢｕｆＣｎｔ］にストアする。次に、ステップＳＢ１２では、次に再生する課題音を指定するポインタｐＮｅｘｔＮｏｔｅ（ａｓＮｏｔｅ［ｐＮｏｔｅ］［６］）を、ポインタｐＮｏｔｅにセットした後、図１３に示すステップＳＢ６に処理を戻す。
【００５６】
＜発音タイミングｔｉｍｅ＿ｏｎを過ぎていない場合＞
一方、再生時刻ｎｏｗＴｉｍｅが発音タイミングｔｉｍｅ＿ｏｎを過ぎていない場合には、前述したステップＳＢ８（図１４参照）の判断結果が「ＮＯ」になり、図１５に示すステップＳＢ１３に進む。ステップＳＢ１３では、検索ポインタｉＯｆｆをゼロリセットする。次いで、ステップＳＢ１４では、検索ポインタｉＯｆｆに対応するノートオフバッファＯｆｆＢｕｆ［ｉＯｆｆ］に消音済みを表すＮＵＬＬデータが格納されているかどうかを判断する。消音済みを表すＮＵＬＬデータが格納されていると、判断結果は「ＮＯ」となり、図１３に示すステップＳＢ６に処理を戻す。これに対し、ノートオフバッファＯｆｆＢｕｆ［ｉＯｆｆ］に消音済みを表すＮＵＬＬデータが格納されていなければ、上記ステップＳＢ１４の判断結果は「ＹＥＳ」になり、次のステップＳＢ１５に進む。
【００５７】
ステップＳＢ１５では、再生時刻ｎｏｗＴｉｍｅが、ノートオフバッファＯｆｆＢｕｆ［ｉＯｆｆ］に格納されるポインタｐＮｏｔｅで指定される課題音データａｓＮｏｔｅ［ＯｆｆＢｕｆ［ｉＯｆｆ］］［４］の消音タイミングｔｉｍｅ＿ｏｆｆを過ぎているか否かを判断する。再生時刻ｎｏｗＴｉｍｅが消音タイミングｔｉｍｅ＿ｏｆｆを過ぎていなければ、判断結果は「ＮＯ」となり、ステップＳＢ２０に進み、検索ポインタｉＯｆｆを歩進させた後、上述のステップＳＢ１４に処理を戻す。一方、再生時刻ｎｏｗＴｉｍｅが消音タイミングｔｉｍｅ＿ｏｆｆを過ぎていると、上記ステップＳＢ１５の判断結果が「ＹＥＳ」になり、ステップＳＢ１６に進む。
【００５８】
ステップＳＢ１６では、音高ｐｉｔｃｈ（ａｓＮｏｔｅ［ｏｆｆＢｕｆ［ｉＯｆｆ］］［２］）を含む課題音のノートオフイベントを生成し、これをＭＩＤＩインタフェース４を介して電子楽器２０側に送出して当該課題音を消音させる。こうして課題音を消音させると、ＣＰＵ１はステップＳＢ１７に処理を進め、検索ポインタｉＯｆｆに対応するノートオフバッファＯｆｆＢｕｆ［ｉＯｆｆ］に消音済みを表すＮＵＬＬデータを登録する。そして、ステップＳＢ１８に進み、ポインタｉＯｆｆＢｕｆＣｎｔをデクリメントし、続くステップＳＢ１９ではポインタｉＯｆｆＣｎｔをインクリメントする。この後、ステップＳＢ２０にて検索ポインタｉＯｆｆをインクリメントして歩進させた後、上述のステップＳＢ１４に処理を戻す。
【００５９】
このように、再生開始処理では、課題情報管理テーブルＴ１中でポインタｉａｓｓｉｇｎに対応した課題データａｓｓｉｇｎ［ｉａｓｓｉｇｎ］［３］が指定する出題音数ｉＮｏｔｅｓ分の課題音データａｓＮｏｔｅを課題音管理テーブルＴ２から読み出し、読み出した課題音データａｓＮｏｔｅの発音タイミングｔｉｍｅ＿ｏｎに達する毎にノートオンイベントを、消音タイミングｔｉｍｅ＿ｏｆｆに達する毎にノートオフイベントをそれぞれ電子楽器２０側に送出して課題音の発音／消音を指示する。そして、出題音数ｉＮｏｔｅｓ分の再生が完了すると、図１２に示すステップＳＢ６の判断結果が「ＹＥＳ」となり、本処理を完了させる。
【００６０】
さて一方、分析モード下で実行される再生開始処理は、上述した問題モード下の再生開始処理をほぼ同一なので、問題モードと相違する点を概説する。図１１に図示するメインルーチンのステップＳＡ２０を介して分析モード下の再生開始処理が実行されると、ＣＰＵ１は訓練課題情報管理テーブルＴ４（図８参照）中でポインタｉｔｒａｉｎに対応した訓練課題データｔｒａｉｎ［ｉｔｒａｉｎ］が指定する出題音数ｉＮｏｔｅ分の訓練課題音データｔｒＮｏｔｅを訓練課題音管理テーブルＴ５（図９参照）から読み出し、読み出した訓練課題音データｔｒＮｏｔｅの発音タイミングｔｉｍｅ＿ｏｎに達する毎にノートオンイベントを、消音タイミングｔｉｍｅ＿ｏｆｆに達する毎にノートオフイベントをそれぞれ電子楽器２０側に送出して訓練課題音の発音／消音を指示し、出題音数ｉＮｏｔｅ分の再生が完了すると、本処理を完了させる。
【００６１】
（３）回答処理の動作
次に、図１６〜図１９を参照して問題モード下で実行される回答処理の動作を説明する。前述したメインルーチンのステップＳＡ８（図１０参照）を介して本処理が実行されると、ＣＰＵ１は図１６に示すステップＳＣ１に処理を進め、本処理で使用する一時バッファを初期化する。次いで、ステップＳＣ２では、回答音入力数をカウントする回答入力カウンタｉＡＣをゼロリセットし、続くステップＳＣ３では、レジスタＩＡｎＳｔａｒｔに現時刻をストアする。ステップＳＣ４では、回答入力カウンタｉＡＣの値が、出題音数ｉＮｏｔｅｓ（ａｓｓｉｇｎ［ｉａｓｓｉｇｎ］［３］）に一致しないかどうか、つまり出題音数ｉＮｏｔｅｓ分の回答音が入力されたか否かを判断する。出題音数ｉＮｏｔｅｓ分の回答音が入力された場合には、判断結果が「ＮＯ」になり、後述するステップＳＣ７に進む。一方、出題音数ｉＮｏｔｅｓ分の回答音が入力されていないと、判断結果は「ＹＥＳ」になり、次のステップＳＣ５に進む。
【００６２】
ステップＳＣ５では、現時刻からレジスタＩＡｎＳｔａｒｔにストアされた時刻を減算してレジスタＮｏｗＴｉｍｅにストアする。以後、レジスタＮｏｗＴｉｍｅを回答時刻ＮｏｗＴｉｍｅと称す。そして、ステップＳＣ６に進むと、回答時刻ＮｏｗＴｉｍｅが回答制限時間ｌｉｍｉｔ（ａｓｓｉｇｎ［ｉａｓｓｉｇｎ］［２］）を超えているか否かを判断する。回答時刻ＮｏｗＴｉｍｅが回答制限時間ｌｉｍｉｔを超えると、判断結果は「ＹＥＳ」となり、ステップＳＣ７に進み、現在のモードが問題モードであるかどうかを判断する。問題モード下では判断結果が「ＹＥＳ」となり、図１７のステップＳＣ８以降を実行し、分析モード下では判断結果が「ＮＯ」になり、本処理を完了させる。
【００６３】
一方、回答時刻ＮｏｗＴｉｍｅが回答制限時間ｌｉｍｉｔを超えなければ、上記ステップＳＣ６の判断結果が「ＮＯ」になり、図１８に示すステップＳＣ１７に処理を進める。いま例えば、問題モード下において回答時刻ＮｏｗＴｉｍｅが回答制限時間ｌｉｍｉｔ以内であったとする。そうすると、ＣＰＵ１は図１８に示すステップＳＣ１７〜ＳＣ１９において回答操作の種別を判別する。すなわち、ステップＳＣ１７では音高指定用に割当てられたキーボード６のキー操作であるか否かを判断し、ステップＳＣ１８では問題モード画面ＴＭＧに表示される鍵盤表示エリアＥ１において課題音と同じ音高と判断した鍵にマウスカーソルをポインティングしてマウス５でクリックするマウス操作であるか否かを判断し、ステップＳＣ１９では電子楽器２０側に配設される鍵盤の鍵操作で発生するＭＩＤＩノートイベント入力であるか否かを判断する。次に、ステップＳＣ２０に進むと、ＣＰＵ１は回答操作に応じて発生したイベントに含まれる音高をレジスタｐｉｔｃｈにストアする。続いて、ステップＳＣ２１では、回答操作に応じて発生したイベントがノートオンイベントであるかどうかを判断する。
【００６４】
ノートオンイベントであると、判断結果は「ＹＥＳ」になり、ステップＳＣ２２に進み、フラグＩｓＮｏｔｅＯｎに「１」をセットしてノートオンイベントである旨を表す。一方、ノートオフイベントであれば、上記ステップＳＣ２１の判断結果が「ＮＯ」となり、ステップＳＣ２３に進み、フラグＩｓＮｏｔｅＯｎに「０」をセットしてノートオフイベントである旨を表す。そして、ステップＳＣ２４では、フラグＩｓＮｏｔｅＯｎが「１」、つまり回答操作がノートオンイベントであるかどうかを判断する。以下、回答操作が発音を指示するノートオンイベントの場合と、消音を指示するノートオフイベントの場合とに分けて動作説明を進める。
【００６５】
＜ノートオンイベントの場合＞
回答操作が発音を指示するノートオンイベントであると、ステップＳＣ２４の判断結果が「ＹＥＳ」になり、ステップＳＣ２５以降に処理を進める。ステップＳＣ２５〜ＳＣ２７では、入力される回答音のノートオン属性を回答音データテーブルＴ３（図７参照）に登録する。すなわち、ステップＳＣ２５では、レジスタｐｉｔｃｈに格納される音高を、回答入力カウンタｉＡＣの値に対応した回答音データａｎｓＮｏｔｅ［ｉＡＣ］［２］（音高ｐｉｔｃｈ）にストアする。ステップＳＣ２６では、回答時刻ＮｏｗＴｉｍｅを回答音データａｎｓＮｏｔｅ［ｉＡＣ］［３］（発音タイミングｔｉｍｅ＿ｏｎ）にストアする。ステップＳＣ２７では、回答入力カウンタｉＡＣの値を回答音データａｎｓＮｏｔｅ［ｉＡＣ］［０］（識別番号ａｓＮｏｔｅ＃）にストアする。続いて、ステップＳＣ２８では、ポインタｉａｓｓｉｇｎの値を回答音データａｎｓＮｏｔｅ［ｉＡＣ］［１］（課題番号ａｓｓｉｇｎ＃）にストアする。そして、ステップＳＣ２９に進み、回答入力カウンタｉＡＣを歩進させた後、前述のステップＳＣ４（図１６参照）に処理を戻す。
【００６６】
＜ノートオフイベントの場合＞
一方、回答操作が消音を指示するノートオフイベントであると、図１８に示すステップＳＣ２４の判断結果が「ＮＯ」になり、ＣＰＵ１は図１９に示すステップＳＣ３０以降に処理を進め、入力される回答音のノートオフ属性を回答音データテーブルＴ３に登録する。すなわち、ステップＳＣ３０では、検索ポインタｉをゼロリセットし、続くステップＳＣ３１〜ＳＣ３６では、回答入力カウンタｉＡＣの値に達するまで検索ポインタｉを歩進させながら、回答音データテーブルＴ３中でａｎｓＮｏｔｅ［ｉ］［４］（消音タイミングｔｉｍｅ＿ｏｆｆ）が空き状態（ＮＵＬＬ）の回答音データを検索し、該当する回答音データａｎｓＮｏｔｅ［ｉ］［４］に消音タイミングとなる回答時刻ＮｏｗＴｉｍｅをストアすると共に、一つ前の回答音データａｎｓＮｏｔｅ［ｉ−１］［０］（識別番号ａｓＮｏｔｅ＃）を、回答音データａｎｓＮｏｔｅ［ｉ］［６］（ポインタｐＮｅｘｔＮｏｔｅ）にストアした後、前述のステップＳＣ４（図１６参照）に処理を戻す。
【００６７】
さて、こうした回答操作に対応した処理を終えて、回答時刻ＮｏｗＴｉｍｅが回答制限時間ｌｉｍｉｔを超えたとする。そうすると、図１６に示すステップＳＣ６およびステップＳＣ７の各判断結果が「ＹＥＳ」となり、ＣＰＵ１は図１７に示すステップＳＣ８以降を実行して課題履歴データｔｅｓｔＨｉｓｔを作成して課題履歴管理データベースＤＢ（図６参照）に登録する。すなわち、ステップＳＣ８では、課題履歴管理データベースＤＢの空きエリアを検索し、その空きエリアを示す値をポインタｉＨｉｓｔにストアする。次に、ステップＳＣ９では、そのポインタｉＨｉｓｔに対応した課題履歴管理データベースＤＢ中の課題履歴データｔｅｓｔＨｉｓｔ［ｉＨｉｓｔ］［１］（課題番号ａｓｓｉｇｎ＃）にポインタｉａｓｓｉｇｎをストアする。続いて、ステップＳＣ１０では、ポインタｉＨｉｓｔに対応した課題履歴管理データベースＤＢ中の課題履歴データｔｅｓｔＨｉｓｔ［ｉＨｉｓｔ］［２］（回答音数ｉＮｏｔｅｓ）に回答入力カウンタｉＡＣの値をストアする。次いで、ステップＳＣ１１では、ポインタｉａｓｓｉｇｎに対応した課題データａｓｓｉｇｎ［ｉａｓｓｉｇｎ］［４］（ポインタｐＮｏｔｅ）を課題情報管理テーブルＴ１（図４参照）から読み出し、これを最初の課題音を指定するポインタｐＱＮｏｔｅとして課題履歴データｔｅｓｔＨｉｓｔ［ｉＨｉｓｔ］［４］にストアする。
【００６８】
そして、ステップＳＣ１２〜ＳＣ１６では、ポインタｉＡを歩進させながら、回答音データテーブルＴ３（図７参照）中からポインタｉａｓｓｉｇｎに合致する課題番号ａｓｓｉｇｎ＃の回答音データａｎｓＮｏｔｅ［ｉＡ］［１］を検索し、該当する回答音データａｎｓＮｏｔｅ［ｉＡ］［０］（識別番号ａｓＮｏｔｅ＃）を、最初の回答音を指定するポインタｐＡＮｏｔｅとして課題履歴データｔｅｓｔＨｉｓｔ［ｉＨｉｓｔ］［３］にストアすると共に、ポインタｉａｓｓｉｇｎが指し示す課題履歴管理データベースＤＢ中の空きエリア番号を、識別番号Ｈｉｓｔ＃として課題履歴データｔｅｓｔＨｉｓｔ［ｉ］［０］にストアして本処理を終える。
【００６９】
以上のように、問題モード下で実行される回答処理では、回答制限時間ｌｉｍｉｔ以内に回答音を入力する回答操作（キー操作、マウス操作およびＭＩＤＩ入力のいずれか）が行われると、その操作のイベントがノートオンイベントであれば、回答音のノートオン属性（音高ｐｉｔｃｈ、発音タイミングｔｉｍｅ＿ｏｎ、識別番号ａｓＮｏｔｅ＃および課題番号ａｓｓｉｇｎ＃）を回答音データテーブルＴ３に登録し、一方、ノートオフイベントであると、回答音のノートオフ属性（消音タイミングｔｉｍｅ＿ｏｆｆ）を回答音データテーブルＴ３に登録する。そして、回答時刻ＮｏｗＴｉｍｅが回答制限時間ｌｉｍｉｔを超えると、課題情報管理テーブルＴ１および回答音データテーブルＴ３を参照して、回答操作を終えた課題音とそれに対応する回答音とを表す課題履歴データｔｅｓｔＨｉｓｔを作成して課題履歴管理データベースＤＢに登録する。
これに対し、分析モード下で実行される回答処理では、課題履歴データｔｅｓｔＨｉｓｔを作成せず、回答制限時間ｌｉｍｉｔ以内の回答操作に応じて、回答音のノートオン・ノートオフ属性を訓練課題音管理データテーブルＴ５に登録するようになっている。
【００７０】
（４）音階判定処理の動作
次に、図２０を参照して音階判定処理の動作を説明する。前述したメインルーチンのステップＳＡ１０（図１０参照）を介して本処理が実行されると、ＣＰＵ１は図２０に示すステップＳＤ１に処理を進める。ステップＳＤ１では、ポインタｉａｓｓｉｇｎで指定される課題情報管理テーブルＴ１中の課題データａｓｓｉｇｎ［ｉａｓｓｉｇｎ］［４］（ポインタｐＮｏｔｅ）を読み出してレジスタｐＮｏｔｅにストアする。次いで、ステップＳＤ２では、正解数をカウントするカウンタｉＨｉｔＣｎｔをゼロリセットし、続くステップＳＤ３では、レジスタｐＮｏｔｅの値で指定される課題音データａｓＮｏｔｅ［ｐＮｏｔｅ］［０］の識別番号ａｓＮｏｔｅ＃を課題音管理テーブルＴ２から読み出してレジスタａｓＮｏｔｅにストアする。
【００７１】
そして、ステップＳＤ４では、レジスタａｓＮｏｔｅにストアした識別番号ａｓＮｏｔｅ＃で指定される回答音データテーブルＴ３中の回答音データａｎｓＮｏｔｅ［ａｓＮｏｔｅ］［２］と課題音管理テーブルＴ２中の課題音データａｓＮｏｔｅ［ｐＮｏｔｅ］［２］とが一致するか、すなわち回答音の音高ｐｉｔｃｈと課題音の音高ｐｉｔｃｈとが一致するか否かを判断する。回答音の音高ｐｉｔｃｈと課題音の音高ｐｉｔｃｈとが一致する正解時には判断結果が「ＹＥＳ」になり、ステップＳＤ５に進み、カウンタｉＨｉｔＣｎｔを歩進させた後、ステップＳＤ６に進む。
【００７２】
一方、回答音の音高ｐｉｔｃｈと課題音の音高ｐｉｔｃｈとが一致しない不正解時には上記ステップＳＤ４の判断結果が「ＮＯ」になり、ステップＳＤ６に進む。ステップＳＤ６では、レジスタｐＮｏｔｅの値で指定される課題音データａｓＮｏｔｅ［ｐＮｏｔｅ］［５］のポインタｐＮｏｔｅが、空き状態を表すデータＮＵＬＬでないか否か、すなわち、全ての課題音について判定し終えたかどうかを判断する。判定し終えていなければ、判断結果は「ＹＥＳ」になり、ステップＳＤ７に進み、レジスタｐＮｏｔｅの値で指定される課題音データａｓＮｏｔｅ［ｐＮｏｔｅ］［５］のポインタｐＮｏｔｅを、レジスタｐＮｏｔｅにセットする。こうして、レジスタｐＮｏｔｅの内容が更新されると、ＣＰＵ１は上述のステップＳＤ３に処理を戻す。
【００７３】
以後、上述したステップＳＤ３〜ＳＤ７による回答判定を出題音数分繰り返し、全ての課題音について回答判定し終えると、ステップＳＤ６の判断結果が「ＮＯ」になり、ステップＳＤ８に進む。ステップＳＤ８では、カウンタｉＨｉｔＣｎｔが累算した正解数と、ポインタｉａｓｓｉｇｎで指定される課題データａｓｓｉｇｎ［ｉａｓｓｉｇｎ］［３］の出題音数ｉＮｏｔｅとの比から算出される正解率（得点）をレジスタｉＳｃｏｒｅにストアする。そして、ステップＳＤ９では、レジスタｉＳｃｏｒｅにストアされた正解率を回答画面ＲＧの得点表示エリアＥ４に数値表示して本処理を終える。
【００７４】
（５）分析処理の動作
次に、分析モード下で実行される分析処理の動作を説明する。分析モード画面ＡＭＧ（図３参照）の分析開始アイコンＩＣ９がクリック操作されると、前述したメインルーチンのステップＳＡ２８（図１１参照）を介して本処理が実行される。そうすると、ＣＰＵ１は図２１に示すステップＳＥ１〜ＳＥ３を介して集計処理、判定処理および課題音作成処理を順次実行する。
【００７５】
（６）集計処理の動作
次に、図２２〜図２３を参照して集計処理の動作を説明する。上述した分析処理（図２１参照）のステップＳＥ１を介して本処理が実行されると、ＣＰＵ１は図２２に示すステップＳＥ１−１に処理を進め、ポインタｉＡをゼロリセットし、続くステップＳＥ１−２では課題履歴管理データベースＤＢ（図６参照）から集計対象を検索し終えたか否かを判断する。検索終了していなければ、判断結果は「ＮＯ」になり、ステップＳＥ１−３に進む。ステップＳＥ１−３では、先ずポインタｉＡに応じて課題履歴管理データベースＤＢから課題履歴データｔｅｓｔＨｉｓｔ［ｉＡ］［１］の課題番号ａｓｓｉｇｎ＃を読み出す。次に、この課題番号ａｓｓｉｇｎ＃で指定される課題データａｓｓｉｇｎ［ｔｅｓｔＨｉｓｔ［ｉＡ］［１］］［１］（根音となる課題音を指定するポインタｋｅｙ）を課題情報管理テーブルＴ１（図４参照）から読み出してレジスタｐＮＢａｓｅにストアする。次いで、レジスタｐＮＢａｓｅの値で指定される課題音データａｓＮｏｔｅ［ｐＮＢａｓｅ］［２］、すなわち根音と見做された課題音の音高ｐｉｔｈについてｍｏｄ１２（１２の剰余値）を算出してレジスタｂＩｎｄｅｘにストアする。１２の剰余値は根音の音名を表す値に相当する。音名を表す値とは、Ｃ，Ｃ＃，Ｄ，…，Ａ＃，Ｂまでの１２音に対応させた「０」〜「１１」である。したがって、ステップＳＥ１−３では、根音（ルート）の音名を表す値をレジスタｂＩｎｄｅｘに格納する。
【００７６】
続いて、ステップＳＥ１−４では、ポインタｉＡに応じて課題履歴管理データベースＤＢから課題履歴データｔｅｓｔＨｉｓｔ［ｉＡ］［３］（最初の回答音を指定するポインタｐＡＮｏｔｅ）を読み出してレジスタｐＮＡｎｓにストアする。ステップＳＥ１−５では、回答音データテーブルＴ３において、レジスタｐＮＡｎｓの値（最初の回答音を指定するポインタｐＡＮｏｔｅ）で指定される回答音データａｎｓＮｏｔｅ［ｐＮＡｎｓ］［５］（課題音番号ＨｉｔＯｒｇ）が空き状態を表すデータＮＵＬＬであるか否か、すなわちレジスタｐＮＡｎｓで指定される回答音データに対応する課題音データの有無を判断する。対応する課題音データが存在しなければ、判断結果は「ＹＥＳ」となり、後述のステップＳＥ１−１１に進む。
【００７７】
一方、対応する課題音データが存在すると、判断結果は「ＮＯ」になり、ステップＳＥ１−６に進む。ステップＳＥ１−６では、レジスタｐＮＡｎｓの値で指定される回答音データａｎｓＮｏｔｅ［ｐＮＡｎｓ］［５］の課題音番号ＨｉｔＯｒｇをレジスタＰＮＱｓｔにストアする。続いて、ステップＳＥ１−７では、レジスタｐＮＡｎｓの値に対応する回答音データａｎｓＮｏｔｅ［ｐＮＡｎｓ］［２］の音高ｐｉｔｃｈをレジスタＡＰｉｔｃｈに、レジスタｐＮＱｓｔの値に対応する課題音データａｓＮｏｔｅ［ｐＮＱｓｔ］［２］の音高ｐｉｔｃｈをレジスタＱＰｉｔｃｈにそれぞれストアする。また、ステップＳＥ１−７では、レジスタＱＰｉｔｃｈに格納される課題音の音高ｐｉｔｃｈについてｍｏｄ１２（１２の剰余値）を算出してレジスタｑＩｎｄｅｘにストアする。つまり、課題音の音名に対応する値をレジスタｑＩｎｄｅｘに格納する。次いで、ステップＳＥ１−８では、レジスタＡＰｉｔｃｈに格納された回答音の音高と、レジスタＱＰｉｔｃｈに格納された課題音の音高とが一致しているか否かを判断する。
【００７８】
レジスタＡＰｉｔｃｈに格納された回答音の音高と、レジスタＱＰｉｔｃｈに格納された課題音の音高とが一致した場合には、上記ステップＳＥ１−８の判断結果が「ＹＥＳ」となり、ステップＳＥ１−９に進み、正答集計カウンタＯＫＣｎｔ［ｂＩｎｄｅｘ］［ｑＩｎｄｅｘ］を歩進させる。一方、回答音の音高と課題音の音高とが一致しない場合には、上記ステップＳＥ１−８の判断結果が「ＮＯ」となり、ステップＳＥ１−１０に進み、誤答集計カウンタＭＳＣｎｔ［ｂＩｎｄｅｘ］［ｑＩｎｄｅｘ］を歩進させる。
【００７９】
ここで、正答集計カウンタＯＫＣｎｔ［ｂＩｎｄｅｘ］［ｑＩｎｄｅｘ］および誤答集計カウンタＭＳＣｎｔ［ｂＩｎｄｅｘ］［ｑＩｎｄｅｘ］とは、それぞれ図２３に示すように、１２行１２列の配列要素を備えるカウンタである。行要素はレジスタｂＩｎｄｅｘに格納される根音の音名で指定される。列要素はレジスタｑＩｎｄｅｘに格納される課題音（構成音）の音名で指定される。なお、ここで言う構成音とは、根音に対する課題音を便宜的に和音構成音と見做した場合の呼称である。
したがって、例えば根音および課題音（構成音）が共に「Ｃ音」の場合には、ポインタｂＩｎｄｅｘ、ｑＩｎｄｅｘはいずれも「０」となる。そして、課題音と同一の正しい音高の回答音であれば、正答集計カウンタＯＫＣｎｔ［０］［０］がインクリメントされ、課題音とは異なる誤った音高の回答音であれば、誤答集計カウンタＭＳＣｎｔ［０］［０］がインクリメントされる。
【００８０】
こうして、根音および課題音（構成音）毎に、入力された回答音の音高の適否を正答集計カウンタＯＫＣｎｔおよび誤答集計カウンタＭＳＣｎｔで集計すると、ＣＰＵ１はステップＳＥ１−１１に進み、レジスタｐＮＡｎｓの値に対応する回答音データａｎｓＮｏｔｅ［ｐＮＡｎｓ］［６］（次の回答音データを指定するポインタｐＮｅｘｔＮｏｔｅ）が空き状態を表すデータＮＵＬＬであるか否か、すなわち次の回答音データの有無を判断する。次の回答音データが存在すると、判断結果は「ＮＯ」になり、ステップＳＥ１−１２に進み、回答音データａｎｓＮｏｔｅ［ｐＮＡｎｓ］［６］のポインタｐＮｅｘｔＮｏｔｅをレジスタｐＮＡｎｓにストアし、当該レジスタｐＮＡｎｓの内容を更新させた後、上述したステップＳＥ１−５に処理を戻す。
【００８１】
これに対し、次の回答音データが存在しない場合には、上記ステップＳＥ１−１１の判断結果が「ＹＥＳ」となり、ステップＳＥ１−１３に進む。ステップＳＥ１−１３では、次の課題音データとそれに対応する回答音データとを読み出す為、ポインタｉＡを歩進させた後、上述のステップＳＥ１−２に処理を戻す。そして、歩進されたポインタｉＡに対応した課題履歴データｔｅｓｔＨｉｓｔ［ｉＡ］が課題履歴管理データベースＤＢに登録されていない場合には、集計対象の検索が終了したとして、ステップＳＥ１−２の判断結果が「ＹＥＳ」になり、本処理を完了させる。
【００８２】
以上のように、集計処理では、課題履歴管理データベースＤＢに登録される課題履歴データｔｅｓｔＨｉｓｔを参照して課題の根音と、その根音に対して構成音となる課題音と、この課題音に対応して入力された回答音とを検索する。そして、検索された根音および課題音（構成音）毎に、回答音の音高の適否を判断し、その結果を正答集計カウンタＯＫＣｎｔおよび誤答集計カウンタＭＳＣｎｔで集計する。これにより、正答集計カウンタＯＫＣｎｔには根音に対する課題音（構成音）毎の正答数が集計され、一方、誤答集計カウンタＭＳＣｎｔには根音に対する課題音（構成音）毎の誤答数が集計される。
【００８３】
（７）判定処理の動作
次に、図２４〜図２５を参照して判定処理の動作を説明する。前述した分析処理（図２１参照）のステップＳＥ２を介して本処理が実行されると、ＣＰＵ１は図２４に示すステップＳＥ２−１に処理を進め、正答集計カウンタＯＫＣｎｔ［ｉ］［ｊ］および誤答集計カウンタＭＳＣｎｔ［ｉ］［ｊ］の内容を読み出すための行ポインタｉおよび列ポインタｊをゼロリセットする。続いて、ステップＳＥ２−２では、行ポインタｉが「１２」より小さいか否か、つまり行走査中であるかどうかを判断する。行ポインタｉが「１２」より小さく行走査中であると、判断結果は「ＹＥＳ」になり、ステップＳＥ２−３に進み、正答数をカウントするカウンタｂａｓｅＯＫおよび回答数をカウントするカウンタｂａｓｅＣｎｔをそれぞれゼロリセットする。
【００８４】
次いで、ステップＳＥ２−４では、列ポインタｊが「１２」より小さいか否か、つまり列走査中であるかどうかを判断する。列走査中であると、判断結果は「ＹＥＳ」になり、ステップＳＥ２−７〜ＳＥ２−１８を実行し、行走査および列走査に応じて正答集計カウンタＯＫＣｎｔ［ｉ］［ｊ］および誤答集計カウンタＭＳＣｎｔ［ｉ］［ｊ］を読み出し、その内容から聴き取りが「非常に得意な音」、「得意な音」、「普通の音」、「やや不得意な音」、「不得意な音」および「出題されていない音」のいずれであるかを判定した結果をレジスタＮｏｔｅ［ｉ］［ｊ］にストアする。
【００８５】
すなわち、正答集計カウンタＯＫＣｎｔ［ｉ］［ｊ］から読み出される正答数と、誤答集計カウンタＭＳＣｎｔ［ｉ］［ｊ］から読み出される誤答数とが共に「０」の場合には、ステップＳＥ２−７の判断結果が「ＹＥＳ」となり、ステップＳＥ２−１７に進む。この場合、レジスタＮｏｔｅ［ｉ］［ｊ］には「出題無し」を表す初期値「０」がストアされたままになる。
正答集計カウンタＯＫＣｎｔ［ｉ］［ｊ］から読み出される正答数が、誤答集計カウンタＭＳＣｎｔ［ｉ］［ｊ］から読み出される誤答数の４倍以上ある場合には、ステップＳＥ２−８の判断結果が「ＹＥＳ」となり、ステップＳＥ２−９に進み、「非常に得意な音」を表す判定値「５」をレジスタＮｏｔｅ［ｉ］［ｊ］にストアする。
【００８６】
正答集計カウンタＯＫＣｎｔ［ｉ］［ｊ］から読み出される正答数が、誤答集計カウンタＭＳＣｎｔ［ｉ］［ｊ］から読み出される誤答数の３／２倍以上ある場合には、ステップＳＥ２−１０の判断結果が「ＹＥＳ」となり、ステップＳＥ２−１１に進み、「得意な音」を表す判定値「４」をレジスタＮｏｔｅ［ｉ］［ｊ］にストアする。
正答集計カウンタＯＫＣｎｔ［ｉ］［ｊ］から読み出される正答数が、誤答集計カウンタＭＳＣｎｔ［ｉ］［ｊ］から読み出される誤答数の２／３倍以上ある場合には、ステップＳＥ２−１２の判断結果が「ＹＥＳ」となり、ステップＳＥ２−１３に進み、「普通の音」を表す判定値「３」をレジスタＮｏｔｅ［ｉ］［ｊ］にストアする。
【００８７】
正答集計カウンタＯＫＣｎｔ［ｉ］［ｊ］から読み出される正答数が、誤答集計カウンタＭＳＣｎｔ［ｉ］［ｊ］から読み出される誤答数の１／４倍以上ある場合には、ステップＳＥ２−１４の判断結果が「ＹＥＳ」となり、ステップＳＥ２−１５に進み、「やや不得意な音」を表す判定値「２」をレジスタＮｏｔｅ［ｉ］［ｊ］にストアする。
正答集計カウンタＯＫＣｎｔ［ｉ］［ｊ］から読み出される正答数が、誤答集計カウンタＭＳＣｎｔ［ｉ］［ｊ］から読み出される誤答数の１／４倍より少ない場合には、ステップＳＥ２−１４の判断結果が「ＮＯ」となり、ステップＳＥ２−１６に進み、「不得意な音」を表す判定値「１」をレジスタＮｏｔｅ［ｉ］［ｊ］にストアする。
【００８８】
以上のようにして、正答集計カウンタＯＫＣｎｔ［ｉ］［ｊ］および誤答集計カウンタＭＳＣｎｔ［ｉ］［ｊ］の値に応じた判定値をレジスタＮｏｔｅ［ｉ］［ｊ］に登録し終えると、ＣＰＵ１はステップＳＥ２−１７に進み、正答集計カウンタＯＫＣｎｔ［ｉ］［ｊ］の値をカウンタｂａｓｅＯＫに加算して、行ポインタｉが指定する根音における正答数を累算する。また、ステップＳＥ２−１７では、正答集計カウンタＯＫＣｎｔ［ｉ］［ｊ］の値と誤答集計カウンタＭＳＣｎｔ［ｉ］［ｊ］の値とを加算した結果をカウンタｂａｓｅＣｎｔに加えて回答数を累算する。次いで、ステップＳＥ２−１８では、列ポインタｊを歩進させて上述のステップＳＥ２−４に処理を戻す。
【００８９】
以後、列ポインタｊが「１２」に達するまで上述したステップＳＥ２−７〜ＳＥ２−１８を繰り返す。そして、列ポインタｊが「１２」に達し、行ポインタｉが指定する根音についての列走査が完了すると、ステップＳＥ２−４の判断結果が「ＮＯ」となり、ステップＳＥ２−５に進み、カウンタｂａｓｅＯＫに格納される正答数とカウンタｂａｓｅＣｎｔに格納される回答数との比から行ポインタｉが指定する根音における正答率（％値）をレジスタＢａｓｅＲａｔｉｏ［ｉ］にストアする。次に、ステップＳＥ２−６では、行ポインタｉを歩進させてステップＳＥ２−２に処理を戻す。以後、行ポインタｉが「１２」に達するまで上述したステップＳＥ２−２〜ＳＥ２−１８を繰り返す。そして、行ポインタｉが「１２」に達して行走査が完了すると、ステップＳＥ２−２の判断結果が「ＮＯ」となり、図２５に示すステップＳＥ２−１９に進む。
【００９０】
次いで、ステップＳＥ２−１９〜ＳＥ２−２７では、レジスタＢａｓｅＲａｔｉｏ［０］〜［１１］に格納された各根音毎の正答率（％値）を参照し、正答率の低い順に根音を並べ替える。正答率の低い順に並べ替えられた根音の内、最も正答率の低い根音から順にｎＢａｓｅ（所定値）分の根音をレジスタＢａｓｅＲｓｌｔ［０］〜［ｎＢａｓｅ］に登録する。したがって、レジスタＢａｓｅＲｓｌｔ［０］に最も正答率の低い（最も苦手な）根音の音名を表す値が格納される。こうして、不得意なｎＢａｓｅ（所定値）分の根音をレジスタＢａｓｅＲｓｌｔ［０］〜［ｎＢａｓｅ］に登録し終えると、ステップＳＥ２−２０の判断結果が「ＮＯ」になり、ステップＳＥ２−２８以降を実行する。
【００９１】
ステップＳＥ２−２８〜ＳＥ２−３１では、聴き分けの得手・不得手を判定した結果を保持するレジスタＮｏｔｅ［ｉ］［ｊ］の内から、レジスタＢａｓｅＲｓｌｔ［０］〜［ｎＢａｓｅ］に対応する内容、すなわちレジスタＮｏｔｅ［ＢａｓｅＲｓｌｔ［０］］［０〜１１］〜Ｎｏｔｅ［ＢａｓｅＲｓｌｔ［ｎＢａｓｅ］］［０〜１１］を抽出し、これをレジスタＮｏｔｅＲｓｌｔ［０］［０〜１１］〜ＮｏｔｅＲｓｌｔ［ｎＢａｓｅ］［０〜１１］にコピーする。したがって、ＮｏｔｅＲｓｌｔ［０］［０〜１１］〜ＮｏｔｅＲｓｌｔ［ｎＢａｓｅ］［０〜１１］には、聴き取りが苦手な根音に対応した課題音（構成音）の聴き分けの得手・不得手を表す判定結果が格納される。
【００９２】
上述したように、判定処理では、根音に対する課題音（構成音）毎の正答数が集計された正答集計カウンタＯＫＣｎｔと、根音に対する課題音（構成音）毎の誤答数が集計された誤答集計カウンタＭＳＣｎｔとの内容に基づき、根音に対する課題音（構成音）毎の聴き分けの得手・不得手を判定し、その判定結果をレジスタＮｏｔｅ［ｉ］［ｊ］にストアすると共に、根音毎の正答率（％値）をレジスタＢａｓｅＲａｔｉｏ［ｉ］にストアする。そして、レジスタＢａｓｅＲａｔｉｏ［ｊ］に格納された各根音毎の正答率（％値）を参照して正答率の低い順に根音を並べ替え、その上位ｎＢａｓｅ（所定値）分をレジスタＢａｓｅＲｓｌｔ［ｎＢａｓｅ］に登録する。この後、聴き分けの得手・不得手を判定した結果を保持するレジスタＮｏｔｅ［ｉ］［ｊ］の内から、レジスタＢａｓｅＲｓｌｔ［ｎＢａｓｅ］に対応する内容をレジスタＮｏｔｅＲｓｌｔ［０］［０〜１１］〜ＮｏｔｅＲｓｌｔ［ｎＢａｓｅ］［０〜１１］にコピーして、聴き取りが苦手な根音に対応した課題音（構成音）の聴き分けの得手・不得手を表す判定結果を抽出する。
【００９３】
（８）訓練音作成処理の動作
次に、図２６〜図３０を参照して訓練音作成処理の動作を説明する。前述した分析処理（図２１参照）のステップＳＥ３を介して本処理が実行されると、ＣＰＵ１は図２６のステップＳＥ３−１に処理を進める。ステップＳＥ３−１〜ＳＥ３−９では、上述した判定処理で得た判定結果に基づき、最も苦手とする根音の音高値と、その根音に対応して聴き分けが「不得意な音」の課題音（構成音）の音高値とを設定する。
すなわち、ステップＳＥ３−１では、ポインタｉをゼロリセットし、続くステップＳＥ３−２では、ポインタｉが根音数ｎＢａｓｅ（既定値）より小さいか否か、つまり訓練課題を作成し終えたかどうかを判断する。訓練課題を作成し終えていなければ、判断結果は「ＹＥＳ」となり、ステップＳＥ３−３に処理を進める。ステップＳＥ３−３では、出題音数をカウントするカウンタｉＮｏｔｅおよび出題音高を保持するレジスタＮｏｔｅｓ［０］〜［１１］をゼロリセットする。
【００９４】
ステップＳＥ３−４では、先ず根音の音高を設定する。すなわち、ポインタｉで指定されるレジスタＢａｓｅＲｓｌｔ［ｉ］に格納され、根音の音名を表す値に「６０」を加算してオクターブシフトさせた音高値をレジスタＮｏｔｅｓ［０］にストアする。また、ステップＳＥ３−４では、カウンタｉＮｏｔｅをインクリメントして歩進させる。次に、ステップＳＥ３−５では、レジスタＢａｓｅＲｓｌｔ［ｉ］に格納される根音の音名値に「１」を加算した値をポインタｊにセットする。
ステップＳＥ３−７〜ＳＥ３−９では、聴き取りを苦手とする根音に対応した課題音（構成音）の内から判定値「１」の「不得意な音」と判定された課題音（構成音）をレジスタＮｏｔｅＲｓｌｔ［ｉ］［ｊ］から検索する。該当する課題音（構成音）が検索されると、ステップＳＥ３−７の判断結果が「ＹＥＳ」になり、ステップＳＥ３−８に進み、カウンタｉＮｏｔｅの値に対応したレジスタＮｏｔｅｓ［ｉＮｏｔｅ］に、該当する課題音（構成音）を指定したポインタｊの値に「６０」を加算してオクターブシフトさせた音高値をレジスタＮｏｔｅｓ［０］にストアした後、カウンタｉＮｏｔｅをインクリメントして歩進させる。
【００９５】
こうして、聴き取りを苦手とする根音の音高値と、その根音に対応して聴き分けが「不得意な音」の課題音（構成音）の音高値とが設定されると、ステップＳＥ３−１０〜ＳＥ３−１５において訓練課題情報管理テーブルＴ４（図８参照）に登録する第１問目の訓練課題を作成する。後述するように、第１問目の訓練課題は、聴き取りが苦手な根音を先頭とし、その根音に対して聴き分けが不得意な課題音（構成音）を順番に発音させる形で出題する。
【００９６】
最初にステップＳＥ３−１０を介してｔｒａｉｎ［ｉ］［ｘ］設定処理が実行されると、ＣＰＵ１は図２７に示すステップＳＥａ１〜ＳＥａ８にて訓練課題情報管理テーブルＴ４に登録する訓練課題データｔｒａｉｎ［ｍ］［０］〜ｔｒａｉｎ［ｍ］［４］を作成する。
すなわち、ステップＳＥａ１では、第１問目であるか否かを判断する。第１問目であれば、判断結果は「ＹＥＳ」になり、ステップＳＥａ２に進み、ポインタｉに「２」を乗算した値をレジスタｍにストアする。一方、第１問目でなければ、判断結果が「ＮＯ」になり、ステップＳＥａ３に進み、ポインタｉに「２」を乗算した値に「１」を加えてレジスタｍにストアする。
【００９７】
続いて、ステップステップＳＥａ４では、レジスタｍの値を訓練課題データｔｒａｉｎ［ｍ］［０］の訓練課題番号ｔｒａｉｎ＃として登録する。ステップＳＥａ５では、レジスタＮｏｔｅｓ［０］に格納される根音の音高を訓練課題データｔｒａｉｎ［ｍ］［１］（ポインタｋｅｙ）に登録する。ステップＳＥａ６では、訓練課題データｔｒａｉｎ［ｍ］［２］に回答制限時間ｌｉｍｉｔ（既定値）を登録する。ステップＳＥａ７では、レジスタｉＮｏｔｅｓの値を訓練課題データｔｒａｉｎ［ｍ］［３］（出題音数ｉＮｏｔｅｓ）に登録する。ステップＳＥａ８では、先頭の訓練課題音を指定するポインタｐＮｏｔｅとしてｍ×ｉＮｏｔｅｓを訓練課題データｔｒａｉｎ［ｍ］［４］に登録する。
【００９８】
訓練課題情報管理テーブルＴ４に訓練課題データｔｒａｉｎ［ｍ］［０］〜ｔｒａｉｎ［ｍ］［４］が登録されると、ＣＰＵ１は図２６に示すステップＳＥ３−１１を介して１音目設定処理を実行する。１音目設定処理が実行されると、ＣＰＵ１は図２８に示すステップＳＥｂ１に処理を進め、訓練課題情報管理テーブルＴ４から訓練課題データｔｒａｉｎ［ｉ］［４］（ポインタｐＮｏｔｅ）を読み出してレジスタＩＤＸにストアする。そして、訓練課題データｔｒａｉｎ［ｉ］［４］（ポインタｐＮｏｔｅ）を、レジスタＩＤＸの値に対応させた訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［０］（識別番号ｔｒＮｏｔｅ＃）として訓練課題音管理テーブルＴ５に登録する。
【００９９】
次に、ステップＳＥｂ２では、訓練課題データｔｒａｉｎ［ｉ］［０］（訓練課題番号ｔｒａｉｎ＃）を、レジスタＩＤＸの値に対応させた訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［１］（訓練課題番号ｔｒａｉｎ＃）として訓練課題音管理テーブルＴ５に登録する。ステップＳＥｂ３では、レジスタＮｏｔｅｓ［０］に格納される根音の音高値を、レジスタＩＤＸの値に対応させた訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［２］（音高ｐｉｔｃｈ）として訓練課題音管理テーブルＴ５に登録する。そして、ステップＳＥｂ４では、１音目の発音タイミングとなる固定値ｏｎｔｉｍｅを、レジスタＩＤＸの値に対応させた訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［３］（発音タイミングｔｉｍｅ＿ｏｎ）として訓練課題音管理テーブルＴ５に登録する。続いて、ステップＳＥｂ５では、１音目の消音タイミングとなる固定値ｏｆｆｔｉｍｅを、レジスタＩＤＸの値に対応させた訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［４］（消音タイミングｔｉｍｅ＿ｏｆｆ）として訓練課題音管理テーブルＴ５に登録する。
【０１００】
１音目の訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［０］〜［４］を設定し終えると、ＣＰＵ１は図２６に示すステップＳＥ３−１２に進み、ポインタｊに初期値「１」をセットする。次いで、ステップＳＥ３−１３〜ＳＥ３−１５では、出題音数ｉＮｏｔｅを超えるまでポインタｊを歩進させる毎に、ステップＳＥ３−１４にて２音目以降の訓練課題音データを作成して訓練課題音管理テーブルＴ５に登録するｔｒＮｏｔｅ設定（１）処理を実行する。
ｔｒＮｏｔｅ設定（１）処理が実行されると、ＣＰＵ１は図２９に示すステップＳＥｃ１に処理を進め、訓練課題情報管理テーブルＴ４から読み出した訓練課題データｔｒａｉｎ［ｉ］［４］（ポインタｐＮｏｔｅ）にポインタｊの値を加えてレジスタＩＤＸにストアする。そして、このレジスタＩＤＸの値を訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［０］（識別番号ｔｒＮｏｔｅ＃）に登録する。
【０１０１】
続いて、ステップＳＥｂ２では、ポインタｉの値を訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［１］（訓練課題番号ｔｒａｉｎ＃）に登録すると共に、レジスタＮｏｔｅｓ［ｊ］に格納される課題音（構成音）の音高値を、訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［２］（音高ｐｉｔｃｈ）に登録する。次いで、ステップＳＥｃ３では、前音の発音タイミングｔｉｍｅ＿ｏｎ、すなわち訓練課題音データｔｒＮｏｔｅ［ＩＤＸ−１］［３］にオフセット時間αを加えた値を、訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［３］（発音タイミングｔｉｍｅ＿ｏｎ）に登録する。次に、ステップＳＥｃ４では、訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［３］（発音タイミングｔｉｍｅ＿ｏｎ）に４分音符長ｇａｔｅを加算した値を、訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［４］（消音タイミングｔｉｍｅ＿ｏｆｆ）に登録する。ステップＳＥｃ５では、先に設定した１音目の訓練課題音データｔｒＮｏｔｅ［ＩＤＸ−１］［５］（ポインタｐＮｅｘｔＮｏｔｅ）に、現在設定中の訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［０］（訓練課題番号ｔｒａｉｎ＃）をストアする。このように、ｔｒＮｏｔｅ設定（１）処理では、聴き取りが苦手な根音に対して聴き分けが不得意な課題音（構成音）を順番に発音させる訓練課題音データｔｒＮｏｔｅを作成して訓練課題音管理テーブルＴ５に登録する。
【０１０２】
こうして第１問目の訓練課題および訓練解題音を設定し終えると、図２６に示すステップＳＥ３−１３の判断結果が「ＮＯ」となり、ステップＳＥ３−１６に処理を進める。ステップＳＥ３−１６〜ＳＥ３−２１では、聴き取りが苦手な根音と、その根音に対して聴き分けが不得意な課題音（構成音）とを和音と見做して同時発音させるようにする第２問目を設定する。すなわち、第１問目と同様、まず最初にステップＳＥ３−１６を介して図２７に図示したｔｒａｉｎ［ｉ］［ｘ］設定処理を実行し、訓練課題データｔｒａｉｎ［ｍ］［０］〜ｔｒａｉｎ［ｍ］［４］を作成して訓練課題情報管理テーブルＴ４に登録する。
【０１０３】
次に、図２６に示すステップＳＥ３−１７を介して１音目設定処理を実行する。１音目設定処理では、前述した第１問目と同様、図２８に示すステップＳＥｂ１〜ＳＥｂ５を実行し、１音目の訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［０］〜［４］を作成して訓練課題音管理テーブルＴ５に登録する。１音目の訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［０］〜［４］を設定し終えると、ＣＰＵ１は図２６に示すステップＳＥ３−１８に進み、ポインタｊに初期値「１」をセットする。次いで、ステップＳＥ３−１９〜ＳＥ３−２１では、出題音数ｉＮｏｔｅを超えるまでポインタｊを歩進させる毎に、ステップＳＥ３−２０を介してｔｒＮｏｔｅ設定（２）処理を実行する。
【０１０４】
ｔｒＮｏｔｅ設定（２）処理が実行されると、ＣＰＵ１は図３０に示すステップＳＥｄ１に処理を進め、訓練課題情報管理テーブルＴ４から読み出した訓練課題データｔｒａｉｎ［ｉ］［４］（ポインタｐＮｏｔｅ）にポインタｊの値を加えてレジスタＩＤＸにストアする。そして、このレジスタＩＤＸの値を訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［０］（識別番号ｔｒＮｏｔｅ＃）に登録する。続いて、ステップＳＥｄ２では、ポインタｉの値を訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［１］（訓練課題番号ｔｒａｉｎ＃）に登録すると共に、レジスタＮｏｔｅｓ［ｊ］に格納される課題音（構成音）の音高値を、訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［２］（音高ｐｉｔｃｈ）に登録する。
【０１０５】
次いで、ステップＳＥｄ３では、前音の発音タイミングｔｉｍｅ＿ｏｎ、すなわち訓練課題音データｔｒＮｏｔｅ［ＩＤＸ−１］［３］を、訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［３］（発音タイミングｔｉｍｅ＿ｏｎ）に登録する。ステップＳＥｄ４では、訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［３］（発音タイミングｔｉｍｅ＿ｏｎ）に４分音符長ｇａｔｅを加算した値を、訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［４］（消音タイミングｔｉｍｅ＿ｏｆｆ）に登録する。そして、ステップＳＥｄ５では、前音の訓練課題音データｔｒＮｏｔｅ［ＩＤＸ−１］［５］（ポインタｐＮｅｘｔＮｏｔｅ）に、現在設定中の訓練課題音データｔｒＮｏｔｅ［ＩＤＸ］［０］（訓練課題番号ｔｒａｉｎ＃）をストアする。このように、ｔｒＮｏｔｅ設定（２）処理では、聴き取りが苦手な根音と、その根音に対して聴き分けが不得意な課題音（構成音）とを和音と見做して同時発音させる訓練課題音データｔｒＮｏｔｅを作成して訓練課題音管理テーブルＴ５に登録する。
【０１０６】
そして、第２問目の訓練課題および訓練課題音を設定し終えると、図２６に示すステップＳＥ３−１９の判断結果が「ＮＯ」となり、ステップＳＥ３−２２に進み、ポインタｉを歩進させた後、ステップＳＥ３−２に処理を戻す。以後、聴き取りを苦手とする根音の数ｎＢａｓｅ分の訓練課題を作成するまでステップＳＥ３−３〜ＳＥ３−２２を繰り返す。そして、聴き取りを苦手とする根音の全てについて訓練課題および訓練課題音を作成し終えると、ステップＳＥ３−２の判断結果が「ＮＯ」となり、本処理を完了させる。
【０１０７】
このように、訓練音作成処理では、判定処理の判定結果を参照して、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音（構成音）の各音高を決定し、決定した音高で最初に根音を、続いて聴き分けが不得意な課題音（構成音）を順番に発音させる第１問と、根音および不得意な課題音（構成音）を和音と見做して同時発音させる第２問とからなる訓練課題を聴き取りが苦手な根音の全てについて作成して訓練課題情報管理テーブルＴ４および訓練課題音管理テーブルＴ５に登録するようになっている。
【０１０８】
以上説明したように、本実施の形態では、問題モード下で再生開始処理、回答処理および判定処理を実行すると、出題された課題音および回答された回答音を表す課題履歴データｔｅｓｔＨｉｓｔが課題履歴管理データベースＤＢに登録される。この後に分析モードに遷移して集計処理を実行すると、課題履歴管理データベースＤＢに登録される課題履歴データｔｅｓｔＨｉｓｔを参照して課題の根音と、その根音に対する課題音（構成音）と、この課題音に対応して入力された回答音とを検索し、検索された根音および課題音（構成音）毎に、回答音の音高の適否を判断し、その結果を正答集計カウンタＯＫＣｎｔおよび誤答集計カウンタＭＳＣｎｔで集計する。これにより、正答集計カウンタＯＫＣｎｔには根音に対する課題音（構成音）毎の正答数が集計され、一方、誤答集計カウンタＭＳＣｎｔには根音に対する課題音（構成音）毎の誤答数が集計される。
【０１０９】
次に、判定処理を実行すると、根音に対する課題音（構成音）毎の正答数が集計された正答集計カウンタＯＫＣｎｔと、根音に対する課題音（構成音）毎の誤答数が集計された誤答集計カウンタＭＳＣｎｔとの内容に基づき、聴き取りを苦手とする根音およびその根音に対する課題音（構成音）の聴き分けの得手・不得手を表す判定結果を抽出する。続いて、訓練音作成処理を実行すると、判定処理の判定結果を参照して、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音（構成音）の各音高を決定し、決定した音高で最初に根音を、続いて聴き分けが不得意な課題音（構成音）を順番に発音させる第１問と、根音および不得意な課題音（構成音）を和音と見做して同時発音させる第２問とからなる訓練課題を、聴き取りが苦手な根音の全てについて作成して訓練課題情報管理テーブルＴ４および訓練課題音管理テーブルＴ５に登録する。そしてこの後、分析モード下で再生開始処理および回答処理を実行することによって、作成した訓練課題音の再生／回答が行われ、これにより複数の音が同時に発音される場合に、その構成音を聴き分ける能力を重点的に教習することが可能になる。
【０１１０】
なお、上述した実施の形態では、出題された課題音および回答された回答音を履歴記憶する課題履歴管理データベースＤＢの登録内容から聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音（構成音）を抽出して訓練課題を作成するが、そうして作成した訓練課題は必ずしも和声音にはならない。そこで、聴き取りを苦手とする根音およびその根音に対して聴き分けが不得意な課題音（構成音）の内から和音となり得る根音および課題音（構成音）を検索し、該当する和音を訓練課題とする態様を含むことも可能である。そのようにすれば、苦手な和音の聴き取りを重点的に教習することが可能になる。
【図面の簡単な説明】
【０１１１】
【図１】実施形態の全体構成を示すブロック図である。
【図２】問題モード画面ＴＭＧの一例を示す図である。
【図３】分析モード画面ＡＭＧの一例を示す図である。
【図４】課題情報管理テーブルＴ１に登録される課題情報データａｓｓｉｇｎのデータ構造を示す図である。
【図５】課題音管理テーブルＴ２に登録される課題音データａｓＮｏｔｅのデータ構造を示す図である。
【図６】課題履歴管理データベースＤＢに登録される課題履歴データｔｅｓｔＨｉｓｔのデータ構造を示す図である。
【図７】回答音データテーブルＴ３に登録される回答音データａｎｓＮｏｔｅのデータ構造を示す図である。
【図８】訓練課題情報管理データテーブルＴ４に登録される訓練課題データｔｒａｉｎのデータ構造を示す図である。
【図９】訓練課題音管理データテーブルＴ５に登録される訓練課題音データｔｒＮｏｔｅのデータ構造を示す図である。
【図１０】メインルーチンの動作を示すフローチャートである。
【図１１】メインルーチンの動作を示すフローチャートである。
【図１２】メインルーチンの動作を示すフローチャートである。
【図１３】再生開始処理の動作を示すフローチャートである。
【図１４】再生開始処理の動作を示すフローチャートである。
【図１５】再生開始処理の動作を示すフローチャートである。
【図１６】回答処理の動作を示すフローチャートである。
【図１７】回答処理の動作を示すフローチャートである。
【図１８】回答処理の動作を示すフローチャートである。
【図１９】回答処理の動作を示すフローチャートである。
【図２０】音階判定処理の動作を示すフローチャートである。
【図２１】分析処理の動作を示すフローチャートである。
【図２２】集計処理の動作を示すフローチャートである。
【図２３】正答集計カウンタＯＫＣｎｔ［ｂＩｎｄｅｘ］［ｑＩｎｄｅｘ］および誤答集計カウンタＭＳＣｎｔ［ｂＩｎｄｅｘ］［ｑＩｎｄｅｘ］の構成を示す図である。
【図２４】判定処理の動作を示すフローチャートである。
【図２５】判定処理の動作を示すフローチャートである。
【図２６】課題音作成処理の動作を示すフローチャートである。
【図２７】ｔｒａｉｎ［ｉ］［ｘ］設定処理の動作を示すフローチャートである。
【図２８】１音目設定処理の動作を示すフローチャートである。
【図２９】ｔｒＮｏｔｅ設定（１）処理の動作を示すフローチャートである。
【図３０】ｔｒＮｏｔｅ設定（２）処理の動作を示すフローチャートである。
【符号の説明】
【０１１２】
１  ＣＰＵ
２  ＲＯＭ
３  ＲＡＭ
４  ＭＩＤＩインタフェース
５  マウス
６  キーボード
７  表示部
１０  ＤＴＭ装置
２０  電子楽器
【図１】
2005156951.tif 000003
【図２】
2005156951.tif 000004
【図３】
2005156951.tif 000005
【図４】
2005156951.tif 000006
【図５】
2005156951.tif 000007
【図６】
2005156951.tif 000008
【図７】
2005156951.tif 000009
【図８】
2005156951.tif 000010
【図９】
2005156951.tif 000011
【図１０】
2005156951.tif 000012
【図１１】
2005156951.tif 000013
【図１２】
2005156951.tif 000014
【図１３】
2005156951.tif 000015
【図１４】
2005156951.tif 000016
【図１５】
2005156951.tif 000017
【図１６】
2005156951.tif 000018
【図１７】
2005156951.tif 000019
【図１８】
2005156951.tif 000020
【図１９】
2005156951.tif 000021
【図２０】
2005156951.tif 000022
【図２１】
2005156951.tif 000023
【図２２】
2005156951.tif 000024
【図２３】
2005156951.tif 000025
【図２４】
2005156951.tif 000026
【図２５】
2005156951.tif 000027
【図２６】
2005156951.tif 000028
【図２７】
2005156951.tif 000029
【図２８】
2005156951.tif 000030
【図２９】
2005156951.tif 000031
【図３０】
2005156951.tif 000032