Google Colaboratory上でmusic21を利用


はじめに

Jupyter上で楽譜が表示できると聞いて、music21というパッケージを試してみた。
Google Colaboratory上で表示させるのに手間取ったので備忘録として残しておく。

インストール方法

X virtual framebufferを以下のコードのように設定をすることで、Colaboratory上でも楽譜が表示されるようになる。

setup.py
# music21のインストール(Jupyterと共通)
!pip install --upgrade music21
!apt-get install musescore
# 仮想フレームバッファの設定(Google Colaboratoryで必要な設定)
!apt-get install xvfb
!sh -e /etc/init.d/x11-common start
import os
os.putenv('DISPLAY', ':99.0')
!start-stop-daemon --start --pidfile /var/run/xvfb.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset
# パスの設定(Jupyterと共通)
from music21 import *
us = environment.UserSettings()
us['musescoreDirectPNGPath'] = '/usr/bin/mscore'
us['musicxmlPath'] = '/usr/bin/mscore'
us['directoryScratch'] = '/tmp'

実行結果

『カエルの歌』の楽譜などを表示してみた。

plot.py
#TinyNotation記法による『カエルの歌』
cp = converter.parse('tinyNotation: 4/4 c4 d4 e4 f4 e4 d4 c4 r e4 f4 g4 a4 g4 f4 e4 r c4 r c4 r c4 r c4 r c8 c8 d8 d8 e8 e8 f8 f8 e4 d4 c4 r')
#楽譜の表示
cp.show()
#ピアノロール式表示
cp.plot()
#ヒストグラム表示
cp.plot('histogram', 'pitch')

楽譜の表示

ピアノロール式の表示

ヒストグラムの表示

課題

MIDI再生がうまくいかない。
Web Audio APIと紐付けるか、ローカルマシンのデバイスが利用できれば聞こえるはず、時間のあるときにでも検証したい。

play.py
#リファレンス上は下記のコードで再生されはず...
cp.show('midi')

誰か分かる人がいたらぜひ教えて下さい。