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なのでとりあえずここまでで作れば出来上がりって感じですね!!

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

では