質問編集履歴
4
編集
test
CHANGED
File without changes
|
test
CHANGED
@@ -179,5 +179,10 @@
|
|
179
179
|
(anonymous) @ (index):7
|
180
180
|
```
|
181
181
|
|
182
|
+
最初のエラーについて調べてみたのですが
|
183
|
+
https://www.wizard-notes.com/entry/javascript/web-audio-api-chrome-user-interaction
|
184
|
+
のようなサイトを見るに,音を自動再生するのがchromeでは禁止されているのでnew AudioContextをしようというものとなっていました.
|
185
|
+
しかし,一応上のコードではインスタンスの作成はしていますし,Goを経由しない時には音が出せていたので,コードの構成上の問題ではなく,インスタンスの作り方が間違っているということなのでしょうか.
|
182
186
|
|
183
187
|
|
188
|
+
|
3
編集
test
CHANGED
File without changes
|
test
CHANGED
@@ -115,7 +115,7 @@
|
|
115
115
|
|
116
116
|
|
117
117
|
### 追記
|
118
|
-
フィールド名にドットを使ってはいけないとのご指摘を受けたので,考えた範囲で修正いたしました.
|
118
|
+
フィールド名にドットを使ってはいけない,フィールドはjs.Valueのものを使って取得する,とのご指摘を受けたので,考えた範囲で修正いたしました.
|
119
119
|
|
120
120
|
|
121
121
|
##### webassembly.go
|
@@ -140,7 +140,7 @@
|
|
140
140
|
osc := js.Global().Get("OscillatorNode").New(ctx)
|
141
141
|
osc.Set("frequency", 440)
|
142
142
|
osc.Set("type", "sine")
|
143
|
-
osc.Call("connect", ctx.destination)
|
143
|
+
osc.Call("connect", ctx.Get("destination"))
|
144
144
|
osc.Call("start")
|
145
145
|
body.Call("appendChild", osc)
|
146
146
|
|
@@ -152,8 +152,32 @@
|
|
152
152
|
}
|
153
153
|
```
|
154
154
|
|
155
|
+
ビルドとmain.goの実行まではエラーが出ることなく進んだのですが,ブラウザで対象の場所に行っても音は鳴りませんでした.
|
156
|
+
ブラウザ上でコンソールを確認してみると以下のようなエラー文が出ていました.
|
157
|
+
|
155
|
-
```
|
158
|
+
```console
|
159
|
+
The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://goo.gl/7K7WLu
|
160
|
+
syscall/js.valueNew @ wasm_exec.js:383
|
161
|
+
Promise.then (async)
|
162
|
+
(anonymous) @ (index):7
|
163
|
+
|
164
|
+
wasm_exec.js:349 The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://goo.gl/7K7WLu
|
165
|
+
syscall/js.valueCall @ wasm_exec.js:349
|
166
|
+
Promise.then (async)
|
167
|
+
(anonymous) @ (index):7
|
168
|
+
wasm_exec.js:22 panic: JavaScript error: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.
|
169
|
+
wasm_exec.js:22
|
170
|
+
wasm_exec.js:22 goroutine 1 [running]:
|
171
|
+
wasm_exec.js:22 syscall/js.Value.Call({{}, 0x7ff800010000000a, 0x410028}, {0x114ef, 0xb}, {0x438f68, 0x1, 0x1})
|
156
|
-
|
172
|
+
wasm_exec.js:22 /usr/local/go/src/syscall/js/js.go:389 +0x31
|
157
|
-
|
173
|
+
wasm_exec.js:22 main.main()
|
158
|
-
|
174
|
+
wasm_exec.js:22 /Users/usrname/Go/make_sound/01/src/sound_wav/src/webassembly.go:23 +0xd
|
175
|
+
|
176
|
+
wasm_exec.js:101 exit code: 2
|
177
|
+
exit @ wasm_exec.js:101
|
178
|
+
Promise.then (async)
|
179
|
+
(anonymous) @ (index):7
|
159
180
|
```
|
181
|
+
|
182
|
+
|
183
|
+
|
2
編集
test
CHANGED
File without changes
|
test
CHANGED
@@ -114,3 +114,46 @@
|
|
114
114
|
|
115
115
|
|
116
116
|
|
117
|
+
### 追記
|
118
|
+
フィールド名にドットを使ってはいけないとのご指摘を受けたので,考えた範囲で修正いたしました.
|
119
|
+
|
120
|
+
|
121
|
+
##### webassembly.go
|
122
|
+
```Go
|
123
|
+
package main
|
124
|
+
|
125
|
+
import (
|
126
|
+
"syscall/js"
|
127
|
+
)
|
128
|
+
|
129
|
+
func main() {
|
130
|
+
// グローバルオブジェクト(window)を取得します
|
131
|
+
window := js.Global()
|
132
|
+
|
133
|
+
// document オブジェクトを取得します
|
134
|
+
document := window.Get("document")
|
135
|
+
|
136
|
+
// bodyを取得します
|
137
|
+
body := document.Get("body")
|
138
|
+
|
139
|
+
ctx := js.Global().Get("AudioContext").New()
|
140
|
+
osc := js.Global().Get("OscillatorNode").New(ctx)
|
141
|
+
osc.Set("frequency", 440)
|
142
|
+
osc.Set("type", "sine")
|
143
|
+
osc.Call("connect", ctx.destination)
|
144
|
+
osc.Call("start")
|
145
|
+
body.Call("appendChild", osc)
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
// プログラムが終了しないように待機します
|
150
|
+
select {}
|
151
|
+
|
152
|
+
}
|
153
|
+
```
|
154
|
+
|
155
|
+
```terminal
|
156
|
+
MacBook-Air src % GOOS=js GOARCH=wasm go build -o ../docs/build.wasm
|
157
|
+
# sound_wav
|
158
|
+
./webassembly.go:21:26: ctx.destination undefined (type js.Value has no field or method destination)
|
159
|
+
```
|
1
編集
test
CHANGED
File without changes
|
test
CHANGED
@@ -82,8 +82,8 @@
|
|
82
82
|
osc := js.Global().Get("OscillatorNode").New(ctx)
|
83
83
|
js.Global().Set("osc.frequency", 440)
|
84
84
|
js.Global().Set("osc.type", "sine")
|
85
|
-
js.Global().Get("docue
|
85
|
+
js.Global().Get("document").Call("osc.connect", ctx.destination)
|
86
|
-
osc = js.Global().Get("docue
|
86
|
+
osc = js.Global().Get("document").Call("start")
|
87
87
|
body.Call("appendChild", osc)
|
88
88
|
|
89
89
|
|