オーディオの波形を GIF アニメに
オーディオファイルから波形を取り出して GIF アニメにした。
使用ツールは、SPTK、R、ImageMagick。
材料のオーディオは次のような 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