One stop lightweight songwriting application
LyriNote
2024
Simplifying Songwriting
LyriNote is a tool that helps you write lyrics without ever needing to leave the app. It comes with a built-in, customizable editor, audio player and built-in voice memo recording that allows you to listen to the lyrics as you write them. It's a great way to simplify your songwriting process and help you focus on the important parts of your song. It also has a rhyme dictionary that helps you find rhymes for your lyrics. All of this creates a more efficient and enjoyable songwriting experience, all localized to a single place so you never have to leave the app.
Let's take a look at LyriNote:

On the left, you have a list of all your songs. You can search by title, filter by mood and genre, and sort by date. You can also create new songs or edit/delete/rename existing ones. You'll also find your settings here, where you can change your theme, and customize the app to your liking.
Next up, you have the editor. This includes your toolbar at the top, where you can change the font, font size, and color of your text. You can also insert images and videos. Below that, you'll find the text editor. This Rich Text Editor is powered by SlateJS. This allows you to create timestamps at a specific line, which will teleport you to that timestamp in the music player. Highlighting a lyric will allow you to record a voice memo, which can be played back later to prevent you from forgetting the cadence of your lyric.

At the bottom is the music player. You can play, pause, rewind, fast-forward, and seek through the song. You can also change the volume, change the beat or lookup details about the beat.
The Settings

This settings modal is where you can change your theme, and customize the app to your liking. More customization is on the way.
The themes:

An example of darkmode:

Because the app is meant to simplify songwriting, a focus on being able to enter a "zen mode" was a priority. You can do this by disabling the "Always show sidebar" and removing "Reduce Motion". This will create a focused writing experience with minimal distractions. Hovering over the music player will slide it up to it's normal size, allowing you to handle playback.

The concept
Each song deserves its own properties. LyriNote allows you to add Genres (such as Pop, Hip-Hop, etc.) and Moods (such as Sad, Happy, etc.) to your songs.

The Nerdy Stuff
LyriNote is written in Rust and React and uses the Tauri framework. The source code is private for now, but plans to release as FOSS within the Nuance project. The editor uses the Slate library for rich text editing. The music player backend uses React Player library for audio playback, while the frontend is coded entirely by me.
The backend
Songs are saved as JSON files and stored. SlateJS uses a custom model called Descendants. The model looks something like this:
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Descendant {
#[serde(rename = "type")]
pub type_of: Option<String>,
pub children: Option<Vec<Descendant>>,
pub text: Option<String>,
pub url: Option<String>,
#[serde(flatten)]
pub marks: Option<HashMap<String, Value>>,
}
And then a song will have this model, based off of Descendant:
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Song {
pub id: String,
pub title: String,
pub date_created: String,
pub date_modified: String,
pub content: Vec<Descendant>,
pub audio_src: Option<String>,
pub genre: Option<Genre>,
pub moods: Option<Vec<Mood>>,
}