-
NOTE: This project requires either ffmpeg (linux) or libav (windows) to be installed on your system.
-
TODO:
- tests!!!!
- comments (new and update big block comment under class name)
- update documetation.md with new functions
- gui backend object
- convert to mp3
- saving and playing in the edit frame
- testing clustering with larger sound files.
- Fix deleting playlists
LIMITATIONS:
- Files with long titles are incompatible with the db stuff
DONE:
- play function
- -p flag : calls play function
- sequential play function
- overlapping play function
- -s : calls sequential play function
- -o : calls overlapping play function
- suppress error messages
- mp3 flac etc support!!!!
EPOCH ONE REQS:
- A user must be able to interact with your program from the command line via a simple text-based interface.
- From that command-line interface, the user should be able to get a list of available commands.
- A user must be able to get a list of available sounds to play.
- A user must be able to play back a single sound.
- A user must be able to listen to multiple sounds simultaneously (i.e., layer multiple sounds on top of each other).
- A user must be able to listen to a sequence of sounds.
- A user must be able to rename a sound.
- These requirements may be met either with a single large command-line program that implements all of them, or by a suite of smaller command-line programs that focus on a subset of features
EPOCH TWO REQS:
Part a: enhanced ways to listen to sounds. Our goal is to offer users a variety of distinctive methods to listen to sounds and customize them, enabling them to edit and save their creations effortlessly.
- Insert audio clips in the middle of a sound during editing.
- Rename an audio file.
- Change sound audio format.
- Play a sound backwards.
- Concatenate audio file.
- Adjust speed of sound clip.
- Adjust sound pitch.
Part b: ways to characterize and organize the sounds. Our goal is to establish a comprehensive database and empower users to categorize and organize sounds efficiently. Users will have the flexibility to specify the table column for sorting purposes, enhancing their ability to navigate and manage sound data effectively.
- Sort playlist by title.
- Sort playlist by date.
- Sort playlist by sound length.
Part c:
- Unit testing (Saturn CLI)
- Unit testing (Database)
EPOCH THREE REQS:
part a: setting up a gui using tkinter. Our goal is to fully implement the gui and bridge our backend and databases using an mvc architecture.
- Create frame for home, playlist, sound, and edit screens.
- Connect database to gui.
- Use database implementation to show all playlists in our screen.
- Select, add, and remove playlist feature on gui.
- Use database implementation to show all sounds in specified playlist.
- Play, remove sound from playlist, and edit features for a sound.
- Sort by feature on gui to sort sounds in a playlist by title, length, or date added.
- Use sound features developed in epoch 1 to allow user to edit a specified sound.
- Save feature to save an edited sound.
part b: machine learning with clustering. Our goal is to be able to cluster similar sounds (our way to group by generes).
- Create clustering algorithm.
- Embed clustering algorithm in gui to create playlists for each cluster.
- Test implementation on real sounds in gui.
part c: setting up a backend. Our goal is to extend our sound features from command line to something the gui can utilize (acting as our controller).
- Modify speed.
- Modify pitch.
- Indicate if user wants to reverse a sounds or not.
- Allow user to add another sound to edited sound.
- Allow user to specify a sound to randomly insert in edited sound.
- Give user the choice whether to play edited version or original.
- Set up clustering algorithm.
GROUP MEMBERS:
- Neel Troeger
- Chris Gomez
- Aidan von Buschwaldt
- Jas Liu
PROJECT INDIVIDUAL CONTRIBUTIONS:
- Chris Gomez:
- Implemented DBConnector.py
- Implemented PlaylistManager.py
- Implemented SQL.sql
- Implemented gui.py
- Contributed to gui_backend.py
- Contributed to use_cases
- Contributed to story maps
- Neel Troeger:
- Implemented gui_backend.py
- Implemented ml.py
- Contributed to gui.py
- Contributed to use cases and story maps
- Implemented cli
- Wrote tests for cli
INDIVIDUAL REFLECTIONS:
-
Chris Gomez: The gui was the biggest learning curve I had to spend a whole saturday flipping through yt tutorials and when it came to integrating, I had to redo my gui a few times to make it more elegant and fit some sort of software design rather than having a bunch of random functions. Another big challenge was the embedded sql aspect using python since we had just learnt it this last semester in databases. I wish we had came up with like a pause/play button. I also would have loved to have some sort of media sounds storage system so we weren't reliant on a directory. I also would love to make the gui visually more organized because I feel it is a little messy.
-
Neel Troeger: Because of how the cli was setup (for single use cases), I had to create a new backend for the gui. This was more of a challenge than I thought, since I wasn't working directly on implementing the gui, and what I originally had in my head was likely not what Chris had in his head. This led to a lot of back and forth between us to make sure the gui and backend were in sync. In addition, since the backend is set-up to load a single audio file and change only that, implementing it was a bit more difficult than reusing code from the cli. Implementing the clustering was less difficult, since I am taking a machine learning class this semester. I used DBSCAN (Density-Based Spatial Clustering of Applications with Noise) to cluster the sounds, mostly because that way I didn't have to pre-specify a target number of clusters, which would aid in scalability in future usage. I still had to figure out how to extract features from the sound files, which was a bit of a challenge, but was resolved by using the librosa library.