(57)【特許請求の範囲】
【請求項１】
楽曲の楽譜に記述される音符が記録された楽譜データに基づいて、ユーザが前記楽曲を演奏するときの前記楽譜上の演奏位置を検出する演奏位置検出装置であって、
演奏順に配列された前記音符の音階を含む楽譜配列を記憶する記憶部と、
前記ユーザによる前記楽曲の演奏音を含む音響信号を入力し、１つ以上の音階を前記入力された音響信号から特定する音階特定部と、
時系列に配列された前記１つ以上の音階を含む演奏配列を作成する配列作成部と、
各々が、前記演奏配列に含まれる音階の数と同じ数の音階を含み、前記楽譜配列上の位置が互いに異なる複数の参照配列を前記楽譜配列の中から選択する選択部と、
前記演奏配列が前記選択された各参照配列であろう尤度を参照配列ごとに算出する尤度算出部と、
前記選択された各参照配列の中から最尤度を有する参照配列を特定し、前記最尤度を有する参照配列の最後の音階が直前の演奏位置を基準にして所定範囲内に位置する場合に前記最後の音階の位置を前記演奏位置として決定し、前記最後の音階が前記所定範囲外に位置する場合に前記演奏位置を決定できないと判定する演奏位置決定部と、
前記演奏位置決定部が前記演奏位置を決定できないと判定した場合、前記演奏位置が更新されないことを示す更新停止回数をカウントするカウント部と、
前記カウント部によりカウントされた更新停止回数がしきい値を超えた場合、前記演奏配列を初期化する配列初期化部とを備える、演奏位置検出装置。
【請求項２】
請求項１に記載の演奏位置検出装置であって、
前記演奏位置決定部は、前記直前の演奏位置よりも時間方向で後ろに位置する前記最後の音階の位置を、前記演奏位置として決定する、演奏位置検出装置。
【請求項３】
請求項１又は請求項２に記載の演奏位置検出装置であって、
前記演奏位置決定部は、最尤度を有する参照配列として複数の候補配列を特定した場合、各候補配列の最後の音階の位置のうち、前記直前の演奏位置に最も近い最後の音階の位置を演奏位置として決定する、演奏位置検出装置。
【請求項４】
請求項１〜請求項３のいずれか１項に記載の演奏位置検出装置であって、
前記配列作成部は、前記配列初期化部により前記演奏配列が初期化された場合、前記演奏配列を新たに作成し、
前記演奏位置決定部は、前記直前の演奏位置よりも時間方向で所定数前に位置する音階の位置を前記演奏位置に決定する、演奏位置検出装置。
【請求項５】
楽曲の楽譜に記述される音符が記録された楽譜データに基づいて、ユーザが前記楽曲を演奏するときの前記楽譜上の演奏位置を検出する演奏位置検出装置であって、
演奏順に配列された前記音符の音階を含む楽譜配列を記憶する記憶部と、
前記ユーザによる前記楽曲の演奏音を含む音響信号を入力し、１つ以上の音階を前記入力された音響信号から特定する音階特定部と、
時系列に配列された前記１つ以上の音階を含む演奏配列を作成する配列作成部と、
各々が、前記演奏配列に含まれる音階の数と同じ数の音階を含み、前記楽譜配列上の位置が互いに異なる複数の参照配列を前記楽譜配列の中から選択する選択部と、
前記演奏配列が前記選択された各参照配列であろう尤度を参照配列ごとに算出する尤度算出部と、
前記選択された各参照配列の中から最尤度を有する参照配列を特定し、前記最尤度を有する参照配列の最後の音階の位置を前記演奏位置として決定する演奏位置決定部と備え、
前記配列作成部は、
前記音階特定部が前記１つ以上の音階を特定した場合、特定された１つ以上の音階を前記演奏配列に追加する追加部と、
前記演奏配列に含まれる音階のうち、前記追加部により追加される１つ以上の音階以外の過去の音階を、前記過去の音階に対応する前記楽譜配列の音階に置換する置換部とを備える、演奏位置検出装置。
【請求項６】
請求項１〜請求項５のいずれか１項に記載の演奏位置検出装置であって、
前記楽譜配列は、和音を構成する複数の音階を含み、
前記音階特定部は、和音を構成する複数の音階を前記音響信号から特定し、
前記配列作成部は、前記音階特定部により特定された複数の音階を含む演奏配列を作成する、演奏位置検出装置。
【請求項７】
楽曲の楽譜に記述される音符が記録された楽譜データに基づいて、ユーザが前記楽曲を演奏するときの前記楽譜上の演奏位置を検出する処理を、記憶装置を備えるコンピュータに実行させるための演奏位置検出プログラムであって、
演奏順に配列された前記音符の音階を含む楽譜配列を、前記記憶装置から読み出すステップと、
前記ユーザによる前記楽曲の演奏音を含む音響信号を入力するステップと、
１つ以上の音階を前記入力された音響信号から特定するステップと、
時系列に配列された前記１つ以上の音階を含む演奏配列を作成するステップと、
各々が、前記演奏配列に含まれる音階の数と同じ数の音階を含み、前記楽譜配列上の位置が互いに異なる複数の参照配列を読み出された楽譜配列の中から選択するステップと、
前記演奏配列が前記選択された各参照配列であろう尤度を参照配列ごとに算出するステップと、
前記選択された各参照配列の中から最尤度を有する参照配列を特定するステップと、
前記最尤度を有する参照配列の最後の音階が直前の演奏位置を基準にして所定範囲内に位置する場合に前記最後の音階の位置を前記演奏位置として決定するステップと、
前記最後の音階が前記所定範囲外に位置する場合に前記演奏位置を決定できないと判定するステップと、
前記演奏位置を決定できないと判定した場合、前記演奏位置が更新されないことを示す更新停止回数をカウントするステップと、
前記カウントされた更新停止回数がしきい値を超えた場合、前記演奏配列を初期化するステップとを備える、演奏位置検出プログラム。
【請求項８】
楽曲の楽譜に記述される音符が記録された楽譜データに基づいて、ユーザが前記楽曲を演奏するときの前記楽譜上の演奏位置を検出する処理を、記憶装置を備えるコンピュータに実行させるための演奏位置検出プログラムであって、
演奏順に配列された前記音符の音階を含む楽譜配列を、前記記憶装置から読み出すステップと、
前記ユーザによる前記楽曲の演奏音を含む音響信号を入力するステップと、
１つ以上の音階を前記入力された音響信号から特定するステップと、
時系列に配列された前記１つ以上の音階を含む演奏配列を作成するステップと、
各々が、前記演奏配列に含まれる音階の数と同じ数の音階を含み、前記楽譜配列上の位置が互いに異なる複数の参照配列を読み出された楽譜配列の中から選択するステップと、
前記演奏配列が前記選択された各参照配列であろう尤度を参照配列ごとに算出するステップと、
前記選択された各参照配列の中から最尤度を有する参照配列を特定し、前記最尤度を有する参照配列の最後の音階の位置を前記演奏位置として決定するステップとを備え、
前記演奏配列を作成するステップは、
前記１つ以上の音階が特定された場合、特定された１つ以上の音階を前記演奏配列に追加するステップと、
前記演奏配列に含まれる音階のうち、前記追加される１つ以上の音階以外の過去の音階を、前記過去の音階に対応する前記楽譜配列の音階に置換するステップとを備える、演奏位置検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演奏位置検出装置に関し、さらに詳しくは、ユーザが楽曲を演奏するときの楽譜上の演奏位置を検出する演奏位置検出装置に関する。
【背景技術】
【０００２】
近年、楽譜を電子化した電子楽譜が普及している。電子楽譜は、紙に印刷される楽譜を、単に電子ファイル化したデータである。このため、ユーザは、電子楽譜を利用する場合、電子楽譜を印刷し、印刷された電子楽譜を見ながら楽曲を演奏しなければならない。
【０００３】
これに対して、楽譜の画像をモニタに表示し、ユーザの演奏に合わせてモニタに表示される楽譜のページを変更する技術が提案されている。たとえば、特許文献１には、ユーザによる楽曲の演奏に合わせて、楽曲の演奏位置を、表示された楽譜上に示す楽譜表示装置が開示されている。
【０００４】
特許文献１において、楽譜表示装置は、楽曲の音符を表わす音符データ列の中から、入力された音高データに一致する音符データを候補として検出する。楽譜表示装置は、音符データ列を参照して、検出された候補の次の音符データを予測する。楽譜表示装置は、予測した音高データが次に入力される音高データと一致するか否かを判定する。楽譜表示装置は、音高データに連続して一致する音符データの数が所定値以上である候補を、演奏位置として決定する。
【０００５】
しかし、ユーザが、演奏ミスにより、楽譜の通りに楽曲を演奏しなかった場合、上記の楽譜表示装置は、演奏位置の特定に時間を要するおそれがある。楽譜表示装置は、音符データ列の中から、演奏ミスに基づく音高データに一致する位置を候補として検出する。この結果、音符データに連続して一致する音高データの数が所定値以上に達するまでに時間を要する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４３８９３３０号公報
【特許文献２】特開２００１−５４５０号公報
【特許文献３】特開２００１−１４８６３３号公報
【特許文献４】特開２００３−２２０７０号公報
【特許文献５】特開２０１１−２５７５１０号公報
【特許文献６】特開２００７−２４０５５２号公報
【非特許文献】
【０００７】
【非特許文献１】「Music That Listens To You - Tonara」, ［online］,［２０１２年４月６日検索］，＜URL：http://tonara.com/＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の目的は、ユーザが演奏ミスをしても、演奏位置を速やかに特定できる演奏位置検出装置を提供することである。
【課題を解決するための手段及び効果】
【０００９】
本発明による演奏位置検出装置は、楽曲の楽譜に記述される音符が記録された楽譜データに基づいて、ユーザが楽曲を演奏するときの楽譜上の演奏位置を検出する。演奏位置検出装置は、記憶部と、音階特定部と、配列作成部と、選択部と、尤度算出部と、演奏位置決定部とを備える。記憶部は、演奏順に配列された音符の音階を含む楽譜配列を記憶する。音階特定部は、ユーザによる楽曲の演奏音を含む音響信号を入力し、１つ以上の音階を入力された音響信号から特定する。配列作成部は、時系列に配列された１つ以上の音階を含む演奏配列を作成する。選択部は、各々が、演奏配列に含まれる音階の数と同じ数の音階を含み、楽譜配列上の位置が互いに異なる複数の参照配列を楽譜配列の中から選択する。尤度算出部は、演奏配列が選択された各参照配列であろう尤度を参照配列ごとに算出する。演奏位置決定部は、選択された各参照配列の中から最尤度を有する参照配列を特定し、最尤度を有する参照配列の最後の音階の位置を演奏位置として決定する。
【００１０】
本発明によれば、演奏位置が、演奏配列が参照配列であろう尤度に基づいて決定される。これにより、演奏配列がユーザの演奏ミスに伴う音階を含む場合であっても、計算量が増加することがないため、速やかに演奏位置を決定することができる。
【００１１】
好ましくは、演奏位置決定部は、直前の演奏位置よりも時間方向で後ろに位置する最後の音階の位置を、演奏位置として決定する。
【００１２】
本発明によれば、直前の演奏位置よりも前の音階の位置が、新たな演奏位置として決定されない。したがって、ユーザが実際に演奏している音階の位置と無関係の位置を、演奏位置として誤って決定することを防ぐことができる。
【００１３】
好ましくは、演奏位置検出装置は、最尤度を有する参照配列として複数の候補配列を特定した場合、各候補配列の最後の音階の位置のうち、直前の演奏位置に最も近い最後の音階の位置を演奏位置として決定する。
【００１４】
本発明によれば、複数の候補配列の最後の音階の位置のうち、直前の演奏位置に最も近い最後の音階の位置が演奏位置として決定される。したがって、ユーザが実際に演奏している音階の位置と無関係の位置を、演奏位置として誤って決定することを防ぐことができる。
【００１５】
好ましくは、演奏位置決定部は、直前の演奏位置を基準にして所定範囲内に位置する最後の音階の位置を、演奏位置として決定する。
【００１６】
本発明によれば、直前の演奏位置と大きく離れている音階の位置は、演奏位置として決定されない。したがって、ユーザが実際に演奏している音階の位置と無関係の位置を、演奏位置として誤って決定することを防ぐことができる。
【００１７】
好ましくは、演奏位置決定部は、最後の音階が所定範囲の外に位置する場合、演奏位置を決定できないと判定する。演奏位置検出装置は、さらに、カウント部と、配列初期化部とを備える。カウント部は、演奏位置決定部が演奏位置を決定できないと判定した場合、演奏位置が更新されないことを示す更新停止回数をカウントする。配列初期化部は、カウント部によりカウントされた更新停止回数がしきい値を超えた場合、演奏配列を初期化する。
【００１８】
演奏位置検出装置は、更新停止回数がしきい値を超えた場合、演奏配列を初期化して、演奏位置の決定を最初からやり直す。したがって、ユーザが演奏をミスして演奏を停止した後に演奏を再開したとしても、演奏位置検出装置は、演奏が再開された位置を速やかに検出することができる。
【００１９】
好ましくは、配列作成部は、配列初期化部により演奏配列が初期化された場合、演奏配列を新たに作成する。演奏位置決定部は、直前の演奏位置よりも時間方向で所定数前に位置する音階の位置を演奏位置に決定する。
【００２０】
本発明によれば、演奏配列が初期化された場合、演奏位置が、直前の演奏位置よりも時間方向で所定数前に位置する音階の位置に変更される。これにより、ユーザが、演奏を停止した後に、停止位置よりも前の位置から演奏を再開したとしても、演奏位置を速やかに決定することができる。
【００２１】
好ましくは、配列作成部は、追加部と、置換部とを備える。追加部は、音階特定部が１つ以上の音階を特定した場合、特定された１つ以上の音階を演奏配列に追加する。置換部は、演奏配列に含まれる音階のうち、追加部により追加される１つ以上の音階以外の過去の音階を、過去の音階に対応する楽譜配列の音階に置換する。
【００２２】
本発明によれば、演奏ミスによる過去の音階が、演奏配列に含まれる場合であっても、演奏ミスによる過去の音階が楽譜配列に対応する音階に訂正される。これにより、実際の演奏位置と異なる位置を、演奏位置として誤って検出することを防ぐことができる。
【００２３】
好ましくは、楽譜配列は、和音を構成する複数の音階を含む。音階特定部は、和音を構成する複数の音階を音響信号から特定する。配列作成部は、音階特定部により特定された複数の音階を含む演奏配列を作成する。
【００２４】
本発明によれば、ユーザが、和音を含む楽譜を用いて、楽曲を演奏する時であっても、演奏された和音の音階を特定し、特定された和音の音階に基づいて演奏位置を決定することができる。
【００２５】
本発明による演奏位置検出プログラムは、本発明による演奏位置検出装置に用いられる。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施の形態による演奏位置検出装置の構成を示す機能ブロック図である。
【図２】図１に示す楽譜画像データを示す図である。
【図３】図１に示す楽譜配列を示す図である。
【図４】図１に示す演奏配列を示す図である。
【図５】図１に示す演奏位置検出プログラムのフローチャートである。
【図６Ａ】図１に示すマイクに入力される音響信号を示す図である。
【図６Ｂ】図６Ａに示す音響信号をフィルタ処理した後の音響信号を示す図である。
【図６Ｃ】図６Ｂに示す音響信号に対して高速フーリエ変換を行うことにより生成されたスペクトルである。
【図６Ｄ】図６Ｃに示すスペクトルから音階を特定する処理を説明する図である。
【図７】図５に示す演奏配列作成処理のフローチャートである。
【図８】図５に示す演奏配列作成処理における演奏配列の変化を示す図である。
【図９】図５に示す尤度算出処理のフローチャートである。
【図１０】図１に示す演奏配列が参照配列であろう尤度を算出する方法を説明する図である。
【図１１】図５に示す演奏位置決定処理のフローチャートである。
【図１２】図１１に示す尤度算出処理により特定された候補位置と、直前の演奏位置との位置関係を示す図である。
【図１３】図５に示す検出状態判定処理のフローチャートである。
【図１４】図５に示す検出状態判定処理により、演奏位置が強制的に変更されるときの演奏位置の変化を示す図である。
【図１５】図１２に示す許容範囲の変形例を示す図である。
【発明を実施するための形態】
【００２７】
以下、図面を参照し、本発明の実施の形態を詳しく説明する。図中同一又は相当部分には同一符号を付してその説明は繰り返さない。
【００２８】
｛演奏位置検出装置の構成｝
図１は、本発明の実施の形態による演奏位置検出装置１の構成を示す機能ブロック図である。図１を参照して、演奏位置検出装置１は、楽曲の楽譜に記述される音符が記録された楽譜画像データ７をタッチパネル１３に表示する。演奏位置検出装置１は、楽譜配列４に基づいて、ユーザが楽曲を演奏するときの楽譜上の演奏位置を検出する。検出された演奏位置は、タッチパネル１３に表示されている楽譜画像データ７上に示される。
【００２９】
演奏位置検出装置１は、タブレット型端末である。タブレット型端末は、演奏位置検出プログラム２がインストールされることにより、演奏位置検出装置１として動作する。
【００３０】
演奏位置検出装置１は、ＣＰＵ（Central Processing Unit）１１と、ＲＡＭ（Random Access Memory）１２と、タッチパネル１３と、操作ボタン１４と、マイク１５と、フラッシュメモリ１６とを備える。
【００３１】
ＣＰＵ１１は、フラッシュメモリ１６に格納されたプログラムを実行する。ＲＡＭ１２は、演奏位置検出装置１のメインメモリである。ＣＰＵ１１は、プログラムをＲＡＭ１２にロードし、ロードされたプログラムを実行して演奏位置検出装置１を制御する。
【００３２】
タッチパネル１３は、プログラムの実行結果を表示するとともに、ユーザによりタッチされた位置を操作情報としてＣＰＵ１１に出力する。操作ボタン１４は、電源ボタン、音量調節ボタンなどのハードウェアキーである。マイク１５は、ユーザにより演奏された楽曲の演奏音を、音響信号として入力する。
【００３３】
フラッシュメモリ１６は、書き換え可能な不揮発性の半導体メモリである。フラッシュメモリ１６は、演奏位置検出プログラム２と、楽譜データ３と、参照配列５と、演奏配列６とを記憶する。
【００３４】
楽譜データ３は、楽譜配列４と、楽譜画像データ７とを含む。楽譜画像データ７は、楽曲の楽譜に記述される音符が演奏順に記録された画像データであり、複数のページにより構成される。なお、楽譜データ３は、楽譜画像データ７に代えて、音符などの演奏記号がＭＩＤＩ（Musical Instrument Digital Interface）により記述されたＭＩＤＩデータを含んでもよい。楽譜データ３がＭＩＤＩデータを含む場合、演奏位置検出装置１は、ＭＩＤＩデータに基づいて、楽譜画像データ７を作成する。あるいは、楽譜データ３は、音符などの演奏記号がＭＩＤＩにより記述されたＭＩＤＩデータであってもよい。この場合、楽譜データ３は、たとえば、ＭｕｓｉｃＸＭＬ（Extensible Markup Language）形式で記述される。演奏位置検出装置１は、ＭｕｓｉｃＸＭＬ形式の楽譜データ３を解析して、楽譜画像データ７と、演奏配列６とを作成する。
【００３５】
楽譜配列４は、楽譜に記述される音符の音階が演奏順に配列されたデータである。参照配列５は、楽譜配列４の中から選択された所定長の音階の配列である。演奏配列６は、ユーザによる楽曲の演奏音の音階を時系列に配列したデータである。楽譜配列４、参照配列５及び演奏配列６の詳細は、後述する。
【００３６】
｛演奏位置検出装置１の動作の概略と各種配列の構造｝
演奏位置検出装置１は、楽譜画像データ７をタッチパネル１３に表示する。ユーザは、タッチパネル１３に表示された楽譜画像データ７を見ながら、楽曲を演奏する。
【００３７】
図２は、楽譜画像データ７を示す図である。図２を参照して、楽譜画像データ７は、高音パートの楽譜３１と、低音パートの楽譜３２とを含む。楽譜画像データ７の領域３ａには、音符３１２，３２２が記述されている。音符３１２，３２２は、和音を構成する。同様に、領域３ｂに記述された音符３１６，３２６は、和音を構成する。楽譜３１に記述された音符３１１，３１３〜３１５，３１７〜３１９は、和音を構成しない。
【００３８】
楽譜配列４は、楽譜３１，３２に記述された音符の音階を含み、音符の音階は、演奏順に配列される。図３は、楽譜配列４を示す図である。図３を参照して、楽譜配列４において、位置番号は、楽譜画像データ７の音符の位置を特定するためのパラメータであり、楽譜３１，３２の先頭から音符をカウントしたときの各音符のカウント値に相当する。つまり、大きい位置番号は、時間方向で後ろに位置する音符に対応し、小さい位置番号は、時間方向で前に位置する音符に対応する。
【００３９】
楽譜配列４は、楽譜高音パート４１と、楽譜低音パート４２とを含む。楽譜高音パート４１には、楽譜３１に記述される音符のＭＩＤＩ音階が、演奏順に配列されている。ＭＩＤＩ音階は、ＭＩＤＩ規格に基づいて定められた音階の数値である。楽譜低音パート４２には、楽譜３２に記述される音符のＭＩＤＩ音階が演奏順に記録される。
【００４０】
たとえば、楽譜配列４において、位置番号「１」の音階は、楽譜３１の先頭に位置する音符３１１の音階を示す。音符３１１の音階が「ソ」である。楽譜高音パート４１の位置番号「１」の欄には、「ソ」に対応するＭＩＤＩ音階「６５」が記述される。楽譜３２には、音符３１１に対応する音符が記述されていないため、楽譜低音パート４２の位置番号「１」の欄には、ＭＩＤＩ音階「０」が記述される。
【００４１】
楽譜配列４の位置番号「２」は、領域３ａに対応する。このため、位置番号「２」の欄には、和音を構成する複数の音階が記述される。具体的には、楽譜高音パート４１の位置番号「２」の欄には、ＭＩＤＩ音階「６７」が、音符３１２の音階として記述される。楽譜低音パート４２の位置番号「２」の欄には、ＭＩＤＩ音階「５３」が、音符３２２の音階として記述される。つまり、楽譜配列４において、和音を構成する音階の数は、最大で２である。
【００４２】
上述のように、ユーザは、タッチパネル１３に表示された楽譜画像データ７を見ながら、楽曲を演奏する。演奏位置検出装置１は、ユーザによる楽曲の演奏音を含む音響信号をマイク１５から入力し、１つ以上の音階をマイク１５から入力された音響信号から特定する。演奏位置検出装置１は、時系列に配列された１つ以上の音階を含む演奏配列６を作成する。
【００４３】
図４は、演奏配列６の一例を示す図である。図４を参照して、演奏配列６は、音響信号から特定された１つ以上の音階を含み、演奏配列６に含まれる１つ以上の音階は、時系列に配列される。演奏配列６の構成は、楽譜配列４と同様に、演奏高音パート６１と、演奏低音パート６２とを含む。演奏配列６に含まれる音階の最大数（以下、「配列最大値」と呼ぶ。）は、４である。ここで、和音は、１つの音階としてカウントされる。演奏配列６は、ユーザによる楽曲の演奏音の音階が特定されるたびに更新される。
【００４４】
ユーザが、「ソ」，「シ」，「シ」，「ミ」の順に演奏することにより、ＭＩＤＩ音階「６５」，「６７」，「６７」，「７０」が、演奏高音パート６１に記述される。演奏低音パート６２の２番目には、ＭＩＤＩ音階「５３」が記述されている。つまり、ユーザは、２番目の音を、和音として演奏している。
【００４５】
演奏位置検出装置１は、楽譜配列４の中から、演奏配列６と同じ配列を検索する。具体的には、演奏位置検出装置１は、楽譜配列４の中から、複数の参照配列５を選択する。参照配列５は、演奏配列６に含まれる音階の数と同じ数の音階を含む。複数の参照配列５は、楽譜配列４上の位置が互いに異なる。
【００４６】
図３を参照して、参照配列５１は、楽譜配列４の音階のうち、位置番号が「１」〜「４」の音階である。参照配列５２は、楽譜配列４の音階のうち、位置番号が「２」〜「５」の音階である。このように、演奏位置検出装置１は、先頭の音階の位置を１つずつずらすことにより、複数の参照配列５を選択する。
【００４７】
演奏位置検出装置１は、演奏配列６を、選択された各参照配列５と比較することにより、演奏配列６が各参照配列５であろう尤度を、参照配列５ごとに算出する。尤度の算出方法の詳細は、後述する。
【００４８】
演奏位置検出装置１は、各参照配列５の尤度の中から、最尤度を有する参照配列５を特定し、特定された参照配列５の最後の音階の位置を演奏位置として決定する。たとえば、参照配列５３が最尤度を有すると仮定した場合、演奏位置検出装置１は、参照配列５３の最後の音階の位置（位置番号「８」）を、演奏位置として決定する。
【００４９】
演奏位置検出装置１は、タッチパネル１３に表示された楽譜画像データ７において、位置番号「８」に対応する音符３１８をハッチングで囲む。これにより、ユーザは、音符３１８を演奏したことを認識できる。図２では、演奏位置の音符をハッチングで囲む例を示しているが、これに限られない。ユーザが現在の演奏位置を、タッチパネル１３に表示された楽譜上で把握することができれば、いかなる表示方法を用いてもよい。
【００５０】
このように、演奏位置検出装置１は、演奏配列６が参照配列５であろう尤度を参照配列５ごとに算出し、最尤度を有する参照配列５の最後の音階の位置を、演奏位置として決定する。演奏配列６が、演奏ミスによる音階を含む場合であっても、演奏位置検出装置１は、計算量を増大させることなく、演奏位置を速やかに特定することができる。
【００５１】
｛演奏位置検出プログラム２の詳細｝
以下、演奏位置検出プログラム２を実行するときの演奏位置検出装置１の動作を詳細に説明する。
【００５２】
図５は、演奏位置検出プログラム２のフローチャートである。図５を参照して、演奏位置検出装置１は、初期化を実行する（ステップＳ１）。ステップＳ１において、演奏位置検出装置１は、演奏位置を「０」に設定し、演奏配列６に記録されている音階を全て「０」に設定する。タッチパネル１３には、楽譜画像データ７の先頭ページが表示される。
【００５３】
演奏位置検出装置１は、演奏位置検出プログラム２を終了するか否かを判定する（ステップＳ２）。具体的には、演奏位置検出装置１は、演奏位置が楽譜配列４の終端の位置番号に一致する場合（ステップＳ２においてＹｅｓ）、ユーザによる楽曲の演奏が終了したと判定して、図５に示す処理を終了する。
【００５４】
一方、演奏位置検出装置１は、演奏位置が楽譜配列４の終端の位置番号に一致しない場合（ステップＳ２においてＮｏ）、ユーザによる演奏が終了していないと判定して、ステップＳ３〜Ｓ１０を実行する。
【００５５】
演奏位置検出装置１は、音響信号を入力し、ユーザによる楽曲の演奏音の音階を、入力された音響信号から特定する（ステップＳ３）。演奏位置検出装置１は、特定された音階を時系列に配列して、演奏配列６を作成する（ステップＳ４）。
【００５６】
ユーザが演奏を始めたときには、ステップＳ３により特定された音階の数が、配列最大値に満たない場合がある。この場合、演奏位置検出装置１は、ステップＳ３により特定された音階を演奏配列６に順次追加する。一方、演奏配列６に記録されている音階の数が配列最大値に達している場合、演奏位置検出装置１は、演奏配列６の音階のうち、最初に追加された音階を演奏配列６から削除し、新たに特定された音階を演奏配列６に追加する。
【００５７】
演奏配列６に記録されている音階の数が開始基準値よりも小さい場合（ステップＳ５においてＮｏ）、演奏位置検出装置１は、演奏位置を決定することなく、ステップＳ２に戻る。開始基準値として、配列最大値を用いることができる。開始基準値として、配列最大値よりも小さい値を用いることにより、ユーザが演奏を開始したときに、演奏位置を速やかに決定できるようにしてもよい。たとえば、開始基準値として、配列最大値の２分の１を用いることができる。
【００５８】
一方、演奏配列６に記録されている音階の数が開始基準値以上である場合（ステップＳ５においてＹｅｓ）、演奏位置検出装置１は、演奏位置の決定が可能であると判断し、楽譜配列４の中から、複数の参照配列５を選択する（ステップＳ６）。上述のように、演奏位置検出装置１は、参照配列５の先頭の番号を１つずつずらすことにより、複数の参照配列５を選択する。したがって、選択される参照配列５の数は、楽譜配列４に含まれる音階の数に応じて変化する。
【００５９】
演奏位置検出装置１は、演奏配列６が参照配列５であろう尤度を算出する（ステップＳ７）。尤度は、参照配列５ごとに算出される。演奏位置検出装置１は、最尤度を有する参照配列５に基づいて、演奏位置を決定する（ステップＳ８）。演奏位置検出装置１は、最尤度を有する参照配列５を抽出し、抽出された参照配列５の最後の音階の位置番号を、演奏位置の候補位置として特定する。これは、最尤度を有する参照配列５の数が１つとは限らないためである。演奏位置検出装置１は、所定の条件を満たす候補位置を、演奏位置として決定する。演奏位置の決定の詳細は、後述する。
【００６０】
演奏位置検出装置１は、演奏位置の決定結果に基づいて、演奏位置の検出状態を判定する（ステップＳ９）。具体的には、演奏位置検出装置１は、演奏位置の更新停止が継続しているか否かを判定する（ステップＳ９）。演奏位置検出装置１は、演奏位置を継続して決定できない回数（更新停止回数）が初期化基準値以上である場合、更新停止回数が初期化基準値以上である場合、演奏位置検出装置１は、ユーザが楽譜通りに演奏していないと判定する。この場合、演奏位置検出装置１は、現在の演奏配列６に基づいて演奏位置を決定できる可能性が低いと判断して、演奏配列６を初期化する。
【００６１】
演奏位置検出装置１は、更新された演奏位置に基づいて、タッチパネル１３に表示されている楽譜画像データ７上の演奏位置を更新する（ステップＳ１０）。
【００６２】
以下、演奏位置検出プログラム２のそれぞれの処理を詳しく説明する。
【００６３】
｛音階特定処理（ステップＳ３）｝
図６Ａは、マイク１５に入力される音響信号の一例を示す図である。図６Ａを参照して、期間１５ａ〜１５ｄは、ユーザが楽器を演奏した期間を示しており、音響信号の振幅が大きく変動する。その他の期間における音響信号の変動は、ノイズ成分を示す。
【００６４】
演奏位置検出装置１は、図６Ａに示す音響信号から、音階を特定する。具体的には、演奏位置検出装置１は、図６Ａに示す音響信号に対して、ピークフィルタをかける。これにより、図６Ｂに示すように、ノイズ成分が抑制された音響信号が生成される。ピークフィルタは、マイク１５に入力された音響信号から、所定幅以上で変動する音響信号を抽出する処理である。
【００６５】
演奏位置検出装置１は、ピークフィルタをかけた音響信号のうち、振幅が変動している期間を、高速フーリエ変換をかける対象として設定する。すなわち、図６Ｂに示す音響信号のうち、期間１５ａ〜１５ｄの音響信号が、高速フーリエ変換をかける期間（サンプリング期間）として設定される。ここで、図６Ｂに示す音響信号１６ａが、サンプリング期間に設定されたと仮定する。演奏位置検出装置１は、音響信号１６ａに対して高速フーリエ変換を行うことにより、図６Ｃに示すスペクトルを生成する。
【００６６】
図６Ｄは、図６Ｃに示すスペクトルから、ＭＩＤＩ音階を特定するまでの処理を示す図である。図６Ｃ及び図６Ｄを参照して、演奏位置検出装置１は、スペクトルからピークを有する周波数を抽出し、抽出された周波数を振幅の大きい順にソートする。すなわち、周波数は、４６６Ｈｚ，４１５Ｈｚ，４７０Ｈｚ，・・・の順にソートされる。楽譜配列４において、和音を構成する音階の数の最大値が２であるため、演奏位置検出装置１は、ソートされた周波数のうち、基準振幅を超える上位２つの周波数を選択する。演奏位置検出装置１は、予め定められているＭＩＤＩ音階と周波数との関係に基づいて、選択された周波数をＭＩＤＩ音階に変換する。このようにして、音響信号からＭＩＤＩ音階が特定される。
【００６７】
周波数４６６Ｈｚ，４１５Ｈｚの振幅が基準振幅よりも大きい場合、演奏位置検出装置１は、周波数４６６Ｈｚ，４１５Ｈｚの両者を選択する。周波数４６６Ｈｚは、ＭＩＤＩ音階「７０」に変換され、周波数４１５Ｈｚは、ＭＩＤＩ音階「６８」に変換される。
【００６８】
周波数４１５Ｈｚの振幅が基準振幅よりも大きく、周波数４６６Ｈｚの振幅が基準振幅よりも小さい場合、演奏位置検出装置１は、周波数４１５Ｈｚのみを選択する。周波数４１５ＨｚがＭＩＤＩ音階「６８」に変換される。この場合、音階特定処理（ステップＳ３）によって特定される音階の数は、１つである。
【００６９】
｛演奏配列作成処理（ステップＳ４）｝
演奏位置検出装置１は、ＭＩＤＩ音階が音階特定処理（ステップＳ３）により特定された後に、演奏配列作成処理（ステップＳ４）を実行する。
【００７０】
図７は、演奏配列作成処理（ステップＳ４）のフローチャートである。図７を参照して、演奏位置検出装置１は、演奏配列６に含まれる音階の数が、配列最大値に等しいか否かを確認する（ステップＳ４１）。
【００７１】
音階の数が配列最大値よりも小さい場合（ステップＳ４１においてＮｏ）、演奏位置検出装置１は、演奏配列６における最後の音階の後ろに、ステップＳ３により特定されたＭＩＤＩ音階を追加し（ステップＳ４２）、図７に示す処理を終了する。
【００７２】
具体的には、特定されたＭＩＤＩ音階のうち、高い方のＭＩＤＩ音階が、演奏高音パート６１に追加され、低い方のＭＩＤＩ音階が、演奏低音パート６２に追加される。特定されたＭＩＤＩ音階の数が１つである場合、特定されたＭＩＤＩ音階は、演奏高音パート６２に追加される。演奏低音パート６２には、「０」が追加される。
【００７３】
一方、音階の数が配列最大値に等しい場合（ステップＳ４１においてＹｅｓ）、演奏位置検出装置１は、ステップＳ４３〜Ｓ４５を実行して、演奏配列６を更新する。図７及び図８を参照しながら、ステップＳ４３〜Ｓ４５を詳しく説明する。
【００７４】
図８は、演奏配列６が配列最大値の音階を含む場合における演奏配列６の変化を示す図である。図８において、楽譜配列４及び演奏配列６の音階を丸で示し、高音パート及び低音パートの表示を省略する。配列最大値が４であると仮定する。
【００７５】
演奏位置検出装置１は、更新前の演奏配列６から、先頭のＭＩＤＩ音階６ａを削除する（ステップＳ４３）。演奏配列６のＭＩＤＩ音階６ｂ〜６ｄの要素番号が、１つずつ繰り上がる。演奏位置検出装置１は、新たに特定されたＭＩＤＩ音階６ｅを、ＭＩＤＩ音階６ａが削除された演奏配列６に追加する（ステップＳ４４）。ＭＩＤＩ音階６ｅの要素番号は、４である。このようにして、演奏配列６が更新される。
【００７６】
演奏位置検出装置１は、ＭＩＤＩ音階６ｂ〜６ｅのうち、ＭＩＤＩ音階６ｅ以外の過去の音階（ＭＩＤＩ音階６ｂ〜６ｄ）を、ＭＩＤＩ音階６ｂ〜６ｄに対応する楽譜配列４の音階に置換する（ステップＳ４５）。
【００７７】
ステップＳ４５を実行する際には、演奏位置は既に決定されているため、ＭＩＤＩ音階６ｂ〜６ｄに対応する楽譜配列４の音階を特定することが可能である。演奏位置が既に決定されている理由を説明する。演奏配列６に含まれるＭＩＤＩ音階の数が開始基準値以上のときに（ステップＳ５においてＹｅｓ）、演奏位置決定処理（ステップＳ９）が実行される。したがって、演奏配列６に含まれるＭＩＤＩ音階の数が配列最大値であれば、演奏位置は、既に決定されている。
【００７８】
更新後の演奏配列６において、ＭＩＤＩ音階６ｂは、楽譜配列４のＭＩＤＩ音階４ｂ（位置番号「７３」）に対応する。同様に、ＭＩＤＩ音階６ｃ，６ｄは、楽譜配列４のＭＩＤＩ音階４ｃ，４ｄ（位置番号「７４」，「７５」）にそれぞれ対応する。演奏位置検出装置１は、演奏配列６のＭＩＤＩ音階６ｂ，６ｃ，６ｄを、楽譜配列４のＭＩＤＩ音階４ｂ，４ｃ，４ｄにそれぞれ置換する。ユーザが過去に演奏をミスしたとしても、演奏配列６は、演奏ミスによる演奏音から特定されたＭＩＤＩ音階を含まない。したがって、演奏位置の決定精度を向上させることができる。
【００７９】
｛参照配列選択処理（ステップＳ６）｝
以下、図２を参照して、参照配列選択処理（ステップＳ６）を具体的に説明する。演奏配列６に含まれる音階の数が４であり、演奏位置決定処理（ステップＳ９）により決定された直前の演奏位置が位置番号「４」であると仮定する。
【００８０】
演奏配列６に含まれる音階の数が４であるため、演奏位置検出装置１は、各参照配列５に含まれる音階の数を４に設定する。演奏位置検出装置１は、楽譜配列４の音階のうち、直前の演奏位置（位置番号「４」）よりも後ろに位置する音階の中から、複数の参照配列５を選択する。演奏位置が進むにつれて、ステップＳ６により選択される参照配列５の数は減少するため、演奏位置を決定する際の計算量を削減することができる。
【００８１】
演奏位置検出装置１は、楽譜配列４における音階の位置が互いに異なるように、複数の参照配列５を選択する。演奏位置検出装置１は、最初に、楽譜配列４の位置番号「５」〜「８」の音階を、参照配列５３として選択する。次に、楽譜配列４の位置番号「６」〜「９」の音階が、参照配列５４として選択される。このように、演奏位置検出装置１は、参照配列５の先頭の音階の位置を１つずつずらすことにより、複数の参照配列５を選択する。
【００８２】
｛尤度算出処理（ステップＳ７）｝
図９は、尤度算出処理（ステップＳ７）のフローチャートである。図１０は、演奏配列６が参照配列５５であろう尤度を算出するときの尤度の計算方法を説明する図である。以下、特に説明のない限り、演奏配列６が参照配列５５であろう尤度を算出する場合を例にして、尤度算出処理（ステップＳ７）を説明する。
【００８３】
図９及び図１０を参照して、演奏位置検出装置１は、ステップＳ６により選択された複数の参照配列５の中から、参照配列５５を選択する（ステップＳ７０１）。演奏位置検出装置１は、尤度（Ｌ）を０に設定し、演奏配列６の要素番号（Ｓ）を１に設定し、演奏配列６に含まれる音階の数（Ｎｓ）を４に設定する（ステップＳ７０２）。
【００８４】
演奏位置検出装置１は、演奏配列６のＳ番目（１番目）のＭＩＤＩ音階が、参照配列５５の１番目のＭＩＤＩ音階に一致するか否かを判定する（ステップＳ７０３）。具体的には、演奏位置検出装置１は、演奏高音パート６１の１番目のＭＩＤＩ音階が、参照配列５５の高音パート５５１の１番目のＭＩＤＩ音階に一致することを確認する。参照配列５５の低音パート５５２において、１番目のＭＩＤＩ音階が０であるため、演奏位置検出装置１は、低音パート同士を比較しない。この結果、演奏位置検出装置１は、演奏配列６の１番目のＭＩＤＩ音階が、参照配列５５の１番目のＭＩＤＩ音階に一致すると判定する（ステップＳ７０３においてＹｅｓ）。演奏位置検出装置１は、尤度（Ｌ）に３を加算する（ステップＳ７０４）。尤度（Ｌ）は、３となる。
【００８５】
なお、ステップＳ７０３において、演奏位置検出装置１は、低音パート５５２の１番目のＭＩＤＩ音階が０であっても、演奏低音パート６２の１番目のＭＩＤＩ音階を低音パート５５２の１番目のＭＩＤＩ音階と比較してもよい。
【００８６】
演奏位置検出装置１は、要素番号（Ｓ）をインクリメントし（ステップＳ７０６）、要素番号（Ｓ）が音階の数（Ｎｓ）よりも大きいか否かを確認する（ステップＳ７０７）。要素番号（Ｓ＝２）が音階の数（Ｎｓ＝４）よりも小さいため（ステップＳ７０７においてＮｏ）、演奏位置検出装置１は、ステップＳ７０３に戻る。以下、Ｓ＝５となるまで（ステップＳ７０７においてＹｅｓ）、ステップＳ７０３〜Ｓ７０６が繰り返される。
【００８７】
演奏位置検出装置１は、演奏配列６の２番目のＭＩＤＩ音階が参照配列５５の２番目のＭＩＤＩ音階に一致すると判定する（ステップＳ７０３においてＹｅｓ）。演奏位置検出装置１は、尤度（Ｌ）に３を加算する（ステップＳ７０４）。尤度（Ｌ）は、６となる。
【００８８】
演奏位置検出装置１は、演奏配列６の３番目のＭＩＤＩ音階が参照配列５５の３番目のＭＩＤＩ音階に一致しないと判定する（ステップＳ７０３においてＮｏ）。演奏高音パート６１の３番目のＭＩＤＩ音階は、高音パート５５１の３番目のＭＩＤＩ音階に一致しないためである。この場合、演奏位置検出装置１は、尤度（Ｌ）から１を減算する（ステップＳ７０５）。尤度（Ｌ）は、５となる。
【００８９】
演奏位置検出装置１は、演奏配列６の４番目のＭＩＤＩ音階が参照配列５５の４番目のＭＩＤＩ音階に一致すると判定する（ステップＳ７０３においてＹｅｓ）。演奏位置検出装置１は、尤度（Ｌ）に３を加算する（ステップＳ７０４）。尤度（Ｌ）は、８となる。
【００９０】
要素番号（Ｓ）がインクリメントされることにより（ステップＳ７０６）、要素番号（Ｓ＝５）が音階数（Ｎｓ＝４）よりも大きくなる（ステップＳ７０７においてＹｅｓ）。この場合、演奏位置検出装置１は、参照配列５５の尤度（Ｌ＝８）を保存する（ステップＳ７０８）。
【００９１】
演奏位置検出装置１は、全ての参照配列５の尤度を算出したか否かを確認する（ステップＳ７０９）。演奏位置検出装置１は、全ての参照配列５の尤度を算出していない場合（ステップＳ７０９においてＮｏ）、他の参照配列５を選択するために、ステップＳ７０１に戻る。これにより、演奏位置検出装置１は、尤度（Ｌ）を参照配列５ごとに算出することができる。
【００９２】
演奏位置検出装置１は、全ての参照配列５の尤度を算出した場合（ステップＳ７０９においてＹｅｓ）、参照配列５の中から、最尤度を有する参照配列５を抽出する（ステップＳ７１０）。最尤度が８である場合、参照配列５５が抽出される。尤度（Ｌ）が８である参照配列５が他にも存在する場合、複数の参照配列５が、ステップＳ７１０で抽出される。
【００９３】
演奏位置検出装置１は、抽出された参照配列５の最後の音階の位置を、候補位置としてＲＡＭ１２に保存する（ステップＳ７１１）。参照配列５５が抽出されている場合、演奏位置検出装置１は、参照配列５５の最後の音階の位置（位置番号「４４」）を、候補位置としてＲＡＭ１２に保存する。
【００９４】
｛演奏位置決定処理（ステップＳ８）｝
図１１は、演奏位置決定処理（ステップＳ８）のフローチャートである。図１２は、直前の演奏位置と候補位置との関係を示す図である。図１２において、楽譜配列４の音階を丸で示し、音階の具体的な数値の表示を省略する。
【００９５】
図１１及び図１２を参照して、演奏位置検出装置１は、直前の演奏位置と許容値とを設定する（ステップＳ８０１）。直前の演奏位置は、音階特定処理（ステップＳ３）により音階が特定される前に決定された演奏位置である。直前の演奏位置が、楽譜配列４の位置番号「５３」であると仮定する。このため、直前の演奏位置（ｐｏｓ）は、５３に設定される。許容値は、候補位置を演奏位置として決定する際に用いられるパラメータである。許容値（Ｐ）が、３に設定されると仮定する。
【００９６】
ステップＳ７１１（図９参照）により、候補位置２５１〜２５３が特定されたと仮定する。候補位置２５１〜２５３の位置番号が、ＲＡＭ１２に既に保存されている。
【００９７】
演奏位置検出装置１は、候補位置２５１〜２５３の中から、候補位置２５１を選択する（ステップＳ８０２）。演奏位置検出装置１は、候補位置２５１が、直前の演奏位置に基づいて設定される許容範囲内に存在するか否かを確認する（ステップＳ８０３）。許容範囲は、直前の演奏位置の位置番号「５３」よりも大きく、許容値（Ｐ＝３）を直前の演奏位置（ｐｏｓ＝５３）に加算した位置番号「５６」以下の範囲である。候補位置２５１の位置番号「５５」が許容範囲内に存在するため（ステップＳ８０３においてＹｅｓ）、演奏位置検出装置１は、候補位置２５１の位置番号「５５」を継続してＲＡＭ１２に保存する（ステップＳ８０４）。
【００９８】
演奏位置検出装置１は、全ての候補位置を選択してないため（ステップＳ８０６においてＮｏ）、他の候補位置を選択するために、ステップＳ８０２に戻る。つまり、演奏位置検出装置１は、ステップＳ８０３〜Ｓ８０５の処理を、候補位置２５２，２５３を選択して実行する。
【００９９】
候補位置２５２は、許容範囲内に存在するため（ステップＳ８０３においてＹｅｓ）、候補位置２５２の位置番号「５６」は、継続してＲＡＭ１２に保存される（ステップＳ８０４）。候補位置２５３は、許容範囲内に存在しないため（ステップＳ８０３においてＮｏ）、演奏位置検出装置１は、候補位置２５３が演奏位置として決定されることはないと判断して、候補位置２５３の位置番号「５９」をＲＡＭ１２から消去する。ユーザは、楽譜に記述されている音符を順次演奏することから、新たに決定される演奏位置は、直前の演奏位置から大きく離れることはないと予想される。候補位置２５３は、許容範囲に存在せず、直前の演奏位置から離れすぎている。このため、演奏位置検出装置１は、候補位置２５３を演奏位置ではないと判定する。
【０１００】
演奏位置検出装置１は、全ての候補位置を選択した場合（ステップＳ８０６においてＹｅｓ）、候補位置の位置番号がＲＡＭ１２に保存されているか否かを確認する（ステップＳ８０７）。
【０１０１】
候補位置２５１，２５２の位置番号がＲＡＭ１２に保存されているため（ステップＳ８０７においてＹｅｓ）、演奏位置検出装置１は、候補位置２５１，２５２のうち、直前の演奏位置に最も近い候補位置２５１を新たな演奏位置として決定する（ステップＳ８０８）。演奏位置検出装置１は、更新停止回数を０に設定し（ステップＳ８０９）、図１１に示す処理を終了する。更新停止回数は、新たな演奏位置が演奏位置決定処理（ステップＳ８）により決定されなかった回数を示し、検出状態判定処理（ステップＳ９）で用いられる。
【０１０２】
一方、候補位置の位置番号がＲＡＭ１２に保存されていない場合（ステップＳ８０７においてＮｏ）、演奏位置検出装置１は、演奏位置を新たに決定できないと判定する。演奏位置は、直前の演奏位置から更新されない。演奏位置検出装置１は、更新停止回数をカウントし（ステップＳ８１０）、図１１に示す処理を終了する。
【０１０３】
このように、演奏位置検出装置１は、許容範囲内に存在する候補位置の中で、直前の演奏位置に最も近い候補位置を新たな演奏位置として決定する。これにより、演奏位置が直前の演奏位置から大きく移動することが防止される。
【０１０４】
｛検出状態判定処理（ステップＳ９）｝
図１３は、検出状態判定処理（ステップＳ９）のフローチャートである。図１４は、検出状態判定処理（ステップＳ９）により、演奏位置が強制的に変更されるときの演奏位置の変化を示す図である。図１４において、楽譜配列４の音階を丸で示し、音階の具体的な数値の表示を省略する。
【０１０５】
図１３を参照して、演奏位置検出装置１は、更新停止回数が初期化基準値（たとえば、４）以上であるか否かを判定する（ステップＳ９１）。直前の演奏位置が、図１４に示すように、楽譜配列４の位置番号「５６」であると仮定する。
【０１０６】
更新停止回数が初期化基準値以上である場合（ステップＳ９１においてＹｅｓ）、演奏位置検出装置１は、ユーザが演奏ミスを続けているため、現在の演奏配列６に基づいて、演奏位置を決定できないと判定する。演奏位置検出装置１は、演奏位置の決定をやり直すために、演奏配列６を初期化する（ステップＳ９２）。演奏位置検出装置１は、演奏位置を、直前の演奏位置（位置番号「５６」）よりも３個前の音階の位置に変更する（ステップＳ９３）。Ｎの値が３に設定されている場合、位置番号「５３」が、新たな演奏位置として決定される。なお、Ｎの値は、３以外の値であってもよい。
【０１０７】
ユーザは、演奏をミスした場合、演奏を停止し、演奏をミスした位置よりも前の位置（たとえば、演奏をミスした小節の先頭の音符）から、演奏を再開すると考えられる。このため、演奏位置検出装置１は、ユーザが演奏を再開したときに、直前の演奏位置よりも手前の位置から新たな演奏位置を決定できるようにするために、演奏位置をステップＳ９３により変更する。また、ステップＳ９２により、演奏配列６が初期化されるため、演奏配列６に含まれる音階の数は、０となる。演奏位置検出装置１は、再開された演奏に基づいて、新たに演奏配列６を作成することができるため、再開された演奏に対応する演奏位置を速やかに決定することができる。
【０１０８】
一方、更新停止回数が初期化基準値よりも小さい場合（ステップＳ９１においてＮｏ）、演奏位置検出装置１は、ユーザの演奏ミスにより演奏位置を決定できないが、ユーザが演奏を継続していると判定する。この場合、演奏位置検出装置１は、演奏配列６を初期化せずに、図１３に示す処理を終了する。
【０１０９】
図５を参照して、演奏位置が、演奏位置決定処理（ステップＳ８）または検出状態判定処理（ステップＳ９）により変更された場合、演奏位置検出装置１は、タッチパネル１３に表示されている楽譜画像データ７上の演奏位置を変更する。楽譜画像データ７上の演奏位置が、ユーザの演奏に応じて楽譜上を進んでいくため、ユーザは、楽譜上のどの音符を演奏しているかを容易に確認できる。
【０１１０】
｛変形例｝
以下、上記実施の形態の変形例を説明する。
【０１１１】
上記実施の形態において、演奏位置検出装置１は、最尤度を有する参照配列５の最後の音階の位置を候補位置として特定する例を説明したが、これに限られない。演奏位置検出装置１は、ステップＳ７１０（図９参照）において、最尤度を有する参照配列５の数が１つである場合、最尤度を有する参照配列５の最後の音階の位置を、演奏位置として決定してもよい。たとえば、図３及び図９を参照して、参照配列５３だけが、最尤度を有する参照配列５として抽出された場合（ステップＳ７１０）、演奏位置検出装置１は、参照配列５３の最後の音階の位置（位置番号「８」）を、演奏位置として決定してもよい。
【０１１２】
上記実施の形態では、楽譜配列４の音階のうち、直前の演奏位置よりも後ろに位置する音階から参照配列５を選択する例を説明したが、これに限られない。演奏位置検出装置１は、直前の演奏位置に関係なく、楽譜配列４全体から参照配列５を選択してもよい。つまり、演奏位置検出装置１は、楽譜配列４のうち、直前の演奏位置よりも後ろに位置する音階を含む配列の中から、参照配列を選択すればよい。
【０１１３】
この場合であっても、図１１及び図１２を参照して、ステップＳ８０３により、直前の演奏位置よりも後ろに位置する候補位置が、演奏位置として決定される。参照配列５が楽譜配列４全体から選択されたとしても、直前の演奏位置よりも前に位置する音階が、新たな演奏位置として決定されることを防ぐことができる。つまり、演奏位置検出装置１は、参照配列５の選択方法に関係なく、最尤度を有する参照配列５の最後の音階の位置が直前の演奏位置よりも時間方向で後ろに位置する場合、最後の音階の位置を新たな演奏位置として決定すればよい。
【０１１４】
上記実施の形態では、許容範囲が、直前の演奏位置よりも後ろに設定される例を説明した。しかし、演奏位置検出装置１は、図１５に示すように、許容範囲を、直前の演奏位置の前の音階を含むように設定してもよい。たとえば、ユーザが、演奏をミスすることなく演奏を中断し、中断した位置よりも前の位置から演奏を再開することが考えられる。この場合であっても、演奏位置検出装置１は、許容範囲を直前の演奏位置の前後に設定することにより、正確な演奏位置を決定することができる。つまり、演奏位置検出装置１は、最尤度を有する参照配列５の最後の音階が許容範囲に位置する場合、最後の音階の位置を新たな演奏位置として決定する。この場合、演奏位置検出装置１は、直前の演奏位置よりも前の楽譜配列の音階から、参照配列５を選択する必要がある。また、演奏位置検出装置１は、最後の音階が所定範囲の外に位置する場合、更新停止回数をカウントする（ステップＳ８１０、図１１参照）。
【０１１５】
上記実施の形態では、演奏位置決定処理（ステップＳ８）において、演奏位置検出装置１が、許容範囲内に存在する候補位置のうち、直前の演奏位置に最も近い候補位置を、新たな演奏位置として決定する例を説明した（ステップＳ８０３，Ｓ８１１、図１１参照）。しかし、演奏位置検出装置１は、候補位置が許容範囲内に存在するか否かを判定することなく、直前の演奏位置に最も近い候補位置を新たな演奏位置として決定してもよい。
【０１１６】
上記実施の形態では、楽譜配列４が、単音の音階と、２重和音を構成する複数の音階と含む例を説明したが、これに限られない。楽譜配列４は、３重和音、４重和音などを構成する複数の音階を含んでいてもよい。すなわち、楽譜配列４には、和音を構成する複数の音階が、同一の位置番号の欄に記述される。音階特定処理（ステップ３）では、ソートされた周波数のうち、楽譜配列４において、和音を構成する音階数の最大値に等しい数の周波数が抽出される。演奏配列作成処理（ステップＳ４）において、演奏位置検出装置１は、音響信号から特定された複数の音階を演奏配列６に追加すればよい。
【０１１７】
上記実施の形態において、演奏位置検出プログラム２がタブレット型端末にインストールされている例を説明した。演奏位置検出プログラム２をインストールする方法は、特に限定されない。たとえば、演奏位置検出プログラム２は、ネットワークに接続されたサーバからダウンロードされ、タブレット型端末にインストールされてもよい。あるいは、演奏位置検出プログラム２を記録したコンピュータ読み取り可能な媒体（たとえば、光ディスク、ＵＳＢ（Universal Serial Bus）メモリ、フレキシブルディスクなど）が配布されている場合、演奏位置検出プログラム２は、その媒体からタブレット型端末にインストールされてもよい。
【０１１８】
上記実施の形態では、タブレット型端末である場合を例にして説明したが、これに限られない。演奏位置検出装置１は、ノート型のＰＣ（Personal Computer）、デスクトップ型のＰＣ、スマートフォン、携帯電話などのコンピュータであればよい。すなわち、演奏位置検出装置１は、マイク１５と、タッチパネル１３とを備え、演奏位置検出プログラム２を実行できる機器であればよい。
【０１１９】
以上、本発明の実施の形態を説明したが、上述した実施の形態は本発明を実施するための例示に過ぎない。よって、本発明は上述した実施の形態に限定されることなく、その趣旨を逸脱しない範囲内で上述した実施の形態を適宜変形して実施することが可能である。
【符号の説明】
【０１２０】
１  演奏位置検出装置
２  演奏位置検出プログラム
３  楽譜データ
４  楽譜配列
５，５１〜５５  参照配列
６  演奏配列
１１  ＣＰＵ
１２  ＲＡＭ
１３  タッチパネル
１４  操作ボタン
１５  マイク
３１，３２  楽譜
４１  楽譜高音パート
４２  楽譜低音パート
６１  演奏高音パート
６２  演奏低音バート
３１１〜３１９，３２２，３２６  音符
【図１】
0005808711.tif 000002
【図２】
0005808711.tif 000003
【図３】
0005808711.tif 000004
【図４】
0005808711.tif 000005
【図５】
0005808711.tif 000006
【図６Ａ】
0005808711.tif 000007
【図６Ｂ】
0005808711.tif 000008
【図６Ｃ】
0005808711.tif 000009
【図６Ｄ】
0005808711.tif 000010
【図７】
0005808711.tif 000011
【図８】
0005808711.tif 000012
【図９】
0005808711.tif 000013
【図１０】
0005808711.tif 000014
【図１１】
0005808711.tif 000015
【図１２】
0005808711.tif 000016
【図１３】
0005808711.tif 000017
【図１４】
0005808711.tif 000018
【図１５】
0005808711.tif 000019