JavaScriptでwavファイルを読み込んで波形表示するサンプル

動画でリッチなことできるんなら音声でもできるんじゃね? と思ったので書いてみました。

http://yanagiatool.appspot.com/jsaudio/load.html (FireFox3.6系列のみ)

ローカルからwavファイルを画面にドラッグアンドドロップしてみてください。ゆっくり波形が表示されます。
読み込めるwavファイルの形式は16bitステレオのみです。

仕組み

File APIを使ってます。
FileReaderでファイルの中身をStringとして読み込んで、ヘッダをチェックして、データ部を適当にエンディアン変換しながら表示してます。

File APIの使い方やバイナリの扱い方などは

W3C File APIを使ってJavaScriptでファイル加工 - しばそんノート
http://d.hatena.ne.jp/shibason/20100111/1263191021

が参考になりました。thx!

作ってて思ったこと

JavaScriptだと、波形と音声が繋がらないなーと。
今回作ったスクリプトは波形のデータを全部配列に持っていて、それを直接編集することができます。
でも加工した波形データを再生するうまい手段がHTML5/JavaScriptにはなくて*1、こういうことをやる旨みって少ないのかなあと思ったりしました。

var speaker = new SoundOutputUnit();
speaker.renderCallback = function(time){
 ...
}

speaker.start();

みたいなことができるようになると、すごく面白くなるとは思うんですが。

*1:audioタグにdataスキームで渡すという方法はあるけど、50MBのwavを毎回出力するわけにはいかないし。