まぁ極稀に自分は悪くないのに動かないことも..(˘ω˘ )
// まず鳴らす
var oscillator = audioCtx.createOscillator();
oscillator.start();
// 止める
oscillator.stop();
// また鳴らそうとするとエラーになって音が鳴らない!
oscillator.start();
Failed to execute 'start' on 'OscillatorNode': cannot call start more than once.
stop()
すると、もうstart()
できないstart()
しないとダメそういうデザインのAPIなので割り切るべし。
stop()
したらdisconnect()
も忘れずに!
var oscillator = audioCtx.createOscillator();
oscillator.frequency.value = 440; // コレとか
var delay = audioCtx.createDelay(5.0);
delay.delayTime.value = 3.0; // コレとか
.value
って必要?// これらは実は AudioParam というオブジェクト(インターフェース)
oscillator.frequency;
delay.delayTime;
値の初期値・範囲は、各AudioNodeごとに違うので、仕様書を読む or 検索して探す。
Its default value is 0 (no delay). The minimum value is 0 and the maximum value is determined by the maxDelayTime argument to the AudioContext method createDelay.
var delay = audioCtx.createDelay(5.0);
delay.delayTime.value = 3.0;
設定できる値は、
というわけです。
音は無事に鳴った。
micStream.stop(); // micStream.stop is not a function
が、止めるとエラーになる!
// micStream.stop();
micStream.getAudioTracks().forEach((track) => { track.stop(); });
ちなみにこれはWebAudioではなく、WebRTC方面のAPIの問題。
AudioContext
webkitAudioContext
だったりAudioNode#start
start
ではなくnoteOn
だったり・・navigator.getUserMedia
navigator.mediaDevices.getUserMedia
コピペして試す場合は、古いAPIのコードに注意!
audioCtx.decodeAudioData(audioData, function(buffer) {
// コールバック
});
audioCtx.decodeAudioData(audioData)
.then(function(buffer) {
// Promise
});
便利なものは使っていきましょう!
xhr.onload
decodeAudioData
エディタやLinterでチェックできるし、慣れの問題でもある。
この表も微妙に古いような・・?
click
やtouchstart
等のイベントを経由しないと音がでないonload
でファイルのロードとdecodeAudioData
まではできるが・・一度でも音を出せば後はOK。
無音のファイルを再生させて回避する小技とかも。
http://www.g200kg.com/jp/docs/dic/ というバイブルで調べましょう!
がんばろう( ∩'-'⊂ )シュッ