PRCO 管理人のページ

特設ページ
このブログについて
管理人へのご連絡はこちら
メモファイル管理&暗号化ソフト(ヤンマ) バグ、要望 まとめ
最新コメント
シンイち。(2024/07/03 01:54:27)
#1結構やり込んだ人にならお勧め出来る!ただまだシステム的なバグも結構多いので、パッケージ版出るタイミングか、何回かアップデートされたあとでも良いかも。
(2024/07/02 09:35:31)
昨年最高のエンタメだったものが今季は全然アカンので他のエンタメを模索しております。ウィズのリメイクめちゃ良さげですよね…
(2024/02/15 19:31:25)
いやホンマ。面白いコンテンツに出会う度に思います
シンイち。(2024/02/08 20:57:43)
あら、メンテナンスされてるかたはいらっしゃる感じなんですかね…。私の方でも誰でも同じようなもの作れるようにコアな部分のソース等公開したりできたら良いんですが気力がなく何も出来てません ^ ^;
moondoldo(2024/01/24 15:09:34)
OSDN(旧SourceForge.JP)が閉鎖するという話を聞いて色々見て回ってたのですが、その関連なのか「TOMBO プロジェクト日本語トップページ - OSDN」のページがとうとう見れなくなりましたね
iTunesの「追加日」の順番
更新日時:2012年02月29日
プログラム
いろいろ調べててわかったことメモ。
久しぶりにイベント関連以外の記事だ…(ぉ
長文注意。

前置き
iTunesでライブラリのバックアップ使って別マシンへライブラリを移動すると、基本的なデータは保持されるがなぜか「追加日」の項目だけがリストアした日時に書き変わってしまう。

自分みたく番組関連音楽(ぶっちゃけほぼアニソン)ばかり買ってる人間は、番組改変期に新しい曲の追加が多いです。

で、ちょこっと曲を探す時に追加日を逆順に辿って曲がどの辺だったか探すことが多い。
同じクールに放送した番組の曲が近くに固まってるから探しやすいんです。
なので追加日の項目は結構重要なんですが、これがリセットされてしまいました。

無くなってしまったデータはもう仕方ないんですが、追加日でソートするとトラック順無視してバラバラに表示されてしまうのが気持ち悪い。

永らく放置してたのでいい加減治さないとと思ったんですがこれが結構面倒。
同じような状況で気持ち悪いので治したがってる人の質問は見かけるんだけど根本的な解決方法見つからず。

調査編
プログラムから一気に書き換えてしまおうかとも思ったけどiTunesLibじゃ外部からはいじれない模様(参照は出来る)。

結局、トラック順に追加日を並べ替えるにはまずアルバムでソート(これでアルバムごとにトラック順になる)。
次にこのアルバムのロケーション(ファイルパス)をプロパティで確認して右クリックでそのディレクトリを開いておく。
そして一度アルバムごと曲をライブラリから削除(ファイルは残す)。
その後、トラック順にD&Dなりメニューからなりで追加しなおすと言う面倒な手順が必要。
しかも、同じアルバムの曲が全部同じディレクトリにあるわけでもないのでアルバムによっては複数ディレクトリにまたがっての作業になって非常に面倒。

また、いろいろ試してみた結果

・一旦ライブラリから消したあとにエクスプローラからディレクトリ内のファイルをまとめてD&D

・一旦ライブラリから消したあとに「ライブラリから追加」でファイルを複数選択して追加

・一旦トラック順にプレイリストを作って、プレイリストをエクスポート、プレイリストとアルバムの曲を削除し、作っておいたプレイリストをインポート

いずれの方法でもトラック順(ファイル名順)にならず、順不同で追加されてしまうのでちゃんとトラック順にしたい場合、追加したい順に一個一個D&Dか「ライブラリへ追加」をやらないといけない。

おそらく、内部ではファイル名を受け取ったらファイルごとに非同期で追加処理を行っているので、ファイルごとの追加に要する所要時間に左右されてしまうのかと(ファイルサイズとか)。
こんなのブロッキングしていいから順番に追加してくれよ…。

まぁどちらにしても、万を超える曲数を手動でやりなおすのは厳しいので何か方法はないか考えてみました。

解決編
で、思いついたのが、まず、最終的に並べたい順のプレイリストを作る。

1.アルバムごとのトラック順にソートする。「アルバム」でソートすればトラック順にはなりますな、普通は。

2.プレイリストを作ってそこに全選択して全曲追加。

3.そのプレイリストをエクスポート

これでアルバム順、トラック順に並んだプレイリストが出来る。
プレイリストの中身は実は単にファイルのフルパスが書いてあるだけ。

で、iTunesは

・起動パラメータにファイルパスを与えてiTunes.exeを実行するとその曲を再生してくれる。

・また、その曲がライブラリに入ってない場合は自動的にライブラリに追加してくれる。

と言う仕様があるので、まず、最初にiTunesから全曲削除(もちろんファイルは残す)して、その後、上のプレイリストのファイルパスをiTunes.exeに与えて次々に実行してやれば良いと思いつきました。

とりあえずプレイリストを整形。
プログラム知識がある人は簡単なテキストコンバータ作ってもいいかもですな。

自分はキーマクロで十分だったのでテキストエディタのみでやっちゃいました。
テキストエディタはUTF-8に対応しててキーマクロ使えるものを使用(自分は秀丸使いました)すれば比較的簡単。

たとえばプレイリストが以下のようになってたら

---------------------------------------------------------
#EXTM3U
#EXTINF:245,2nd STAGE - KIDS ALIVE
D:\Work\My Music\iTunes\Music\KIDS ALIVE\2nd STAGE\01 2nd STAGE.mp3
#EXTINF:245,2nd STAGE (TV MIX) - KIDS ALIVE
D:\Work\My Music\iTunes\Music\KIDS ALIVE\2nd STAGE\03 2nd STAGE (TV MIX).mp3
.
.
---------------------------------------------------------

まず、#を検索してその行を削除する

---------------------------------------------------------
D:\Work\My Music\iTunes\Music\KIDS ALIVE\2nd STAGE\01 2nd STAGE.mp3
D:\Work\My Music\iTunes\Music\KIDS ALIVE\2nd STAGE\03 2nd STAGE (TV MIX).mp3
.
.
---------------------------------------------------------

次に、パス名をダブルクォートで囲う(行の最初と最後に挿入すればいい)

---------------------------------------------------------
"D:\Work\My Music\iTunes\Music\KIDS ALIVE\2nd STAGE\01 2nd STAGE.mp3"
"D:\Work\My Music\iTunes\Music\KIDS ALIVE\2nd STAGE\03 2nd STAGE (TV MIX).mp3"
.
.
---------------------------------------------------------

最後に、パス名の前にiTunes.exeのパスを追加する(iTunes.exeのパスもダブルクォートで囲ったほうがいい)

---------------------------------------------------------
"C:\Program Files\iTunes\iTunes.exe" "D:\Work\My Music\iTunes\Music\KIDS ALIVE\2nd STAGE\01 2nd STAGE.mp3"
"C:\Program Files\iTunes\iTunes.exe" "D:\Work\My Music\iTunes\Music\KIDS ALIVE\2nd STAGE\03 2nd STAGE (TV MIX).mp3"
.
.
---------------------------------------------------------

で、ファイルの拡張子を.batにしてやれば追加バッチの出来上がり。

ただし、これを実行すると、先ほど書いたファイルごとの処理時間に左右されて、結局順不同になってしまいます。

あと、あまりに連続で追加するとiTunesが音を上げてエラーメッセージが出ますw
なので、1曲追加するごとに数秒待ってやるのが良いかと思います。

しかし、Windowsのバッチファイルはスリープやウェイトなんかのコマンドがないので

ping localhost -n 3 > nul

とか、pingなんかで代用するのが良いかと。上の例だと3秒待ち。

あまりに曲数が多い場合は何回か試して早すぎず遅すぎずな時間を探すと良いかと。
うちの環境では1曲2秒にしとくと順番ずれませんでした。

で、最終的に

---------------------------------------------------------
"C:\Program Files\iTunes\iTunes.exe" "D:\Work\My Music\iTunes\Music\KIDS ALIVE\2nd STAGE\01 2nd STAGE.mp3"
ping localhost -n 2 > nul
"C:\Program Files\iTunes\iTunes.exe" "D:\Work\My Music\iTunes\Music\KIDS ALIVE\2nd STAGE\03 2nd STAGE (TV MIX).mp3"
ping localhost -n 2 > nul
.
.
---------------------------------------------------------

こんな感じのバッチファイルに。
あとは実行して待つだけ。

最後に、もう一度追加日でソートした全ファイルをプレイリストでエクスポートして、最初にエクスポートしたプレイリストとWinMergeとか使ってファイル比較してちゃんと順番になってるか確認するとイイかと。
もしずれてるとこを見つけてしまったらそこだけやり直せばいいので。


教訓
iTunesの中途半端なバックアップ機能のせいで無駄に苦労しました…。
現在はバックアップはiTunesのライブラリをライブラリディレクトリごと保存してます。
マシン新しくしても構成同じにすればそこにファイルコピーするだけで情報狂わないのでこれで十分なんすよね、実は。


おまけ
ちなみに「バッチでできんじゃん」ってのは後から気付いて試したことで、実際はプレイリスト直接読み込んで数秒ごとに連続でiTunes.exeをキックする実行ファイルをVC使って10分くらいで作りましたw
だからプログラムにカテゴリしてるんですが。
まぁやってることは同じです。

一応置いておきますね。

ここ。

上の説明の通りになんてかったるくてやってられるか!!って人はまぁ使ってみてください…動作はまったく保証しないですがw

使い方は

>itunesaddm3u.exe "C:\Users\shinichi\Desktop\test.m3u" 2000

こんな感じで。
プレイリストをフルパスで指定して、待ち時間(ミリ秒)で。
待ち時間省略するとデフォルトで1ファイルごとに3秒待ちます。

使う前にiTunesのライブラリディレクトリのバックアップ必須ですw

最初つくった時よりちょっと改良して、iTunesLibから追加するようにしてあります。
これだと、追加がバックグラウンドで行われるのでiTunesを最小化しといて他の作業も出来るので。

コメント

新規コメント
書き込む前にチェックしてください