NepTune is an Android app and backend that makes capturing, editing, and sharing short audio samples simple and social. It combines a lightweight sound-design toolset (resampling without pitch distortion, filters, reverb, fades) with social features (sharing, subscriptions, favorites, stats).
This project has been done for the CS-311 course at EPFL given by George Candea
You can download the last apk release here
NepTune helps creators capture real-world sound, apply basic audio processing, and share results with a community. The Android app (in app/) includes audio capture and editing features and integrates with Firebase for auth, storage and server-side processing. Cloud functions (in functions/) perform heavier tasks such as server-side preview generation and FFmpeg-based processing.
Key features
- Record audio from the device microphone
- Basic sound design: resampling (without pitch shift), filters, reverb, fade in/out
- Export as WAV or as a portable project file
- Social features: share samples, follow users, favorites, stats
- Server-side sample processing & preview generation (Firebase Functions + FFmpeg)
- Install JDK 11 and Android Studio.
- Configure local Android SDK in Android Studio and set
local.propertiesif needed (Android Studio usually writes this automatically):- local.properties (example):
sdk.dir=/path/to/Android/Sdk
- local.properties (example):
- Open the project in Android Studio by selecting the repository root or
settings.gradle.kts. - Gradle will sync dependencies. If Android Studio asks to upgrade Gradle plugin or Kotlin plugin, prefer the versions defined by the project unless you have a specific reason.
- Ensure
app/google-services.jsonis present. If you need to use a different Firebase project, replace that file with one from the Firebase console. - Native libraries:
app/libs/containsTarsosDSPKit-release.aarwhich is included by the Gradle build. No extra steps required unless you replace the AAR.
- Ensure you have Node.js 22 installed (the functions
package.jsonsetsengines.nodeto 22). - Install Firebase CLI (
npm install -g firebase-tools) and log in:firebase login. - Navigate to the functions folder and install dependencies:
cd functions npm install - Run the emulator:
firebase emulators:start
Android (from repo root):
-
Build debug APK:
./gradlew :app:assembleDebug -
Build release APK (ensure signing config / keystore is available):
./gradlew :app:assembleRelease -
Run unit tests (JVM/Robolectric):
./gradlew :app:testDebugUnitTest -
Run connected instrumentation tests (device/emulator required):
./gradlew :app:connectedDebugAndroidTest -
Generate combined JaCoCo report (unit + android tests; configured in
app/build.gradle.kts):./gradlew :app:jacocoTestReport
- Keep secrets out of the repository. Configure CI secrets for:
- Firebase token (
FIREBASE_TOKEN) or use service account auth - Keystore file and passwords (or upload the keystore as a protected CI artifact)
- Firebase token (
- Example automated steps for CI (GitHub Actions):
- Checkout
- Set up JDK 11 and Android SDK
- Cache Gradle & Node modules
- Build
./gradlew assembleDebugand run:app:testDebugUnitTest - Optionally run
npm --prefix functions ci && npm --prefix functions run buildto validate functions - Deploy functions only from protected branches or tags using
firebase deploy --only functionswith aFIREBASE_TOKENstored in secrets
- We use
pull_request_template.mdin the repository root to standardize PRs. Please follow it when opening PRs. - Branching model: create feature branches from
main(or your current default branch), open a PR and request reviews.
| Name | GitHub |
|---|---|
| Adrien Jangal | @Ryukriss-f |
| Angéline Bignens | @AngeB21 |
| Arianna Baur | @abaur3 |
| Gregory Blanc | @xgby |
| Timéo Golaz | @Timeo21 |
| Tony Andriamampianina | @touunyy |
| Uri Jaquet | @uri-j |
