質問編集履歴

4

編集

2022/10/20 11:40

投稿

aaaa____
aaaa____

スコア26

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

編集

2022/10/20 11:25

投稿

aaaa____
aaaa____

スコア26

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
- ```terminal
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
- MacBook-Air src % GOOS=js GOARCH=wasm go build -o ../docs/build.wasm
172
+ wasm_exec.js:22 /usr/local/go/src/syscall/js/js.go:389 +0x31
157
- # sound_wav
173
+ wasm_exec.js:22 main.main()
158
- ./webassembly.go:21:26: ctx.destination undefined (type js.Value has no field or method destination)
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

編集

2022/10/19 11:28

投稿

aaaa____
aaaa____

スコア26

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

編集

2022/10/18 12:53

投稿

aaaa____
aaaa____

スコア26

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("docuemnt").Call("osc.connect", ctx.destination)
85
+ js.Global().Get("document").Call("osc.connect", ctx.destination)
86
- osc = js.Global().Get("docuemnt").Call("start")
86
+ osc = js.Global().Get("document").Call("start")
87
87
  body.Call("appendChild", osc)
88
88
 
89
89