らんだむ

PCとTVをオーディオケーブルで繋ぎ,アニメの主題歌や挿入歌をキャプチャし,歌詞を手打ちし,アーカイブするのが趣味?のはず?です.始めたのは恐らく23年前,高専に入学し,初めてのPCを買い,周りの連中の影響でアニヲタイズした頃です.現時点では約7600曲が溜まっています.

一覧をExcelファイルで管理しています.このExcelのマクロで,以下3種類のデータを更新・生成しています.

  • 歌詞HTML(ヘッダの曲名等を更新)やMP3へリンクするHTML(番組名等含む表形式)
  • コレクションしているリストのHTML(ホームページ掲載用)
  • PC操作中にBGMとしてランダム再生するプレイリスト

■プレイリスト生成ロジック改良

今回,プレイリスト生成のロジックを改良しようと思い立ちました.現在は,プレイリストに追加するかどうかを示すフラグの列を設け,そこが「O」になっているMP3ファイルのパスのみをプレイリストへ出力するようにしています.このフラグは,ホームページへ掲載するリストHTMLを更新するタイミングで,1年以上前の曲を「X」に変える運用にしています.これにより,直近1年の曲のみが再生されることになります.

アニソン管理ファイル
アニソン管理ファイル

しかし,たまにはもっと昔の曲と再会し,懐かしくなりたいなと.そこで,以下の要領でピックアップした曲をプレイリストへ出力したいと思います.

  • 直近6箇月は全て登録する.
  • それ以前は古いほど少なく,新しいほど多くなるような割合でランダムに採用する.
  • 全部で1000曲をプレイリストへ出力する.

■収録日の一覧化

そのためにはまず,収録日を一覧化する必要があります.大量なので,いちいち調べて手入力するのは非現実です.それだけで心折れちゃう.いろいろ思案した結果,MP3ファイルの最終更新日をピックアップすれば良いのではと.こんな単純なことに,なかなか思い至れませんでした.灯台下暗し.

マクロでの実装は簡単.最終更新日というか,ファイルの新しさが知りたいので,最古のデータを0とした月数を算出するようにしましょう.

Const AGE_ORIGIN As Integer = 2002 * 12 + 3
Dim fso As New FileSystemObject
Dim f   As File
Dim age As Integer
Set f = fso.GetFile("xxx.mp3")
age = Year(f.DateLastModified) * 12 + Month(f.DateLastModified) - AGE_ORIGIN

VBAがあまりに久しぶりすぎて,参照するライブラリ名「Microsoft Scripting Runtime」を思い出せませんでした.最古のデータは2002年3月で団子状になっていました.MP3なるものが出回り始めたこの頃,Wave(PCM)から一気にまとめて変換したんでした.これだとそれ以前の収録日情報が不正確になりますが,そこまでの精度は不要でしょう.

■加重ランダム採用

難しいのは,新しさに応じた重みでランダム抽出する方法です.VBAのRndメソッドが返す0以上1未満の乱数は,一様分布に従うものだと思います.これをどう活用するか.三つの方法を考えました.以下の5曲が候補に残っていて,そこから3曲を選ぶ例で説明したいと思います.

  • 曲A:月数1
  • 曲B:月数1
  • 曲C:月数2
  • 曲D:月数2
  • 曲E:月数4

■加重ランダム採用方法#1

最初に考えたのは,乱数を一つ算出し,それに対応する積算月数の曲を採用する,というのを繰り返す方法です.

月数積算月数採用条件採用率
A11Rnd*10<110%
B12 = 1+11≦Rnd*10<210%
C24 = 1+1+22≦Rnd*10<420%
D26 = 1+1+2+24≦Rnd*10<620%
E410 = 1+1+2+2+46≦Rnd*10<1040%

Rndメソッドの戻りが0.5だった場合,曲Cが採用されます.そして次の1曲は,以下の方法で採用されます.という風に繰り返す方法.

月数積算月数採用条件採用率
A11Rnd*8<112.5%
B12 = 1+11≦Rnd*8<212.5%
D24 = 1+1+22≦Rnd*8<425%
E48 = 1+1+2+44≦Rnd*8<850%

この方法の問題は,処理時間がかかることです.1曲選ぶたびに積算月数を再計算する必要があります.計算量は候補数×採用数のオーダーです.実行に1分以上かかりました.これは嫌.

■加重ランダム採用方法#2

次に考えたのは,月数に基づく確率で各曲の採用是非を調べていく方法です.

月数採用条件採用率
A1Rnd<0.1 = 1/(1+1+2+2+4)10%
B1Rnd<0.1 = 1/(1+1+2+2+4)10%
C2Rnd<0.2 = 2/(1+1+2+2+4)20%
D2Rnd<0.2 = 2/(1+1+2+2+4)20%
E4Rnd<0.4 = 4/(1+1+2+2+4)40%
  1. 乱数を算出し,0.1未満だったら曲Aを採用する.
  2. (曲Aを採用したかどうかに関わらず)乱数を算出し,0.1未満だったら曲Bを採用する.
  3. (曲AやBを採用したかどうかに関わらず)乱数を算出し,0.2未満だったら曲Bを採用する.
  4. 以下同様

この方法だと,一巡では採用数に達しないことが多いです.実際は分母がもっともっと大きいので,なかなかこの採用条件が満たされないのです.そのため,方法1ほどではないにせよ,何度か回す必要があります.例えば,1巡目で曲BとDが採用された場合は,2巡目で下表のチェックをしていくことになります.

月数採用条件採用率
A1Rnd<0.1 = 1/(1+2+4)14%
C2Rnd<0.2 = 2/(1+2+4)29%
E4Rnd<0.4 = 4/(1+2+4)57%

やっぱり処理時間,かかりました.全部で600巡くらい必要で,十数秒かかりました.これもちょっと嫌.

■加重ランダム採用方法#3

最後に考えたのは,方法2をベースに,残採用数が多いほど採用条件を緩める方法です.

  1. 曲Aの採用条件を「Rnd<0.3 = 1/(1+1+2+2+4)*残採用数3」とする.
  2. 乱数が0.3未満だった場合
    1. 曲Aを採用する.
    2. 曲Bの採用条件を「Rnd<0.2 = 1/(1+1+2+2+4)*残採用数2」とする.
  3. 乱数が0.3以上だった場合
    1. 曲Aを採用しない.
    2. 曲Bの採用条件を「Rnd<0.3 = 1/(1+1+2+2+4)*残採用数3」とする.

この方法でも,一巡では採用数に達しませんでした.何度か回す必要があります.とはいえ,加速項のお陰で,5巡くらいで済みました.処理時間は数秒程度.いいね.

こうして方法3でプレイリストに採用された曲の月数統計をグラフ化しました.良い感じです.頭痛に見合う価値があります.

月数に対する採用率
月数に対する採用率

みたいなことを眠い中やっつけるのが会社での私の仕事の一つです.上記の数理統計学的な理論立てが合っていたとしても,プログラムへの落とし込みに間違いがあると台無し.眠い中,どっちに誤りがあるのか探したりするの辛い.どっちもが合っていたとしても,目標とする結果に達していなければ,別の案を捻りだす必要があります.フレーフレー私.

あにそん

何の気なしに歩いていると,そのリズムに合ったアニソンが頭に流れることがあります.しかしながら,何の曲か思い出せない,そんなことがありました.気になる.

アニソンシンガー曲っぽい.15年近く前の曲に違いない.この歌声は…栗林みな実?ですか? わりと好きな曲でした.とすると「舞-乙HiME」の「Crystal Energy」か.あの印象的なイントロから脳内再生すると,うーん別の曲ですね.でも,時期は良いところ突いている気がします.

うろうろした結果,閃きが降臨しました.確認したらビンゴ.やっぱり栗林みな実曲で合っていました.「タイドライン・ブルー」の「Blue treasure」でした.アニメの内容は全然思い出せませんけどね.

こういうときってどうやって辿ったら良いんでしょう.歌詞の一部をググるとか? 使ったことないけど,スマホならマイクあるので,それで鼻歌検索ですかね.今知りたいわけじゃなくて後で調べたい,というときはどうしましょう.その鼻歌をボイスレコーダ的なものに録っておくとかですかね.厄介だわ.

とか考えているうちに,キャプチャしたアニソンを管理するマクロを改良したくなりました.結論から言うと,改良は済みました.ですけど,頭使って頭痛めたので,どんなマクロをどうしたのか,日記にするのは明日の私に託すことにします.

きゅぅべえはうす

4箇月ぶりに散髪してきました.いつ切るか迷うのが面倒なので,切るのを2月頭,6月頭,10月頭と決めています.何となく決めるのは納得しかねるので,合理的に数理的に理論的に最適化しました.

今日は歯周病治療後の経過観察で,3箇月ぶりに歯医者でした.それが終わった辺りが散髪屋の開店時刻というミラクル采配.

店内のBGMが気になりました.アイカツですね.からの,聴いたことのある女性英詞曲.そして,聴いたことのある男性曲.でもって,からかい上手の高木さんが唄う方のキセキ.4曲連続でアニソンでした.とりあえず日記のネタにメモを取ってみる.その後の曲は聞こえなかったり聴いたことなかったりでしたが,歌い手は声優かアニソンシンガーに違いない系.どの店員の有線放送選曲か.

高木さん以外の3曲の正体を思い出せなかったので,帰宅後に調べました.「アイカツ」としかメモってなかったので,定かではありませんが,きっと「アイカツフレンズ!かがやきのジュエル」のミライ曲「Niceなto meet you!」だったのではないかと.

続く女性曲.英詞なので検索キーをメモすることができず,その分なるべく曲を脳内リピートで沁み込ませておきました.で,まずは全部英語曲のキャロル&チューズデイから舐めてみました.いきなりビンゴ.「Beautiful Breakdown」でした.

最後,男性曲.記憶から取り出せない自信があったので,歌詞の一部をメモしていました.で,ググった結果,なるほど,「風が強く吹いている」の「道」でした.

かいへんきのおしごと

結局,水曜深夜から日曜深夜までの放送分で取り込んだアニメ主題歌挿入歌,55曲に達しました.多いな.内,53曲は歌詞が表示されないタイプ.いいよ,聴き取り苦手だけど頑張るもん.こじゃれた歌い方やめれ.

プリチャンのなる店長ステージ曲,なんか聴いたことあります.以前取り込んだ曲かと思い,Excelを舐めましたが,未収録でした.なるほど,7年前のプリティーリズム レインボーライブの頃の曲でした.どうやら,台詞で分断される挿入歌を取り込んでいない時期だったようです.

レインボーライブの次に始まったプリパラも,挿入歌が台詞で分断されるタイプでした.でも,なかなかの名曲が多かったので,その頃からそのタイプも取り込むようになったのでした.とはいえ,垂れ流しアニソン流し聴きの途中で台詞が耳に入ると気になるなる.ということで,台詞セクションは良い感じにカット編集して繋いでます.継ぎ目気づけない級の仕事ができると,星座占いで1位になったときのような良い気分になるなる.

かいへんきのおしごと

水曜までずっと休みで,木曜は通勤時間ゼロだったので,アニメの消化が捗っています.と言いたいところですが,勢い余って実写物もそこそこ予約録画していたりして,観るものてんこ盛りです.

まだ削り切れていない今クールのアニメは現状,週54本です.このままだとダメ,絶対.40本程度まで絞らないと,健康で文化的な最低限度の生活が送れません.もっと頑張って苦渋の決断を致す所存.

それとは別に,コレクションしているアニメの主題歌.TVのヘッドホンジャックとPCのライン入力を繋いで録音し,歌詞を聴き取って手打ちする作業です.夕方にアニメの消化を一旦休止し,水曜深夜から金曜深夜までの放送分を取り込みました.2時間かけて取り込んだのは33曲.こんなにあるかね.ぞっとするわ.諸々,3連休で足りるかしら.

んぱかぱ

昨日のマクドナルド外出の際は風が強かったです.寒ければ寒いほど歩くの速くなる気がします.今朝は朝焼けの中を店へ向かい,帰りには太陽の放射光が仄かに暖かく,歩く速度緩めでした.

歩きながら不意に頭に流れるBGM.速いときはサクラ大戦の「檄!帝国華撃団」,少し緩むとデジアド02の「Break up!」になることが多いです.今回は更に緩かった結果,クレヨン王国の「ン・パカマーチ」でした.そのテンポがなんか丁度填まったのよね.どうしてこれが出てきたのか知れませんが,実に懐かしい.徳光由禾は徳光由香で,宮田幸季は宮田始典で,宍戸留美は櫻田実果子の時代でしょ.脳みそ擽られたのももう22年前でございますです.

きせき

喧噪での会話を聴き取る能力が低いです.音を発しているのは知覚できても,内容が日本語に変換できない感じ.雰囲気,英会話を聴く中で,単語単語だけ理解できるのに近い感じ.そんな私に奇跡が起きました.

電車内.斜め前に座っている人が音源でしょうか.ヘッドホンの音漏れが聞こえてきます.何かの音楽.リズム系の軽い音と途切れ途切れのボーカルだけが聞こえます.いつも傾聴チャレンジしてみてますが,解らず仕舞いになることが殆んどです.ところが今回,電車のガタンゴトンが収まった刹那,一万年と二千年前から愛してる歌の一万年と二千年前から愛してたり八千年過ぎた頃からもっと恋しくなった部分が聴き取れました.テンション上げ,すぐまた夢の世界へ.

すごいのきただよ

雨も強いですが,伴う風が怖いですね.ガラス窓に手を当てると,強風に圧されてるのが判ります.頑張れ.それ以外は今のところ私のところは大丈夫.避難準備が発令されて,近くの川は氾濫警戒のようですけど,ここ2階ですし,数日籠城できる備蓄はありますし.

20時半の時点で21万1600戸が停電したというニュースがありました.いろんなところに大雨特別警報が出されたり,いろんな川とかダムとかが危なかったり.隣町の防災スピーカーからは避難勧告が聞こえてきました.

先週はアニソン45曲を捌きましたが,あれから1週間経った今日は34曲捌きました.歌詞の文字起こしで疲れたのか,耳が変な感じです.いや,低気圧のせいか.

生日快乐

38歳になりました.めでたいか?

木曜夜に買ったパンの消費期限が昨日でした.私の基準は翌日朝食ならセーフ.ということで,新聞読みながらのマクドナルドは昼になりました.

に出発する前からここ一週間のアニメ主題歌のキャプチャ作業に着手していましたが,片づいたのは夕食後です.45曲を捌きました.お疲れ.どうしてこんな大変なことをやらなければならないんだ.趣味なんだからガタガタぬかすな.芹澤優の歌う「デビきゅー」可愛いな.魔入りました.

かいへんきですから

有休とりました.番組改編期でToDo盛りだくさんのためです.日曜に引き続き,日曜深夜から水曜深夜の間に増えたアニソン21曲をコレクト.豊作です.有休ゆえ,会社のメールボックスをちょくちょく覗いたりしました.半年に一度の大き目なWindows Updateゆえ,PCがのろのろでした.そんなこんなで,多少は読めると思っていた先日着荷のAnimageサブスクリプション,未開封のまま本日閉店のお時間となりました.