WebAudioAPIでピッチシフトをさせるためにScriptProcessorNodeを使って実装させようと思ってます。ピッチを二倍するためには波形を再生速度を0.5倍にして0.5倍縮小したらいいらしいのですがどのようなコードにすればいいか模索して行き詰まっています。
「サウンドプログラミング入門」青木直史(著)のピッチシフトの部分を参考にしていますが本がC言語なので書き方があっているかわかりません。
http://floor13.sakura.ne.jp/book06/book06.html
JavaScript
1 PichShift.setup = function(audioStream) { 2 console.log("PichShift setup"); 3 var processor = audioCtx.createScriptProcessor(1024, 2, 2); 4 this.output = audioCtx.createMediaStreamDestination(); 5 this.mic = audioCtx.createMediaStreamSource(audioStream); 6 this.mic.connect(processor); 7 processor.connect(this.output); 8 processor.onaudioprocess = function(event) { 9 // Get the instance of Float32Array for output data (Array size equals buffer size) 10 var outputLs = event.outputBuffer.getChannelData(0); // Left channel 11 var outputRs = event.outputBuffer.getChannelData(1); // Right channel 12 var pich = 2.0; 13 var n = 128; 14 for (var i = 0; i < 1024; i++) { 15 // Fundamental period 16 var t = pich*i; 17 for(int m = t - n / 2; m <= t + n ; m ++){ 18 if(m >= 0 && m < 1024){ 19 outputLs[i] += outputRs[i] * Math.sin(Math.PI*(t - m)) * (0.5 + 0.5 * Math.cos(2.0 * Math.PI * (t - m) / (n * 2 + 1))); 20 } 21 } 22 var output = 0; 23 24 // Output sound 25 outputLs[i] = output; 26 outputRs[i] = output; 27 // Update phase 28 } 29 }; 30 31}
これをindex.htmlで呼んでいますがエラーで動きません。
JavaScript初心者なので根本的なメソッドの書き方が違うかもしれません。
アドバイスよろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/13 01:53
2017/07/13 02:58
退会済みユーザー
2017/07/13 04:33