Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RecorderThread: Record to internal storage first #72

Merged
merged 3 commits into from
Jun 6, 2022

Conversation

chenxiaolong
Copy link
Owner

This commit changes RecorderThread's behavior to first record to the
default/fallback output directory and then move to the user-specified
target directory when the recording is complete.

This avoids issues where writing to the SAF-provided file descriptor
sometimes has several hundren millisecond latencies, causing
AudioRecord's internal buffer to overrun. On some devices, this happens
even when the SAF directory is on internal storage. The root cause of
why the SAF-provided file descriptor is slow is unknown. Perhaps the
FUSE filesystem at /sdcard does some additional checks on write with SAF
paths compared to the Context.getExternalFilesDir() path.

Fixes: #39
Fixes: #54

This commit changes RecorderThread's behavior to first record to the
default/fallback output directory and then move to the user-specified
target directory when the recording is complete.

This avoids issues where writing to the SAF-provided file descriptor
sometimes has several hundren millisecond latencies, causing
AudioRecord's internal buffer to overrun. On some devices, this happens
even when the SAF directory is on internal storage. The root cause of
why the SAF-provided file descriptor is slow is unknown. Perhaps the
FUSE filesystem at /sdcard does some additional checks on write with SAF
paths compared to the Context.getExternalFilesDir() path.

Signed-off-by: Andrew Gunnerson <[email protected]>
@chenxiaolong chenxiaolong self-assigned this Jun 6, 2022
@chenxiaolong chenxiaolong merged commit 2a2bd2f into master Jun 6, 2022
@chenxiaolong chenxiaolong deleted the internal-storage branch June 6, 2022 23:45
chenxiaolong added a commit that referenced this pull request Jun 6, 2022
Signed-off-by: Andrew Gunnerson <[email protected]>
chenxiaolong added a commit that referenced this pull request Jun 6, 2022
When the call ends, everything still remaining in AudioRecord's internal
buffer is lost because there's no way to read the remaining bytes after
recording is stopped. With 20x the buffer size on eg. a device with a
1920 byte minimum buffer size and a sample rate of 8000 Hz, this may
cause 1.6 seconds of audio at the end of the call to be lost.

This commit should not have a negative effect since the large buffer
size was meant to address buffer overruns and the root cause of that
problem was addressed in #72.

Signed-off-by: Andrew Gunnerson <[email protected]>
chenxiaolong added a commit that referenced this pull request Jun 6, 2022
When the call ends, everything still remaining in AudioRecord's internal
buffer is lost because there's no way to read the remaining bytes after
recording is stopped. With 20x the buffer size on eg. a device with a
1920 byte minimum buffer size and a sample rate of 8000 Hz, this may
cause 2.4 seconds of audio at the end of the call to be lost.

This commit should not have a negative effect since the large buffer
size was meant to address buffer overruns and the root cause of that
problem was addressed in #72.

Signed-off-by: Andrew Gunnerson <[email protected]>
chenxiaolong added a commit that referenced this pull request Jun 6, 2022
When the call ends, everything still remaining in AudioRecord's internal
buffer is lost because there's no way to read the remaining bytes after
recording is stopped. With 20x the buffer size on eg. a device with a
1920 byte minimum buffer size and a sample rate of 8000 Hz, this may
cause 2.4 seconds of audio at the end of the call to be lost.

This commit should not have a negative effect since the large buffer
size was meant to address buffer overruns and the root cause of that
problem was fixed in #72.

Signed-off-by: Andrew Gunnerson <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Jumps in recorded file. Recordings Overlapping
1 participant