"Classical music has been circling the drain for years… new classical music … **has about as much chance of public acceptance as pedophilia**" - Mark Vanhoenacker
<aside> <img src="/icons/heart-rate_blue.svg" alt="/icons/heart-rate_blue.svg" width="40px" />
"Stuffy". "Old-fashioned". "Elitist". "Boring". — what other words come to mind when you hear classical music? Recent streaming trends illuminate the genre's slow decline. Fear of long, lyric-less pieces and general boredom precludes modern listeners with ever-shortening attention spans from exploring 300+ years of Western classical music.
As a cellist of 12+ years, raised in a household enriched by classical music, I cannot imagine my life without it. The genre's miraculous ability to evoke ineffable emotions never ceases to astound me. That's why for my Gould Center Passion Project, I wanted to investigate a way to make classical music accessible, interesting, and — dare I say — fun?
</aside>
<aside> <img src="/icons/first-aid_blue.svg" alt="/icons/first-aid_blue.svg" width="40px" />
For many, classical music feels inaccessible and not worth accessing. What if we could break down these barriers? What if we could harness its emotional power and democratize access for everyone?
Gen Z and millennials demonstrate the strongest aversion to classical music, perceiving it as distant and irrelevant. ClassiCure aims to transform this narrative by radically reimagining the listening experience. Our approach begins with the user — their emotions, their stories, their connections — turning classical music from a distant artifact into a living, breathing emotional landscape.
ClassiCure’s core mission? to prove that classical music isn't a relic, but a universal language of human feeling, waiting to be translated for a new generation.
</aside>
<aside> <img src="/icons/light-bulb_orange.svg" alt="/icons/light-bulb_orange.svg" width="40px" />
Wire-framing…
→ What’s essential to the product?
→ How can we maintain usability while keeping the interface engaging?
→ What’s the user journey going to look like?
</aside>
https://www.figma.com/design/lmeaZ2kcOY0L7Wi5J8NsCa/Wireframe-for-ClassiCure?node-id=0-1&p=f&t=o6NSLsn8dr1R696h-0
<aside> <img src="/icons/star_orange.svg" alt="/icons/star_orange.svg" width="40px" />
Feature Breakdown
→ Feelings relatable to college students
→ UI is playful & gamified to appeal to younger audiences
→ Streaming app integration - sends users right to the song in their streaming app
→ Explains the why - teases out aspects of the pieces to pay attention to
</aside>
https://embed.figma.com/proto/Dy3eFLGsE7XUVufYrEZNkw/Final-Mock-Up---ClassiCure?node-id=10-16&p=f&t=pvd6Zjm357GE57f5-0&scaling=scale-down&content-scaling=fixed&page-id=0%3A1&starting-point-node-id=10%3A16&embed-host=notion&footer=false&theme=system
<aside> <img src="/icons/music-album_yellow.svg" alt="/icons/music-album_yellow.svg" width="40px" />
While I had a great time building out a wireframe for ClassiCure, it was painstaking work to research & classify pieces. I began to brainstorm ways to scale, and came across Sentiment Analysis via Machine Learning — a sick project by former UCLA student William Yicheng Zhu ****that “aims to develop a machine learning application to identify the sentiments in a music clip”.
I learned quickly that classical music datasets are few and far between. Thus, I elected to create my own training data…
SPOILER ALERT: manually entering 100 rows of data? not fun
</aside>
https://docs.google.com/spreadsheets/d/1oADSqwKMucGxbUNvv5KsC8RSjAYy9EaeABrA8Ql9uo0/edit?gid=268521944#gid=268521944
<aside> <img src="/icons/activity_yellow.svg" alt="/icons/activity_yellow.svg" width="40px" />
After creating a training data set, I turned to TensorFlow to build a rudimentary ML classification model. The goal? Automating the process of assigning emotions to classical pieces. Was it achieved? Maybe not completely, but I'll keep chipping away at it.
Follow along below for a model walkthrough or run through the code yourself using the file below ⬇️
</aside>
ClassiCure_Classification_Algo.ipynb
IMPORTING NECESSARY LIBRARIES
import pandas as pd
import io
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns
LOADING THE DATA
from google.colab import files
uploaded = files.upload()
data = pd.read_csv(io.BytesIO(uploaded['passion_project.csv']))
print(data.head()) # Display the first few rows of the dataframe