summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md53
1 files changed, 28 insertions, 25 deletions
diff --git a/README.md b/README.md
index 0cf9692..8785d1c 100644
--- a/README.md
+++ b/README.md
@@ -9,15 +9,12 @@ on device.
- **Mono switch:** optionally record a single channel (half the file size)
- **Markers:** place labelled cue points while recording; they are embedded in the WAV (`cue ` + `LIST/adtl`) and shown in the player
- **Silence:** optional Do Not Disturb total silence (no notifications, no vibration) while recording
-- **Saving:** the WAV is written to the public **Downloads** folder as
- `reccoon-YYYY-MM-DD-HHMMSS-XXXXX.wav`, where `XXXXX` is a persistent
- 5-digit progressive counter
-- **Library:** a list of saved recordings, with a player and a scrubber to jump
- around long recordings
+- **Recordings list:** scrollable list at the bottom of the main screen, newest first
+- **Player:** scrubber, ±10 s jumps, speed control, delete / rename / share / export, no autoplay
- **Transcription:** on-device, offline speech recognition with
[sherpa-onnx](https://github.com/k2-fsa/sherpa-onnx) using multilingual
Whisper — works with **English and Italian**
-- **Name:** RECCoon · **by** wuhei · **version** 1.3.1-alpha
+- **Name:** RECCoon · **by** wuhei · **version** 1.4.0-alpha
- **Icon:** raccoon with a microphone
## Requirements
@@ -32,6 +29,7 @@ on device.
```sh
./gradlew :app:assembleDebug # debug APK
./gradlew :app:assembleRelease # release APK (signed with the debug key)
+./gradlew :app:testDebugUnitTest # JVM unit tests
```
Outputs:
@@ -39,7 +37,7 @@ Outputs:
- `app/build/outputs/apk/debug/app-debug.apk`
- `app/build/outputs/apk/release/app-release.apk`
-A prebuilt copy is available at `dist/RECCoon-1.3.1-alpha.apk`. Note that the
+A prebuilt copy is available at `dist/RECCoon-1.4.0-alpha.apk`. Note that the
sherpa-onnx AAR in `app/libs/` and the APK in `dist/` are **not** tracked in
git because they are large; see `TODO.md`.
@@ -49,10 +47,14 @@ git because they are large; see `TODO.md`.
44100 Hz into a temporary file, then rewrites a correct 44-byte RIFF/WAVE
header when recording stops. It uses stereo when available and falls back to
mono, and reports per-channel peak levels to the UI.
-- `MainActivity` handles the runtime permissions, the timer, and copying the
- finished file into Downloads. On Android 10+ this uses `MediaStore`; on
- older versions it writes directly to the public Downloads directory and
- notifies the media scanner.
+- `RecordingService` is a microphone-typed foreground service started while
+ recording, so capture continues when the app is in the background.
+- `MainActivity` handles the runtime permissions, the timer, the level meters
+ and copying the finished file into Downloads. On Android 10+ this uses
+ `MediaStore`; on older versions it writes directly to the public Downloads
+ directory and notifies the media scanner.
+- Files are named `reccoon-YYYY-MM-DD-HHMMSS-XXXXX.wav`, where `XXXXX` is a
+ persistent 5-digit progressive counter.
## Waveform, meters and markers
@@ -63,20 +65,22 @@ git because they are large; see `TODO.md`.
- The **Mark** button (enabled while recording) adds a labelled cue point at the
current position. Markers are written into the WAV as standard `cue ` and
`LIST/adtl` chunks (readable by Audacity/Reaper) by `WavRecorder`, and also
- stored as a JSON sidecar by `MarkerStore`. `PlayerActivity` shows them as
- chips that seek the player when tapped.
-- The **Mono** checkbox records a single channel instead of stereo.
-- The **Silence alerts** checkbox switches the phone to Do Not Disturb total
- silence while recording and restores the previous setting on stop. It needs
- the `ACCESS_NOTIFICATION_POLICY` permission, granted in system settings when
- first enabled.
+ stored as a JSON sidecar by `MarkerStore`. The player reads the sidecar and
+ falls back to `WavMarkers`, which parses the embedded chunks.
-## Library and player
+## Recordings list and player
-- `RecordingsActivity` lists the `reccoon-*.wav` files in Downloads.
+- The main screen shows a scrollable list of recordings, newest first. Tapping a
+ row opens `PlayerActivity`.
- `PlayerActivity` plays a file with the platform `MediaPlayer`, a scrubber
- (`SeekBar`), ±10 s jumps and a playback speed control (0.5×–2×). Tapping a
- transcript line seeks the player to that moment.
+ (`SeekBar`), ±10 s jumps and a playback speed control (0.5×–2×). Playback does
+ **not** start automatically.
+- Library actions: **Share** (FileProvider on Android 9 and older), **Rename**
+ (MediaStore or file), **Export** (writes `.txt` and `.srt` to Downloads) and
+ **Delete** (removes the WAV and its sidecars).
+- Transcript words are clickable: tapping a word seeks the player to it. Word
+ timings come from Whisper token timestamps when available, otherwise the
+ segment is divided between its words.
## On-device transcription
@@ -97,11 +101,10 @@ git because they are large; see `TODO.md`.
- Language can be forced to English (`en`) or Italian (`it`), or left on
**Auto detect**.
- Transcripts are stored as JSON sidecars in app-private storage
- (`filesDir/transcripts/<recording>.json`) and are shown in the player. A
- `TXT` badge marks recordings that already have a transcript.
+ (`filesDir/transcripts/<recording>.json`).
## Native libraries and APK size
The APK bundles the sherpa-onnx/onnxruntime native libraries for `arm64-v8a`
-and `x86_64`, so it is around 70 MB. Removing `x86_64` from the `abiFilters`
+and `x86_64`, so it is around 72 MB. Removing `x86_64` from the `abiFilters`
in `app/build.gradle.kts` roughly halves the APK size for phone-only builds.