audio: Bug fix: Compile failure on JS/Wasm

This commit is contained in:
Hajime Hoshi 2021-08-22 00:29:05 +09:00
parent fe4f96e261
commit 88da1bb23f
4 changed files with 79 additions and 25 deletions

View File

@ -22,8 +22,6 @@ import (
"sync" "sync"
"syscall/js" "syscall/js"
"unsafe" "unsafe"
"github.com/hajimehoshi/ebiten/v2/audio/internal/go2cpp"
) )
type context struct { type context struct {
@ -38,10 +36,6 @@ type context struct {
func newContext(sampleRate int, channelNum int, bitDepthInBytes int) (*context, chan struct{}, error) { func newContext(sampleRate int, channelNum int, bitDepthInBytes int) (*context, chan struct{}, error) {
ready := make(chan struct{}) ready := make(chan struct{})
if js.Global().Get("go2cpp").Truthy() {
close(ready)
return &go2cppDriverWrapper{go2cpp.NewContext(sampleRate, channelNum, bitDepthInBytes)}, ready, nil
}
class := js.Global().Get("AudioContext") class := js.Global().Get("AudioContext")
if !class.Truthy() { if !class.Truthy() {
@ -386,24 +380,6 @@ func (p *player) loop() {
} }
} }
type go2cppDriverWrapper struct {
c *go2cpp.Context
}
func (w *go2cppDriverWrapper) NewPlayer(r io.Reader) Player {
return w.c.NewPlayer(r)
}
func (w *go2cppDriverWrapper) Suspend() error {
// Do nothing so far.
return nil
}
func (w *go2cppDriverWrapper) Resume() error {
// Do nothing so far.
return nil
}
func toLR(data []byte) ([]float32, []float32) { func toLR(data []byte) ([]float32, []float32) {
const max = 1 << 15 const max = 1 << 15

View File

@ -99,7 +99,7 @@ func (f *playerFactory) initContextIfNeeded() (<-chan struct{}, error) {
return nil, nil return nil, nil
} }
c, ready, err := readerdriver.NewContext(f.sampleRate, channelNum, bitDepthInBytes) c, ready, err := newContext(f.sampleRate, channelNum, bitDepthInBytes)
if err != nil { if err != nil {
return nil, err return nil, err
} }

52
audio/player_js.go Normal file
View File

@ -0,0 +1,52 @@
// Copyright 2021 The Ebiten Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package audio
import (
"io"
"syscall/js"
"github.com/hajimehoshi/ebiten/v2/audio/internal/go2cpp"
"github.com/hajimehoshi/ebiten/v2/audio/internal/readerdriver"
)
func newContext(sampleRate, channelNum, bitDepthInBytes int) (context, chan struct{}, error) {
if js.Global().Get("go2cpp").Truthy() {
ready := make(chan struct{})
close(ready)
ctx := go2cpp.NewContext(sampleRate, channelNum, bitDepthInBytes)
return &go2cppDriverWrapper{ctx}, ready, nil
}
return readerdriver.NewContext(sampleRate, channelNum, bitDepthInBytes)
}
type go2cppDriverWrapper struct {
c *go2cpp.Context
}
func (w *go2cppDriverWrapper) NewPlayer(r io.Reader) readerdriver.Player {
return w.c.NewPlayer(r)
}
func (w *go2cppDriverWrapper) Suspend() error {
// Do nothing so far.
return nil
}
func (w *go2cppDriverWrapper) Resume() error {
// Do nothing so far.
return nil
}

26
audio/player_notjs.go Normal file
View File

@ -0,0 +1,26 @@
// Copyright 2021 The Ebiten Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build !js
// +build !js
package audio
import (
"github.com/hajimehoshi/ebiten/v2/audio/internal/readerdriver"
)
func newContext(sampleRate, channelNum, bitDepthInBytes int) (context, chan struct{}, error) {
return readerdriver.NewContext(sampleRate, channelNum, bitDepthInBytes)
}