教育コース生 武田晴登
本年度(平成15年度)の7月から、戦略ソフトウェア創造人材要請プログラムに認
識行動システム分野からの教育生として参加しました。ここでは、参加時点から
本年度末(平成16年3月)に至るまでの活動について報告します。(ただし、9,10月
は欠席しました。)
私は、音楽情報処理においてリズム認識と呼ばれる分野での研究を行っています。そこで、研究を行っているリズム認識手法を用いたソフトウェアを作りたいと思い、このプログラムに参加しました。リズム認識手法は、自動採譜、自動伴奏、演奏解析、音楽情報検索など、様々な音楽情報処理の場面で必要とされ、その応用も広いのですが、今回は、MIDI演奏データからの自動採譜を目標にすることにしました。
現在、MIDI演奏データを楽譜に変換するには、Finale等の市販の楽譜作成ソフト
の「量子化」(quantize)機能を用いるのが一般的で、通常、以下のような手順を
とります。
- 演奏者はこれから演奏する曲の拍子とテンポを演奏前に定め、そのテンポと拍子をメトロノームを鳴らす。
- 演奏者はメトロノームに合わせて演奏する。メトロノームでは、小節の開始も指定し、弱起などがある場合は、これに合わせて演奏する。
- 演奏者は楽譜に表われる最も細かい音符(分解能と呼ばれる)を指定して、音長を音符に変換し、楽譜を得る。
このように、現状の実用的な自動採譜技術としては、対象とする演奏は、楽譜に
変換することを意図した注意深く演奏されたものに限り、演奏者が楽譜化するこ
とを意図せずに演奏したものを楽譜化することはできません。
これに対して、研究で提案した連続音声認識手法を用いたリズム認識手法を用い
れば、原理的に以下のような自動採譜が可能になります。
- 演奏者は自由なテンポで演奏して良く、メトロノームなどに会わせ演奏する必要がない。
- 演奏者は小節線の位置や弱起などの拍節に関する情報を手作業で指定する必要がない。
- 演奏者は拍子(3/4,4/4)を指定する必要がない。
これにより、既存の演奏MIDIデータや、プロの演奏家や作曲家あるいは音楽愛好家などの演奏MIDIデータを採譜するソフトウェアを作ることを目指します。
音声認識とリズム認識は、同型の問題として扱うことができます。実際、音声認識が人間の発声の短時間フレームのスペクトル形状の時系列から単語列を推定する問題であるならば、リズム認識は演奏者の演奏に含まれる各音の長さの時系列からリズムパターンを推定する問題です。音声認識手法を用いたリズム認識手法は、以下の点が特徴となります。
- 音長の変動やリズムパターンの出現を確率的に扱う確率モデルを使用
- 確率モデルのパラメータは楽譜や演奏を用いた統計的学習が可能
- 事後確率最大推定を行うための効率的な探索アルゴリズムが存在
どのようなリズムパターンが表れやすいか、人間はそれぞれのリズムパターンをどのように演奏するかを統計的に学習した確率モデルを事前に用意し、与えられた演奏に対して、事前に学習したリズムの中で最も確率の高いリズムパターンを探します。確率モデルとしては、音の長さを出力信号とする隠れマルコフモデル(HMM, Hidden Markov Model)と、リズムパターンについてのn-gram モデルを使用します。このようなモデルを用いたリズム認識手法は、計算機上ではHMM ネットワークの探索問題として実装されます。

実際に仕様書を作成し、ソフトウェアの仕様概要を以下のよう
に定めました。(まだ開発途中で、ソフトウェアは完成していません。)
- 機能概要
人間の音楽演奏を記録したMIDIデータを、楽譜に自動変換します。
- 単旋律だけでなく、多重音を含む演奏にも対応しています。
- 電子ピアノやMIDIキーボードなどの鍵盤楽器で演奏したものを対象としていますが、音響信号をMIDIデータに変換したものについても使用できます。
- 仕様概要
入出力
- 入力 format 0で記録されたSMF(Standard MIDI file)
- abc musical notation language で楽譜情報記述されたファイル
- 提供形態
Xが使用可能なLinux, Macintosh, Windows/cygwin で動作する
GUI(Graphical User Interface)を備えたソフトウェア
楽譜情報を記述するデータフォーマットとして、世界で標準
的に用いられているものは現在ありません。abc musical
notationlanguageは、楽譜情報を直接textデータとして編集でき、他のフォー
マットであるLilypondやMusicTexに比べ
て記述方法が分りやすく、また、Recordare Muxic XML や WEDELMUSIC XML Notation などのXML形式の楽譜データフォーマットに比べて記述力は落ちるが、目指すソフトウェアで必要とされている基本的な楽譜情報を記述するの現時点では問題がないと考えました。
開発環境はLinuxで、C言語を用いています。GUIを提供するため
に、GTKライブラリを使用しています。
ソフトウェアとしては、プロ芋グラムが使いやすいGUIを備え、また、処理が実時間で動作する必要があります。
ソフトウェアの中心となるリズム認識の性能を評価するために、クラシックのピアノ作品を電子ピアノで演奏し、演奏曲の楽譜のリズム譜をどの程度復元できるかで評価を行いました。クラシック音楽3 曲のMIDI演奏に対してclosedデータで学習したモデルで92.3%, openデータで学習したモデルで77.5% の音価推定率を得ました。
インターフェイスとしては、以下の操作をマウスで行えるようにGUIを試作しました。
- 演奏データの入力(SLGファイル、SMFをテキストデータに変換したもの)
- HMMの指定
- リズムパターンの文法モデルの指定
- テンポトラッキングのパラメータ (テンポ変動の分散値)
- 探索で求める仮説数 (求める上位候補数)
- 探索範囲 (最大小節数)
- 認識結果のリズム譜を abc形式の楽譜データで保存
実際に使用してみると、演奏データ、HMMデータ、リズム文法データの3つもファイルを指定するのが面倒であるなど、インターフェイスの改良の余地は多いにあることが分かりました。試作版は、Vine Linux, Red HatLinux, Mac OSX 上での動作を確認しました。
実時間でリズム認識を行うために、提案モデルにおいて効率的な探索方法についても検討しました。基本的な考え方は、Viterbi 符号化アルゴリズムにように無駄な重複する経路の計算を省略し、A*サーチのように見込のない仮説を切り捨てるという2つに基づいて探索を行おうというものです。
現在の開発途上のソフトウェアに、効率的な探索方法の実装、認識結果の楽譜への変換機能を加え、仕様を最低限満たすプログラムを完成させ、その後、様々な機能を追加させてソフトウェアを充実したものにしたいと考えています。
|