Commit Graph

454 Commits

Author SHA1 Message Date
Hajime Hoshi
f50875ff4b Change the build tag strategy: GopehrJS or not GopherJS 2019-10-27 23:33:22 +09:00
Hajime Hoshi
124389561c audio: Bug fix: The dummy player should have long enough buffer
In the current implementation, the audio context will be ready
when a player's Write is finished. If the buffer is too short,
Write finishes immediately without accessing the low audio layer
and the audio context would be ready without playing anything.

This change changes the dummy buffer to have a long enough buffer
so that Write will be wait for acutual audio playing.

Fixes #970
2019-10-23 02:41:12 +09:00
Hajime Hoshi
b78f678700 audio: Bug fix: (*Context).IsReady never returned true unless there is a player
The audio context is never ready unless there is a player. This is
problematic when a user tries to play audio after the context is
ready. Play a dummy player to avoid the blocking.

Fixes #969
2019-10-22 23:45:13 +09:00
Hajime Hoshi
689d230cb7 vorbis: Embed files for tests
Updates #881
2019-09-15 19:50:56 +09:00
Hajime Hoshi
dbb8a5e873 audio: Block all the players when suspended
This avoid to write 0 bytes when the app is in background. This
should reduce CPU usage.

Updates #931
2019-09-07 02:03:59 +09:00
Hajime Hoshi
c52e043006 Add jsutil package for new API of Go 1.13
Audio part still cannot be compiled due to Oto.

Fixes #878
2019-06-15 00:49:57 +09:00
Hajime Hoshi
13ce1c28b4 uidriver/mobile: Use timer.NewTimer instead of time.After
timer.NewTimer is much better than time.After in terms of memory
usage. See also https://golang.org/pkg/time/#After
2019-06-01 01:30:08 +09:00
Acid147
21abd85a63 Small cleanup (#877)
* Remove unused variables and constants
* Remove redundant return statement
* Change flock.NewFlock to flock.New
2019-05-26 18:06:43 +09:00
Hajime Hoshi
3ce8babd9b audio: Remove unnecessary sleepings 2019-05-02 23:57:33 +09:00
Hajime Hoshi
bd85d0e08d audio: Add TestPauseBeforeInit
This confirms that Pause before initialization should not launch
another loop.
2019-05-02 21:39:08 +09:00
Hajime Hoshi
7e2a679b17 audio: Context should be reset for each test
As the context remembers the last error, the context should be
re-created for each test.
2019-05-02 21:35:20 +09:00
Hajime Hoshi
396f257629 audio: Fix comments 2019-05-02 04:10:33 +09:00
Hajime Hoshi
876340da17 audio: Bug fix: context.ready should be set true after writing 2019-05-02 03:27:43 +09:00
Hajime Hoshi
2e35d9dc70 audio: Refactoring 2019-05-02 03:21:56 +09:00
Hajime Hoshi
5dd12afd38 audio: Stop the loop when pausing
This change reduces the necessity to fill zero bytes.
2019-05-02 03:16:45 +09:00
Hajime Hoshi
5121b072f1 audio: Change init from a variable to a channel 2019-05-02 02:37:32 +09:00
Hajime Hoshi
bea5b0f685 audio: Add comments 2019-05-02 02:11:35 +09:00
Hajime Hoshi
2aa79e0aa4 audio/vorbis/internal/stb: Bug fix: Make the package buildable only under 'js' environment
Building `syscall/js` itself can be done only under 'js'
environment.

See also https://travis-ci.org/hajimehoshi/ebiten/builds/526786060
2019-05-01 17:50:59 +09:00
Hajime Hoshi
10fb5e33be Replace GopherWasm with syscall/js
Fixes #857
2019-05-01 17:28:00 +09:00
Hajime Hoshi
c112c31e7e audio: Reimplement audio by using multiple oto.Player 2019-04-30 18:20:52 +09:00
Hajime Hoshi
339e76afec audio: Bug fix: Dead lock at seeking
When sending something to channels, a lock should not be used,
or the receiver side might be using the same lock.

Bug: #855
2019-04-30 12:51:22 +09:00
Hajime Hoshi
e19479d243 audio: Add comments about explanation how deadlock happens
This might be related to #855
2019-04-30 01:41:34 +09:00
Hajime Hoshi
5ecc595ce4 audio: Bug fix: Reset playing state at the end of the readLoop 2019-04-29 22:31:10 +09:00
Hajime Hoshi
d2979e288d audio: Bug fix: runningReadLoop must be set to true before starting the goroutine
This can cause deadlock by multiple goroutines if runningReadLoop
is set to true in the goroutine.

Related to #855?
2019-04-29 21:46:26 +09:00
Hajime Hoshi
89f6eba925 Revert "audio: Bug fix: Make ensureReadLoop exactly atomic"
This reverts commit 835497edd3.

Reason: This causes a dead lock at examples/piano with many notes.
This might be related to #855
2019-04-29 14:57:55 +09:00
Hajime Hoshi
fe3e8e376a audio: Move seeking from the loop to Seek function
Seek should work in both cases the loop runs and not. This change
is a preparation.
2019-04-29 02:27:15 +09:00
Hajime Hoshi
c4c6acacf9 audio: Remove (*mux).hasPlayer 2019-04-29 01:01:29 +09:00
Hajime Hoshi
96012b661f audio: Bug fix: bufferToInt16 can return smaller result
Fixes #854
2019-04-29 00:32:57 +09:00
Hajime Hoshi
835497edd3 audio: Bug fix: Make ensureReadLoop exactly atomic 2019-04-29 00:05:54 +09:00
Hajime Hoshi
b1607de99d audio: Refactoring 2019-04-28 23:58:06 +09:00
Hajime Hoshi
14b6e95217 audio: Use a boolean value to inidicate inited state intead of channels
This is a preparation to use oto.Players for Players. By using a
boolean value, suspending state can be detected from multiple
oto.Players.
2019-04-28 19:53:28 +09:00
Hajime Hoshi
fe55e55b7e audio: Refactoring 2019-04-28 19:53:28 +09:00
Hajime Hoshi
1327e2239c audio: Use a boolean value to indicate suspending state instead of channels
This is a preparation to use oto.Players for Players. By using a
boolean value, suspending state can be detected from multiple
oto.Players.
2019-04-28 19:53:28 +09:00
Hajime Hoshi
2b7705e7ad audio: AppendHookOnBeforeUpdate should treat multiple calbacks 2019-04-28 19:53:22 +09:00
Hajime Hoshi
31758bf3ab audio: Remove comment 2019-04-28 19:49:37 +09:00
Hajime Hoshi
2bea7d4e1a audio: Error on duplicated source
Fixes #853
2019-04-28 19:39:46 +09:00
Hajime Hoshi
70a225fd7e audio: Use dummy hooks from tests 2019-04-28 19:35:59 +09:00
Hajime Hoshi
81549a3523 audio: Bug fix: Remove redundant Unlock 2019-04-28 02:44:32 +09:00
Hajime Hoshi
9fc2ae158c audio: Bug fix: Close always returned error 2019-04-28 02:22:11 +09:00
Hajime Hoshi
e4f0a0aa04 audio: Bug fix: Remove depenency on finalizer
This change fixes playerImpl leak by removing dependency on
finalizer usages. Now readLoop can (or should) be called multiple
times even after closing. Only when (*Player).Close is called
explicitly, the read loop cannot be started again.

Fixes #852
2019-04-28 02:03:55 +09:00
Hajime Hoshi
4f831de008 audio: Remove (*playerImpl).sync and use mutex instead
This is a preparation to work syncing wihtout the read-loop.
2019-04-28 01:37:52 +09:00
Hajime Hoshi
acc4ef4e11 audio: Add comments 2019-04-01 01:59:10 +09:00
Hajime Hoshi
df2604c221 audio: Comment about ownership
This behavior might be changed at version 2 though (#837).
2019-04-01 01:32:14 +09:00
Hajime Hoshi
cba109ebee audio/mp3: Bug fix: Accept non-io.Closer at Resampling 2019-04-01 00:04:57 +09:00
Hajime Hoshi
49c0b64b60 audio/mp3: Bug fix: Close source when needed 2019-03-31 22:58:22 +09:00
Hajime Hoshi
aa042980ee audio/mp3: Remove Close calls
Close is removed at 14af46a99b
2019-03-31 22:42:34 +09:00
Hajime Hoshi
ed855d6c6c audio: Refactoring: remove the unused returning value 2019-03-02 04:42:19 +09:00
Hajime Hoshi
a3eddeb50f Improve panic messages 2019-02-06 23:43:03 -10:00
Hajime Hoshi
a4123a479e audio: Initialize the context first
This is necessary to create an audio's Player before the loop if
we want to create *oto.Player for each *audio.Player.
2019-01-30 00:45:36 +09:00
Hajime Hoshi
13b0d82b6d audio: Use oto.NewContext 2019-01-30 00:36:47 +09:00
Hajime Hoshi
f16f6cf4b9 audio/internal/convert: Add Float32Reader and NewReaderFromFloat32Reader 2019-01-15 11:46:31 +09:00
Hajime Hoshi
13f6549cb6 audio/vorbis: Remove duplicated decoded data
There was duplicated decoded date in audio/vorbis package and Ogg
decoder package. This change removes this duplication and reduces
memory usage.
2019-01-15 03:52:27 +09:00
Hajime Hoshi
6d714a16cf audio: Remove unneeded 'break' 2019-01-10 02:34:58 +09:00
Hajime Hoshi
a6b3f761f8 audio: Refactoring: Remove dependency on clock package 2019-01-10 00:59:38 +09:00
Hajime Hoshi
28c96d256a audio: Bug fix: Test compilation error 2019-01-09 23:39:12 +09:00
Hajime Hoshi
14404334e7 audio: Rename players to mux 2019-01-09 22:10:52 +09:00
Hajime Hoshi
e9422a9f2c audio: Improve test flakiness 2019-01-06 00:11:34 +09:00
Hajime Hoshi
7956e0ebbc Revert "Revert "audio: No need goroutine for tests""
This reverts commit 62a9bb195c.
2018-12-28 02:18:16 +09:00
Hajime Hoshi
62a9bb195c Revert "audio: No need goroutine for tests"
This reverts commit 7740656054.
2018-12-28 02:15:11 +09:00
Hajime Hoshi
7740656054 audio: No need goroutine for tests 2018-12-27 03:37:29 +09:00
Hajime Hoshi
ed7552962d audio: Improve test flakiness 2018-12-27 03:34:27 +09:00
Hajime Hoshi
1760070130 audio: Add comments about GC (#746) 2018-12-18 23:07:19 +09:00
Hajime Hoshi
b9eba54115 audio: Use a dummy driver for testing
Fixes #750

This also fixes an out-of-index bug when all players are skipped.
2018-12-17 23:06:59 +09:00
Hajime Hoshi
b0cb216f5f audio: Close audio after its playing finishes
Fixes #746

This is a temporal fix and we will need further re-designing of
audio package.
2018-12-17 04:02:32 +09:00
Hajime Hoshi
08a369b8fd audio: Bug fix: GC audio players correctly
Fixes #746
2018-12-15 22:33:45 +09:00
Hajime Hoshi
feca647087 audio/vorbis: Unretain the Ogg decoder on Close (#733) 2018-11-09 03:48:28 +09:00
Hajime Hoshi
eda8d61413 audio/vorbis: Unretain the Ogg decoder after decoding is done (#733) 2018-11-09 03:46:00 +09:00
Hajime Hoshi
d14202ef7b audio: Add Context.IsReady
Fixes #717
2018-10-16 00:02:19 +09:00
Hajime Hoshi
c0884b5ab2 audio/vorbis: Avoid unnecessary appending 2018-10-06 00:06:47 +09:00
Hajime Hoshi
1cf3022ce6 audio/vorbis: Update stbvorbis.js
Fixes #667
2018-10-05 22:12:39 +09:00
Hajime Hoshi
d5ca4c3953 audio/vorbis: Bug fix: compilation error 2018-09-02 23:55:59 +09:00
Hajime Hoshi
70044013e9 audio/vorbis: Rename []uint8 -> []byte 2018-09-02 23:54:50 +09:00
Hajime Hoshi
59bcbca379 audio: Add NewInfiniteLoopWithIntro (#652) 2018-07-28 21:25:42 +09:00
Hajime Hoshi
2969de5b1f audio: Refactoring: Redefine bytesPerSample 2018-07-24 01:54:01 +09:00
Hajime Hoshi
a0bd31ef1f audio: Rename stream -> src 2018-07-24 01:22:05 +09:00
Hajime Hoshi
6a1afe8fbe audio: Add test for negative position 2018-07-23 04:01:43 +09:00
Hajime Hoshi
0d5924b448 audio: Add test for InifiniteLoop 2018-07-23 03:30:06 +09:00
Hajime Hoshi
34ac185327 audio: Rename file 2018-07-23 03:15:17 +09:00
Hajime Hoshi
082556ad5c audio: Better error message 2018-07-23 02:28:07 +09:00
Hajime Hoshi
05ac690db5 audio/vorbis/internal/stb: Use stbvorbis.js
Fixes #641
2018-07-22 17:15:28 +09:00
Hajime Hoshi
d752408da3 Fix comments not to use the term 'this function' 2018-07-15 01:04:46 +09:00
Hajime Hoshi
c6842f2cd8 audio/vorbis/internal/stb: Use TypedArrayOf (#642) 2018-07-07 17:46:55 +09:00
Hajime Hoshi
c0ccc16767 audio/mp3: Use TypedArray (#642) 2018-07-07 17:19:47 +09:00
Hajime Hoshi
e61af537f4 audio/vorbis: Use jfreymuth/oggvorbis when the target is Wasm 2018-07-05 02:27:23 +09:00
Hajime Hoshi
de7065bbf7 audio/vorbis/internal/stb: Use float32 version of decoder for efficiency 2018-07-05 01:37:51 +09:00
Hajime Hoshi
9bf2eaff58 audio/vorbis/internal/stb: Rename files 2018-07-04 12:04:00 +09:00
Hajime Hoshi
992f6c767a audio/vorbis: Use stb_vorbis.c on browsers
This change adds a Ogg/Vorbis decoder stb_vorbis.c usage that is
compiled by Emscripten as WebAssembly.

Fixes #623
2018-07-04 01:23:11 +09:00
Hajime Hoshi
6e51d31524
Use new GopherWasm API (#634)
I plan to merge this right after
https://github.com/gopherjs/gopherwasm/pull/3 is merged.
2018-06-30 00:02:15 +09:00
Hajime Hoshi
a9359e4ef8 Use GopherJS/GopherWasm 2018-06-24 16:10:24 +09:00
Hajime Hoshi
a8c27b4eb1 audio/mp3: Bug fix: float32ArrayToSlice didn't work for Wasm 2018-06-24 04:33:05 +09:00
Hajime Hoshi
baee2ba4c9 audio/mp3: Bug fix: ArrayBuffer in the backend can be different from Uint8Array range 2018-06-24 02:31:34 +09:00
Hajime Hoshi
4c70ad382d audio/mp3: Bug fix: Avoid using a detached ArrayBuffer 2018-06-24 02:12:00 +09:00
Hajime Hoshi
5aefa837db audio/mp3: Use gopherwasm 2018-06-24 01:42:16 +09:00
Hajime Hoshi
273093b237 audio: Skip the player in the state of starting, seeking or EOF
This is basically reland of
2fee7a6fe5.

Before this change, if a player's buffer was not enough for
reading, 0 value were used and this caused noises. The reading
size should be aligned with all the players.

However, there are some cases that the player should be skippped.
For example, just after a player just starts playing or seeking,
the buffer is empty. In this case, other players should not wait
for the player since decoding might take some time. Another case
is that the player reached EOF.

This change aligns the read buffer sizes but use zero values only
when the player just starts or seeks, or reaches EOF.
2018-06-09 22:00:11 +09:00
Hajime Hoshi
facf184548 Revert "audio: Consider the state of the player's starting and seeking"
This reverts commit 2fee7a6fe5.

Reason: This causes freezing on browsers
2018-06-09 19:28:20 +09:00
Hajime Hoshi
b62e07b9bd audio: Remove println 2018-06-09 19:05:07 +09:00
Hajime Hoshi
2fee7a6fe5 audio: Consider the state of the player's starting and seeking
Before this change, if a player's buffer was not enough for
reading, 0 value were used and this caused noises. The reading
size should be aligned with all the players.

Just after a player just starts playing or seeking, the buffer is
empty but other players should not wait for the player read since
decoding might take some time.

To summerize, this change aligns the read buffer sizes but use
zero values only when the player just starts or seeks.
2018-06-09 19:01:57 +09:00
Hajime Hoshi
91958d24ef audio: Use bigger buffers for mobiles 2018-06-09 18:14:18 +09:00
Hajime Hoshi
faaf391619 audio: Give up syncing audio timer and game timer (#617)
Syncing was already incomplete (e.g. decoding takes more than one
frame and delays can happen in this case). Giving up syncing audio
timer and game timer should not affect the game experience so much.
Instead, clock implementation will be much simpler.
2018-05-27 00:30:12 +09:00
Hajime Hoshi
5976e4bbbc audio: More intellegent suspending/resuming (#617)
Before this change, the audio is suspended when the game stops for
1/12[s]. However, as game often stops for more than 1/12[s]
especially on mobiles, this implemntation caused some audio
glitches.

This change fixes this problem by re-implementing suspending/
resumeing audio by detecting the window is active/focused or not.
2018-05-26 23:31:04 +09:00