Archive for the 'GarageBand' Category

2015/07/01 iTunes, iBooks Author, XcodeなどOS X 10.10.4に合わせてアップデート

OS X 10.10.4が公開され、同時にiTunes 12.2.0、iBooks Author 2.3、GarageBand 10.1、Xcode 6.4なども公開されました。

OS X 10.10.4では、既存のバグのうち直ったものもあれば直っていないものもあり・・・かつ長期的にテストするとやっぱり動いていないようなもの(Message.appのメッセージ受信などのイベントハンドラで実行するAppleScriptについては、長期間テストしてみると動かないケースもあったりで)もあり、10.10.x系列のバグ取りに協力すべきなのか10.11系列のテストに移行すべきなのかいまひとつはっきりしません。

とりあえず、AppleScript的に見た各アプリケーションの対応度の変化を調べてみました。用語辞書レベルではとくに変化はないように見えます(すべて前バージョンとdiffで比較してみました)。

iTunes 12.2

AppleScript用語辞書の内容について、前バージョンからの変化はありません。

iBooks Author 2.3

用語辞書はついているものの、アプリケーションの機能をほとんどサポートしておらず、「仕事しているフリ」というレベルです。前バージョンと変化はありません。現状では本アプリで行う仕事を自動化するのに役立つ機能はAppleScriptなどのOSA言語からは一切利用できません(書類のオープンとクローズができる程度)。

GarageBand 10.1

ものすごく割り切ったAppleScript用語辞書がついています。renderPreviewという1つの命令のみ実装されており、

renderPreview v : Render an iLife Preview for a project
 renderPreview [file] : Reference to the project

という内容のようですが、これが本当に役立つものかどうかは不明です。あと、説明がそっけなさすぎて「iLife Preview」の指すものが、GarageBandのファイルなのか、iPhoto/Photos、iTunesなどのiLife Applicationのデータなのかがよくわかりません。

Xcode 6.4

前バージョンからの変更点はAppleScript用語辞書的にはありません。Xcodeによる開発作業やプロジェクトの自動解析などに役立つレベルの実装にはなっていません。

2013/09/22 GarageBandをAppleScriptからコントロール

GarageBandは、「一応」AppleScript用語辞書を持っており、AppleScriptからコントロールできます。

GarageBandで音声の編集を行っていると、煩雑な作業に対してはAppleScriptで自動化したくなります。

しかし、GarageBandがAppleScriptに提供している主な機能は、再生や巻き戻し、早送りといったプレイバック系の機能が中心であり、編集時に役立つ機能や、iTunesへの書き出し時にさまざまな条件を変更して複数回行うといったものではありません。

最悪の場合には、GUI Scriptingを併用して強制的にコントロールすることも可能ですが、GarageBandの予想外の挙動により途中で中断されてしまう可能性もあるため、なんともいえないところです。

というわけで、「まっとうなAppleScriptのアプローチ」から、調べてみたサンプルをいくつか掲載しておきます。ただ、本当に基礎的な調査ができる程度なので期待しないでください。

スクリプト名:GarageBandのアプリ情報を取得する
tell application “GarageBand”
  properties
  
–> {name:”GarageBand”, frontmost:false, class:application, version:”6.0.5″}
end tell

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

スクリプト名:GarageBandでdocument(song)にアクセス
tell application “GarageBand”
  count every song –documentと書くと”song”と差し替えられる
  
tell song 1
    count every track
    
–> 3
  end tell
end tell

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

song(document)は複数オープンできませんし、songのpropertiesも取得できません。AppleScript用語辞書には書いてあるのに、その通りには動かないようです。ただ、GarageBandに対して誰もそんな真面目にAppleScriptの機能を調査するとはAppleの連中も思っていないようなので、こういう状態なのでしょう。

propertiesではアクセスできませんが、個別の属性値を調べるとある程度は調査できます。

スクリプト名:GarageBandでsongの属性に個別にアクセス
tell application “GarageBand”
  tell song 1
    set aName to name
    
–> “keiko_All_utairi.band”
    
    
set aPath to path
    
–> “/Users/maro/Music/GarageBand/Podcasting/utairi/keiko_All_utairi.band”
    
    
set aCPUload to CPU load
    
–> 2
    
    
set aCycleMode to cycle mode
    
–> false
    
    
set aMasterVol to master volume
    
–> 0.708661437035
    
    
set aTempo to tempo
    
–> error “GarageBand でエラーが起きました:AppleEvent のハンドラで誤りが起きました。” number -10000
    
    
set aClass to class
    
–> error “GarageBand でエラーが起きました:AppleEvent のハンドラで誤りが起きました。” number -10000
    
  end tell
end tell

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

「ダメなアプリの証明」ともいうべき、「見えないWindowのプロパティが取得できてしまう」状態でもあります。見えない(機能的に関係ない)Windowが見えてしまうのは、どうかと思います。

スクリプト名:GarageBandでWindowのプロパティにアクセス
tell application “GarageBand”
  set wCount to count every window –Windowの枚数を数えると、見えないウィンドウの情報も返ってくる
  
repeat with i from 1 to wCount
    properties of window i
    
    
(*
      get properties of window 1
    –> {zoomed:false, miniaturized:false, name:”My Song 3_18.band”, floating:false, modal:false, document:document “My Song 3_18.band”, miniaturizable:true, class:window, closeable:false, resizable:true, zoomable:true, visible:true, id:4308, bounds:{27, 39, 2003, 982}, titled:false, index:1}
  get properties of window 2
    –> {zoomed:false, miniaturized:false, name:”Apogee One”, floating:false, modal:false, document:missing value, miniaturizable:false, class:window, closeable:false, resizable:false, zoomable:false, visible:false, id:4261, bounds:{550, 434, 898, 913}, titled:false, index:2}
  get properties of window 3
    –> {zoomed:false, miniaturized:false, name:”Apogee Duet”, floating:false, modal:false, document:missing value, miniaturizable:false, class:window, closeable:false, resizable:false, zoomable:false, visible:false, id:4262, bounds:{1284, 28, 1697, 677}, titled:false, index:3}
  get properties of window 4
    –> {zoomed:true, miniaturized:false, name:”Apogee GiO”, floating:false, modal:false, document:missing value, miniaturizable:false, class:window, closeable:false, resizable:false, zoomable:false, visible:false, id:4263, bounds:{550, 438, 898, 766}, titled:false, index:4}
  get properties of window 5
    –> {zoomed:false, miniaturized:false, name:”GarageBand”, floating:false, modal:false, document:missing value, miniaturizable:true, class:window, closeable:true, resizable:true, zoomable:true, visible:false, id:4265, bounds:{528, 205, 1475, 731}, titled:true, index:5}
    *)

  end repeat
  
end tell

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