diff --git a/audio/audio.go b/audio/audio.go index d8515922b..e718be619 100644 --- a/audio/audio.go +++ b/audio/audio.go @@ -234,9 +234,7 @@ func (c *Context) loop() { // e.g. a variable for JVM on Android might not be set. <-initCh - // On most desktop environments, 4096 [bytes] is enough - // but there are some known environment that is too short (e.g. Windows on Parallels, iOS). - p, err := oto.NewPlayer(c.sampleRate, channelNum, bytesPerSample, 8192) + p, err := oto.NewPlayer(c.sampleRate, channelNum, bytesPerSample, bufferSize()) if err != nil { c.err = err return diff --git a/audio/buffersize_mobile.go b/audio/buffersize_mobile.go new file mode 100644 index 000000000..34dd7f029 --- /dev/null +++ b/audio/buffersize_mobile.go @@ -0,0 +1,23 @@ +// Copyright 2018 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 android ios + +package audio + +func bufferSize() int { + // From the experience of Daigo's games (e.g. Clock of Atonement), + // 8192 is not enough on mobile devices. Use x1.5 value. + return 12288 +} diff --git a/audio/buffersize_notmobile.go b/audio/buffersize_notmobile.go new file mode 100644 index 000000000..ecab4fd18 --- /dev/null +++ b/audio/buffersize_notmobile.go @@ -0,0 +1,24 @@ +// Copyright 2018 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 !android +// +build !ios + +package audio + +func bufferSize() int { + // On most desktop environments, 4096 [bytes] is enough + // but there are some known environment that is too short (e.g. Windows on Parallels). + return 8192 +}