信助さんのオーディオ

いい音で音楽を聴きたい

Quicktimeでアルバム一枚聞きたい その2

2008-03-12 13:15:00 | オーディオ
もし、曲をつなげて一曲にしてしまうスクリプトがあったら、
Quicktimeでアルバムが聴けるのにとブログにと書いたら、
Westacularさんの作ったスクリプトを40番さんに教えていただいた。
いい情報ありがとうございました。ブログをやって良かったと感じました。

そのスクリプトを私なりにモディファイしてみた。
以下は変更点。

1. Chapter番号しか表示されなかったので、
曲名がチャプターに表示されるようにした。

2. ファイルをつなげた後、ポインタが先頭に来るようにした。
(スタートボタンを押せば、すぐ再生出来るようにした。
オリジナルバージョンでは最後の位置)

3. 高域を少し持ち上げた。
(私のシステムではこれぐらいがちょうどいい)

アルバム名も表示されるようにしたいが、現在アイデアなし。
誰か、そこだけ作ってくれるとありがたい。

以下はモディファイしたスクリプト。
赤字は私がモディファイしたところ。

on run {input, parameters}
tell application "Finder" to set input
to sort input by name
repeat with i from 1 to the count of input
set this_item to (item i of input)
tell application "QuickTime Player"
if i is equal to 1 then
make new movie
end if
open this_item
tell movie 1
set MusicName to name of this_item
rewind
select all
copy
select none
end tell
close movie 1 saving no
tell movie 1
add
select none
if i is equal to 1 then
set this_track to make new track at beginning with data "Chapter 1"
set enabled of this_track to false
set the name of this_track to "Chapter Track"
set chapterlist of track 1 to track "Chapter Track"
set the movie_length to the duration
tell chapter 1
set the time to 0
set the duration to movie_length
set the name to MusicName
end tell
else
set the newmovielength to the duration
set the duration of this_track to newmovielength
set the chapter_list to the name of every chapter
set the new_chapter_list to chapter_list & (i as string)
set the contents of the current chapter track to the new_chapter_list
set the time of chapter i to movie_length
set the duration of chapter i to newmovielength - movie_length
set the name of chapter i of this_track to MusicName
set movie_length to the duration
end if
end tell
end tell
end repeat
tell application "QuickTime Player"
tell movie 1
set treble gain to 95
rewind
end tell
end tell

return input
end run

最新の画像もっと見る

30 コメント

コメント日が  古い順  |   新しい順
日本語が… (40番)
2008-03-12 20:55:21
Westacularさんのスクリプトには、2つの問題点がありますね。

1.チャプターをファイル名にすると日本語が文字化けしてしまう。
2.チャプター用のテキストファイルがないので「参照ムービーとして保存」ができない。(保存時に選択はできるが、実際には独立再生形式で保存される)

とくに参照ムービーにできないのが残念です。これにすれば、もとのAIFFファイルを直接参照して再生するので、音質劣化が避けられます。

ということで、上記の問題をクリアしたソフトを今作ってます。かなりイイところまで仕上がってるので、お楽しみに。
返信する
楽しみにしています (信助)
2008-03-13 10:59:03
確かに、私の追加したプログラムだと日本語が文字化けしますね。
今朝気づきました。

また、Westacularさんのスクリプトのスクリプトで出来たファイルを
保存しない方がいい音のように感じました。
(きちんと聞き直さなければいけませんが)
これも40番さんのおっしゃっていることが正しいと思います。

ソフトの完成、楽しみにしております。
返信する
Concatenate Movies 0.9.0 (40番)
2008-03-17 01:16:05
お待たせです。一通り仕上げたソフトをUPしました。
http://www.box.net/shared/c97ux75ics
どうぞ良かったらお使いください(Mac OSX 専用です)。
使い方等の詳細は同梱の「Read Me」に書いておきました。

このソフトは前準備(QuickTime Player への関連付け)は不要です。それから、チャプター用のテキストファイルがなくても「参照ムービー」に保存できました。あの AppleScript がどうして参照ムービーにできないのか不明です…。

音質は、AIFF ファイルを直接再生した音より、若干角が取れたような感じに聴こえました。微妙なところです。
返信する
力作ですね (信助)
2008-03-17 23:09:48
ありがとうございます!!!
ソフト使ってみました。
マイリストが作れるところが良いですね。
日本語表示にするのも大変な作業のようですね。
私は少しの変更するだけでも一苦労ですが、
40番さんぐらいのスキルがあると色々出来て楽しいでしょうね。

このソフトはどの言語で作ったのでしょうか?
アップルスクリプトを勉強してみたいのですが、
お勧めの入門書やホームページがありましたら
教えていただけませんでしょうか?
プログラム例(特にQuicktime)が多いとうれしいのですが。
返信する
どうもどうも (40番)
2008-03-18 09:47:18
> このソフトはどの言語で作ったのでしょうか?
REALbasic です。本当は Xcode で作れれば良いのですが、スキルがしょぼしょぼなので、もっぱらこれで楽しんで作ってます。

AppleScript はなかなか良い参考書がありませんね。信助さんはある程度のカスタマイズができる方なので、やりたい処理をネット検索で探して、他の方が書いたコードを参考にするのがベストだと思います。アプリケーション形式で配付されていても、スクリプトエディタで中のコードを見れるものもありますし、やはり他人のコードを見るのが一番参考になりますね。

ところで、QuickTime ムービーですが、参照ムービーで保存してもかなり音質が劣化してしまいますね。どうもインターネット・ストリーミング向けにサウンドをわざと品質を下げて(圧縮して)再生しているようです。通常の「保存」ではどうしてもこうなってしまいます。

解決方法としては、保存ではなく「書き出し」の機能を使って、サウンドを「最高品質」に設定すれば、劣化の度合いは少なくなります。ただこの方法ですと、独立再生形式にするしかなく、しかもチェプターもなくなってしまいます。文字コードの件もそうですが、QuickTime は思いのほかできることが限られているので驚きました。

一応、上記をふまえてソフトを改修してみます。未保存の連結ムービーをAIFFに書き出す機能も追加できればと思っております。
返信する
保存する前の音 (信助)
2008-03-18 13:12:12
言語の事、教えて下さり、ありがとうございます。
昔、マシン語やベーシックでプログラムを作っていたのですが、
最近の言葉は高尚すぎて、敷居が高いです。
もっとも、音楽データを切り貼りするプログラムを簡単に書けるのは、夢のようですが。

もう少し確認をしてから書いた方が良いかもしれないのですが、
Westacularさんのプログラムで作った連結ファイルと、
40番さんに作っていただいたプログラムで作った連結ファイルの
音を聞き比べて、Westacularさんの方が音が良いように感じました。
どちらも保存する前のファイルを比較したので、どちらも同じ音になるはずなのですが、
40番さんに作っていただいた方の音はハイ下がりに感じました。
2回ほど聞いてみたのですが、どちらも、そのように感じました。
間違っていたら、失礼なので、もう少しチェックしたかったのですが、
早くお知らせた方が良いかもしれないと思い、書きました。
せっかく作っていただいたのに文句を言って申し訳ありません。
返信する
遠慮なく言ってください (40番)
2008-03-18 16:36:07
大丈夫ですよ。これは原因が QuickTime プレーヤー側にあるので、私はなんとも感じませんから(笑)

> 昔、マシン語やベーシックでプログラムを作っていた
でしたら REALbasic はかなり敷居が低いはずです。購入金額がちょっと高くて、日本では人気も活気もないので強くお薦めはできない状況ですけど、遊んで楽しむには良い玩具です。
返信する
連続再生の AppleScript (40番)
2008-03-20 16:36:43
色々と試してみたのですが、連結ムービーはどうやっても音質が劣化してしまいます。それもデジタル的に加工されたようなイヤな感じの音になります。
そこで、そもそもの初めに戻って、AppleScript で連続自動再生するのがやはりベストなのではと考えました。で、作ってみたのが以下のスクリプトです。アプリケーション形式で保存してドラッグ&ドロップで使います。


on open these_items
try
set QTpath to quoted form of POSIX path of (path to application "QuickTime Player")

tell application "Finder" to set sorted_items to sort these_items by name
repeat with this_item in sorted_items

set itemPath to quoted form of POSIX path of (this_item as Unicode text)
do shell script "open -a " & QTpath & " " & itemPath -- QuickTime Player で開く

tell application "QuickTime Player"
tell document 1
rewind
select none
start
repeat until not playing
delay 1
end repeat
close
end tell
end tell

end repeat
end try
end open


「repeat until not playing ~ delay 1 ~ end repeat」のところで、再生が終了したかどうかを1秒ごとに確認しています。終了していれば次のファイルを開いて再生をはじめます。

「do shell script」で ファイルをちゃんと QuickTime Player で開くようにしているので、関連づけは不要です。

「try ~ end try」で囲っているのは、ユーザが途中で QuickTime Player を終了するとエラーメッセージが出るので、それを出さないようにするためです。

欠点はギャップレス再生ができないことですが、音質を考えるとこれがベストでしょうね。
返信する
使ってみました (信助)
2008-03-21 10:47:53
新しいプログラムを作って下さり、ありがとうございます。
シンプルなプログラムで書けてしまうのですね。びっくりしました。

音を聞いてみたのですが、普通のQuicitime一曲再生やWestacularさんのスクリプトと同じ音のように感じました。ただ、今日少し疲れているので細かいところは聞き取れていないかもしれません。

40番さんのプログラムを使っていて、一時停止をすると次の曲の再生が始まってしまう点、ボリュームを絞って聞いているとき、次の曲始まるときにフルボリュームになってしまう点が気になりました。

Westacularさんのスクリプトを修正して日本語表示することが出来れば、それらの点も音質の問題も解決出来ると思うのですが、難しそうでしょうか?
返信する
修正版です (40番)
2008-03-21 16:56:16
on open these_items
try
set myVol to 256 -- 最初はフルボリューム
set QTpath to quoted form of POSIX path of (path to application "QuickTime Player")

tell application "Finder" to set sorted_items to sort these_items by name
repeat with this_item in sorted_items

set itemPath to quoted form of POSIX path of (this_item as Unicode text)
do shell script "open -a " & QTpath & " " & itemPath -- QuickTime Player で開く

tell application "QuickTime Player"
set docName to name of front document
tell document docName
rewind
select none
set sound volume to myVol
start
repeat until (not playing) and (current time = duration)
delay 1
end repeat
set myVol to sound volume
close
end tell
end tell

end repeat
end try
end open


こんなところでどうでしょう? 再生中に次のファイルへ移るには、曲の終わりまでジャンプさせて「current time = duration」にしてしまえばOKです。

> Westacularさんのスクリプトを修正して日本語表示することが出来れば

あのスクリプトでは「あ」が「0B」と文字化けします。これはVB風に言うと「chr(asc("あ"))」というような処理をしているとしか考えられません。つまりASCII文字列であることを大前提にしているわけで、この QuickTime Player の仕様では日本語の処理はどうやっても不可能だと思います。

私がRbで作ったソフトでは、Text Track を作成する最も真っ当な方法を採用しています。
http://www.apple.com/quicktime/tutorials/texttracks.html
↑このような text track descriptors を生成して、連結したムービーへ追加しています(日本語はこの方法でしかチャプターにできません)。

ムービーを連結する処理は Westacular さんとまったく同じことをしていますので、この「Text Track を作成する最も真っ当な方法」が音を悪くさせている原因かもしれません。だとすると、これも「仕様」ということで、打つ手はありませんね…。
返信する

コメントを投稿