← Back to projects
IntuneImages by Unsplash
React NativeOboeRustFFTAudio

Intune

A chromatic musical instrument tuner

Suyash Singh
Suyash Singh

Motivation for building

The motivation for creating Intune comes from my love for learning music as a hobby. Since I often need to tune my instruments, I found existing free tuning apps too cluttered with ads. I wanted to build something simple and ad-free for myself and other musicians like me. Intune aims to be a straightforward solution for hassle-free instrument tuning.

I anticipated needing to perform complex calculations quickly, which led me to choose Rust for its high-speed capabilities. With the technical aspects secured, the next challenge was accessibility. I opted for React Native to develop both Android and iOS applications powered with React Native Animations, transforming this endeavor from learning an instrument into crafting a completely new user experience.

Screens

Features

Intune provides a chromatic musical tuner which can be used to tune any musical instrument, even drums!

Tech Stack

  • React Native
  • React Native Animations
  • Rust
  • FFT
  • Oboe
  • Android
  • Kotlin

App architecture

High Level

High Level Architecture for Intune
High Level Architecture for Intune

Rust layer

High Level Architecture for FFT Calculation
High Level Architecture for FFT Calculation

Frontend in React Native

React Native serves as the frontend framework, managing the user interface and application logic.

Rust for Audio Processing

Rust is integrated as a library for efficient audio processing on Android, utilizing Oboe for real-time audio management and FFT for converting time domain data to frequency domain.

Communication via Native Modules

Native modules act as a bridge between React Native's JavaScript and the Rust library, facilitating seamless communication and function invocation.

Event Loop and Data Flow

Kotlin's event loop on Android polls data processed by Rust, such as frequency calculations from FFT, and sends it to React Native's JavaScript engine via an event emitter stream.

Benefits of the Approach

This architecture combines the performance benefits of Rust with the cross-platform capabilities of React Native, ensuring efficient audio processing and a unified development environment for Android applications.

Further Documentation

How to call Rust code from a React Native CLI Android app Android Audio Streams with Oboe, Rust & React Native Find the most dominant frequency using FFT in Rust Setup React Native Reanimated in React Native CLI apps Send events from Kotlin code to JS Engine using Native Modules in React Native Android app Log Rust Libraries code in react native android apps