jeffbourdier / midiopsy Goto Github PK
View Code? Open in Web Editor NEWWindows application to view, play, and edit standard MIDI files
Home Page: https://jeffbourdier.github.io/midiopsy/
License: MIT License
Windows application to view, play, and edit standard MIDI files
Home Page: https://jeffbourdier.github.io/midiopsy/
License: MIT License
Add cut, copy, & paste commands.
When finishing an edit session, automatically update the number of bytes in each track that was edited, as this is tedious (and error prone) to do manually.
Add a configuration setting to pre-populate event dialogs based on the selected item (or perhaps the last values that were entered for that dialog).
Allow floating windows (such as the event properties window) to be resized.
(on behalf of Cyril Délécraz)
Midiopsy currently uses US system which set the main C to C4 instead of C3 in the MIDI world.
(on behalf of Cyril Délécraz)
The first file that's opened after the application is launched starts playback (in the media player) for just a split second. Prevent this.
Include a few (very simple) sample MIDI files with the project to help demonstrate editing.
When scrolling (using thumb tracking), the color swath used for the selection in either text box that does not have focus stays on the screen (when it should disappear). Setting IsInactiveSelectionHighlightEnabled to false
during the scroll operation does not resolve this.
Add to the Help some charts showing hex values for notes, meta-events, etc. (basically summarizing the information on pages 42, 100-4, 137-9, & 150-1 of the MIDI spec).
Align text for readability.
Highlight the whichever line the cursor is on, in both the hex and comments text boxes (probably via Select).
Add ability to open MIDI files from Windows Explorer using context menu.
Add a configuration setting for verbosity, to allow comments to be more "terse" and thus not take up as much space (e.g., instead of "Note number 60 (C 4), Velocity 96", something like "Note 60 (C 4), Vel 96").
When the app window closes, save the current width of the hex text box (along with the window bounds and maximized flag).
Color-code text for readability (somewhat akin to syntax highlighting).
For example if type is associated to "green", all the hexa code (the Hex column) appears in green. This would provide an easy way to visualize what each byte stands for.
(on behalf of Cyril Délécraz)
Add a Go To... (Ctrl+G) command button to the editing screen to jump to the beginning of a given track, and possibly other locations within the file.
There appears to be no such command predefined, it will need to be built.
Add a user-configurable setting for the maximum number of items that can appear on the Most Recently Used (MRU) file list.
It's not clear how this will affect the standard MIDI file format, but it would be good to support any such changes. Since MIDI 2.0 is still being developed, this may be ongoing for a while.
In the comments, include cumulative time for each event.
Display all the Hexa code in one block instead of showing it event by event.
(on behalf of Cyril Délécraz)
When the user edits the header and changes the format to 0, convert the file to format 0 (one multi-channel track) automatically.
Provide a configuration setting to show (or not to show) the warning that the user sees when starting an editing session, preferably accessible via a checkbox on the UI (e.g., "Don't show this message again.")
Right now, once a channel event is created, whether or not it uses running status cannot be changed. Allow the user to change this (check/uncheck the box), even after the event is created.
I am trying to open the MIDI file which has a d/l link here
http://www.midi-karaoke.info/21038bb5.html
(direct link to the download is) http://www.midi-karaoke.info/21038bb5.mid
If I open this file in the vanBasco Karaoke Player, I get a warning that the file is damaged and can only be party loaded, but then it finishes loading and plays fine. So there is obviously enough of a valid MIDI file there to be playable.
But when I load it into MIDIopsy, I get an error 'Index was outside the bounds of the Array' and no file is loaded.
It would be nice if it was possible to still show whatever parts of a damaged/malformed file could be interpreted.
For example, it would highlight what numbers are associated to message type (say note on) and what are related to MIDI channel. We could even go a step further, colouring the first bit of a channel message (1 for a status, 0 for data), hence the last 7 bits of a byte define the actual value of the data.
(on behalf of Cyril Délécraz)
Any chance we can have a MacOS build?
I've tried running it with Rider but got Settings.Designer.cs
not found error.
When some properties are set, the value is checked to see if it really changed, thus prevent unnecessary processing. (For a good example of this, see MidiEvent.DeltaTime
.) Most properties could probably benefit from doing this. Examine the code to find other opportunities to prevent unnecessary processing when setting properties by checking the value to see if it really changed.
Add some more content to the Help page.
Enable the user to enter a series of Note On events in rapid succession (without having to go through the MIDI Channel Event dialog for each individual event).
Would it be possible to add filtering?
For example by event type or channel?
Since Select is now used for highlighting, user-defined selection is effectively disabled. Add a toggle for user-defined selection (which would effectively disable highlighting).
In the Release version of the application, executing the Help command results in the error message:
MIDIopsy has stopped working
A problem caused the program to stop working correctly.
Windows will close the program and notify you if a solution is available.
The Debug version does not exhibit this behavior.
It has become clear that multiple selection is more of a must-have than a nice-to-have, though it will have to be restricted to events within a single track, and adding new events may be not be allowed if multiple events are selected.
Provide drop-downs for channel (1 to 16), Data 1 (0 to 127 if CC is selected) and Data 2, but keep the ability to type the number directly.
(on behalf of Cyril Délécraz)
Add a status bar to the UI. (This would be especially helpful for cut/copy/paste commands, like in vi
.)
Currently, the application requires a file to be saved to disk before it can be played back (using the media player). Ideally, it would be able to play back the file without saving it first (possibly by saving it to a temporary file, as the media player does require that the file be stored on disk).
(on behalf of Cyril Délécraz)
Currently, for channel messages that use running status, message type & channel are not shown in the main UI. Add a configuration setting that would allow this.
Add a button for editing. When the app starts, the button should say "Start Editing". When clicked, the comments text box becomes unavailable, the hex text box becomes editable, and the button should say "Stop Editing". When clicked again, the hex text will need to be parsed to repopulate the comments text box and the binary MIDI data. If successful, the file state is set to Edited
, the hex text box becomes read-only, the comments text box becomes available, and the button should say "Start Editing". Otherwise, an error message informs the user of the parsing error.
Add the ability to play the MIDI file.
MIDIopsy has been really great in helping me reverse-engineer some non-standard MIDI files.
There are a few features that would be really amazing (if this functionality is not already possible somehow):
Thank you for this software! 👏
Add a configuration setting to toggle text wrapping (for non-numeric fields).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.