回答編集履歴
2
コールバック関数が呼び出されるイメージ画像を追加
answer
CHANGED
@@ -12,6 +12,8 @@
|
|
12
12
|
|
13
13
|
が実行されるタイミングで、`synth`関数の第3引数で`undefined`が渡され、意図しない結果となっていると思われます。
|
14
14
|
|
15
|
+

|
16
|
+
|
15
17
|
# 対処方法
|
16
18
|
|
17
19
|
`fetchAsAudioBuffer`関数に渡しているコールバック関数が実行されるタイミングで`AudioBuffer`が得られているので、このタイミングで`synth`関数を呼び出すことで、とりあえずの対処ができそうです。
|
1
プログラムの修正例を追記
answer
CHANGED
@@ -16,4 +16,18 @@
|
|
16
16
|
|
17
17
|
`fetchAsAudioBuffer`関数に渡しているコールバック関数が実行されるタイミングで`AudioBuffer`が得られているので、このタイミングで`synth`関数を呼び出すことで、とりあえずの対処ができそうです。
|
18
18
|
|
19
|
-
`synth`関数の第4引数に、`AudioContext.createGain()`で得られた`GainNode`のオブジェクトを渡しているので、`fetchAsAudioBuffer`関数を呼び出す前に、`GainNode`のオブジェクトを得ておく必要があります。
|
19
|
+
`synth`関数の第4引数に、`AudioContext.createGain()`で得られた`GainNode`のオブジェクトを渡しているので、`fetchAsAudioBuffer`関数を呼び出す前に、`GainNode`のオブジェクトを得ておく必要があります。
|
20
|
+
|
21
|
+
```JavaScript
|
22
|
+
(略)
|
23
|
+
:
|
24
|
+
const sound = {};
|
25
|
+
let instrument;
|
26
|
+
sound.volume = ctx.createGain(); // 先に sound.volume の GainNode を作っておく
|
27
|
+
fetchAsAudioBuffer(ctx, 'Myaudio.wav', function(audioBuffer) {
|
28
|
+
instrument = audioBuffer;
|
29
|
+
synth(ctx, ctx.currentTime, instrument, sound.volume);
|
30
|
+
});
|
31
|
+
:
|
32
|
+
(略)
|
33
|
+
```
|