By enabling musicians to train their musical perception handsfree, MyRandNotes enhances their auditory skills and fosters a deeper understanding of chord progressions and melodic patterns. With a slick and minimalistic UI, you can easily choose which chords and octaves you want to be played, the time interval between each note and which instrument, from a vast library of over 30 instruments, ranging from classic pianos and guitars to exotic world instruments, allowing you to customize your training experience.
output.mp4
- Asynchronous event/data handling with Coroutines and Flow.
- Jetpack
- Lifecycle: Observe Android lifecycles and handle UI states upon the lifecycle changes.
- ViewModel: Manages UI-related data holder and lifecycle aware. Allows data to survive configuration changes such as screen rotations.
- Hilt: for dependency injection.
- Compose: for making beautiful declaratively-made UIs.
- Architecture
- MVVM Architecture (View - ViewModel - Model).
- Fluidsynth: State-of-the-art MIDI-based audio synthesizer open source software.
- Moshi: A modern JSON library for Kotlin and Java.
- NDK: Toolchain for compiling C/C++ code for multiple ABI architectures.
- JNI: Library for handling Java and C/C++ code integration.
Bellow follows a diagram representation of the app's architecture:
Key points from the diagram being:
- State/settings emissions and collections aided by Kotlin's Flow library.
- Note Generator Settings controller being the states' source of truth.