Archive for the 'iTunes' Category

04/21 iPhoto, iTunes, Safariアップデートについて

iPhoto 9.2.3、iTunes 10.6.1、Safari 5.1.5の各アップデートが提供されていますが、これらのアプリケーションのAppleScript用語辞書に変更はありません。

03/07 InDesign CS3で指定のオプジェクトを、JPEG書き出ししてiPhoneへ

InDesign CS3上で指定したオブジェクトをJPEG書き出ししてiPhoneに転送するAppleScriptです。

ことのはじまりは、目下開発中のiPhoneアプリ(私はプロジェクト管理やら仕様書書きやらを)で、Welcome画面の表示を行うのに「文字詰めや行送りをいろいろ指定できないと!」という話になったこと。

……そもそも、iPhoneの文字表示部品に、そんな気の利いたものはありません。そこで、InDesignやらIllustrator上で気の済むまで行間や文字間にこだわっていただいて、それをそのまま「画像」として書き出して表示しようではないか、と。

ただし、その指定内容をすぐにiPhoneの実機で見たいという話に。

その場で10分もかけずにInDesign書類上の指定レイヤー(「コンテンツ」)上に存在する指定名称(スクリプトラベル「screen」)のグループをJPEG書き出しして、書き出したJPEG書類をiPhotoにインポートして、iTunesに命令して接続しているすべてのiOSデバイスにシンクロを行うようAppleScriptで指令を出すようにしてみました。

できた瞬間はかなりガッツポーズでしたが、冷静に考えるとInDesignから書き出されるJPEG画像のクオリティが「残念なレベル」です。また、シンクロが終わるまでにちょっと時間がかかるので、実用性がいまひとつ。

結局、Good Reader for iPhoneをインストールして、iTunes経由でGood Readerに対してInDesignから書き出したPDFを渡す、という方法に落ち着きました。本Scriptは何らかの「可能性」を感じさせてくれはしたのですが、結局おクラ入りに。

スクリプト名:InDesign CS3で指定のオプジェクトを、JPEG書き出ししてiPhoneへ
–v1 InDesign CS3から直接JPEG書き出し。画像クオリティが低くて難あり

set dtPath to (path to desktop) as string
set fName to do shell script "date +%Y%m%d%H%M%S"

set fullPath to dtPath & fName & ".jpg"
set fullPathPOSIX to POSIX path of fullPath

tell application "Adobe InDesign CS3"
  tell document 1
    tell layer "コンテンツ"
      set aList to every group whose label is equal to "screen"
    end tell
    
    
set expItem to contents of first item of aList
    
export expItem format JPG to fullPath without with grids
    
  end tell
end tell

–iPhotoに書き出したJPEGファイルをインポートする
tell application "iPhoto"
  import from fullPathPOSIX
end tell

–アップデート可能なiOSデバイスをアップデートする
tell application "iTunes"
  repeat with i in sources
    if (kind of i is iPod) then update i
  end repeat
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

11/20 Xcode 4.2.1、iTunes 10.5.1登場。AS用語辞書に変更なし

Xcodeのバージョン4.2.1、およびiTunesのバージョン10.5.1が登場しています。
ともにAppleScript用語辞書の内容に変更はありません。

10/18 指定アプリの指定タグの文字列をアプリ内のLocalizableStringsから取得する v3

バンドルIDを指定してアプリケーションのパスを求め、その中のローカライズ文字列テーブルから指定ラベルに該当する文字を取り出すAppleScriptの改良版です。

プロセスを確認して、起動中であればプロセスから情報を取得。起動中ではない場合には、Finder経由で実行ファイルのパスを求めるようにしています。

スクリプト名:指定アプリの指定タグの文字列をアプリ内のLocalizableStringsから取得する v3

set aRes to retLocalizedStringFromApp("135.006", "com.apple.itunes") of me
–> "ライブラリ"–Japanese
–> "LIBRARY"–English
–> "BIBLIOTHÈQUE"–French
–> ""–Simply Chinese
–> "資料庫"–Traditional Chinese
–> "MEDIATHEK"–Deutsch

–指定バンドルIDのアプリケーション内のResourcesフォルダの中の現在のロケールのフォルダ内のLocalizable.strings内の指定タグに対応する値を取得
–iTunesのような「不適切なローカライズ」に対応するために、リソース内のローカライズデータからオブジェクト名を取得
on retLocalizedStringFromApp(locLabel, bundleID)
  
  
set pRes to retExistenceOfProcessByBundleID(bundleID) of me
  
  
if pRes is not equal to false then
    –指定Bundle IDのプロセスが起動していた場合
    
tell application "System Events"
      tell pRes
        set appFile to application file
      end tell
    end tell
    
  else
    –指定Bundle IDのプロセスが起動していなかった場合
    
tell application "Finder"
      try
        set appFile to application file id bundleID
      on error
        return
      end try
    end tell
    
    
set appFile to appFile as alias
  end if
  
  
  
set aStr to localized string locLabel in bundle appFile
  
end retLocalizedStringFromApp

–指定のバンドルIDのプロセスが起動していればプロセスへの参照を返す、なければfalseを返す
on retExistenceOfProcessByBundleID(bundleID)
  tell application "System Events"
    set aProc to every process whose bundle identifier is equal to bundleID
    
if aProc = {} then return false
    
    
set aProc to contents of first item of aProc
    
return aProc
  end tell
end retExistenceOfProcessByBundleID

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

本ルーチンを使って、iTunesの「ライブラリ」に該当する文字列を取り出すテストを行い、実際に使用ユーザー環境の言語を変更してログインし直し、各言語で動作確認を行ってみました。

スクリプト名:iTunes_control_Japanese
tell application “iTunes”
  tell source “ライブラリ”
    tell playlist “ライブラリ”
      count every track
    end tell
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:iTunes_control_English
tell application “iTunes”
  tell source “LIBRARY”
    tell playlist “LIBRARY”
      count every track
    end tell
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:iTunes_control_Deteuch
tell application “iTunes”
  tell source “MEDIATHEK”
    tell playlist “MEDIATHEK”
      count every track
    end tell
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:iTunes_control_French
tell application “iTunes”
  tell source “BIBLIOTHÈQUE”
    tell playlist “BIBLIOTHÈQUE”
      count every track
    end tell
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:iTunes_control_Chinese (simplified)
tell application “iTunes”
  tell source
    tell playlist
      count every track
    end tell
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:iTunes_control_Chinese (traditional)
tell application “iTunes”
  tell source “資料庫”
    tell playlist “資料庫”
      count every track
    end tell
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

……で、冒頭のScriptを使うと、これらの各言語環境ごとにバラバラのオブジェクト名を記述しなければならなかった部分が、1本のScriptでカバーできるはずです。

スクリプト名:指定アプリの指定タグの文字列をアプリ内のLocalizableStringsから取得する v3.1
–すべての言語環境でこのプログラムに統一できるはず
set aRes to retLocalizedStringFromApp(“135.006″, “com.apple.itunes”) of me

tell application “iTunes”
  tell source aRes
    tell playlist aRes
      count every track
    end tell
  end tell
end tell

–指定バンドルIDのアプリケーション内のResourcesフォルダの中の現在のロケールのフォルダ内のLocalizable.strings内の指定タグに対応する値を取得
–iTunesのような「不適切なローカライズ」に対応するために、リソース内のローカライズデータからオブジェクト名を取得
on retLocalizedStringFromApp(locLabel, bundleID)
  
  
set pRes to retExistenceOfProcessByBundleID(bundleID) of me
  
  
if pRes is not equal to false then
    –指定Bundle IDのプロセスが起動していた場合
    
tell application “System Events”
      tell pRes
        set appFile to application file
      end tell
    end tell
    
  else
    –指定Bundle IDのプロセスが起動していなかった場合
    
tell application “Finder”
      try
        set appFile to application file id bundleID
      on error
        return
      end try
    end tell
    
    
set appFile to appFile as alias
  end if
  
  
  
set aStr to localized string locLabel in bundle appFile
  
end retLocalizedStringFromApp

–指定のバンドルIDのプロセスが起動していればプロセスへの参照を返す、なければfalseを返す
on retExistenceOfProcessByBundleID(bundleID)
  tell application “System Events”
    set aProc to every process whose bundle identifier is equal to bundleID
    
if aProc = {} then return false
    
    
set aProc to contents of first item of aProc
    
return aProc
  end tell
end retExistenceOfProcessByBundleID

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

10/18 指定アプリの指定タグの文字列をアプリ内のLocalizableStringsから取得する

Amazonダウンローダー内でAppleScriptを使っている箇所があり、案の定、オブジェクト名までローカライズされているiTunesの特性を理解せずに作られているために、日本語環境ではまともに動かなくて大笑いしましたが……このような悲劇が起こらないように、いろいろ考えておりました。

結局のところ、アプリケーションのバンドル内のResourcesフォルダの各言語フォルダの中に入っているLocalizable.stringsファイル内から該当するデータを取り出せればよいのだろうか、と考えました。

locali.jpg

そこで、実際にLocalizable.stringsを調査して、実際にオブジェクト名に該当するものを探しだし、ラベルを指定して取り出せるようにしてみました。

Localizable.stringsには文字定数とか画面に表示する文字列なんかを入れておくわけで、このケースでも画面上に「ライブラリ」と表示するためのデータが格納されているわけですが、それがAppleScriptのオブジェクト名と同じであるために、結果オーライで取り出してみることにしました。

本バージョンでは、アプリケーション名とLocalizable.strings内のラベルを指定します。対象のアプリケーションが起動していることが実行条件です。

スクリプト名:指定アプリの指定タグの文字列をアプリ内のLocalizableStringsから取得する

set aRes to retLocalizedStringFromApp(“135.006″, “iTunes”) of me

on retLocalizedStringFromApp(locLabel, appName)
  
  
launchAnApp(appName) of me
  
  
tell application “System Events”
    set aProc to process appName
    
if aProc = “” then return
    
    
tell aProc
      set appPath to application file
    end tell
  end tell
  
  
set aStr to localized string locLabel in bundle appPath –ライブラリ
  
end retLocalizedStringFromApp

on launchAnApp(appName)
  tell application appName to launch
end launchAnApp

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

10/12 iTunes10.5が登場。AppleScript用語辞書に変更なし

iCloudへの対応など新機能を盛り込んだiTunes 10.5が公開されました。さっそく、AppleScript用語辞書を前バージョンのiTunes 10.4.1と比較してみたところ、差異はとくにありませんでした。

06/07 iTunes 10.3β AppleScript用語辞書に変更なし

本日、β版が公開されたiTunes 10.3のAppleScript用語辞書を現行のiTunes 10.2.2と比較してみたところ、変更点がないことを確認しました。

いろんな意味で、ドキドキさせられます。

追記:
iTunes 10.3.1βでもAppleScript用語辞書には変更はありませんでした。

11/13 iTunes 10.1アップデート、AppleScript用語辞書に変更なし

ソフトウェア・アップデート経由でiTunes 10.1アップデートがリリースされました。早速、AppleScript用語辞書をHTMLに書き出して前バージョンとのdiffを取ってみたところ、とくに変更はありませんでした。

最近では、iTunes 7.6.2と9.1で変更(追加)があったぐらいで、用語辞書にはほとんど変更はありません。

11/10 選択中のtrackのうち再生済みのものを削除する

iTunesで選択中のtrackのうち、再生済みのものを削除するAppleScriptです。

Podcastで、ダウンロード先が変更になって……それを知らずにすべてのエピソードをダウンロードしてしまった場合、すべてのエピソードが2つ存在してしまいます。

itunes.jpg

こういうケースでは、旧ダウンロード先から落としてきたエピソード(再生ずみ)を削除し、新ダウンロード先のtrackを残しておくことになるわけで……そのために、再生ずみのtrackのみ削除するAppleScriptを作成したものです。

iTunesといえば、Amazonダウンローダー内でAppleScriptによりtrackの追加を行っているものの、ライブラリ名を英語で書いてしまったため日本語環境でうまく動いていないという悲劇がそこかしこで報告されています。日本語環境できちんと動作検証しないでリリースしてしまったAmazonに合掌(iTunes上でのオブジェクト名を日本語環境に合わせて書き直さないといけない、という間抜けな仕様を作ったAppleにも合掌)。

amazon_bug.jpg

スクリプト名:選択中のtrackのうち再生済みのものを削除する
tell application “iTunes”
  set aList to selection
  
  
repeat with i in aList
    set aP to unplayed of i
    
if aP = false then
      ignoring application responses
        delete i
      end ignoring
    end if
  end repeat
  
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

09/02 iTunes 10でAppleScript用語辞書に変更なし

9/1の発表会で紹介され、その日……のうちギリギリで? ダウンロード可能になったiTunes 10。インストールして真っ先に行うのはAppleScript用語辞書が変更されているかのチェック。大規模な変更があった場合には、さまざまなプログラムを山ほど書き直さなくてはなりません。

it10_1.jpg

it10_2.jpg

HTMLに書き出して比較してみたところ、前バージョンからとくに変更点はない(0箇所)ということが分りました。

とりあえず、辞書上では変更がないということであり、挙動が変わっていないかどうかはこれからじっくり調べることになるでしょう。

03/31 iTunes 9.1で用語辞書に変更アリ

iTunes 9.1がリリースされました。iPadのサポートが主な内容とのことですが、AppleScript用語辞書にも一部(だけ)変更が加わっています。

playlistのspecial kind属性の値が、

 Audiobooks → Books
 Videos → TV Shows

にそれぞれ変更されました。また、Genius、iTunes U、Libraryといった属性値が追加されています。

itunes91.jpg