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