niwasawaの迷子センター

迷子になりがちな地図・位置情報系プログラマの日記ブログ。

Alexa スキル「ハイスピード除夜の鐘」で使うためのサウンドを生成する Ruby スクリプト

除夜の鐘を180倍の速度で高速に叩き鳴らす Alexa スキル『ハイスピード除夜の鐘』をリリースしました - 迷子ラボ maigolab

速度など試行錯誤して何度も MP3 ファイルを生成し続けていたので、何度でも簡単に再現できるように Ruby スクリプトを書いて使っていた。

require 'fileutils'

dir = 'tmp'
Dir.mkdir(dir, 0755) if !File.exist?(dir)

a = 4
duration = 0

FileUtils.cp('original.mp3', "#{dir}/0.mp3")
(1..107).each do |i|
  a = a * 0.7
  #a = 0.05 if a <= 0.05
  a = 0.1 if a <= 0.1
  duration = duration + a
  d = format('%2.4f', duration)
  puts "********** DURATION: #{d}"
  system "ffmpeg -y -i #{dir}/#{i-1}.mp3 -i original.mp3 -filter_complex \"aevalsrc=0:d=#{d}[s1];[s1][1:a]concat=n=2:v=0:a=1[ac1];[0:a][ac1]amix=2[aout]\" -map [aout] #{dir}/_#{i}.mp3"
  system "ffmpeg -y -i #{dir}/_#{i}.mp3 -filter:a loudnorm #{dir}/#{i}.mp3"
end

# 音声ファイルをAlexaに適した形式に変換
# コーデックバージョン: MPEGバージョン2
# ビットレート: 48 kbps
system "ffmpeg -y -i #{dir}/107.mp3 -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 #{dir}/output.mp3"

ただ、これだけだと音量が足りなかったので、音量上げるためのシェルスクリプトを後から書いて使った。

ffmpeg -y -i 107.mp3 -af "volume=5.0" 107_x5.mp3
ffmpeg -y -i 107_x5.mp3 -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 vvx5.mp3