MelodyMiner is a music database project designed to mine and manage MP3 files with ID3v2.4 tags. The application features a user-friendly graphical interface that displays song information (such as title, artist, album, and cover art) and allows users to perform queries using an easy-to-understand language.
When the program is run, an additional window is created.
Do not close this window; it is a bug that I am currently working on.
- Automatically scans a specified directory for MP3 files and extracts relevant metadata, including:
- Performer
- Title
- Album
- Recording year
- Genre
- Track number
- Stores data in a structured database with predefined tables for performers, albums, and songs.
- Allows users to:
- View song and album details
- Query songs by title, artist, or album.
This project aims to simplify the management of music collections while providing insightful metadata at the user’s fingertips.
Before running the project, make sure to install the following dependencies:
- TagLib
- GTKmm 4
- GoogleTest
- Meson
You can install them using your system's package manager. For example, on Ubuntu, you can use:
sudo apt install libtag1-dev libgtkmm-4.0-dev libgtest-dev mesonEnsure that the libraries are correctly installed on your system.
-
Clone the repository:
git clone https://github.com/WendySC25/melodyMiner.git cd melodyMiner -
Set up the project using Meson:
meson setup builddir
-
Compile the project:
meson compile -C builddir
-
Run the application:
./builddir/melodyMiner
To run the tests, make sure you have GoogleTest installed, and then run:
meson test -C builddirIn MelodyMiner, you can perform searches using a specific query syntax to filter songs based on various criteria. Below are the types of queries you can use, along with examples.
The general format for queries is:
- title[]: Searches for songs with titles matching the specified value.
- album[]: Searches for songs from albums matching the specified value.
- performer[]: Searches for songs by performers matching the specified value.
- year[]: Searches for songs from a specific year.
- genre[]: Searches for songs of a specific genre.
- track[]: Searches for songs with a specific track number.
You can combine multiple queries using commas, and you can use the following operators within square brackets:
|for logical OR&for logical AND
-
Title Queries
-
Search for songs with "love" in the title:
title[love]SQL Equivalent:
SELECT * FROM rolas r WHERE (r.title LIKE '%love%'); -
Search for songs with either "love" or "happy" in the title:
title[love|happy]SQL Equivalent:
SELECT * FROM rolas r WHERE (r.title LIKE '%love%' OR r.title LIKE '%happy%'); -
Search for songs that have both "love" and "happy" in the title:
title[love&happy]SQL Equivalent:
SELECT * FROM rolas r WHERE (r.title LIKE '%love%' AND r.title LIKE '%happy%');
-
-
Album Queries
-
Search for songs from an album named "a":
album[a]SQL Equivalent:
SELECT * FROM rolas r JOIN albums a ON r.id_album = a.id_album WHERE (a.name LIKE '%a%'); -
Search for albums "a" or "b":
album[a|b]SQL Equivalent:
SELECT * FROM rolas r JOIN albums a ON r.id_album = a.id_album WHERE (a.name LIKE '%a%' OR a.name LIKE '%b%');
-
-
Performer Queries
-
Search for songs by performer "John Doe":
performer[John Doe]SQL Equivalent:
SELECT * FROM rolas r JOIN performers p ON r.id_performer = p.id_performer WHERE (p.name LIKE '%John Doe%'); -
Search for performers "fire" or "Jane Doe":
performer[fire|Jane Doe]SQL Equivalent:
SELECT * FROM rolas r JOIN performers p ON r.id_performer = p.id_performer WHERE (p.name LIKE '%fire%' OR p.name LIKE '%Jane Doe%');
-
-
Year Queries
- Search for songs from the year 2024:
SQL Equivalent:
year[2024]SELECT * FROM rolas r WHERE (r.year = 2024);
- Search for songs from the year 2024:
-
Combined Queries
- Search for songs with multiple criteria:
SQL Equivalent:
title[love], album[a], performer[John Doe], year[2022], genre[pop], track[1]SELECT * FROM rolas r JOIN albums a ON r.id_album = a.id_album JOIN performers p ON r.id_performer = p.id_performer WHERE (r.title LIKE '%love%') AND (a.name LIKE '%a%') AND (p.name LIKE '%John Doe%') AND (r.year = 2022) AND (r.genre LIKE '%pop%') AND (r.track = 1);
- Search for songs with multiple criteria:
By using the above query syntax and examples, you can effectively search for songs within the MelodyMiner application.
This project is in development.
Don't forget to check the wiki! I have added a couple of documents.