2012年07月10日

Web Audio APIでオーディオシンセサイズ

このエントリーをはてなブックマークに追加
follow us in feedly
web Audio APIは、JavaScript で音響合成処理するためのAPIです。
ローカルなhtmlファイル(js)だけで、音を出すことが出来ます。

多分手っ取り早く音出すだけのサンプルは、
Web Audio APIはじめました
これだけです。
どうもchromeでは、実行するために何もjsファイルを読み込まなくていいようです。


Web Audio API W3C Editor's Draft


var buf = ctx.createBuffer( 1, 4096 * 4, ctx.sampleRate );

APIにはこう書いてあります。
AudioBuffer createBuffer(in unsigned long numberOfChannels, in unsigned long length, in float sampleRate)


numberOfChannels は、最低でも32 と書いてありますが...?
var data = buf.getChannelData( 0 );

コードのほうにはこのように書いてあったりするのですが

length: サンプルフレームバッファサイズ
sampleRate は、 22050 から 96000


Float32Array getChannelData(in unsigned long channel);

channel は、チャンネル番号

AudioBufferSourceNode createBufferSource();

このAudioBufferSourceNode インタフェースで、

void noteOn(in double when);

void noteGrainOn(in double when, in double grainOffset, in double grainDuration);

void noteOff(in double when);


noteOn( ) で、再生開始しますが、whenで指定した秒で再生するようです。
何時が、その時間なのかというと、AudioContext.currentTime が、whenを超えたら...であると、思います。

再生開始したら、再生終了を待たずにコードの処理は進みます。
と、いうことは.....






AudioBuffer が、再生するオーディオアセットです。 直に値を指定できるので、音の編集はし放題ですね。
ファイルから読み込む場合は....
source = ctx.createBufferSource(),

var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
source.buffer = ctx.createBuffer(xhr.response, false);
source.noteOn(0);
}
xhr.send();
このようにすれば再生できるということになってます
ローカル環境でXMLHttpRequestはファイル読み込みできないような...www上でなければ実行できないようです。

読み込めた形式は... mp3 , wav , どちらも再生できました。 他の再生できる形式もあるんでしょうか?




Android2.2
Android2.3 では使えません。
new webkitAudioContext(); の時点で処理が出来ません。


トラックバックURL

コメントする

名前:
URL:
  情報を記憶: 評価:  顔   星
 
 
 
サイト内検索
にほんブログ村 科学ブログへ
にほんブログ村
adsense
Archives
amazon
blogchart
QRコード
QRコード
Recent Comments