to top page
2013-03-24
オーディオの波形を GIF アニメに


オーディオファイルから波形を取り出して GIF アニメにした。
使用ツールは、SPTKRImageMagick

材料のオーディオは次のような WAV ファイル。
Input File      : 'waka.wav'
Channels : 1
Sample Rate : 16000
Precision : 16-bit
Duration : 00:03:13.80 = 3100800 samples ~ 14535 CDDA sectors
File Size : 6.20M
Bit Rate : 256k
Sample Encoding : 16-bit Signed Integer PCM

全体で3分以上あるが、使ったのは先頭の4秒あまり。
このオーディオ(data.raw)から、1/16秒ずつずらしながら長さ1秒のファイルを50本切り出してテキストファイルにダンプ。

切り出しは SPTK の bcut コマンド、ダンプは dmp コマンドを使い、次の Ruby スクリプトで回した。
s = 0
e = 15999
1.upto(50) do |i|
  system("bcut +s -s #{s} -e #{e} data.raw | dmp +s > #{"%04d"%i}.dmp")
  s += 1000
  e += 1000
end

生成された50本の .dmp ファイルを次の R スクリプトで PNG 化。
for (i in 1:50) {
  data <- read.table(sprintf("%04d.dmp", i))
  newfile = sprintf("%04d.png", i)
  png(newfile, 600, 400)
  plot(data,type="l", ylim=c(-20000,20000), ylab="", xlab="", col="blue")
  dev.off()
}

最後に ImageMagick の convert コマンドで50本の .png ファイルを GIF アニメにまとめた。
convert -delay 16 -loop 0 *.png wave.gif