Difference between revisions of "ECE434 Project - MIDI Sequencer"

From eLinux.org
Jump to: navigation, search
(Highlights)
(User Instructions)
Line 62: Line 62:
  
 
User control is pretty straightforward, since the LCD display tells you each colored button's functionality. Additionally, depending on what state the player is currently, the available pushbutton options will be illuminated. Any non-illuminated buttons don't do anything when pressed in that state.  
 
User control is pretty straightforward, since the LCD display tells you each colored button's functionality. Additionally, depending on what state the player is currently, the available pushbutton options will be illuminated. Any non-illuminated buttons don't do anything when pressed in that state.  
 +
  
 
There are essentially 3 states of the player: Stopped, playing, and settings.  
 
There are essentially 3 states of the player: Stopped, playing, and settings.  
Line 71: Line 72:
 
Orange: Skip to next song
 
Orange: Skip to next song
 
White: Open setting menu
 
White: Open setting menu
 +
  
 
While playing, these are the user options:
 
While playing, these are the user options:
Line 78: Line 80:
 
Orange: Skip to next song
 
Orange: Skip to next song
 
White: N/A
 
White: N/A
 +
  
 
While in settings, these are the user options:
 
While in settings, these are the user options:
  
 
Green: Switches to next soundfont
 
Green: Switches to next soundfont
Red: Toggles shuffle mode
+
Red: Toggles shuffle mode (illuminated while on, dark while off)
Orange: Toggles MIDI/WAV mode
+
Orange: Toggles MIDI/WAV mode (illuminated while in MIDI mode, dark while in WAV mode)
 
White: Return to stopped state
 
White: Return to stopped state
  

Revision as of 12:27, 20 February 2023


Team members: Gaven Williams, Brendan Perez

Grading Template

I'm using the following template to grade. Each slot is 10 points. 0 = Missing, 5=OK, 10=Wow!

Add Extras

09 Executive Summary
09 Packaging
09 Installation Instructions 
09 User Instructions
09 Highlights
09 Theory of Operation
09 Work Breakdown
09 Future Work/Conclusions
09 Hackster.io
09 Demo/Poster
00 Not Late

Score:  90/100

Executive Summary

Midi hardware.png

Final hardware implementation of the MIDI Player


Our project is a MIDI/WAV music player. The user can browse through a selection of .mid and .wav files using pushbuttons and an LCD screen, or put the player in "shuffle" mode. While in MIDI mode, the user also has the option of selecting a soundfont, which will then be used in MIDI synthesis.

We have finished implementing all of these features.

Source code: https://github.com/rhit-perezbe/MIDI-Player

Packaging

Button box.png

We constructed a small UI box that houses the pushbuttons and LCD screen.

The CAD file (boxhole2.DXF) is located on our GitHub as well: https://github.com/rhit-perezbe/MIDI-Player

Installation Instructions

All installation instructions can also be found on our GitHub repo: https://github.com/rhit-perezbe/MIDI-Player

User Instructions

To get started with our program:

bone$ cd MIDI-Player

bone/MIDI-Player$ sudo ./midiPlayer.py

Now that it's running, the user can operate the player solely from the LED pushbuttons and LCD display.

User control is pretty straightforward, since the LCD display tells you each colored button's functionality. Additionally, depending on what state the player is currently, the available pushbutton options will be illuminated. Any non-illuminated buttons don't do anything when pressed in that state.


There are essentially 3 states of the player: Stopped, playing, and settings.

While stopped, these are the user options:

Green: Play currently displayed song (enters playing state) Red: N/A Orange: Skip to next song White: Open setting menu


While playing, these are the user options:

Green: N/A Red: Stops playback (enters stopped state) Orange: Skip to next song White: N/A


While in settings, these are the user options:

Green: Switches to next soundfont Red: Toggles shuffle mode (illuminated while on, dark while off) Orange: Toggles MIDI/WAV mode (illuminated while in MIDI mode, dark while in WAV mode) White: Return to stopped state

Highlights

Our project was designed to be as robust and versatile as possible, while still maintaining a simple and accessible user interface.

One such feature is the ability to switch between soundfonts. This allows for any one MIDI file to be played with a variety of samples and instruments, giving the user a wide range of choices for how they want to listen to a certain song. We even included the infamous "meowsynth" if the user insists on hearing their music sung by the dulcet tones of a cat.

Anyone who downloads our project can add any MIDI, WAV, and soundfont (SF2) files to their respective folders to expand the library of music. Additionally, uploading a 200x200 pixel image with the same name as a MIDI or WAV file will display that image when that song is playing. If a song without a dedicated image plays, a default image will display during that song.

The user interface is clean and simple, streamlining the listening experience. There are 4 buttons, which are clearly labeled on the LCD screen. For additional simplicity, only illuminated buttons are functional in certain states.

Theory of Operation

Give a high level overview of the structure of your software. Are you using GStreamer? Show a diagram of the pipeline. Are you running multiple tasks? Show what they do and how they interact.

Work Breakdown

List the major tasks in your project and who did what.

Also list here what doesn't work yet and when you think it will be finished and who is finishing it.

Future Work

Suggest addition things that could be done with this project.

Timeline

Fri 27-Jan-2023: BeagleBone playing .wav files

Mon 30-Jan-2023: BeagleBone playing .mid files given a soundfont

Sun 5-Feb-2023: Can stop song playing (kills fluidsynth process)

Mon 6-Feb-2023: Breadboarding user hardware

Tues 7-Feb-2023: Software for user buttons

Fri 10-Feb-2023: Start software for LCD display

Mon 13-Feb-2023: Finalize software for LCD display

Fri 17-Feb-2023: Put together box for user hardware

Sun 19-Feb-2023: Finalize documentation (hackster.io, wiki page, etc)

Wed 22-Feb-2023: Final project DUE

Conclusions

Give some concluding thoughts about the project.

If we were to do this again, we could have expanded the UI box to also contain a PocketBeagle in order to fully contain our hardware and reduce the number of exposed wires.