H.M.F.B AppleScript.



QuickTimeでMP3ファイルを便利に?再生する、フォルダアクションスクリプトを紹介します。
現在のバージョンではQuickTime PlayerでMP3ファイルを聴く事が可能となっていますが、沢山のファイルを管理しそして再生するような機能はありませんよね、「お気に入り」を順番に再生してくれれば良いのですが?(出来ないですよね?たしか?)


000
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036






on opening folder MusicFolder
  tell application "Finder"
    repeat with i in MusicFolder
      set MusicFile to i as alias
      set FileSize to (size of i) as integer
      set FileSecond to (FileSize div 16000) + 1

      set label index of MusicFile to 2

      tell application "QuickTime Player"
        set myfile to open MusicFile
        play myfile

        delay (FileSecond - 30)
        set MscPlay to playing
      end tell

      try
        if MscPlay then
          delay 30
        else
          set label index of MusicFile to 0
          exit repeat
        end if
      on error
        set label index of MusicFile to 0
        exit repeat
      end try


      set label index of MusicFile to 0
    end repeat

  end tell
end opening folder


さて、上記のスクリプトを「スクリプト編集プログラム」へ書いてください。

面倒な方はこちらをD/L → 023-QuickTimeMP3.sit

今回のスクリプトは「フォルダアクション」として使用しますので、コンパイル後にアプリケーション形式へ保存し直す必要はありません。



さてさて、上記ファイルを書いてくれましたか?、説明に入る前にフォルダアクションの設定方法を紹介まします。

1、フォルダアクションのアプレットを用意する(Classc/OS Xアプリケーション形式不可)


上記のようにコンテクストメニュー(control+クリック)から「フォルダアクションをつける...」を選択するとダイアログが開くので上記画像でいう「QuickTime MP3 1.0」を選び設定します。
ちなみに設定すると↓下記のような可愛いスクリプトマーク?が付いたアイコンへ変更となります。


2、の設定方法と同じでアクションを削除したいフォルダを選択しコンテクストメニューより「フォルダアクションの削除」から表示されるスクリプトを削除します。
(実際には、フォルダへスクリプトがリンクされている?ような物ですのでその「リンクが解除になる」といった良い回しの方がピンとくるかもしれませんね、)


MacMP3というact2より発売されているソフトなどには「プレイリスト」といってMP3ファイルをリストに追加して順番に再生させたりする機能があり、QuickTimeにはそれがありませんそれをAppleScriptで表現してみたのですが?、いかがでしょうか?

まぁ、MacOSとQuickTimeそのまんまじゃん!という事でMacOSにマッチ!(そりゃそうだ、)
まいっか、、スクリプトの解説しよ、、汗。



今回のアプレットは、「フォルダアクションスクリプト」といったハンドラ?(で良いのかな?)を使用するので、動作の確認をしたりする事が面倒なのがいやなんですよね、、。
僕はこういう場合は、はじめにハンドラを使用しないアプレットでバグなどを修正して最後の仕上げでハンドラをくっ付けてチョコチョコ修正という感じで作成していますね。
さて、解説はいります。

001行目 on opening folder MusicFolder 〜 end opening folder
ここは、今回の目玉である、フォルダアクションのハンドラです。
この、MusicFolderは変数となり、ココにはフォルダの参照が入ります(つまり、開かれたフォルダのaliasが入っていると思って良いと思います)
ちなみに、これはフォルダが開いた時に反応するのがこの opening folderです。 そして、フォルダが閉じた時に実行させたい時には、closing folderと書きます、他にもあと3つくらいあるのですが、それはMacOS付属のヘルプにありますので興味の有る方はそれを見てくださいね、「フォルダアクション」で検索すれば出てきますよ。

002行目 tell application "Finder"
Finderを呼び出しました。

003行目 repeat with i in MusicFolder
再度になりますが、repeat with i in MusicFolder としたrepeat文では、ループ変数「i」には、in 何々の参照が1つずつ入ります。

004行目 set MusicFile to i as alias
こちらでは、その「i」の参照をasでalias形式に変換して変数「MusicFile」へ格納しています。(別に変数に入れる必要もないのですがね、、)

005行目 set FileSize to (size of i) as integer
QuickTimeで再生し終わったら次のファイルへ移動したいので、その時間をファイルサイズから算出しようと思いファイルサイズをFileSizeへ変数として格納します。ここでも as 変換演算子でinteger(整数)へ変換していますが、これはそのままのサイズでは、Kbiteで訳のわからない形なのでintegerに変換して整数としました(これは後に計算する為です)

006行目 set FileSecond to (FileSize div 16000) + 1
まず、最初にいっておかなければならなかったのですが、MP3ファイルの一般的な(128kbps)という圧縮形式では1秒当りの約16000byteとなるのでそこから曲の秒数を出しファイルの再生終了を知り、終了すれば次のファイルへ、、と移動させる為にどうしても曲の長さを知りたいが為の苦肉の策というんでしょうかね、、(笑) + 1 は、div は、小数点以下切り捨ての割算なので1秒くらい足しておこうかな?という感じです、、(もっと多くプラスした方が良いですよー、)

008行目 set ladel index of MusicFile to 2
ここでは、再生中のファイルのラベルを変更した方が便利なので色を変更してみました。

010行目 tell application "QuickTime Player"
QuickTime Playerを呼び出しています、ここからはend tell が入るまでQuickTimeのスクリプトを記述します。

011行目 set myfile to open MusicFile
こちらでは、repeatでの「i」の参照を開いています。 そして次の行で再生させる為に変数へ代入しています。

012行目 play myfile
011行目と同じ参照を再生させています。

014行目 delay (FileSecond - 30)
delay 整数 とするとその整数で指定した秒数の間だ処理を継続します。 ここでは、FileSecond -30としているのは、Stopされたのを関知する為です、それは次の行で、、。

015行目 set MscPlay to playing
playingは、QuickTimeで再生中か?もしくは、停止中か?を関知しています。 ここでは、終了30秒前の時点で停止しているのか?再生しているのか?を判断してアプレットを終了する為の措置です。
(他に良い方法はあるのだろうか?)

018〜028行目
try
  if
  else
  end if
on error
  上記のtry〜on error中にエラーが起きた場合にココが実行されます。
end try

ここは、ちょっと僕も悩みました(いや、そんなにでもないけど)、015行目でplayingでは、QuickTimeのファイルが開いていない場合は何も返ってこないのでエラーとなってしまう為、if文のみではちょっと出来なかったんです、、(方法を変えればできると思いますが、、、笑)

処理している内容は、ファイルが再生中ならばdelay 30を実行し(014行目の残りの30秒ですね)もし、ファイルが停止していたら、labelの色を元に戻しrepeatを抜ける exit repeatを実行します。
015行目で求めた時点でファイルが閉じていたりplayingがtrue,falseではない場合(何も返さない)は、エラーとなってしまうので on error内でfalse時と同じ動作をさせています。

031行目 set label index of MusicFile to 0
ここにスクリプトが実行されたということは曲が終了しているので、labelを元の色に戻します。

032行目 end repeat
repeatをくり返し、もしくは終了します。

034行目 end tell
Finderのブロックを終了します。

035行目 end opening folder
ハンドラを終了します。



今回は何かわかりずらかったかなぁ、、僕も久々に書いたからね、、説明もノリノリだと簡単に書いてしまうんですが、、。 今回のアプレット作成しようと思ったのは、チャットをしてて「あ、今QuickTimeで音楽聴いてる、」って方が居たんですね、、それで作ってみたんですが、、どうでしょう?

という事で、活用出来るかわかりませんが今回のアプレットおすすめ?ですよ。(ってフリーウェアダウンロードした方が良いかも、、汗)いまいちメリットが少ないのですが、こんなんもできるよーって感じでしたね、、。 さて、また今度ですー!



(c)HandyMacForBeginner's