ブログ アーカイブ

2009年4月20日月曜日

iTunesからClarionカーナビにファイル取り込み

iTunesのライブラリにある音楽ファイルをClarionのカーナビにインポートしようと思います。
Clarionのカーナビは
アーティスト名のフォルダ - アルバム名のフォルダ - 曲名のファイル
のようなフォルダ構造でインポートしなければなりません。

まずはiTunesでプレイリストを作成します。
それを右クリックして「プレイリストをエクスポート...」するとテキスト形式のリストが出力できます。
これを使ってClarion形式のフォルダ構造を作ることにします。

私の環境はWindows上のVirtualBox+Ubuntuなので、こんな感じのスクリプトになりました。
#!/bin/sh

# iTunesのプレイリスト(プレイリストを右クリックして「プレイリストをエクスポート...」)から
# Clarionのカーナビのファイルキャッチャー用のフォルダ構造を生成し、
# 音楽ファイルをコピーする。
#
# ファイルキャッチャー用のフォルダ構造は次の通り。
# アーティスト名のフォルダ - アルバム名のフォルダ - 曲名のファイル

if [ $# -ne 4 ];
then
echo "使用法: $0 list win_dir unix_dir out_dir"
echo " list"
echo " iTunesからエクスポートしたプレイリスト(txt形式)"
echo " win_dir"
echo " iTunesのmusicフォルダのwindowsパス"
echo " (このフォルダ直下にアーティスト名のフォルダが存在)"
echo " unix_dir"
echo " iTunesのmusicフォルダのunixパス(windowsから共有)"
echo " (このフォルダ直下にアーティスト名のフォルダが存在)"
echo " out_dir"
echo " ファイルのコピー先"
echo ""
echo "例: $0 お気に入り.txt d:/iTunes $HOME/.gvfs/iTunes@10.0.2.2 out"
exit
fi
if [ ! -e "$1" ];
then
echo "ファイルが存在しません: $1"
exit
fi
if [ ! -d "$3" ];
then
echo "ディレクトリが存在しません: $3"
exit
fi


list=$1
win_dir=$2
unix_dir=$3
out_dir=$4
tmp1=$(mktemp temp.XXXXXX)
tmp2=$(mktemp temp.XXXXXX)
tmp3=$(mktemp temp.XXXXXX)

# utf-8変換
nkf -w $list > $tmp1
# ヘッダ行を削除、レコードごとに改行、区切り文字を@@に変更、パス区切りを/に変更
sed -e"s/.*場所 //" -e "s/\(\.\(mp3\|wma\|m4a\)\) /\1\n/g" -e "s/\t/@@/g" -e "s_\\\_/_g" $tmp1 > $tmp2
# レコードからアーティスト名、アルバム名、曲名、音楽ファイルパスを抽出
gawk -F @@ '{print $2 "\n" $4 "\n" $1 "\n" $27}' $tmp2 > $tmp3

# ファイルを読む
exec 3< $tmp3
while read artist 0<&3
do
read album 0<&3
mkdir -p "$out_dir/$artist/$album"
read name 0<&3
read file 0<&3
file=$(echo $file | sed -e "s!$win_dir!$unix_dir!i")
filename=$(basename "$file")
filename=$(echo $filename | sed -e "s/^[0-9][0-9] //")
ext=$(echo $file | sed -e "s/.*[^.].*\.\([^.]*\)$/\1/")
if [ $ext = "mp3" -o $ext = "m4a" ];
then
echo "copying file..."
echo " from: $file"
echo " to: out/$artist/$album/$filename"
cp -T "$file" "out/$artist/$album/$filename"
fi
done
rm temp.*

iTunesバージョンが変わるとエクスポートされるテキストファイルのフォーマットが微妙に変わったりするので注意が必要です。
私は8.1.1.10で動作確認しました。