From 2a2866bf65b8ffddf508acec6b0dc4741650dbb4 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Mon, 21 Dec 2020 18:35:06 +0900 Subject: [PATCH] audio: Use a null context on go2cpp --- audio/context_js.go | 58 +++++++++++++++++++++++ audio/context_notjs.go | 21 ++++++++ audio/contextimpl_oto.go => otocontext.go | 2 +- 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 audio/context_js.go create mode 100644 audio/context_notjs.go rename audio/contextimpl_oto.go => otocontext.go (96%) diff --git a/audio/context_js.go b/audio/context_js.go new file mode 100644 index 000000000..1e5f796ff --- /dev/null +++ b/audio/context_js.go @@ -0,0 +1,58 @@ +// Copyright 2020 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" + "time" +) + +type nullContext struct { + sampleRate int +} + +type nullPlayer struct { + sampleRate int +} + +func (c *nullContext) NewPlayer() io.WriteCloser { + return &nullPlayer{ + sampleRate: c.sampleRate, + } +} + +func (c *nullContext) Close() error { + return nil +} + +func (p *nullPlayer) Write(data []byte) (int, error) { + time.Sleep(time.Second * time.Duration(len(data)) / time.Duration(p.sampleRate*4)) + return len(data), nil +} + +func (p *nullPlayer) Close() error { + return nil +} + +func newContextImpl(sampleRate int, initCh chan struct{}) context { + if js.Global().Get("go2cpp").Truthy() { + return &nullContext{ + sampleRate: sampleRate, + } + } + + return newOtoContext(sampleRate, initCh) +} diff --git a/audio/context_notjs.go b/audio/context_notjs.go new file mode 100644 index 000000000..39d83cb96 --- /dev/null +++ b/audio/context_notjs.go @@ -0,0 +1,21 @@ +// Copyright 2020 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. + +// +build !js + +package audio + +func newContextImpl(sampleRate int, initCh chan struct{}) context { + return newOtoContext(sampleRate, initCh) +} diff --git a/audio/contextimpl_oto.go b/otocontext.go similarity index 96% rename from audio/contextimpl_oto.go rename to otocontext.go index 914641527..e9aece1c9 100644 --- a/audio/contextimpl_oto.go +++ b/otocontext.go @@ -21,7 +21,7 @@ import ( "github.com/hajimehoshi/oto" ) -func newContextImpl(sampleRate int, initCh chan struct{}) context { +func newOtoContext(sampleRate int, initCh chan struct{}) *otoContext { return &otoContext{ sampleRate: sampleRate, initCh: initCh,