【音楽情報処理】Sonic Visualiserで音楽データのアノテーション 前編：Sonic visualiserの紹介

[Sonic visualiser](https://www.sonicvisualiser.org/)を用いてアノテーションを行う方法の個人的な備忘録と，ラボの後輩がアノテーションに困った時用のとっかかりの記事として．
全2記事，前編（本記事）ではSonic visualiserの紹介，後編ではアノテーションの具体的な手順について紹介する予定．

## アノテーション
音楽音源データの解析タスク（コード識別，メロディ検出，音楽構造解析，自動採譜etc...）を行うには，
**音源そのもの**と，**正解のラベル**が必要です．

その正解のラベルを1から作る方法として，アノテーションを行う必要があります．
音源に対してアノテーションを行う方法はいくつかあり，タスクによっても異なります．
特に，**アノテーションが系列データとなる場合**は，音源を聴いてラベルを対応する区間に対応づけることが必要となります．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493056/4e6a67a3-a43a-d811-9eb7-0261800c7bc3.png)
この図のような具合です．

多くの場合，いちいち耳で聴いてラベルをつけるのではなく，音を可視化するソフトウェアを使うことがほとんどです．
代表的なものには

- [Audacity](https://www.audacityteam.org/)
- [Praat](https://www.fon.hum.uva.nl/praat/)
- [WaveSurfer](https://wavesurfer-js.org/)
- [ELAN](https://archive.mpi.nl/tla/elan)

等があります．
上記のほとんどのソフトウェアで信号波形と，それを時間と周波数の2次元表現であるスペクトログラムを可視化することができます．
つまり，「見て」「聴く」アノテーションが可能になります．

特に，音楽情報処理研究の世界では，**Sonic Visualiser**というソフトウェアが用いられてきました．

### Sonic Visualiser
https://www.sonicvisualiser.org/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493056/6362a524-3198-e4d4-1339-d47db5ef5c45.png)

Sonic visualiserはQueen Mary University of Londonの[Centre for Digital Music](https://c4dm.eecs.qmul.ac.uk/)という，
世界でも有名な音楽情報処理の研究機関が開発した，
音楽の可視化，分析，アノテーションに特化したソフトウェアです．
Visuali **"z"**erではなく，Visuali **"s"**erなのがキモです．（なぜかは知らん．）

このSonic Visualiserが他のアノテーションツールよりも優れている点として，
1. 音楽分析に特化した様々な可視化・分析プラグイン（Vamp Plugin）
2. 多種多様な種類のアノテーションが可能
3. ラベルの可聴化機能
等があります．


### 音楽分析に特化した可視化・分析プラグイン
sonic visualiserは，まずスペクトログラムの可視化機能が優れています．
一番よく見かける（？）パワースペクトログラムに加え，
線形値への変更や，周波数軸上の振幅のピークを強調したスペクトログラムの可視化が可能です．
また，窓関数の窓幅（図中，window）や，縦軸のスケールの変更（Linear/Log），カラーマップの変更等も可能です．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493056/f32c631e-b23c-01b9-3e8f-57407fc8594e.png) 上：パワースペクトログラム 中：線形振幅スペクトログラム（窓幅1/4，対数周波数軸）， 下：ピーク強調したスペクトログラム（カラーテーマを白黒に変更）

アノテーションする対象によっては，**これらのパラメータの変更によりアノテーションの難易度を下げることができる**場合があります．（次回触れる予定．）

さらに[Vamp Plugin](https://www.vamp-plugins.org/)という独自の外部プラグインをダウンロードして利用することによって，さらに多様な音響特徴量を分析可能になります．

例えば，CQTスペクトログラムやクロマグラム，テンポグラム等の低次音響特徴量や，音高・コード等の系列の推定値を分析してくれます．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493056/fd6f6564-937c-f36a-3e1d-e71e725dd715.png)
上：パワースペクトログラム 中上：クロマグラム（各12半音の成分の強さ） 中下：CQTスペクトログラム 下：テンポグラム




### 多種多様なアノテーション
対応しているラベルは以下の通りです．

**Time instances**：時刻+イベント名．ビート・拍節の情報などのアノテーションに使う．
**Time values**：時刻+連続値．音高の情報などに使う．
**Notes**：音符．
**Regions**：区間．歌唱区間の情報などに使う．
**Boxes**：スペクトログラムのバウンダリーボックス．
**Texts**：テキスト．時系列でない情報等に使う．
**Images**：画像．

アノテーションしたい情報によって，このようにラベルの種類を使い分けることができます．
特によく使うのは Time instances, Time values, Notes, Regionでしょうか．
可視化した例を並べてみます．

Time instances -> ビートの情報（図中桃線）：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493056/8c1f652c-8894-0087-3ee1-ed9cf3e4ce61.png)


Time values -> メロディの音高（図中赤線）：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493056/0d831dac-c645-5c06-f473-321848f3162a.png)

Notes -> 音符（図中緑線）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493056/8b1ae11e-846c-ce37-436b-8ab0d6555f37.png)


Regions -> コード進行（図中青領域）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493056/10f8ce90-6501-2713-1540-fbda970e01e4.png)

これらのラベルはCSV，midi,txt等のファイルでエキスポート/インポートが可能です．


### ラベルの可聴化
さらに，Time Instances, Time Values, Notesに対してはラベルを**可聴化**することも可能です．
それぞれクリック音，サイン波，電子ピアノ音で可聴化できます．
ON/OFFの切り替えは図中のスピーカーのアイコンのボタンで行います．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493056/52704fd5-1554-bc4d-2470-dff6056b618d.png)

これによって，**見ながら＆聴きながらのアノテーション**が可能になります．

### 個人的に不満な点

##### 操作性に癖がある
**キーのショートカットがCommandキーやCtrlキーを押さないものが多く**，誤操作してしまうと面倒です．
たとえば，新しく波形を追加するのはwキーだけでできたり，;（セミコロン）キーを押した瞬間にTime instancesのラベリングモードが始まってしまう等です．
このような誤操作で新しい（要らない）分析をしてしまったり，アノテーションしていた部分から別の部分に飛んでいってしまうことが多々ありました．
また，**直感的でない操作も多い**です．
例えば，着目部分のズームイン・ズームアウトはマウス/トラックパッドの縦スクロールである（個人的にはピンチイン/アウトでズームしてほしい）とか，
任意部分の範囲選択がShiftキーを押しながらやらないといけない等です．（Shiftを押さないと次のアノテーションイベントがある部分まで範囲選択されてしまいます．）

##### ラベルの管理語設定がない
ELANにはある「管理語」がなく，いちいちラベルを手打ちしないといけません．
コードのアノテーションの場合だと「Cm」だの「Fm7」だのコード名をいちいち手打ちで入力しないといけません．人手で入力しているとミスも出やすいもので，ここは改善して欲しいなと思っています．

##### プラグインの拡張性に難がある
プラグインの自作はVamp PluginのSDKを通じて行うことができますが，C++かPython2でないとできません．
皆敬遠するのか，Vamp Pluginで分析手法は2010年ごろのものが中心です．
audacityは[学習したPyTorchのモデルで解析するツール](https://interactiveaudiolab.github.io/project/audacity.html)までできているので，Sonic visualiserも頑張って欲しいです．


### Sonic Visualiserはどんな人におすすめ？

- 音楽データ，特に音楽の系列データを扱っている人
- 通常の振幅スペクトログラムの可視化ではアノテーションがやりにくかった人
- ラベルの可聴化によるフィードバックで格段にラベルの精度が上がるタスクをやっている人

でしょうか．
逆に，個人的には，扱うデータが音声（人の声）データの場合はpraat，環境音データの場合はaudacityを使ったほうがいいと思います．
これらの場合だと，操作面の難をカバーする旨味がないような気がします．

つづきの記事では実際にいろんなアノテーションをやってみようと思います．


### 参考文献

Cannam, Chris, Christian Landone, and Mark Sandler. "Sonic visualiser: An open source application for viewing, analysing, and annotating music audio files." Proceedings of the 18th ACM international conference on Multimedia. 2010.

Cannam, Chris, et al. "Mirex 2015: Vamp plugins from the centre for digital music." Proceedings of the Music Information Retrieval Evaluation eXchange (MIREX) (2015).