(58)【調査した分野】(Int.Cl.,DB名)
前記連符化処理手段は、グルーピングされた音符の演奏時間が1拍分の基準時間より長い場合でグループ内に前記基準時間より長い音符がない場合、又は、グルーピングされた音符に前記基準時間より長い音符がある場合で演奏時間が前記基準時間の2倍を超える場合に、グルーピングされた音符の音価を変更して連符化処理を行う請求項1に記載の楽譜演奏装置。
前記連符化処理は、グルーピングされた音符の演奏時間が1拍分の基準時間より長い場合でグループ内に前記基準時間より長い音符がない場合、又は、グルーピングされた音符に前記基準時間より長い音符がある場合で演奏時間が前記基準時間の2倍を超える場合に、グルーピングされた音符の音価を変更する処理を含む請求項6に記載の楽譜演奏プログラム。
【発明の概要】
【発明が解決しようとする課題】
【0004】
楽譜から演奏情報を生成するに際して、記述された音符形状から音価を決定する場合、
図17の第1小節の矢印部分のように3連符を示す連符記号(連符を示す数)がある場合は、その記号(数字)を認識できれば正しい音価を求めることができる。しかしながら、連符記号は
図17の第3小節の矢印部分のように省略されることが多く、この場合は楽譜を読み取って演奏情報を作成するに際して、通常の8分音符として音価を求めてしまうことになる。
また、連符記号の記載があったとしても、楽譜には指番号などが記載されている場合が多く、楽譜から演奏情報を生成するに際して、指番号と連符記号(連符を示す数)とを区別する必要があり、そのための読取技術が必要であった。
【0005】
本発明は上記事情に鑑みて提案されたもので、楽譜において連符記号が記述されない場合であっても、正しい音価を有する演奏情報を作成して自動演奏を可能とした楽譜演奏装置及び楽譜演奏プログラムを提供することを目的としている。
【課題を解決するための手段】
【0006】
上記目的を達成するため本発明の楽譜演奏装置(請求項1)は、楽曲の拍子から小節規定時間を計算する小節規定時間計算手段と、小節内の音符、休符の発音タイミング、音価(GateTime)から小節演奏時間を計算する小節演奏時間計算手段と、計算された前記小節規定時間と小節演奏時間を比較する比較手段と、前記小節規定時間と小節演奏時間が一致しない場合に小節内に連符が存在すると推定し、音符、休符の発音タイミング、音価を修正する音価修正手段とを備え、前記音価修正手段は、小節内の音符配列を記憶する小節音符配列記録手段と、小節内の音符を拍毎にグルーピングするグルーピング手段と、グルーピングされた音符の演奏時間と前記音符配列から算出される1拍分の基準時間とが一致しない場合に、グルーピングされた音符の音価を変更する連符化処理を行う連符化処理手段とを備えたことを特徴としている。
【0007】
請求項2は、請求項1の楽譜演奏装置において、前記連符化処理手段は、グルーピングされた音符の演奏時間が1拍分の基準時間より長い場合でグループ内に前記基準時間より長い音符がない場合、又は、グルーピングされた音符に前記基準時間より長い音符がある場合で演奏時間が前記基準時間の2倍を超える場合に、グルーピングされた音符の音価を変更して連符化処理を行うことを特徴としている。
【0008】
請求項3は、請求項1の楽譜演奏装置において、前記連符化処理手段は、グルーピングされた音符の演奏時間が1拍分の基準時間より短い場合
であって、グループ内の16分音符数が3つである場合
または32分音符が5つ又は7つの場合に、グルーピングされた音符の音価を変更して連符化処理を行うことを特徴としている。
【0009】
請求項4は、請求項2又は請求項3の楽譜演奏装置において、前記連符化処理手段による連符化処理は、前記グルーピングされた音符の音価の
時間長に対して、グルーピングされた音符数に応じて予め設定された数を乗じて算出した時間長に音符数の合計音価を変更することを特徴としている。
【0010】
請求項5は、請求項4の楽譜演奏装置において、グルーピングされた音符数が3である場合はグルーピングされた音符の音価の
時間長を2倍した時間長に、グルーピングされた音符数が5〜7である場合はグルーピングされた音符の音価の
時間長を4倍した時間長に、グルーピングされた音符数が9〜15である場合はグルーピングされた音符の音価の
時間長を8倍した時間長に、グルーピングされた音符数が17〜31である場合はグルーピングされた音符の音価の
時間長を16倍した時間長に、音符数の合計音価をそれぞれ変更することを特徴としている。
【0011】
請求項6の楽譜演奏プログラムは、下記の各ステップをコンピュータに実行させることを特徴としている。
楽曲の拍子から小節規定時間を計算する小節規定時間計算ステップ。
小節内の音符、休符の発音タイミング、音価(GateTime)から小節演奏時間を計算する小節演奏時間計算ステップ。
計算された前記小節規定時間と小節演奏時間を比較する比較ステップ。
前記小節規定時間と小節演奏時間が一致しない場合に小節内に連符が存在すると推定し、小節内の音符配列を記憶し、小節内の音符を拍毎にグルーピングし、グルーピングされた音符の演奏時間と前記音符配列から算出される1拍分の基準時間とが一致しない場合に、グルーピングされた音符の音価を変更する連符化処理により、音符、休符の発音タイミング、音価を修正する音価修正ステップ。
【0012】
請求項7は、請求項6の楽譜演奏プログラムにおいて、前記連符化処理は、グルーピングされた音符の演奏時間が1拍分の基準時間より長い場合でグループ内に前記基準時間より長い音符がない場合、又は、グルーピングされた音符に前記基準時間より長い音符がある場合で演奏時間が前記基準時間の2倍を超える場合に、グルーピングされた音符の音価を変更する処理を含むことを特徴としている。
【0013】
請求項8は、請求項6の楽譜演奏プログラムにおいて、前記連符化処理は、グルーピングされた音符の演奏時間が1拍分の基準時間より短い場合
であって、グループ内の16分音符数が3つである場合
または32分音符が5つ又は7つの場合に、グルーピングされた音符の音価を変更する処理を含むことを特徴としている。
【0014】
請求項9は、請求項7又は請求項8の楽譜演奏プログラムにおいて、前記連符化処理は、前記グルーピングされた音符の音価の
時間長に対して、グルーピングされた音符数に応じて予め設定された数を乗じて算出した時間長に音符数の合計音価を変更することを特徴としている。
【0015】
請求項10は、請求項9の楽譜演奏プログラムにおいて、グルーピングされた音符数が3である場合はグルーピングされた音符の音価の
時間長を2倍した時間長に、グルーピングされた音符数が5〜7である場合はグルーピングされた音符の音価の
時間長を4倍した時間長に、グルーピングされた音符数が9〜15である場合はグルーピングされた音符の音価の
時間長を8倍した時間長に、グルーピングされた音符数が17〜31である場合はグルーピングされた音符の音価の
時間長を16倍した時間長に、音符数の合計音価をそれぞれ変更することを特徴としている。
【発明の効果】
【0016】
本発明の楽譜演奏装置及び楽譜演奏プログラムによれば、楽譜において連符記号が記述されない場合であっても、小節規定時間と小節演奏時間が一致しない場合に小節内に連符部分を推定し、音符、休符の発音タイミング、音価を修正する連符化処理を行うことで、正しい音価を有する演奏情報を作成することができる。
連符化処理は、グルーピングされた音符の演奏時間が1拍分の基準時間より長い場合でグループ内に前記基準時間より長い音符がない場合、グルーピングされた音符に前記基準時間より長い音符がある場合で演奏時間が前記基準時間の2倍を超える場合、又は、グルーピングされた音符の演奏時間が1拍分の基準時間より短い場合でグループ内の音符数が3である場合に、それぞれグルーピングされた音符の音価を変更することで行われる。
【発明を実施するための形態】
【0018】
以下、図面を参照しながら本発明の楽譜演奏装置について説明する。
図1は、コンピュータ上で動作し本発明の楽譜演奏装置(楽譜演奏プログラム)が組み込まれた自動演奏装置のブロック図であり、楽譜をスキャンした楽譜ファイルやPDF楽譜ファイルを記憶する楽譜ファイル記
憶手段1と、楽譜ファイルを認識して楽譜情報を生成する楽譜情報生成手段2と、生成された楽譜情報を記憶する楽譜情報記
憶手段3と、楽譜情報から演奏情報を作成する演奏情報作成手段4と、生成された演奏情報を記憶する演奏情報記
憶手段5と、演奏情報を順次読み出し実際に音楽を演奏する楽音演奏手段6と、楽譜ファイルや楽譜情報を表示する楽譜表示手段7を備えて構成されている。
本発明の特徴的な構成は、演奏情報作成手段4において、楽譜情報から演奏情報を作成するに際し、連符の推定を行って正しい音価を求めるものであり、そのために必要な連符推定プログラムは演奏情報作成手段4の一部として機能する。
【0019】
自動演奏装置のハードウエアは、パーソナルコンピュータ等の汎用情報処理装置によって実現することができる。
図2は、コンピュータ上に構築された自動演奏装置のハードウエア構成を示すブロック図であり、バス10に対して、ディスプレイ11、マウス12、キーボード13、ROM14、RAM15、CPU16、HDD17、ディスクドライブ18、MIDIインターフェイス19、オーディオインターフェイス20、ネットワークインターフェイス21を接続して構成されている。
【0020】
コンピュータのHDD17には、MIDIインターフェイス19、オーディオインターフェイス20若しくはネットワークインターフェイス21を介して楽譜ファイルを取り込んで演奏情報を作成し自動演奏を行うための楽譜演奏プログラムが、ディスクドライブ18に装着された記録媒体からインストールされ、若しくはインターネットを介して所定のURLよりダウンロードされている。
CPU16は、上記の手順によりインストール又はダウンロードされた所定の制御プログラム(楽譜演奏プログラム)に従って各種処理(各ステップ)を実行し、楽譜演奏装置全体を制御するものであり、楽譜ファイル記憶手段1、楽譜情報生成手段2、楽譜情報記憶手段3を要部機能として備えることで、取り込んだ楽譜情報を電子情報として記憶し、記憶した情報を楽譜表示手段7に表示可能とするとともに、演奏情報作成手段4、演奏情報記憶手段5、楽音演奏手段6を備えることで、楽譜情報に応じて生成した演奏情報により楽音を自動的に演奏可能としている。
RAM15は、CPU16での処理に使用される情報を一時記憶するものである。
【0021】
楽譜ファイル記憶手段1は、RAM15及びHDD17で構成されている。楽譜ファイルは、上述したようにネットワークインターフェイス21等から取り込んでもよいし、コンピュータに対して別途イメージスキャナを接続して取り込むようしてもよい。
楽譜情報生成手段2は、HDD17に記憶されたプログラムとそれを実行するCPU16と、作業記憶領域として使用されるRAM15などで構成されている。
楽譜情報記憶手段3は、RAM15及びHDD17で構成される。
演奏情報作成手段4は、HDD17に記憶されたプログラムと、それを実行するCPU16と、作業記憶領域として使用されるRAM15などで構成される。
演奏情報記憶手段5は、RAM15及びHDD17などで構成される。
楽音演奏手段6は、HDD17に記憶された楽譜演奏プログラムと、プログラムを実行するCPU16と、作業記憶領域として使用されるRAM15、音源装置及びオーディオインターフェイス20などを含んで構成される。音源装置には、D/A変換器、アンプ、スピーカを含むサウンドシステムが含まれている。
楽譜表示手段7は、HDD17に記憶された楽譜演奏プログラムと、プログラムを実行するCPU16と、作業記憶領域として使用されるRAM15、液晶ディスプレイ等のディスプレイ11で構成される。
【0022】
楽譜情報記憶手段3は、
図3に示すように、
ページ情報記憶手段31と
パート情報記憶手段32を備えて構成されている。パート情報記憶手段32は、パート数分のパート情報33の配列として構成される。各パート情報33には、音色、再生音量、再生定位情報などが含まれる。ページ情報記憶手段31には、ページ数分のページ情報34の配列として記録されている。各ページ情報34には、少なくとも段落情報記憶手段35と、五線情報記憶手段36が含まれる。
【0023】
段落情報記憶手段35には、その段落に所属する全パートあるいは全五線共通に効力がある段落所属記号情報35aの配列として記録されている。各段落所属記号情報35aに記録される段落所属記号には、段落内でユニークな記号ID、記号カテゴリ情報、記号種類情報、記号カテゴリと記号種類に応じたパラメータ配列、ページ内での記号位置などが含まれる。記号カテゴリの例としては、繰り返し記号、小節線などが挙げられる。記号種類の例としては、D.C.、D.S.、繰り返し括弧など(カテゴリ=繰り返し記号)、単線、二重線、繰り返し始点、繰り返し終点、終止線など(カテゴリ=小節線)が挙げられる。
【0024】
五線情報記憶手段36には、ページ内の五線数分の五線情報36aの配列として記録されている。各五線情報36aには、所属パートID、所属段落ID、五線所属記号情報36bなどが含まれる。五線所属記号情報36bは、その五線に所属する五線所属記号の配列として記録されている。
五線所属記号情報36bに記録される五線所属記号には、段落内でユニークな記号ID、記号カテゴリ情報、記号種類情報、OnTime、GateTime、記号カテゴリと記号種類に応じたパラメータ配列、ページ内での記号位置(ページの左上を原点とした座標)などが含まれる。
【0025】
記号カテゴリの例としては、音符、休符、拍子記号、音部記号、調号、臨時記号などが挙げられる。
記号種類情報の例としては、全音符、4分音符、8分音符、16分音符、32分音符など(カテゴリ=音符)、全休符、4分休符、8分休符、16分休符、32分休符など(カテゴリ=休符)
ト音記号、へ音記号など(カテゴリ=音部記号)が挙げられる。
パラメータの例としては、音程(MIDIのNoteNo.)、付点の数、ChordID、TimingNo.、連桁IDなど(カテゴリ=音符)、付点の数、ChordID、TimingNo.など(カテゴリID=休符)、ChordID(同一タイミングに発音する音符グループのID)、TimingNo.(発音順番を示す番号)、GateTime(音符、休符の時間長を示す値)、OnTime(小節の先頭から発音開始までの時間)などが挙げられる。
【0026】
演奏情報作成手段4は、
図4に示すように、楽曲の拍子から小節規定時間を計算する小節規定時間計算手段401と、小節内の音符、休符の発音タイミング、音価(GateTime)から小節演奏時間を計算する小節演奏時間計算手段402と、計算された小節規定時間と小節演奏時間を比較する比較手段403と、小節規定時間と小節演奏時間が一致しない場合に小節内に連符が存在すると推定し、音符、休符の発音タイミング、音価を修正する音価修正手段404とを備えて構成されている。
そして、音価修正手段404は、楽譜における1拍分の時間となる基準時間設定手段441と、小節内の音符配列を記憶する小節音符配列記録手段442と、小節内の音符を拍毎にグルーピングするグルーピング手段443と、グルーピングされた音符の演奏時間と音符配列から算出される1拍分の基準時間との関係からグルーピングされた音符の音価を変更する連符化処理を行う連符化処理手段444とを備えている。
【0027】
次に、楽譜演奏装置による楽譜作成の全体手順について、
図5のフローチャートを参照しながら説明する。
先ず、楽譜情報生成手段2により楽譜情報の生成が行われる(ステップ41)。楽譜情報生成手段2は、楽譜ファイル記憶手段1から楽譜ファイルを読み出し、そのファイルに含まれる描画情報から、ページ情報、パート情報、段落情報、段落所属記号情報、五線情報、五線所属記号情報が一般に知られている既存技術により生成される。ただし、五線所属記号情報のChordID、TimingNo.、GateTime、OnTimeは演奏情報作成手段4によって与えられる。
生成された楽譜情報は、楽譜情報記憶手段3に記録される。
【0028】
続いて、演奏情報作成手段4によりステップ42〜ステップ46の手順で演奏情報が作成される。
【0029】
ステップ42では、
図6に示すような小節情報配列を作成する。小節情報は各小節に対応するページ番号、段落番号、左側小節線の記号ID、右側小節線の記号ID、楽曲の拍子から求められる小節規定時間、小節番号を含んでいる。
小節規定時間は式(1)で求められる。
小節規定時間=TimeBase×4/Den×Num 式(1)
ここでTimeBaseは、4分音符あたりのTickで、本実施例では480とする。
Denは楽曲の拍子の分母(1拍の長さ)、Numは楽曲拍子の分子(小節内の拍の数)を表す(小節規定時間計算手段401)。
【0030】
次に、同一タイミングで発音される音符グループを示すChordIDを付与する(ステップ43)。ChordIDは、横方向の位置及び同一の符尾に接しているかどうかによって決定される。
発音順番を示すTimingNo.を付与する(ステップ44)。TimingNo.は、ChordID及び横方向の位置によって決定される。
GateTimeおよびOnTimeを付与する(ステップ45)。GateTimeは音符の種類、付点の数によって決定され、OnTimeはGateTime及びTimingNo.によって決定される。
ステップ42〜ステップ45については、一般に知られている既存技術により行われる。
【0031】
図7の楽譜に対してステップ45までの手順で得られたChordID、TimingNo.、GateTime、OnTimeの演奏情報の一例を
図8に示す。音符No.は、楽譜について上段左から右、続いて下段左から右に数字を順に付けたものである。カテゴリは、音符、休符別を表示する。この楽譜の場合、上段左から音符No.1〜No.10となり、下段左から音符No.11〜No.16となる。
本実施例では、GateTime及びOnTimeなどの時間はTickを用いて表す。4分音符の長さを480Tickと規定している。
【0032】
図7の楽譜を例にOnTime及び小節演奏時間の算出手順について、
図9のフローチャートを参照しながら説明する。
TimingNo.を1に初期化する(ステップ91)。
EndTime配列を初期化する(ステップ92)。
TimingNo.=1の音符No.1を読み出す(ステップ93)。
音符No.1のOnTimeを算出する(ステップ94)。TimingNo.は1なので、OnTime=0となる。
音符No.1のEndTimeを計算する(ステップ95)。音符1のOnTimeに音符No.1のGateTimeを加算し、EndTime=240となる。このEndTimeをEndTime配列に加える。
同じTimingNo.の音符があるので、ステップ93へ戻る(ステップ96)。
【0033】
音符No.11を読み出す(ステップ93)。
音符No.11のOnTimeを算出する(ステップ91)。これもTimingNo.は1なのでOnTime=0となる。
音符No.11のEndTimeを計算する(ステップ95)。音符No.11のOnTimeに音符No.11のGateTimeを加算し、EndTime = 480となる。
EndTime配列には、240があるのみで、480は無いので480もEndTime配列へ追加する。
TimingNo=1の音符の読み出しが終わったので、TimingNo.を2に更新し、次のTimingNo.の音符を読み出す。
【0034】
音符No.2を読み出し(ステップ93)、OnTimeを算出する(ステップ94)。音符No.2のOnTimeは、EndTime配列の最も短い時間となる。この場合は240となる。
音符No.2のEndTimeを計算する(ステップ95)。音符No.2のOnTimeに音符No.2のGateTimeを加算して、EndTime=480となる。
480は既にEndTime配列に存在するので480はEndTime配列へは追加しない。さらにTimingNo.=2の音符はもう存在しないので、今回音符No.2のOnTime割り当てた240をEndTime配列から削除する。
TimingNo.を3に更新し、次のTimingNo.の音符を読み出す。
【0035】
音符No.3を読み出し(ステップ93)、OnTimeを計算する(ステップ94)。音符No.3のOnTimeはEndTime配列の最も短い値となる。この場合は480となる。
音符No.3のEndTimeを計算する(ステップ95)。音符No.3のOnTimeに音符No.3のGateTimeを加算し、720となる。この値はEndTime配列にないのでEndTime配列に追加する。今回はTimingNo.3の音符がまだ存在するので、TimingNo.の更新は行われず、EndTime配列の480も削除しない。
【0036】
ステップ93で同じTimi
ngNo.の音符No.12を読み出し、OnTimeを計算する(ステップ94)。音符No.
12のOnTimeはEndTime配列の最も小さい値の480となる。
音符No.
12のEndTimeを計算する(ステップ95)。音符No.
12のOnTime+GateTime=960となる。この値はEndTime配列に無いので、EndTime配列に追加する。TimingNo.=3の音符も他には無いので、EndTime配列の最も小さい値を削除する。
同様に処理を行うことで、全ての音符のOnTimeが算出されるとともにEndTime配列の更新が行われる。全ての音符の処理が終わったときにEndTime配列に残っている最も大きい値が小節演奏時間となる。
【0037】
本発明の特徴的な構成は、ステップ45に続くステップ46で楽譜における連符推定を行い、ChordID、TimingNo.、GateTime、OnTimeの修正を行うことである。この部分についての詳細説明は後述する。
【0038】
ステップ46で連符推定を行った楽譜情報から演奏情報を作成する(ステップ47)。演奏情報はMIDI規格のフォーマットを踏襲しており、以下のような演奏イベント情報の配列で構成される。
ノートイベント :音符の発音開始、発音停止のイベント
コントロールイベント:音量、定位、などを発音チャネルに設定するイベント
音色イベント :発音チャネルの音色を指定するイベント
テンポイベント :楽曲のテンポを設定するイベント
【0039】
図10に演奏イベント情報のフォーマットを示す。
イベント種類は、ノートイベント、コントロールイベント、テンポイベントなどを識別する番号である。
Data1は、ノートイベントであればその音程、コントロールイベントであれば、音量、定位などを識別する番号、テンポイベントであればテンポ値が入る。
Data2は、ノートイベントであればその発音強さ(0の場合発音停止を示す)、コントロールイベントであれば、音量、定位などの設定値が入る。
時間情報は楽曲開始からのそのイベント発生までの時間(Tick)が入る。
チャネル番号は、発音、音量などの制御対象となるチャネル番号が入る。
【0040】
図5で示したステップ46(連符推定)における大まかな流れについて、
図11のフローチャートを参照しながら説明する。
先ず、ステップ42で作成した小節情報を読み出す(ステップ51)。
この小節に含まれる音符情報を読み出し、音符配列に格納する(ステップ52)。
【0041】
音符上の読み出しは、以下の手順で行われる。
小節情報に記憶されたページ番号を元に、ページ情報を読み出す。
このページ情報から、小節情報の段落番号が示す段落情報を読み出す。
さらに段落情報から小節情報の左小節線の記号IDと一致する段落所属記号を読み出し、この横方向の位置を小節左端位置とする。同様に右小節線の段落所属記号を読み出し、小節右端位置とする。
ページ情報から小節情報の段落番号と所属段落IDが一致する五線情報を読み出す。
小節左端位置と小節右端位置の間に位置し、カテゴリが音符または休符である五線所属記号を小節音符配列に格納する。
【0042】
小節音符配列から小節演奏時間を算出する(ステップ53)。
小節演奏時間と小節情報の小節規定時間とを比較し(ステップ54)、一致しない場合は連符推定を行う(ステップ55)。ステップ54で小節演奏時間と小節規定時間が一致する場合は、次の小節への処理へ移る(ステップ56)。
【0043】
次に、
図11で示したステップ55における連符推定の詳細手順について、
図12のフローチャートを参照しながら、
図13の楽譜から
図14に示す演奏データを作成する場合を例に説明する。
先ず、音価修正手段404の基準時間設定手段441で基準時間を設定する(ステップ61)。基準時間は1拍分の時間とする。
図13の楽譜の例では4/4拍子なので1拍は4分音符となり、480Tickである。
6/8拍子などの場合は、基準時間を8分音符3つ分とする。この場合の基準時間は720Tickである。
【0044】
TimingNo.の配列を作成する(ステップ62)。この場合、上段音符No.1〜No.12、及び、下段音符No.13〜No.16に対応する1〜16の数が配列に入る。
TimingNo.のインデックスの初期化、更新を行う(ステップ63)。一番最初であればTimingNo.インデックスは0である。
TimingNo.インデックスが示すTimingNo.の音符を読み出す(ステップ64)。この時点では音符No.1、No.13の音符が読み出される。
読み出した音符の内、音価(GateTime)が小さい音符を選択する(ステップ65)。この場合、音符No.1が選択される。
選択した音符を拍グループに加える(ステップ66)。
後述する所定の条件によってグルーピングが完了したかどうか判定し、完了すれば次のステップ68へ進み、完了していなければステップ63へ戻る(ステップ67)。
【0045】
ステップ67におけるグループ化完了の条件は、以下のようになる。
・音符の場合
連桁がある場合
小節内最後の音符の場合(A)→グループ化完了
上記以外の場合
後のタイミングに同じ連桁の音符がある(B)→グループ化継続
後のタイミングに同じ連桁の音符はない(C)→グループ化完了
連桁が無い場合(D)→グループ化完了
・休符の場合
拍グループ最初の音符の場合(E)→グループ化完了
上記以外の場合
小節内最後の音符の場合(F)→グループ化完了
上記以外の場合
この休符の前に連桁に属する音符が、拍グループにある場合
この休符の後に、上記音符と同じ連桁のある場合(G)→グループ化継続
上記以外(H)→グループ化完了
上記以外(I)→グループ化継続
【0046】
図13の楽譜についてグループ化を行う場合、先ず、音符No.1についてのグループ化を判断する。音符No.1は、音符で連桁があり、小節内最後の音符の場合以外の場合に該当し、後のタイミングに同じ連桁の音符があるので、上述した(B)のケースに該当し、グループ化を継続する。
次いでTimingNo.インデックスを更新し(ステップ63)、TimingNo.2の音符No.2を読み出す(ステップ64)。TimingNo.2に該当する音符は一つだけなので、音符No.2が選択され(ステップ65)、拍グループに追加する(ステップ66)。音符No.2は、ステップ67においては、音符で連桁があり、小節内最後の音符の場合以外の場合に該当し、後のタイミングに同じ連桁の音符がないので(C)の条件に当てはまり、グループ化が完了する。ステップ63〜ステップ67でグルーピング手段443を構成している。
【0047】
次に、小節演奏時間計算手段402を使用して拍グループの演奏時間を算出する(ステップ68)。この場合、8分音符が2個であるので、480Tick となる。
続いて、算出された拍グループの演奏時間(480Tick)と基準時間(この楽譜の場合は4/4拍子なので1拍は4分音符となり480Tick)とを比較する(ステップ69)。この拍グループでは、演奏時間と基準時間とが等しいので、拍グループの処理を連符でないと判断して完了する。拍グループの処理を完了する場合は、拍グループを初期化し(ステップ70)、次の拍グループのグルーピングのためにステップ63の処理へ移行する。
【0048】
次に、TimingNo.インデックスを更新し(ステップ63)、TimingNo.3の音符No.3及びNo.14を読み出す(ステップ64)。音価が小さい音符No.3が選択され(ステップ65)、拍グループに追加される(ステップ66)。音符No.3は、ステップ67においては、音符で連桁があり、小節内最後の音符の場合以外の場合に該当し、後のタイミングに同じ連桁の音符があるので(B)の条件でステップ63の処理へ移行する。
【0049】
TimingNo.インデックスを更新し(ステップ63)、TimingNo.4の音符No.4が読み出され(ステップ64)、拍グループへ追加される(ステップ66)。音符No.4は、ステップ67においては、音符で連桁があり、小節内最後の音符の場合以外の場合に該当し、後のタイミングに同じ連桁の音符があるので(B)の条件でステップ63の処理へ移行する。
【0050】
TimingNo.インデックスを更新し(ステップ63)、TimingNo.5の音符No.5が読み出され(ステップ64)、拍グループへ追加される(ステップ66)。音符No.5は、ステップ67においては、音符で連桁があり、小節内最後の音符の場合以外の場合に該当し、後のタイミングに同じ連桁の音符がないので(C)の条件に当てはまり、グループ化が完了する。
次に、拍グループの演奏時間(小節演奏時間計算手段を使用)を算出する(ステップ68)。この場合、16分音符が3個であるので、360Tick となる。
続いて、算出された拍グループの演奏時間(360Tick)と基準時間(この楽譜の場合は4/4拍子なので1拍は4分音符となり480Tick)とを比較する(ステップ69)。この拍グループでは、演奏時間と基準時間とが等しくないので、ステップ71に移行する。
【0051】
ステップ71では、拍グループの演奏時間(360Tick)が基準時間(480Tick)より短いかを判断し、演奏時間が基準時間より短い場合には、短い場合の処理が行われる(ステップ72)。
【0052】
ステップ72では、拍グループの演奏時間が8分音符(240)になる場合の処理を行う。
本実施例では、楽曲で良く用いられる16分音符の3連符の場合について説明する。ここでは以下のような条件ごとに処理を行う。
(P)拍グループ内の音符数が3の場合
8分音符処理フラグを反転させる。
連符化処理を行い(ステップ73)、拍グループの初期化を行い(ステップ74)、ステップ63へ移行する。ステップ73における連符化処理の詳細手順は後述する。
(Q)拍グループ内の音符数が2であり、演奏時間が8分音符に等しい場合
8分音符処理フラグを反転させる。
拍グループ初期化の処理を行い(ステップ75)、ステップ63へ移行する。
(R)拍グループ内の音符数が1であり、その音符が8分音符であり、8分音符処理フラグが真である場合
8分音符処理フラグを偽にする。
拍グループ初期化処理を行い(ステップ75)、ステップ63へ移行する。
(S)(P)〜(R)のどれにも当てはまらない場合
拍グループ初期化処理を行うことなくステップ63へ移行し、拍グループへ次の音符を追加する。
本実施例では、16分音符が3つの場合について述べたが、32分音符が5つ又は7つの場合、64音符が10個の場合なども同様の処理が行われる。
【0053】
ステップ72における8分音符処理フラグの処理は、
図15のX、Yなどのように、連桁の後の単独の8分
休符を、拍グループとして成立させるためのものである。
【0054】
今回(
図13の楽譜における音符No.3,4,5)の場合は、上述の(P)の条件(音符数が3)に当てはまるため、8分音符処理フラグを反転し(この場合は偽)、連符化処理を行い(ステップ73)、拍グループの初期化を行い(ステップ74)、ステップ63に移行する。
【0055】
音価修正手段404により連符化処理を行うステップ73では、グルーピングされた音符のGateTimeの変更(連符化)を以下の手順で行う。
【0056】
先ず、拍グループ内の連続した同一のGateTimeの音符を連符グループとしてまとめる。
【0057】
連符グループの音符数に応じて、連符の全ての音符の合計GateTime値を以下の様に設定する。
音符数が3→連符グループの音符のGateTimeの2倍
音符数が5〜7→連符グループの音符のGateTimeの4倍
音符数が9〜15→連符グループの音符のGateTimeの8倍
音符数が17〜31→連符グループの音符のGateTimeの16倍
なお、音符数が2、4、8,16の場合は、通常の音符(連符でない音符)で音価を表現可能であるので、連符化処理からは除かれる。
【0058】
また、6/8拍子などの3連系の場合は、連符の全ての音符の合計GateTime値を以下の様に設定する。
音符数が2→連符グループの音符のGateTimeの1倍
音符数が4〜5→連符グループの音符のGateTimeの2倍
音符数が7〜11→連符グループの音符のGateTimeの4倍
音符数が12〜23→連符グループの音符のGateTimeの8倍
音符数が25〜47→連符グループの音符のGateTimeの16倍
6/8拍子などの3連系の場合、音符数が3、6、9、24の場合は通常の音符(連符でない音符)で音価を表現可能であるので、連符化処理からは除かれる。
【0059】
連符グループの音符のGateTimeを下記の式で計算する。
連符グループの最後以外の音符は、式(2)で算出する。
GateTime=合計GateTime÷連符数 式(2)
連符グループ最後の音符は、式(3)で算出する。
GateTime=合計GateTime−(合計GateTime÷連符数)×(連符数−1) 式(3)
最後の音符のみ式(3)で算出するのは、連符グループを構成する音符数で合計GateTimeが割りきれない場合に対処するためである。
【0060】
今回の場合は、音符No.3〜音符No.5が連符グループにまとめられ、連符化される。
すなわち、音符No.3〜音符No.5は16分音符なので、連符グループのGateTime(変換前)は120となり、合計GateTimeは、音符数が3であるので上述の算出方法により、連符グループの音符のGateTimeの2倍の240となる。また、変更後のそれぞれの音符のGateTimeは、式(2)及び(3)から80となる。
連符化処理が行われた後は、拍グループの初期化を行い(ステップ74)、ステップ63へ移行し、次の音符についての処理を行う。
【0061】
これまでの手順と同様に、音符No.6と音符No.7が読み出され(ステップ64)、拍グループに登録される(ステップ66)。
グルーピング完了(ステップ67)の後、ステップ68で拍グループの演奏時間を計算する(小節演奏時間計算手段を使用)。この場合は、拍グループは16分音符が2個であるので240となる。
拍グループの演奏時間(240)は、基準時間(480)より短いためステップ72の処理に移行する(ステップ71)。
短い場合の処理(ステップ72)では、上述の(Q)の条件(拍グループ内の音符数が2であり、演奏時間が8分音符に等しい)に当てはまるので、連符化を行うことなく、拍グループを初期化して(ステップ75)、ステップ63の処理へ移行する。
【0062】
次に、音符No.8と音符No.16が読み出される(ステップ64)。ステップ65で音符No.8が選択され、ステップ66で拍グループに追加される。
ステップ67では条件(B)なので、ステップ63の処理に移行し次の音符を読み出す。
【0063】
音符No.9が読み出され(ステップ64)、拍グループに追加される(ステップ66)。ステップ67では条件(G)なので、ステップ63に移行し次の音符を読み出す。
【0064】
音符No.10が読み出され(ステップ64)、拍グループに追加される(ステップ66)。ステップ67では条件(C)なのでグループ化を終了する。
ステップ68で拍グループの演奏時間を計算する。この場合は240×3で720となる。
演奏時間と基準時間を比較し、等しくないのでステップ71へ移行する(ステップ69)。
ステップ71で、演奏時間(720)と基準時間(480)を比較し、演奏時間が基準時間より長いのでステップ76へ移行する。
ステップ76では、拍グループに基準時間(4分音符)より長い音符があるか調べる。この場合は無いので連符化処理を行う(ステップ73)。
【0065】
連符化処理(ステップ73)では、音符No.8〜音符No.10が連符グループとしてまとめられる。連符グループの内の音符は8分音符なので、合計GateTimeは、音符数が3の場合で8分音符(240)の2倍の480となり、
連符グループの各音符のGateTimeは式(2)及び式(3)から160となる。連符化処理が終わると、拍グループの初期化を行い(ステップ74)、ステップ63へ戻る。
【0066】
音符No.11が読み出され(ステップ64)、拍グループに追加される(ステップ66)。
ステップ67では、条件(D)によりグループ化を完了し、ステップ68で拍グループの演奏時間を算出する。今回、演奏時間は240となる。
ステップ69で演奏時間(240)と基準時間(480)を比較し、等しくないのでステップ71へ移行する。
ステップ71では、演奏時間(240)と基準時間(480)を比較し、演奏時間が基準時間より短いのでステップ72へ移行して短い場合の処理を行う。
ステップ72では、上述の(S)の条件((P)〜(R)のどれにも当てはまらない)に該当するので、ステップ63へ移行する。
【0067】
音符No.12が読み出され(ステップ64)、拍グループに追加する(ステップ66)。ステップ67では条件(F)によりグループ化が完了する。
ステップ68で拍グループの演奏時間を算出する。この場合、演奏時間は480となる。
ステップ69で拍グループの演奏時間(480)と基準時間(480)を比較し、演奏時間と基準時間が等しいので拍グループを初期化して(ステップ70)、ステップ63へ移行する。
【0068】
ステップ63では、
図13の楽譜における全てのTimingNo.(No.1~12)の処理が完了したので処理を終了する。連符化処理を行うことで、
図13の楽譜に連符番号を正しく表記した場合は
図16のようになることがわかる。
【0069】
また、
図12のフローチャートにおけるステップ81及びステップ82は、
図15のZのような楽譜(付点音符)に対応するためである。
拍グループに付点4分音符が読み込まれた場合は、付点4分音符の演奏時間は4分音符の1.5倍の720となる。演奏時間(720)は基準時間(480)より長いためステップ71からステップ76に移行する。ステップ76では、基準時間(480)より長い音符(720)があるので、ステップ81へ移行する。
【0070】
ステップ81では、演奏時間(720)と基準時間(480)を比較し、2倍ではないのでステップ82へ移行する。
ステップ82では演奏時間(720)と基準時間(480)を比較し、演奏時間(720)が基準時間(480)の2倍未満であるのでステップ63へ移行し、TimingNo.を更新する。
ステップ64で次の8分音符を読み、拍グループに追加する。
ステップ67では条件(D)なのでグループ化を完了し、ステップ68で演奏時間を算出する。この場合、演奏時間は、960(720+240)となる。
ステップ69〜ステップ81により、演奏時間(960)が基準時間(480)の2倍であるので、ステップ81からステップ70に移行し、最終的には連符化を行わずに処理を終える。
【0071】
上述した連符化処理によれば、以下の(1)〜(3)の場合にグルーピングされた音符の音価を変更する連符化処理が行われる。
(1)グルーピングされた音符の演奏時間が1拍分の基準時間より長い場合でグループ内に基準時間より長い音符がない場合(ステップ76でNoの場合)
(2)グルーピングされた音符の演奏時間が1拍分の基準時間より短い場合でグループ内の音符数が3である場合(ステップ72で条件(P)を満足する時)
(3)グルーピングされた音符に基準時間より長い音符がある場合で演奏時間が基準時間の2倍を超える場合(ステップ82でNoの場合)
したがって、グルーピングされた音符に対して、その演奏時間が1拍分の基準時間に等しい場合を除いて、演奏時間が基準時間に対して短い場合及び長い場合の両方について、連桁でつながった複数の音符(グルーピングされた音符)の連符推定を行って正しい音価に処理することができる。その際、音符をグルーピングすることで、3連符、5連符、7連符、10連符などあらゆる連符に対応して処理することができる。