I’m giving serious thought to writing a MIDI file editor that is tailored specifically for creating drum track MIDI files. Even the simplest MIDI editors available are loaded with features that are overwhelming for a guitarist that just wants throw together a couple measures worth of drum-hits. Ideally it would be kit-aware or at least configurable to match the kits you’re working with. I want to incorporate as much drag-drop manipulation and as much roll-over info as possible. I would display only the info the BB cares about (like I don’t need to see after-touch or off-velocity, etc.). Having to visit dialogs to edit notes is tedious, in fact I was thinking it would be cool to be able to use the mouse-wheel to adjust velocities and maybe use color coding as a visual cue for volume levels.
Is this a worth while project? Would people who find MIDI editors and digital audio workstation software daunting be more inclined to create their own song parts if they had software that was single-purpose and focused on a drum track?
I’d probably code it with Java Swing since Java 7 has very rich MIDI support and I’m primarily a Java developer these days anyway, so it would be multi-platform from the get-go.
definitely would be appreciated by those of us who do indeed find all the steps and platforms daunting, who don’t have the time to learn as much as they’d like let alone keep up with the changing landscape, and who want to create basic custom beats in the easiest way possible!
so…in a word “YES!!!”
Hi Charles, I’d use DAWs for anything extensive but would GLADLY pay $100 for a graphical midi file util for conversion and working with otherwise good loops to avoid note editing. I’ve looked a lot and all I can find are old utils like Mapnotes.exe that don’t work on long file names, if they work, and other plugins that are meant to remap events live when sequencing or full song transposition etc. I can’t believe there isn’t a good standalone midi utility yet.
A MidiFileToolbox type util would be an OS neutral.
Typical gui input folder/selction box.
Upon select of one or all midi’s in a folder have it display a summary of all note values detected in all selected files.
Show the ranges from Low to High value and their channel maybe in a matrix or something if multiple channel. (if BB note files and instrument map templates could show note-instrument all the easier to see if conforming).
A selection box apply custom conversion templates (user defined in the GUI or from CSV)
Template in a value-1 to value-2 format.
If value-1 to a blank the program will strip all of that note for easy mod of killing cymbals on quieter loops
CC and other non-note event strip by ignore of all not in template
use value-1 to same value to keep notes unchanged in templates
Non destructive to original, send all modified loops to folder selected in second window for output (ie. BBM midi-sources).
Same type preview on the output folder files selections to display note ranges and confirm all in the output (BB area) have only the notes that the kits support.
Could go extra step and do a ± whatever value is read for velocity per note for volume adjusts without midi editing.
channel stripping or same to/from type converting.
This would open up thousands of ready to go loops for quick converts to BB libraries and make it quick work to setup an intro/alternate verse set for a given main pattern and avoid surprises after loading into BBM when full editor not needed.
Charles, I appreciate your initiative very much!
You have the history of being one of the most creative, helpful and useful posters out there!
I would love to discuss your concept ideas of GUI of your application you are imagining. If you have any screenshots, pictures or any illustrations of how you would like to layer MIDI editor controls - please share!
My thinking was to make MIDI creation accessible to the guitarist, the person that doesn’t want to know about channels and tracks and events and instrument numbers, etc. etc. etc. I wouldn’t even make the UI MDI based, just keep it uncluttered as possible: just creating/editing a single drum track, nothing else. In Anvil when you switch a track to “rhythm” it changes the grid to only show just the enabled drum instruments and I rather like that, however I think it would be helpful in this case if it started out with all the instruments of a kit enabled rather than the user having to add them: the less steps the better. Ideally it would be able to parse DRM files and get all the stats automatically but obviously that would require a little extra help from the BB engineers.
I’ve worked in Java for the last 10 years so that would be my preference and you get the portability to any platform. Java 7 has a class hierarchy for MIDI functionality including classes for turning a sequence into a file and vice versa as well as for playing the sequence, so all the pieces are there already. Using Swing, a JTable may fit the bill for the editor, the only snag is the ability to do free-hand positioning, like if you wanted to manually dequantitize, but again, that’s probably not an operation that the target audience for the tool is going to employ. I’m also not sure how I’d implement drag-drop in a JTable yet, but I bet there are examples out there.
Ok, let’s assume you have already succeeded in creating such a program, and let’s also assume I have now just launched your program, and start creating a new MIDI drum track (or editing an existing one).
What UI controls do I see, what buttons are there for me to push, etc? How is the process structured conceptually?
I have only one idea how to simplify the creation of the drum track.
Step 1. Set the tempo. The auto playback starts looping the (currently empty) one bar drum track.
Step 2. Set the number of bars in a track.
Step 3. Pick an instrument. Begin pressing a button (like a Space bar) to add corresponding notes to the playing looped track. The played track becomes populated with the sounds of this instrument. Implement the possibility to auto-correct presses - if a new press is close to the old one - erase the old one, replacing it with a new one.
Step 4. Repeat Step 3 for each instrument you want to add.
Step 5. Edit the velocity of each note.
Step 6. Finalize the drum track, auto playback stops.
Are you imagining a somewhat similar approach, or not? What could be simplified or enhanced. I am thinking of probably using several different keyboard buttons to populate a track with several instruments at once like pressing like A-QA-AQ- to make something like a most simple way to strum a guitar - dum—tsh-dum—dum-tsh.
In the spirit of the original Beat Buddy financing plan, you should do that as a private “Kick-starter” type thing. I’d commit $29.95 to it without thinking twice.
What I really want is a piano-roll style editor (like the old BOSS drum machines had) with
control over velocity
labels in the margins identifying the instrument per note (preferable drum-set aware, as you said)
the ability to select “all occurrences of this note” (so I can transpose hi-hats to rides, for example). In Reaper, you click the note on the piano and it selects all instances of that note.
I took a quick peek at what’s out there in the open source world and didn’t see anything that looked like a piano-roll style editor that I could repurpose. Also everything I found sounded like it was written before Java 7 so they weren’t able to exploit the sequencer library and rolled their own.
I haven’t had much time to research since the inspiration hit me but I have found examples of drag-drop on a JTable, including dragging entire rows for transposition, so the more involved operations are doable. Hooking up a table datamodel linking sequencer event objects from a collection to the piano-roll table shouldn’t be hard, perhaps hashmap keyed by the note position would make my life easier, when the user performs a delete-measure or a paste-insert and I need to shift notes.
I was thinking drum-kit template files might be the way to go so it would come pre-seeded with the standard BB kits and users would be able to add their modifications easily via the UI. All that would be is name-value pairs of midi notes to instrument names. They could even sort the instruments in the way that seems best to them (like group all the silly toms together!)
A question for potential users, with the goal of keeping this as simple as utterly possible: what would be the smallest division of measures users would want to work with: 16th notes? 32nd notes? I don’t expect users to be making snare rolls or cymbal rolls with this app. I’m guessing 16ths would be fine enough.
If you don’t mind installing Java virtual machine to your target machine and having to cope with the constant update popup messages like every trucking day or two, then yes - cross platform is easy enough. As for the code itself, once you have written it, your compiled application will run on every Java virtual machine no matter the real platform it is installed at.
Here’s the current “BeatBuilder” interface. I figured the most convenient thing to do would be to always display note velocities so there’s no guessing. Besides it’s clearer if each instrument has it’s own fixed color, I think. Measures are divided into 32nd’s so even the double-basser’s might find it usable.
I had an old Roland drum machine with a big dial on it for tempo … Rock 1 , Swing, Polka …etc,
and one button to press if you wanted it to ‘shuffle’ …Is that easy to replicate?
It certainly made our lives easier … Great job, & good luck Charles (Y)