## [0.1.3](https://git.nostrdev.com/voca/voca/compare/v0.1.2...v0.1.3) (2025-04-10) ### Bug Fixes * bump build.gradle version with pipeline ([06a50a5](06a50a58f6
)) * fixed typing bug ([52a4c21](52a4c216c7
)) * pipeline updates the build gradle (or should) ([2292a0d](2292a0db63
)) * version bump automatiocally in build.gradle ([1b9dfa5](1b9dfa5869
)) * version bump automatiocally in build.gradle v2 ([66094de](66094dea5a
)) * version bump automatiocally in build.gradle v3 ([1f4589c](1f4589cfc1
))
Voca - Text-to-Speech App
A privacy-focused Text-to-Speech (TTS) app for Android that respects system language settings and provides a clean, simple interface.
Features
- Text-to-Speech with system language support
- Dark/Light mode toggle
- Share text directly to app
- Respects system TTS settings
- Privacy-focused (no permissions required)
- Lightning address support for donations
Usage
-
Basic Usage
- Enter text in the input field
- Press "Speak" to hear the text
- Toggle dark mode using the switch
-
Language Settings
- Press "TTS Settings" to configure TTS
- The app uses your system's TTS settings
- Language changes take effect immediately
-
Sharing Text
- Share text from any app to Voca
- The app will automatically load the shared text
- Press "Speak" to hear the shared text
-
Support
- Use the "Support Voca" button to donate
- Lightning address: voca@npub.cash
Privacy
- No internet permission required
- No data collection
- All processing done locally
- Uses system TTS engine
Building
To build the app:
# Debug build
./gradlew assembleDebug
# Release build
./gradlew assembleRelease
Signing Configuration
For release builds, you need to set up a signing configuration:
-
Copy the template file to create your keystore properties file:
cp keystore.properties.template keystore.properties
-
Generate a keystore file if you don't have one:
keytool -genkey -v -keystore release.keystore -alias your_key_alias -keyalg RSA -keysize 2048 -validity 10000
-
Update the
keystore.properties
file with your keystore details:storeFile=release.keystore storePassword=your_keystore_password keyAlias=your_key_alias keyPassword=your_key_password
This file is excluded from version control for security reasons.
Requirements
- Android 8.0 (API 26) or higher
- System TTS engine installed
- Language data for desired languages
Release Process
Voca uses a Git-based workflow for releasing to the Zap Store.
Automatic Release
-
Run the prepare-release script with the new version:
./scripts/prepare-release.sh 0.0.7
-
Update the generated release notes in
release_notes.md
-
Commit and push your changes:
git add . git commit -m "chore: prepare release v0.0.7" git push origin main
-
Create and push a tag:
git tag 0.0.7 git push origin 0.0.7
The CI/CD pipeline will automatically:
- Build the release APK
- Create a Zap Store package
- Create a release in Gitea
- Upload assets to the release
- Submit the package to the Zap Store
For more details, see Zap Store Release Process. # SSH test
SSH test
MP3 Conversion Feature
This app supports MP3 conversion using two libraries:
- AndroidLame: For converting audio files or PCM audio data to MP3 format.
- Sherpa-ONNX TTS: For text-to-speech synthesis with natural voice.
Setup Requirements
To use the MP3 conversion feature, you need to add the Sherpa TTS model files:
- Download a Sherpa TTS model package from https://github.com/k2-fsa/sherpa-onnx/releases
- Extract the model files
- Place the model file as
app/src/main/assets/sherpa_tts/vits-model.onnx
- Place the lexicon file as
app/src/main/assets/sherpa_tts/lexicon.txt
Supported Features
- Convert any audio file to MP3 format
- Convert text to speech with natural voice and save as MP3
- Support for multiple languages (depending on the model used)
- Playback of converted audio files
- Efficient caching of generated audio files
TTS Engine Compatibility
Important Note for MP3 Generation: Not all Android TTS engines are fully compatible with the MP3 generation feature. Our testing has shown:
- ONNX Sherpa Model: Works correctly with complete MP3 generation and accurate timing metadata.
- Next-Gen Kaldi: May freeze during MP3 generation or produce incomplete files.
- Other TTS engines: Results vary depending on how they implement the Android TTS API.
If you experience issues with MP3 generation:
- Try switching to the ONNX Sherpa TTS engine in your Android TTS settings
- Test with small text samples first
- If an engine freezes, you may need to force close and restart the app
The issue is related to how different TTS engines implement the Android UtteranceProgressListener interface and report progress during synthesis.
Implementation Details
The MP3 conversion feature is implemented using the following components:
Mp3Converter.kt
: Main class for audio conversion operationsSherpaTtsWrapper.kt
: JNI wrapper for the Sherpa TTS librarysherpa_tts_jni.cpp
: Native C++ implementation for Sherpa TTSAudioConverterViewModel.kt
: ViewModel for the conversion UI