未来回帰線招致委員会

好きなアニメは祝福のカンパネラです

保有音源データベースを作ってみた

初めましての方は初めまして、そうでない方はこんにちは。☝ねいけい☝ (@nvs_nk) | Twitterです。近況ですが、休日出勤の振り替え休日を利用して、土日祝日のアクセスが困難なラーメン二郎へ訪問しています。無限に暇な学生時代かニート時代に行っておくべきでしたね。

 

さて、普段アニメやオタクソングの感想を垂れ流すだけと化している本ブログですが、たまには少しは実用的なことも書いていきたいと思います。

私のTwitterを見ている方はご存じかもしれませんが、実はわたくし素人ながらもアニソンDJの方を少々嗜んでおりまして、mixを投稿したりイベントに出演させて頂いたりなど、社会を片手間に細々と活動しております。

学生時代のアニクラ通いが高じた結果ですが、社会に放逐されてもこうしてアニクラに関われるのは嬉しい限りですね。

 

ところで、こうしたDJ活動をするにあたりなんといっても欠かせないのは、音源です。

学生時代から音源コレクターのケがあった私は様々なオタクソング音源をコツコツ蒐集してきましたが、その入手経路の大部分はレンタルビデオ店からのレンタルに依存しています。

んで、今でもシブツタでアルバム半額キャンペーンとかがあると新譜をドサっと借りに行くわけです。

こうした中、こういうシチュエーションによく遭遇します。

 


「おっ、これ欲しかった音源じゃーん!借りとこ借りとこ!」

 

「ふう、今日もいっぱい取り込んだな、これをHDDに移し替えて……」

 

「…このCD、もう借りてたわ・・・」

 

はい。よくあるやらかしですね。私たぶんこれで数千円、下手したら万単位で損してます。一番よくやるのは、プリコネのキャラソン\をいくつまで借りたか忘れてダブって借りるパターンです。気が付かないうちにCD何枚も出てるし……。あ、ちなみに今この文章を書きながら借りてきたCDを取り込んでいるのですが、今回はシングルの重複借用が3件発生しました。これだけで約450円の欠損です。

 

だってよ!!!!あんなに大量に借りといてさ、細かく覚えてられるわけねえよ!!!

人間の脳は貧弱に出来ているため、そんなデータベースみたいな運用はできません。

 

ん?

 

データベース作ればいいんじゃね???

 

というわけでデータベース(曲目録)を作ることにしました。

 

どうやって作るか

さて作る決意をしたはいいものの、どうやって作るのが良いか。

以前私の先輩(オタク。コミケで毎回凄まじい量の同人誌を買う。)が同人誌の目録を作成しようと思い立って、あまりにも膨大な量を前にして泣きそうになっていたという話を聞きました。手動で作成するのは現実的ではありません。

 

いろいろ考えた結果、

  1. 楽曲のタグデータを.csvとかで出力する
  2. 出力されたデータをGoogleドライブとかのクラウドサービスにアップロード
  3. スマホからドライブにアクセスして中を参照する

 

という方法を取ることにしました。

レンタルビデオ店の中でスマホを操作して「なんだこの曲もう借りてるぢゃ~んw」と言えるようになるまでが最終目標です。

 

ちなみに、わざわざ自力でデータベースを作成しなくても、自分の所持している音源の目録をスマホ上で確認する手段を持っている方は、ここから先の文字を読む必要はありません。というかAndroidスマホとWindowsPCでできる方法を知っている方がいらっしゃったら、☝ねいけい☝ (@nvs_nk) | Twitterまでご連絡ください。多分そっちのほうが遥かに楽なので、大真面目に知りたいです……。

 

楽曲のタグデータを出力する

そもそもタグデータとはなんぞや。


f:id:nvs_nk:20210127113244p:plain

先日プレイしたゲーム「ATRI -My Dear Moment-」が死ぬほど面白くてアトリちゃんがかわいかったため、今回の解説にはATRIのサウンドトラックを使用します。


いわゆるタグデータとは、楽曲ファイルの内部に埋め込まれているメタデータのことです。

上図ではトラックNo.、タイトル、アルバム、アーティストしか表示されていませんが、この場で見えていないだけで実にさまざまな情報が埋め込まれています。このへん調べると結構面白いので興味ある方はググってみてくださいな。

iTunesやrekordbox、その他あらゆる音楽系ソフトは、だいたいここのデータを参照して曲名やアルバム名などといった情報を取得していると思われます。音源整理をする上で生命線と言っても過言ではないデータです。

ちなみに一番左列の赤枠の外の部分は、純粋に「ファイル名」なのでタグデータではありません。極論、ここの名前がグチャグチャになっててもタグデータがしっかりしていれば、iTunes上の曲名表示は特に問題ない。と思います、たぶん。

 

さて、このタグデータを楽曲から抽出し、後々Excelに張り付けやすいような形で出力したいのですが、どうすればよいか。

 

これも何個か方法を吟味してみたのですが、結論から言えば

MediaMonkeyを使用する方法

が私のやりたいことに一番マッチしていました。なので、この方法を解説していきたいと思います。

forest.watch.impress.co.jp

MediaMonkeyとは、フリーの音楽プレーヤーソフトです。ライブラリの管理機能だったり、CDのリッピング機能だったり、いろいろなことができる総合的なソフトですね。

このMediaMonkeyの特徴的なところは、外部で作成した追加スクリプトを読み込んで機能を拡張できるという点です。ここ重要なので覚えておいてください。

 

早速MediaMonkeyをインストールしていきましょう。

www.mediamonkey.com

インストールが終わったら、次に拡張スクリプトをDLします。

https://www.riklewis.com/mediamonkey/search.php?all=scripts

f:id:nvs_nk:20210127132410p:plain

リンク先に飛んでしばらく下にスクロールしていくと、「Custom Report 3.2」というのがダウンロードできるので、これを落とします。

「CustomReport32.mmip」という怪しげなファイルがダウンロードされます。見たこともない拡張子ですが、動作は.exeファイルと同じなので、これをダブルクリックしてインストールします。

 

今これ何をしたかというと、MediaMonkeyの標準機能に加え、楽曲メタデータの出力形式・出力するデータ等を自由にカスタムできる機能を追加しました。

これ、自由度がもんんんのすごく高いです。どこの国のどなたか存じ上げませんが、作ってくださったtrixmotoさん本当にありがとうございます……。

 

改めてMedia Monkeyを立ち上げ、ソフト上から音源を保管しているファイルへアクセスします。

f:id:nvs_nk:20210127135230p:plain

画面上に楽曲データから取得したメタデータが表示されます。先ほども言いましたがメタデータってこんなにたくさんあるんです。ちなみにジャンルの部分は私が整理をサボっているため完全に適当です……。

 

f:id:nvs_nk:20210127135735p:plain

全選択をし、「レポートの作成」から出力ができます。下のほうに「Custom Report…」ってやつがありますが、これが先ほど追加されたやつです。

f:id:nvs_nk:20210127140040p:plain

こんなのが出てきます。黒塗りしてるのは私のHDDのファイルパスです。もちろんここで出力先を自由に設定できます。フォーマットも今はCSVにしていますが、なんかhtml形式に出力してそのままブログに貼り付け、なんてこともできるみたいです。

Columnsの列で抜き出したいデータの対象を、Orderの列で出力する順番を指定できます。

f:id:nvs_nk:20210127140450p:plain

これがまぁすんごい盛りだくさん。そんなデータどこで使うんや!?!?!?なんてのもあります。メタデータすっげえ…。

とりあえず私は「タイトル」「アーティスト」「アルバム」「トラックNo.」「BPM」「ビットレート(音質)」を出力するよう設定しました。この設定は下のほうにある「Save」ボタンで保存しておいたほうがいいと思います。

 

さて、「OK」ボタンを押していざ出力!

ちなみに出力先に同じ名前のファイルがあると上書きされてしまうので、事前にどけるなりファイル名を変えるなりして対策しましょう。

出力されたCSVファイルを開くと、こんな感じになります。

f:id:nvs_nk:20210127143659p:plain

各セルに情報が出ていますね。

これにて出力フェーズは完了です!

 

出力されたファイルをドライブにアップロードする

これもいろいろ考えたのですが、googleスプレッドシートが使えるGoogleドライブが一番わかりやすいかな、ということでGoogleドライブにアップロードしました。

他人に共有してるフォルダにアップしないように気を付けてください。

f:id:nvs_nk:20210127152459p:plain

PC側からのアップロードが済んだら今度はスマホ側です。

事前にGoogleドライブやGoogleスプレッドシートのアプリをインストールしておきましょう。

 

スマホからファイルを開き中を参照する

f:id:nvs_nk:20210127153131j:plain

スマホからGoogleドライブにアクセスしファイルを開くと、こんな感じに見えます。見切れていますが、BPMビットレートなどの情報もきちんとあります。
あとはレンタルビデオ店に行き、目の前にあるCDのタイトルで文字列検索して、既に持っているかどうかチェックするだけです!

 

番外編:出力されたファイルを整形する 

さて、ここからは番外編です。上記の通り生のCSVファイルでも目録として十分使えるんですが、なんというか、見づらいですよね。整形したくなりますよね。

また、例えば後から追加で借りてきたCDを目録に加えたいって時に、そのたんびに所持ファイル全体をスキャンして出力し直すのは面倒ですよね。

なので私は、既にある目録を「MasterDB.xlsx」と呼称し、追加分をそこにコピペして、さらに形を整えていく、という風にしました。

よし、コピペコピペ。延々とコピペ。手動でペタペタ。いわゆるエクペタってやつですね(違う)。

 

はい、面倒になったので自動化します。

 

Excelくんってものすごくて、お願いの方法さえ正しければ、たくさんのことを自動でやってくれるんですね。実はタグデータの出力形式を.csvで指定したのも、ここの自動化の部分でいろいろ融通が利くからだったりします。

 

私立文系既卒無職キモオタクだった私も紆余曲折を経て会社に拾われることになったわけですが、その縁あってExcelマクロやVBA(マクロを動作させるための言語)に触れる機会ができました。

そもそも今回データベース作ってみたいと思ったのも、重複レンタルによる欠損をこれ以上したくないのもありますが、今の自分でどこまでできるかの腕試しをしてみたいと思ったからでもあります。

その道本業の方からすれば拙すぎて目も当てられないような代物に映るかもしれませんが、その場合はどこが不味いのかを指摘して頂けると嬉しいです。

 

運用方針

まず、データベースとマクロを分離するか一緒にするか考えました。

私は現在約12000曲の楽曲音源を所持しています。その全ての楽曲データを抜くとなると、テキストデータだけでもそれなりのデータ量になるかと思われます。

これをマクロと一緒にするのは少し怖いな……。

また、Googleスプレッドシートにおけるマクロ作成言語は、GAS(Google Apps Script)というものが使われているらしいです。私は今回VBAを使うつもりなので、作ったファイルが互換性の担保が無いアップロード先で変なことになっても嫌だな、と思いました。

 

というわけで、

  1. 整形元となる.csvファイルを用意する。
  2. マクロ.xlsmファイル(マクロしか搭載しない)を作動させ、整形済みデータベースファイル(以後MasterDB.xlsxと呼称する)を生成する。
  3. MasterDB.xlsxGoogleドライブにアップロードする(手動)。

 

という方針で運用することにしました。

本当はアップロードまで自動でやりたかったんですが、なんかまた時間かかりそうなので別の機会にします。↓後でこれ読む。

admarimoin.hatenablog.com

 

というわけでマクロには整形済ファイルの生成だけやってもらいます。

 

作ってみた

せ~ので、やってみた!(桃山みらい)

最終的にフォルダの中はこのような構成になりました。

f:id:nvs_nk:20210127182032p:plain

CustomReport.csvはMediaMonkeyから出力されてくる生のリストです。生成ごとに中身が上書きされる前提で置いておきます。

DB.xlsmが、今回書いたマクロです。

MasterDB.xlsxは、整形済みのアップロード用リストです。

マクロ実行.vbsは後で説明します。

 

気になるマクロの中身ですが、こんな感じに書きました。

Option Explicit

Sub attach()
    Dim OpenFileName As String
    Dim SourceFile As Object
    Dim TargetFile As Object
    Dim TargetFilePath As String
        TargetFilePath = "ファイルのある場所\MasterDB.xlsx" 
'マスターファイルの場所ごとに書き換える
    Dim StartRange As String
    Dim PasteRange As String
    
    ChDir ThisWorkbook.Path
    OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.csv?") 
'本マクロが置いてあるフォルダを起点にファイル選択画面を開く(.csv限定)
    
    If OpenFileName <> "False" Then
        Set SourceFile = Workbooks.Open(OpenFileName) 
'元となるCSVファイルのパスを取得して開く
            If SourceFile.Worksheets("CustomReport").Range("A1") = "" Then
                StartRange = "A" & SourceFile.Worksheets("CustomReport").Range("A1").End(xlDown).Row  
'A1セルが空白だった場合、値が入り始めるセルを取得してそこを起点とする
    
            Else
                StartRange = "A1"
            End If
        
        SourceFile.Worksheets("CustomReport").Range(StartRange).CurrentRegion.Copy 
'起点セルの所属している、値のあるセル群をまとめて選択
   
        Set TargetFile = Workbooks.Open(TargetFilePath)
            PasteRange = "A" & TargetFile.Worksheets("Sheet1").Range("A1").End(xlDown).Row + 1
            TargetFile.Worksheets("Sheet1").Range(PasteRange).PasteSpecial xlPasteValues 
'値のみ貼り付け
        
        Application.CutCopyMode = False  
'コピー切り取りを解除
        
        TargetFile.Worksheets("Sheet1").Range("A:F").EntireColumn.AutoFit 'セルの幅を調整
        TargetFile.Worksheets("Sheet1").Range("A1").Select 'セルの選択を定位置に戻す
        
        TargetFile.Close SaveChanges:=True '変更がある場合、保存して閉じる
        SourceFile.Close
        
        
        Dim FSO As Object
        Dim BackUpPath As String
            BackUpPath = "ファイルのある場所\Backup\"
'マスターファイルの場所ごとに書き換える
        Dim BackUpFile As String
            BackUpFile = BackUpPath & "MasterDB.xlsx"
        Set FSO = CreateObject("Scripting.FileSystemObject")
            FSO.CopyFile TargetFilePath, BackUpPath
'バックアップフォルダにコピーする
            FSO.GetFile(BackUpFile).Name = "MasterDB_" & Replace(Date, "/", "") & Replace(Time, ":", "") & ".xlsx"
'バックアップファイルをリネームする
        Set FSO = Nothing
        
        MsgBox "完了"
    End If
End Sub

ざっくり何をやっているかというと

  1. あらかじめ使用する変数と書き込み先の住所を宣言する
  2. ファイル選択画面を開き、取り込みたい.csvファイルを選択する
  3. .csvファイルの中の、値のある部分をコピー
  4. MasterDB.xlsxにペースト
  5. セルの幅をいい感じにする
  6. 保存して閉じる
  7. 出来上がったMasterDB.xlsxをバックアップフォルダにコピーし、生成時刻をファイル名に付け加える

 

やっていること自体はとても単純です。

 

今回は実装しませんでしたが、リスト内で重複している部分を自動で削除とかもやっていきたいです。チャレンジは続く。

 

さて、マクロを作成したはいいですが、これを起動するには

DB.xlsmを開く→ボタンを押してマクロ起動

の2手順が必要になります。

 

めんどくさいですね?

 

というわけでダブルクリック1回だけでマクロ起動できるように、マクロ起動用のvbsファイルを作成しました。

中身は以下のページを参考にさせて頂いたので割愛。

extan.jp

 

個人的な意見ですが、RTA動画が好きな人はこういうの向いていると思います。

 

おわりに

この記事を活用して、少しでもCDの重複レンタル事故を減らすことができれば幸いです。

 

あ、みんなATRIやろうね。マジでいいゲームだから。

atri-mdm.com

 

参考文献

アニプレックス「ATRI -My Dear Moments- Original Soundtrack」

MediaMonkey (https://www.mediamonkey.com/)

RIK LEWIS (https://www.riklewis.com/)

Office TANAKA (http://officetanaka.net/)

My Record (https://kosapi.com/)

エクセルの神髄 鵜原パソコンソフト研究所(https://excel-ubara.com/)

エク短 (https://extan.jp/)

yahoo知恵袋(https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13154710338)

free(malloc(sizeof(MRM))); (https://admarimoin.hatenablog.com/)

 

追記

早速持ってる音源全部ツールにかけたところ、エラー吐きました。あまりにも大きい範囲のコピペはうまくいかないみたいです。小分けがいいのかなぁ…… 

対処考えてみます。