itunesのエクスポートしたお気に入り情報読み込んで失敗した話

こんにちは。
くろんです!!

にてはまったポイントがあったので記録がてら記事にしておきます。

結論から言うと、完璧に解決はできずに応急処置的な感じで終わっていますので参考程度でどうぞ。

はまったポイントを簡潔に言うと

UTF-16LE(itunesお気に入りエクスポート文字コード)が正しく読み込めない

こんな感じです。

とりあえずやってみたことと失敗した内容は↓↓↓

ファイルからの読み込み

- stlを使う方法(ifstream/wifstream)
→ データをそのまま読み込めているようだが、1文字がchar型2バイトで読み込まれ、適切に1文字単位で読み込めない

文字コードの変換

- WideCharToMultiByte/MultiByteToWideChar
→ 文字コードをUTF-16LEにしても変換がうまくいかない(printf()で表示させるとバグる)

- std::wstring_convertを使う
→ C++17で非推奨 & 
変換しても表示がバグる

ここら辺はダメだった印象ですね…

ちなみにやってみてうまくいったのは、_wfopen_s() でした。

コードはこんな感じです。


setlocale(LC_CTYPE, "");

wchar_t	wstr[512];
FILE* pfile = nullptr;

_wfopen_s(&pfile, L"./PATH", L"rt,ccs=UTF-16LE");
if(pfile == NULL) { return false; }

if(fgetws(wstr, 512, pfile) == NULL) {
  return;
}
fclose(pfile);

このコードだと一応、UTF-16LEのファイルを読み込めました!

setlocale()が効いているのかよくわかりませんが、setlocale()を外すとうまく読み込めないので大事なことなのかと。
詳しくはわからないので勉強しないとですね…

itunesからエクスポートしたお気に入り情報の読み込みで詰まったら、是非使ってみてください。

では!

GoogleHomeに自動でitunes曲をアップロードする別方法を考える(3)

こんにちは。
くろんです!

> の続きです。

久々ですね。
ここまでは必要項目のリストアップをしていました。

  1. itunesのプレイリスト情報を取得
  2. プレイリスト情報から曲の保存先情報を取得
  3. 曲を指定フォルダにコピーする
  4. wavをmp4に変換する
  5. Google Play Musicにアップロードする
  6. プレイリスト情報が変更されたときに1 ~ 5の処理をする

↑ の1 ~ 6ができれば自動化できるかな。と

このうち3 ~ 6 は楽にできそうだったのでざざっと考えているやり方書いて終わって、
1 ~ 2部分をいい感じにできる方法を考えます。

3. バッチ処理
4. ffmpegを使用し変換
5. 公式アプリケーションより自動的アップロード
6. バッチ処理

4 ~ 6はこんな感じですかね…

あとは1 ~ 2をどうするか

1 ~ 2の部分でやりたいことはitunesにある、任意のお気に入りにの曲情報を取得し、曲が保存されているパスを取得するということです。

色々探してみましたが、itunesのお気に入り情報が保存されている場所がどうしても探せなかったので、
とりあえず最初はお気に入りの情報をエクスポートし、そこからアップロードまでを自動化するようにしていきます。


名前	アーティスト	作曲者	アルバム	グループ	作品	楽章番号	楽章数	楽章名	ジャンル	サイズ	時間	ディスク番号	ディスク数	トラック番号	トラック数	年	変更日	追加日	ビットレート	サンプルレート	音量調整	種類	イコライザ	コメント	再生回数	最後に再生した日	スキップ回数	最後にスキップした日	マイ評価	場所

itunesのお気に入り情報は↑のようになってました。

1行目に各情報のタイトルが付いていて2行目以降はそれに対応する形でお気に入りに入っている曲情報が入っていました。
情報の区切りはタブを使っていました。

itunesのお気に入り情報で曲のパスは”場所”タイトルに入っているようなので、そこの箇所からパスを抜き出すようにします。

パスを抜き出すのは文字列操作すればいけるし、パスが抜き出せればあとはバッチファイルでもC++ならfilesystemでも使えばOKなのでとりあえずここまでで作れば出来上がりって感じですね!!

今回やっていた時に文字コード周りではまったポイントがあったので別記事にしておきます。

では

itunesのプレイリストから情報取得(2)

こんにちは!!
くろんです

itunesのプレイリスト自体から直接情報を取得するのは難しそうですが、
プレイリスト情報の書き出しができることが分かったのでこちらの情報を基にして自動で曲をアップロードする方法を考えます。

ちなみにitunesのバージョンは12.10.3を利用しています。

itunesではプレイリストという形でお気に入りの曲リストを作成できます。
今回はこのプレイリストから「プレイリストに含まれる曲一覧」と「曲に関連付けられているファイルパス」、この2点を取得する方法を考えます。

と言っても、プレイリストの情報はバイナリになっているっぽいので諦めてitunes側で用意されているプレイリストの書き出しから情報を取得します。

まず、プレイリストの情報が入っていると思われるファイルですね。
おそらく、これはitunesのライブラリフォルダ内にある「iTunes Library.itl」かと思います。バイナリなので開いてみてもわけがわからないし、あまり有力な情報もないので早々に中身を見るのは諦めます。

次に、itunes側でプレイリスト情報をtxt形式にて書き出しできるので、そちらから情報を取得できるか考えます。

ここから情報の書き出しが行えます。

名前
アーティスト
作曲者
アルバム
グループ
作品
楽章番号
楽章数
楽章名
ジャンル
サイズ
時間
ディスク番号
ディスク数
トラック番号
トラック数
年
変更日
追加日
ビットレート
サンプルレート
音量調整
種類
イコライザ
コメント
再生回数
最後に再生した日
スキップ回数
最後にスキップした日
マイ評価
場所

情報はこれだけあります、各情報がタブで区切られているので情報の切り出しはできそうですね。
ちなみに「曲名」は「名前」が「ファイルパス」は「場所」が対応しています。
文字列操作すればいいだけなのでそこまで大変ではなさそうですね。

とりあえず、サンプルコード書いてみます!
では

itunesのプレイリストから情報取得

こんにちは!!
くろんです

引き続きGoogle Homeへの自動曲追加のための要素技術を調べています。

itunesで設定したプレイリストから登録されている曲情報が取れないか探していますが、今のところ良さそうな情報は見つかってませんね…

代案を考えながら、調査を続けていきます!
では

GoogleHomeに自動でitunes曲をアップロードする別方法を考える(2)

こんにちは!!
くろんです!

前回に引き続きなんやかんやしてitunesのプレイリストの曲をGoogle Play Musicにアップロードする方法を考えていきます。

とりあえずこんな感じの機能があれば実現できそうというものを列挙したいと思います。

  1. itunesのプレイリスト情報を取得
  2. プレイリスト情報から曲の保存先情報を取得
  3. 曲を指定フォルダにコピーする
  4. wavをmp4に変換する
  5. Google Play Musicにアップロードする
  6. プレイリスト情報が変更されたときに1 ~ 5の処理をする

これくらいですかね

ひとまず軽く見た感じでは1. が一番鬼門ですね、それ以外はそんなに難しくなさそうですね。

明日あたりから1. の調査をしていきます。
さて、どこまで楽できるようになりますかねー!

では

GoogleHomeに自動でitunes曲をアップロードする別方法を考える

こんにちは!!
くろんです!

私は普段の作業中、 Google Homeで曲を流しています。
Google Homeでは最初からYoutube MusicかGoogle Play Musicの曲を再生できるのですが、無料版だと途中で広告が挟まれたり曲数が少なかったりとなかなか思い通りにいきません。

なので、Google Play Musicの個人ライブラリに持っている曲をアップロードしてプレイリストを作り、それを再生するようにしています。

今回はこの曲のアップロード作業がとても面倒なので、なんとか楽できる方法を考えたいと思います。

まず、Google Play Musicでは曲のアップロード方法がいくつかあります。

  1. Google Play ミュージックプレーヤーを使う
  2. Google Play Musicにアクセスしてアップロード

2. の方法についてはいちいちやるのが面倒なのでNGですね…
1. ミュージックプレーヤーではitunesの曲もしくは指定フォルダ内の曲を自動でアップロードするように設定することができます!

…ミュージックプレーヤー使えばいいのでは??

それでうまくいけば今回の記事はここで終了できたんですけどね…
もう少し続きます!!

私がCDから曲を取り込むときにはitunesを利用していますが、Cドライブの容量を圧迫するのでDドライブに曲を保存するようにしています。

ですがここで問題が発生します、Google Play Musicではitunesが曲がDドライブに入っているとプレイリスト単位でのアップロード選択ができなくなってしまいます。

itunesの曲フォルダ全体を指定すればすべての曲をアップロードすることはできますがアップロードできる容量に限度があるので聞かない曲までアップロードするのは無駄な感じになってしまいます。

なので結局、現在はこのようなアップロード手順を取っています

  1. itunesの曲を指定フォルダにコピー
  2. .wavをmp4に変換
  3. 指定フォルダを自動アップロード設定に登録

2. はitunesで読み込むときにwav形式にしていたのですが、Google Play Musicでは扱えないのでmp4に変換する工程を追加しています。

まぁ、これでもいいんですが新しい曲を追加したときに1. と 2.の作業を毎回やらなくてはいけなくて面倒なんですよね…

なので個人的にはこういう感じにしたいです。

  1. itunesプレイリストに曲追加
  2. なんやかんや
  3. 自動でGoogle Play Musicにアップロード

そこで「なんやかんや」の部分を考えていきたいと思います!!

今回はこんなところで