という事情から、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