という事情から、Windowsでは
としていた。
Macで同等のフローを組めていないため、さらにMacのiTunesにコピーという手順が加わっていて、面倒な状況になっている。 iTunes9のホームシェアリングでコピーは便利になったけれど。
iGainについては、 MacMP3Gainと AACGainで 代替できそうだったが、どのタグを使って音量調整をしているのか分からなかったので、 導入に踏み切れなかった。オプションタブの音量調整を使う方法がベストとも思わないが。
そこで、MacPortsでaacgainコマンドをインストールして解析だけさせて、ruby scriptでiTunesの音量調整(volume adjustment)を使うことにした。
高尾 宏治 "RubyによるMac OS Xデスクトップアプリケーション開発入門 ~Ruby×RubyCocoa/MacRuby×HotCocoa~"
を読むと、GUIなwrapperを作れるかな。
#! /usr/bin/env ruby
require 'osx/cocoa'
include OSX
OSX.require_framework 'ScriptingBridge'
require 'getopts'
include Math
AACGAIN = 'aacgain'
DB2VA = 3.2
DBGAIN = 0
def usage
puts <<EOM
SYNOPSYS
#{$0} {-a|-s} [-n]
OPTIONS
-a album mode. set an average value to all tracks
-s single mode
-n dry run
EOM
end
def main
if ((! getopts('asn')) ||
(! ($OPT_a || $OPT_s)) ||
($OPT_a && $OPT_s))
usage
exit
end
iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")
selections = iTunes.selection.get
dbs = Array::new
selections.each do |t|
puts t.location.path
path = t.location.path.to_s.gsub(/([ \'\"\&\(\)\[\]])/, '\\\\' + '\1')
strs = `#{AACGAIN} -o -s s -d #{DBGAIN} #{path}`
db = strs.split[-4].to_f
dbs.push(db)
puts "#{db}dB #{t.name}"
end
powers = dbs.map {|db| 10 ** (db/10.0)}
sum = 0
powers.each {|power| sum += power}
avg_db = 10 * log10(sum / powers.length)
puts "#{avg_db}dB average"
avg_va = (DB2VA * avg_db).to_i
vas = dbs.map{|db| (db * DB2VA).to_i}
selections.each do |t|
if ($OPT_a)
va = avg_va
elsif ($OPT_s)
va = vas.shift
end
if ($OPT_n)
puts "#{va} volume adjustment setting to #{t.name} skipped"
else
t.volumeAdjustment = va
puts "#{t.volumeAdjustment} volume adjustment setting to #{t.name}"
end
end
end
main