Skip to content

Add MIDI Player App#1097

Open
Aspenini wants to merge 4 commits into
flipperdevices:mainfrom
Aspenini:main
Open

Add MIDI Player App#1097
Aspenini wants to merge 4 commits into
flipperdevices:mainfrom
Aspenini:main

Conversation

@Aspenini

@Aspenini Aspenini commented Jun 19, 2026

Copy link
Copy Markdown

Application Submission

  • MIDI Player is a Flipper Zero external app that plays Standard MIDI .mid files through the built-in speaker as retro buzzer music.
  • Features include a MIDI file picker, format 0 and format 1 playback, best-effort format 2 handling, tempo changes, running status, note on/off events, simple program-change based buzzer styles, smart monophonic note selection, pause/resume, and master volume controls.
  • This is the initial v0.1.0 submission.

Extra Requirements

  • No extra hardware required.
  • Requires a Flipper Zero with an SD card.
  • MIDI files should be copied to /ext/apps_data/midi_player/songs/.
  • Playback uses the built-in speaker only, so output is intentionally simplified and monophonic.

Author Checklist (Fill this out)

  • I've read the contribution guidelines and my PR follows them
  • I own the code I'm submitting or have code owner's permission to submit it
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have validated the manifest file(s) with python3 tools/bundle.py --nolint applications/CATEGORY/APPID/manifest.yml bundle.zip

AI usage disclosure (Fill this out):

  • Partially AI assisted (clarify below which code was AI assisted and briefly explain what it does).

  • Fully AI generated (explain what all the generated code does in moderate detail).

  • AI assistance was used to initialize the structure and to debug.

Reviewer Checklist (Don't fill this out!)

  • Bundle is valid
  • There are no obvious issues with the source code
  • I've ran this application and verified its functionality

@xMasterX xMasterX left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please fix your manifest file according to the docs in this repo
Remove "subdir" and re-order lines, source comes at first, other stuff after, you can use other apps manifests as example

Also, app UI looks pretty basic, buttons could have borders not just plain text, but thats not the main problem
Problem is missing icons
dialog_file_browser_set_basic_options(&options, ".mid", NULL);
Here instead of NULL you can put your own icon using
fap_icon_assets="images", in your .fam file and adding #include "midi_player_icons.h" in your files
Be sure to add icon in the specified folder like "images"
Then you can access it by &I_your_icon_file_name just put it instead of NULL in file browser options

Another problem, example.mid is being "loaded" as default but it does not, since file has to be added manually, this can be easily solved by using
fap_file_assets="example_folder", in your fam file and accessing it via
APP_ASSETS_PATH("example_folder/songs")
in the code - this will make file embedded into .fap and unpacked at first launch, user files still should be placed only in APP_DATA_PATH("something"), assetspath define and folder are managed by app loader and verified on every launch, files are hashed so if you change them in next update, they will be unpacked again and updated properly

And last thing, after file was played, there's no way to return back to file list or replay current file, instead of replay - button OK does nothing
and button Back - closes the app
That looks very unfinished

@xMasterX xMasterX added the fixes needed Unresolved issues with the app requiring maintainer's attention label Jun 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app (new) fixes needed Unresolved issues with the app requiring maintainer's attention

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants