はじめに
株式会社ジークス 3年目の竹村です。
今回は仕事とは少し外れて、MuseScoreのファイルの管理についての話題です。
私は学生の頃からJazzをやっており、時々、楽譜を書いたりしております。
作成はオープンソースのMuseScoreを使っているのですが、ファイルの管理には、いつからかGitHubを使用しております。
しかしながら、デフォルトのファイル形式が圧縮形式でバイナリファイルの.mscz形式で、非常にGitでは扱いづらいのです。
そこで今回、非圧縮形式に変更することとしました。
MuseScoreのファイルについて
下記のMuseScore公式を見ていただくと分かるのですが、MuseScoreの専用ファイル形式は2種類あります。
ディレクトリに.mscxファイルと関連ファイルをまとめて保管する方法、もう一つが、そのディレクトリをZipとして圧縮して一つの.mscz形式のファイルで扱う方法があります。
後者がデフォルトとなっております。
今回は、デフォルトの.msczから.mscxを使用した保存に変更する作業を行ってみます。
.mscxはXMLベースのファイルとなっており、テキストファイルということで差分が分かるんじゃないかと期待しております。
これまでに作成した.msczファイルの移行
まずはこれまでのファイルの移行作業が必要です。
やはりネックになるのが既存ファイルの変換。
Pythonを使用して、Zip形式を解凍してみようと思います。
流れとしては、下記の流れを想定しています。
- ディレクトリ内の「.msczファイル」のファイル名一覧を配列で取得
- 配列をループで回す
- 一つずつ解凍していく
Pythonの実装
簡単なものをサクッと作ってみました。
久しぶりのPythonでした。
最近はAIのコードサジェストが便利ですね!
プログラムを置いているディレクトリ内に存在する.msczファイルを取得し、それぞれ、ファイル名と同じディレクトリを作成してそこに解凍するという流れです。
今回、元の.msczファイルの削除は行っていません。
# カレントディレクトリ内に存在する.msczファイルを解凍するプログラム
import glob
import zipfile
# 定数
MSCZ_EXTENSION = '.mscz'
# msczファイルを解凍する関数
def unzip_mscz(file_path):
print('--------------------------------')
print(f'Unzipping: {file_path}')
dir_name = file_path.replace(MSCZ_EXTENSION, '')
with zipfile.ZipFile(file_path) as zip_ref:
zip_ref.extractall(dir_name)
print(f'Extracted to: {dir_name} directory')
# メインの動作部分
print('starting...')
# msczの拡張子を持つファイルのみを取得
mscz_files = glob.glob('*' + MSCZ_EXTENSION)
print('Found .mscz Files')
print(mscz_files)
# 各msczファイルを解凍
for mscz_file in mscz_files:
unzip_mscz(mscz_file)
print('--------------------------------')
print('All .mscz files have been unzipped.')
動作の確認
さて、実際に動かして確認してみました。
あらかじめgitをクローンしており、その中にプログラムのファイルや、.msczファイルを置いております。
今回は試しに、「Pensativa.mscz」、「Takarajima-Yucco_Miller_ver.mscz」を解凍して、開いてみました。
早速動作させた際のコンソールの表示はこんな感じです。
解凍したファイル名も表示するようにしています。

テキストファイルとはいえ、なんぼなんでも差分を読み解くのは難しいですね。
おわりに
今回は、.msczファイルから非圧縮形式である、.mscx形式に移行するに際してやってみたことをまとめてみました。
楽譜をGit管理すると、自宅PCや外で使っているノートPCなど、様々な環境からアクセスして編集することができてとても便利です。
この先は友人との共同編集なども考えていきたいですね。
最後に、記事内のキャプチャにて使用しているTerminal、Git Cliantアプリなどはこちらの記事で紹介しております。
とてもおすすめなので、こちらも併せてご覧ください!


