Commit Graph

677 Commits

Author SHA1 Message Date
Hajime Hoshi
c54e5371ad audio/internal/readerdriver: Refactoring (Windows) 2021-05-28 16:45:55 +09:00
Hajime Hoshi
541156f255 audio/internal/readerdriver: Wait the loop when there is no player (Windows) 2021-05-28 16:16:56 +09:00
Hajime Hoshi
6a8abac194 audio/interna/readerdriver: Bug fix: Potential issue when all the players were gone
When all the players were gone, the waveOut is closed once. From
this state, playing an audio again might take long.

This change fixes the issue by not closing the waveOut even when
all the players are gone.

This change also changes the returning value of read when the
player doesn't play.
2021-05-28 16:09:43 +09:00
Hajime Hoshi
c3b8fa1c45 audio/internal/readerdriver: Handle errors correctly (Windows) 2021-05-28 14:09:05 +09:00
Hajime Hoshi
6c3c3533fb audio/internal/readerplayer: Bug fix: Potential deadlock when waveOutWrite failed (Windows) 2021-05-28 05:17:32 +09:00
Hajime Hoshi
f334eee1e4 audio/internal/readerdriver: Refactoring: unify add and play (Windows) 2021-05-28 04:40:50 +09:00
Hajime Hoshi
72d8d77173 audio/internal/readerdriver: Bug fix: AudioQueuePause/Reset might take long time
This issue has existed since ae14caee93.
This change fixes the issue by skipping the C function calls when
possible.

Updates #1650
2021-05-28 02:51:14 +09:00
Hajime Hoshi
c9fcf57fbd audio/internal/readerdriver: Refactoring (Android) 2021-05-27 01:00:41 +09:00
Hajime Hoshi
c4f85bea2b audio/internal/readerplayer: Bug fix: Delay on audio on Android
Updates #1650
2021-05-27 00:52:45 +09:00
Hajime Hoshi
88d2663bc5 audio/internal/readerdriver: Mark EOF at the first reading 2021-05-26 13:03:47 +09:00
Hajime Hoshi
46ed239632 audio/internal/readdriver: Bug fix: Potential busy loop on Android
This is basically the same fix as 91d3d6b4e7
but for Android.

Updates #1650
2021-05-26 12:46:48 +09:00
Hajime Hoshi
8692ba5f06 audio/internal/readerdriver: Refactoring (js) 2021-05-26 03:45:12 +09:00
Hajime Hoshi
91d3d6b4e7 audio/internal/readerdriver: Bug fix: Avoid busy loop when EOF is reached
This is a part of reverting 81015a3c19.

On Drawin, the loop became busy when the source reached EOF. This
change fixes this issue by making the loop wait when the EOF is
reached and until the state is reset.

Updates #1650
2021-05-26 03:37:50 +09:00
Hajime Hoshi
800a929e84 audio/internal/readerdriver: Add comments
Updates #1549
2021-05-23 00:38:18 +09:00
Hajime Hoshi
5bd1a883d1 audio/internal/readerdriver: Implmeent a reader driver for Windows
Updates #1549
2021-05-23 00:14:59 +09:00
Hajime Hoshi
e43dcc2265 audio/internal/readerdriver: Bug fix: An error was overwritten 2021-05-18 21:08:26 +09:00
Hajime Hoshi
ae14caee93 audio/internal/readerdriver: Refactoring (darwin) 2021-05-17 23:18:55 +09:00
Hajime Hoshi
58f6eb0dea audio/internal/readerdriver: Refactoring 2021-05-17 04:04:04 +09:00
Hajime Hoshi
66999989e1 audio/internal/readerdriver: Bug fix: Need to lock the callback logic 2021-05-17 04:03:04 +09:00
Hajime Hoshi
089883aba0 audio/internal/readerdriver: Refactoring 2021-05-17 03:51:24 +09:00
Hajime Hoshi
d1138bc615 audio/internal/readerdriver: Make Play async on Android
Updates #1549
2021-05-16 20:13:39 +09:00
Hajime Hoshi
cf6edae5b3 audio/internal/readerdriver: Bug fix: Protect playImpl by the mutex on Darwin 2021-05-16 20:07:51 +09:00
Hajime Hoshi
58c1ed0e23 audio/internal/oboe: Bug fix: Opening a stream might fail when too many streams are opened
openStream might fail when too many streams are opened in a short time.
In this case, sleep 1[ms] and retry to open the stream.

Updates #1549
Closes #1645
2021-05-16 19:43:47 +09:00
Hajime Hoshi
1dd48388b4 audio/internal/readerdriver: Disable the reader driver for Android temporarily
Updates #1549
Updates #1645
2021-05-16 15:54:02 +09:00
Hajime Hoshi
bb4a3ce89b audio/internal/oboe: Add prefixes to the C functions 2021-05-16 03:03:34 +09:00
Hajime Hoshi
fc8b3d70fe audio/internal/oboe: clang-format 2021-05-16 03:01:43 +09:00
Hajime Hoshi
2edb286ec4 audio/internal/oboe: Bug fix: Use-after-free of a player
In theory, a closed player was used unexpectedly by these steps:

  1. Suspend is called by switching the application
  2. Player_Close is called
  3. Resume is called by reactivating the application

The set of GetPlayersToResume() had a closed player and the trying to
play it caused the use-after-free problem.

This changes fixes the issue by removing the player from the set of
GetPlayerToResume() when closing it. iOS version already has the logic
to remove the player appropriately.

Updates #1645
Closes #1646
2021-05-16 02:21:00 +09:00
Hajime Hoshi
5f773a3277 audio/internal/readerdriver: Refactoring 2021-05-16 02:08:33 +09:00
Hajime Hoshi
49172a235b audio/internal/readerdriver: Bug fix: AudioQueueFlush was not needed
Rather, AudioQueueFlush after AudioQueueReset might cause an error.

Closes #1644
2021-05-15 22:47:09 +09:00
Hajime Hoshi
81015a3c19 audio/internal/readerdriver: Refactoring: EOF doesn't matter to determine when to stop the waiting 2021-05-15 22:39:54 +09:00
Hajime Hoshi
4fcfdb39d4 audio: Bug fix: Compile error for tests 2021-05-10 04:03:58 +09:00
Hajime Hoshi
9b965a6308 audio/internal/go2cpp: Simplify reading the source 2021-05-10 04:00:58 +09:00
Hajime Hoshi
9585c1e09a audio/internal/go2cpp: Refactoring 2021-05-10 03:35:21 +09:00
Hajime Hoshi
52c609459c audio/internal/readerdriver: Change the returning type of UnplayedBufferSize int64 -> int 2021-05-10 03:22:19 +09:00
Hajime Hoshi
7a6bdc8388 audio/internal/readerdriver: Bug fix: Deadlock at Close (js) 2021-05-10 01:10:42 +09:00
Hajime Hoshi
2c8d3826fa audio/internal/readerdriver: Create a dedicated loop to read the source (js)
Closes #1637
2021-05-10 00:47:07 +09:00
Hajime Hoshi
df40217427 audio/internal/readerdriver: Skip operation on error (js) 2021-05-09 23:09:15 +09:00
Hajime Hoshi
737ccf18fb audio/internal/readerdriver: Make Play async internally on macOS and iOS
Updates #1638
2021-05-09 22:03:48 +09:00
Hajime Hoshi
a285a84df0 audio/internal/readerdriver: Use AudioQueuePrime 2021-05-09 21:31:55 +09:00
Hajime Hoshi
6644e43025 audio/internal/readerdriver: Bug fix: AudioQueueStop might invoke the callback and then caused deadlock 2021-05-09 21:07:39 +09:00
Hajime Hoshi
015475ad2c audio/interal/readerdriver: Misspelling 2021-05-09 19:55:12 +09:00
Hajime Hoshi
d9972822e2 audio/internal/readerdriver: unqueuedBufs should be reset when the player is reused later 2021-05-09 19:54:34 +09:00
Hajime Hoshi
f04230da08 audio/internal/readerdriver: Bug fix: The player became closed unexpectedly 2021-05-09 19:35:36 +09:00
Hajime Hoshi
87956560f3 audio/internal/readerdriver: Implement for iOS
Updates #1549
2021-05-09 19:04:59 +09:00
Hajime Hoshi
c85ef4e40b audio/internal/readerdriver: Bug fix: Deadlock at resuming 2021-05-09 18:30:46 +09:00
Hajime Hoshi
fa13b81d38 audio/internal/readerdriver: Prepare AudioQueues first
Updates #1638
2021-05-09 17:24:00 +09:00
Hajime Hoshi
99e2d79ec8 audio/internal/readerdriver: clang-format -i 2021-05-09 17:04:15 +09:00
Hajime Hoshi
ac2753f411 audio/internal/readerdriver: Reuse AudioQueue whenever possible
AudioQueueStart is expensive when the AudioQueue was newly created.
To mitigate the cost, cache and reuse AudioQueue instances.

Closes #1638
2021-05-09 16:30:24 +09:00
Hajime Hoshi
9caead5a38 audio/internal/readerdriver: Refactoring: Remove player.id 2021-05-09 15:53:33 +09:00
Hajime Hoshi
383bceddd5 audio/internal/readerdriver: Refactoring 2021-05-09 14:41:23 +09:00
Hajime Hoshi
f9b8238cd6 audio/internal/readerdriver: Disable operations when an error is recorded 2021-05-09 05:58:55 +09:00
Hajime Hoshi
7eeaef7ff8 audio/internal/readerdriver: Refactoring 2021-05-09 05:46:55 +09:00
Hajime Hoshi
22567d20b6 audio/internal/readerdriver: Implement {,Set}Volume for macOS 2021-05-09 05:36:03 +09:00
Hajime Hoshi
9df1092507 audio/internal/readerdriver: Bug fix: AudioQueue{Pause,Reset,Flush} cannot be called before AudioQueueStart 2021-05-09 05:28:42 +09:00
Hajime Hoshi
bc22ab53b2 audio/internal/readerdriver: Add comments 2021-05-09 05:01:51 +09:00
Hajime Hoshi
eb3301d30c audio/internal/readerdriver: Implement a reader-style driver for macOS
Updates #1549
2021-05-09 04:56:31 +09:00
Hajime Hoshi
fcdd4e16d4 audio/internal/readerdriver: Fill the buffer whenever starting to play 2021-05-09 03:51:45 +09:00
Hajime Hoshi
ae9e89b814 audio/internal/oboe: Bug fix: Not all players should not be suspended 2021-05-09 03:07:17 +09:00
Hajime Hoshi
7487222740 audio/internal/readerdriver: Remove Context's Close 2021-05-07 16:50:19 +09:00
Hajime Hoshi
410d0f52e5 audio/internal/readerdriver: Bug fix: createBuffer failed when the buffer size is 0
When the decoded audio size is exactly multiples of an internal
buffer size, the buffer's size becomes exactly zero when being
appended. In this case, createBuffer fails and the application
crashes.

This change fixes this issue by skipping to append a buffer in such
cases.

Closes #1635
2021-05-07 02:35:57 +09:00
Hajime Hoshi
aa9f669ec3 audio/internal/readerplayer: Move the buffer for resuming to the driver side
Closes #1633
2021-05-05 21:54:21 +09:00
Hajime Hoshi
4e0e5c6bbc audio/internal/oboe: Bug fix: Always use OpenSL
AAudio doesn't care about plugging in/out headsets. There is a
workaround [1], but this is not easy to apply. Instead, alwasy use
OpenSL.

[1] https://github.com/google/oboe/blob/master/docs/notes/disconnect.md

Closes #1634
2021-05-05 18:09:44 +09:00
Hajime Hoshi
1fecaa0a90 audio/internal/readdriver: Bug fix: Wait for a while after finishing to write
Closes #1632
2021-05-05 17:05:23 +09:00
Hajime Hoshi
ded3cd1433 audio/internal/readerdriver: Refactoring: Remove player.state 2021-05-05 15:32:53 +09:00
Hajime Hoshi
f556590582 android/internal/readerdriver: Bug fix: Infinite recursive at closeImpl 2021-05-05 03:58:47 +09:00
Hajime Hoshi
c954dfa8fb audio/internal/readerderiver: Bug fix: Reduce noises on Android
Closes #1632
2021-05-05 02:14:59 +09:00
Hajime Hoshi
83c9015468 audio/internal/oboe: Bug fix: Guard the players by a mutex
Closes #1631
2021-05-05 00:51:53 +09:00
Hajime Hoshi
ad86c297fb audio/internal/readdriver: Implement a driver for Android with Oboe
Closes #1626
2021-05-04 23:51:36 +09:00
Hajime Hoshi
804881fa94 audio/internal/readerdriver: Enable to return error at Suspend/Resume 2021-05-04 23:18:16 +09:00
Hajime Hoshi
58843b68f9 internal/hooks: Enable to return error at suspend/resume audio 2021-05-04 23:09:01 +09:00
Hajime Hoshi
bcf8ef85b6 audio: Bug fix: Compile error on the tests
Updates #1630
2021-05-04 22:10:49 +09:00
Hajime Hoshi
29eade9b4a audio/internal/readdriver: Bug fix: Implement Suspend/Resume for browsers
Closes #1630
2021-05-04 18:49:39 +09:00
Hajime Hoshi
11e76d3fc8 audio/vorbis: Catch the Seek error 2021-05-03 23:11:14 +09:00
Hajime Hoshi
fc5970768d audio/internal/go2cpp: Bug fix: Potential deadlock at Play
Closes #1629
2021-05-03 17:54:25 +09:00
Hajime Hoshi
7adf6aac27 audio/internal/readerdriver: Simplify type names 2021-05-01 16:25:40 +09:00
Hajime Hoshi
1acf5bc260 audio/internal/readerdriver: Bug fix: Compile error 2021-04-29 18:37:10 +09:00
Hajime Hoshi
760072e3a9 audio/internal/readerdriver: Use a channel instead of a callback function 2021-04-29 18:21:06 +09:00
Hajime Hoshi
e62eba387d audio/vorbis: Accept io.Reader instead of io.ReadSeeker
Closes #1621
2021-04-24 16:41:23 +09:00
Hajime Hoshi
68d24f1c62 audio/mp3: Accept io.Reader instead of io.ReadSeeker
Updates #1621
2021-04-24 16:39:49 +09:00
Hajime Hoshi
62899e5902 audio/wav: Accept io.Reader instead of io.ReadSeeker
Updates #1621
2021-04-24 16:35:28 +09:00
Hajime Hoshi
08c3025560 audio/internal/readerdriver: Refactoring 2021-04-20 03:20:29 +09:00
Hajime Hoshi
24dc20e80e audio/internal/readerdriver: Bug fix: Need to align the buffer size 2021-04-20 02:39:33 +09:00
Hajime Hoshi
e650e71d8c audio/internal/readerdriver: Bug fix: ReadFull could get stuck
If the source io.Reader's implementation is not good (e.g., Read
returns 0 if the buffer size is not multiples of 4), io.ReadFull
gets stuck forever. Instead, use reguler Read with a decent amount
of bytes buffer.

Closes #1599
2021-04-20 01:29:15 +09:00
Hajime Hoshi
146678596b audio/internal/readerdriver: Bug fix: Invoke onReady for go2cpp
Updates #1599
2021-04-19 23:59:31 +09:00
Hajime Hoshi
ea9d64f5b8 audio: Bug fix: Need to call setReady from the reader player side
Updates #1599
2021-04-19 23:56:08 +09:00
Hajime Hoshi
0de024229d audio: Guarantee that (*Player).Current's returning value is increased monotonically
Closes #1501
2021-03-31 23:41:28 +09:00
Hajime Hoshi
83dc3966e7 audio/internal/go2cpp: Bug fix: Set the volume whenever the player state is 2021-03-31 21:08:32 +09:00
Hajime Hoshi
f0d7e16eb2 audio/internal/readerdriver: Refactoring 2021-03-28 23:27:47 +09:00
Hajime Hoshi
bf4c1e3d74 audio: Bug fix: Compile error for tests 2021-03-28 22:57:50 +09:00
Hajime Hoshi
f4efdd6355 audio/internal/go2cpp: Protect the functions by the lock correctly 2021-03-28 22:40:36 +09:00
Hajime Hoshi
f4b770eff6 audio/internal/readerdriver: Add Player.Err 2021-03-28 22:21:07 +09:00
Hajime Hoshi
b46cb324ed audio: Add audio/internal/readerdriver package 2021-03-28 18:34:16 +09:00
Hajime Hoshi
7212cd7999 audio: Bug fix: Race condition on accessing the set of players
Closes #1548
2021-03-24 23:41:18 +09:00
Hajime Hoshi
7696d51839 audio: Bug fix: Duplicated pausing at reader players
This caused unexpected 'Unread' calls.
2021-03-24 00:19:49 +09:00
Hajime Hoshi
1083233d5f audio/internal/go2cpp: Replace isWritable with unplayedBufferSize instead
This is the more accurate way not to overflow the underlying buffer.
2021-03-23 23:46:57 +09:00
Hajime Hoshi
6f185063d6 audio: Ensure Close is called at a readerPlayer is GCed 2021-03-22 04:11:08 +09:00
Hajime Hoshi
07c10880f4 audio: Bug fix: Test failures on browsers 2021-03-22 03:50:05 +09:00
Hajime Hoshi
a17fea39a1 audio: Bug fix: Compile error on Go 1.13 2021-03-22 02:16:46 +09:00
Hajime Hoshi
49a8a491cd audio: Implement the reader player for browsers
Updates #1458
2021-03-22 01:53:52 +09:00
Hajime Hoshi
9e73b0d287 audio: Rename UnwrittenBufferSize -> UnplayedBufferSize 2021-03-01 01:27:42 +09:00
Hajime Hoshi
6d442c0a17 audio: Add comments 2021-02-28 23:47:57 +09:00
Hajime Hoshi
4bc0bb607b audio: Lazy initialization at reader players 2021-02-28 23:41:30 +09:00
Hajime Hoshi
dbdfce5fed audio: Add readerDriverPlayer.UnwrittenBufferSize to get the exact position 2021-02-28 01:42:48 +09:00
Hajime Hoshi
b8cdcdb847 audio: Bug fix: NewInfiniteLoop(WithIntro) should work with incomplete values
Closes #1503
2021-02-22 02:15:45 +09:00
Hajime Hoshi
29099cf660 audio: Bug fix: Continue to play the audio after seeking on go2cpp 2021-02-21 23:54:43 +09:00
Hajime Hoshi
027463ff88 audio: Bug fix: timeStream was not used for a reader player 2021-02-21 18:48:58 +09:00
Hajime Hoshi
68411e9591 audio/internal/go2cpp: Avoid unnecessary allocations 2021-01-25 03:09:13 +09:00
Hajime Hoshi
c8ba51d26e audio/internal/convert: Avoid unnecessary allocations 2021-01-25 03:04:53 +09:00
Hajime Hoshi
514904392c audio: Bug fix: Deadlock at acquiring the semaphore
Closes #1469
2021-01-23 23:07:19 +09:00
Hajime Hoshi
fbc7b3c884 audio/vorbis: Bug fix: Resampling didn't work correctly 2021-01-19 00:41:47 +09:00
Hajime Hoshi
2432530b51 Revert "audio/internal/go2cpp: Fix C++ side and remove the preparation"
This reverts commit 65f974588c.

Reason: Didn't improve the performance on some devices
2021-01-17 04:48:11 +09:00
Hajime Hoshi
65f974588c audio/internal/go2cpp: Fix C++ side and remove the preparation 2021-01-17 03:47:45 +09:00
Hajime Hoshi
ed7d7e8976 audio/internal/go2cpp: Prepare the first buffer data to make the audio smoother 2021-01-16 03:28:47 +09:00
Hajime Hoshi
c742ae60bd audio: Bug fix: Implement renaderPlayer.IsPlayer correctly 2021-01-16 01:02:07 +09:00
Hajime Hoshi
ad218eae2d audio/internal/convert: Reduce allocations of float32 slices 2021-01-15 00:37:21 +09:00
Hajime Hoshi
612676cb19 audio/internal/go2cpp: Remove the buffer size argument 2021-01-13 22:30:52 +09:00
Hajime Hoshi
aeaa443bf2 audio/internal/go2cpp: Bug fix: Writing data must be concurrent-safe 2021-01-13 10:26:30 +09:00
Hajime Hoshi
78789a511c Revert "audio: Seek the source first at readerPlayer"
This reverts commit 68f12f066e.

Reason: Some data can be read after seeking before resetting
2021-01-13 02:01:00 +09:00
Hajime Hoshi
68f12f066e audio: Seek the source first at readerPlayer 2021-01-12 22:52:26 +09:00
Hajime Hoshi
2f8172f819 audio/internal/go2cpp: Recreate the underlying audio player when resetting 2021-01-12 20:42:45 +09:00
Hajime Hoshi
a66097df19 audio/internal/go2cpp: Remove unnecessary set 2021-01-12 11:38:30 +09:00
Hajime Hoshi
2dc37d30de audio/internal/go2cpp: Add a comment 2021-01-12 01:07:36 +09:00
Hajime Hoshi
a7dd00596a audio/internal/go2cpp: Add signaling at Pause 2021-01-12 00:43:16 +09:00
Hajime Hoshi
c009070840 audio/internal/go2cpp: Add readerDriverPlayer.Reset 2021-01-11 23:54:43 +09:00
Hajime Hoshi
3abb7a3604 audio/internal/go2cpp: Increase the temporary buffer size 2021-01-11 21:56:47 +09:00
Hajime Hoshi
8e6c3a570e audio/internal/go2cpp: Bug fix: Pass the correct size 2021-01-11 18:07:25 +09:00
Hajime Hoshi
9cc5bd80f9 audio/internal/go2cpp: Better waiting condition 2021-01-11 15:37:40 +09:00
Hajime Hoshi
dc8217dfeb audio/internal/go2cpp: Bug fix: Wrong state 2021-01-11 15:25:53 +09:00
Hajime Hoshi
52942751f0 audio: Move go2cpp -> internal/go2cpp 2021-01-09 18:21:32 +09:00
Hajime Hoshi
3579e1d0b7 audio: Implement timeStream 2021-01-09 17:16:37 +09:00
Hajime Hoshi
a2a7f5e701 audio: Add an implementation for go2cpp 2021-01-09 17:16:34 +09:00
Hajime Hoshi
bd3e930eef audio: Add readerPlayerFactory / readerDriver 2021-01-09 00:45:13 +09:00
Hajime Hoshi
bd1c3ff030 audio: Rename writerContext -> writerPlayerFactory 2021-01-07 11:24:40 +09:00
Hajime Hoshi
a6b3f32f3a audio: Refactoring 2021-01-07 02:14:42 +09:00
Hajime Hoshi
e04e709a10 audio: Refactor test files 2021-01-07 01:53:41 +09:00
Hajime Hoshi
bda285b376 audio: Refactoring 2021-01-07 01:33:57 +09:00
Hajime Hoshi
e77beac235 audio: Define playerImpl interface 2021-01-07 00:59:13 +09:00
Hajime Hoshi
7cf32efcd5 audio: Rename playerImpl -> writerContextPlayerImpl 2021-01-07 00:46:50 +09:00
Hajime Hoshi
c42a40a541 audio: Rename context -> writerContext
This is a preparation of a new type of context with io.Readers.
2021-01-07 00:26:28 +09:00
Hajime Hoshi
9849cb5c2b audio/wav: Add DecodeWithSampleRate
Closes #1460
2021-01-06 23:09:52 +09:00
Hajime Hoshi
b78dde0e37 audio/mp3: Add DecodeWithSampleRate
Updates #1460
2021-01-06 23:03:50 +09:00
Hajime Hoshi
f6a440765b audio/vorbis: Fix comments 2021-01-06 23:02:56 +09:00
Hajime Hoshi
96ca0a7ff9 audio/vorbis: Add DecodeWithSampleRate
Updates #1460
2021-01-06 22:57:25 +09:00
Hajime Hoshi
30278b80aa audio: Use the larget buffer size for go2cpp 2021-01-05 16:07:36 +09:00
Hajime Hoshi
0bf6eee605 audio: Reduce making a slice at a player's read 2021-01-04 21:51:26 +09:00
Hajime Hoshi
3fb304e5a8 audio/internal/convert: Refactoring 2021-01-04 21:42:00 +09:00
Hajime Hoshi
f292594184 audio: Use a new implentation for go2cpp in Oto 2020-12-30 19:21:15 +09:00
Hajime Hoshi
9a705c64f3 audio: Bug fix: Compile error 2020-12-21 18:39:06 +09:00
Hajime Hoshi
2a2866bf65 audio: Use a null context on go2cpp 2020-12-21 18:35:42 +09:00
Hajime Hoshi
8e46769284 audio: Remove returning values from Play/Pause 2020-10-10 23:45:18 +09:00