diff --git a/audio/internal/readerdriver/driver_js.go b/audio/internal/readerdriver/driver_js.go index fe42c4c8d..bfeff4785 100644 --- a/audio/internal/readerdriver/driver_js.go +++ b/audio/internal/readerdriver/driver_js.go @@ -22,8 +22,6 @@ import ( "sync" "syscall/js" "unsafe" - - "github.com/hajimehoshi/ebiten/v2/audio/internal/go2cpp" ) type context struct { @@ -38,10 +36,6 @@ type context struct { func newContext(sampleRate int, channelNum int, bitDepthInBytes int) (*context, chan struct{}, error) { 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") 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) { const max = 1 << 15 diff --git a/audio/player.go b/audio/player.go index 585b8187d..1792be093 100644 --- a/audio/player.go +++ b/audio/player.go @@ -99,7 +99,7 @@ func (f *playerFactory) initContextIfNeeded() (<-chan struct{}, error) { return nil, nil } - c, ready, err := readerdriver.NewContext(f.sampleRate, channelNum, bitDepthInBytes) + c, ready, err := newContext(f.sampleRate, channelNum, bitDepthInBytes) if err != nil { return nil, err } diff --git a/audio/player_js.go b/audio/player_js.go new file mode 100644 index 000000000..74aff9526 --- /dev/null +++ b/audio/player_js.go @@ -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 +} diff --git a/audio/player_notjs.go b/audio/player_notjs.go new file mode 100644 index 000000000..58dd0d839 --- /dev/null +++ b/audio/player_notjs.go @@ -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) +}