iTunesは日本語の曲名等の並び替えを正しく行うためにふりがなを登録できるようになっています。が、何千曲とあるライブラリに手作業での登録は大変です。アーティスト名ならまだしも曲名となれば大変です。
massiva/logic&mac tipsさんのソートiTunes!という記事でAppleScriptとテキストエディタのGUIを用いてiTunesの曲のアーティスト名のふりがな(アーティストの並べ替え)フィールドを自動で埋めるというスクリプトが紹介されています。ところが、安定して動作させるには待機時間を長くしないといけないのでちょっと遅いのです、これは漢字からひらがな変換にGUIを使っているからなのですが。具体的にはMac全体の処理速度が一瞬低下した場合ふりがなへの変換が終わる前に次の曲に進んでしまったりします。
そこで、オープンソースの形態素解析エンジンMeCabを利用してふりがなを生成する方法に改造することによって高速かつ安定した動作を実現しました。が、人名はことえりのほうが正確かも…
MeCabは前回の記事でインストール済みということで。
スクリプトエディタに以下のスクリプトを入力し、iTunesでふりがなを補完したい曲を選択した状態でスクリプトを実行するとふりがながまだ設定されていない曲のアーティスト名、曲名、アルバム名のふりがなが登録されていきます。
スクリプト
--確認ダイアログ
display dialog "ふりがなをふっていいですか" buttons {"NO", "OK"} default button 2
set button_a to button returned of result
if button_a = "OK" then
--iTunesのスクリプト
tell application "iTunes"
try
set name_list to {}
set select_track to a reference to selection
if select_track as list is {} then return
repeat with i in select_track
set end of name_list to i
end repeat
repeat with i in name_list
--アーティスト
set hurigana_text to sort artist of i
if hurigana_text is "" then
set original_text to artist of i
set hurigana_text to my hurigana(original_text)
set sort artist of i to hurigana_text
end if
--アルバム名
set hurigana_text to sort album of i
if hurigana_text is "" then
set original_text to album of i
set hurigana_text to my hurigana(original_text)
set sort album of i to hurigana_text
end if
--曲名
set hurigana_text to sort name of i
if hurigana_text is "" then
set original_text to name of i
set hurigana_text to my hurigana(original_text)
set sort name of i to hurigana_text
end if
end repeat
display dialog "完了"
on error
display dialog "エラー発生" buttons {"OK"} default button 1
end try
end tell
end if
on hurigana(original_text)
set mecab to "echo " & quoted form of original_text & " | /usr/local/bin/mecab -Oyomi "
mecab as text
do shell script mecab
return katahira(result)
end hurigana
on katahira(original_text)
set hiracase to "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをんぁぃぅぇぉがぎぐげござじずぜぞだぢづでどっぱぴぷぺぽばびぶべぼゃゅょ"
set katacase to "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲンァィゥェォガギグゲゴザジズゼゾダヂヅデドッパピプペポバビブベボャュョ"
set hiragana_text to characters of original_text
repeat with char in hiragana_text
set num to offset of char in katacase
if num is not 0 then
set contents of char to character num of hiracase
end if
end repeat
return hiragana_text as text
end katahira