LoginLogin

Litterbox - MML Tracker

Root / Submissions / [.]

glennxsergeCreated:
Download:NDKJR3X3
Version:Size:1MB
A proper MML Tracker. Features include:
  • Create and manage projects
  • Restore project from last application state if program was terminated without saving (Start button is pushed)
  • Pattern editor for organizing song parts
  • Channel muting/isolation
  • Instrument selection
  • FX Editors for adjusting Volume,Pan,Detune,Gate, and Modulation
  • ADSR Envelope for adjusting instrument amplitude
  • Playback MML in realtime
  • Export MML files
  • And more to come!
As this is the V 1.00 release, it is functionally complete, but I do plan on updating to add additional tools, such as copying and pasting notes, and importing external MML data. Feedback is welcome, and if you find bugs or errors, please leave a comment detailing the issue. Happy composing! EDIT: V 1.03 Update - Fixed sort function for high note positions that set the signed bit, which compared negative and cause high values to get sorted below smaller ones. Results in starting note requiring lots of leading rests during playback or export. Old songs should be fine, it was just a playback issue. - Full optimization pass on rendering process to make this usable on the original 3DS - Better instructions for most modes - Fixed bug when creating notes outside measure, when the length is shorter than the standard grid size - Notes, during edit mode, now sound in accordance with the FX before them. For instance, if a note is selected, and the previous note had a pan effect, that note will playback in the editor with the pan effect. - Fixed various visual bugs relating to optimizations EDIT: V 1.02 Update - Some cosmetic fixes to interface - Fixed pattern bug: subscript error when not all pattern numbers are used - Fixed note hopping near end of measures: increased the maximum note position by 16 times. - Time signature limited to practical values, in conjunction with expanded measure amount (from 8 -> 20 measures) - Added Custom 1 instrument, so default can be used as an instrument - Added loop point in song, now you can specify where the song repeats to once it's reached the end. In the pattern editor the 'X' button will set the active pattern to be the loop point. - Pattern playback timer is now much more accurate, fixed a precision rounding error. - Pattern playback in song mode now plays from the pattern currently being edited, and will loop back to that pattern at the end unless a loop point has been set after it. - Bug fixed in MML generation relating to notes outside pattern measure range. - General maintenance and cleanup EDIT: V 1.01 Update Optimizations - removed excessive draw operations. Hopefully this results in better usability for original 3DS users. Fixed sprite bug in ASDR and FX modes. Added 'hidden' instruments - 144-151 Fixed timer during playback, so it is tied to MAINCNT

Instructions:

General instructions for each application mode are listed on the top screen for reference. Most inputs have a secondary behavior when the L or R shoulder buttons are held. Touch Input
  • Touch anywhere in the note editor window to create or select notes
  • Touch the colored pills on the left side of the screen to select a channel to author notes in. Holding L/R will open the instrument selection mode for that channel.
  • Touch the 'M' symbol on the left side of the screen to mute that channel. Holding L/R will mute all other channels.
Face Buttons
  • A (+L/R) - Select next (previous) note
  • B (+L/R) - Convert note to triplet (Portamento: slide pitch)
  • X (+L/R) - Play current pattern (song)
  • Y (+L/R) - Delete note (channel, must hold L/R for at least half a second)
Directional Pad
  • Dpad U (+L/R) - Move note up a semitone (octave)
  • Dpad D (+L/R) - Move note down a semitone (octave)
  • Dpad L (+L/R) - Move note backwards (shorten note)
  • Dpad R (+L/R) - Move note forward (lengthen note)
Stick
  • Stick U (+L/R) - Scroll editor view up (2x speed)
  • Stick D (+L/R) - Scroll editor view down (2x speed)
  • Stick L (+L/R) - Scroll editor view back (2x speed)
  • Stick R (+L/R) - Scroll editor view forward (2x speed)

Replying to:raimondz
Hi, I tried to use it on my O3DS but it doesn't work well. You forgot to use gpage before and after rendering the gui to draw everything in one step.
Agh oops see my edit

Replying to:raimondz
Hi, I tried to use it on my O3DS but it doesn't work well. You forgot to use gpage before and after rendering the gui to draw everything in one step.
Yep, I cringe a bit now thinking that I didn't do this, but lesson learned about understanding how my programs will behave on various target devices, and not being lazy.

Oh nice.

Replying to:raimondz
Hi, I tried to use it on my O3DS but it doesn't work well. You forgot to use gpage before and after rendering the gui to draw everything in one step.
"I was expecting something more like FastTracker II or Famitracker but this I think is more fitting for the nature of MML itself. Can you even call this a tracker?" I'm not actually sure what technically constitutes a tracker, but I grew up in the days of ModPlug Tracker, which has similar interface ideas, but I tried to tailor the program to fit the strengths of the 3ds. I'm not particularly attached to calling it a tracker though.

Wow. The screen flashes spasmatically. increasing the vsync seems to have little effect. You must be using a different hardware 3ds, i am using an older 3ds.

Make it so that it does not redraw the screen unless you offer input. That could at least minimize the flickering, plus its not really necessary to continuously redraw the screen when its not changing. Alright, so ive added this code to your code, and it works OK-ish.
REPEAT
TOUCH OUT TM,TX,TY
UNTIL BUTTON() OR TM
Ive placed it just before the Vsync. Ive also edited vsync, setting it to 5. I think theres a command which can recognize the 3ds hardware version, you could use this to optimize (if im correct about its existence). For those who want to optimize it themselves this way, go to line 872 and insert the code i wrote above the VSYNC command

Replying to:MZ952
Make it so that it does not redraw the screen unless you offer input. That could at least minimize the flickering, plus its not really necessary to continuously redraw the screen when its not changing. Alright, so ive added this code to your code, and it works OK-ish.
REPEAT
TOUCH OUT TM,TX,TY
UNTIL BUTTON() OR TM
Ive placed it just before the Vsync. Ive also edited vsync, setting it to 5. I think theres a command which can recognize the 3ds hardware version, you could use this to optimize (if im correct about its existence). For those who want to optimize it themselves this way, go to line 872 and insert the code i wrote above the VSYNC command
Thanks MZ952, that's the plan. I'm going to do draw optimizations tonight, and overall profiling to make sure there's nothing else creating a bottleneck. The VSYNC changes would work in most cases, except for when playback is happening, as it expects 60 FPS, but I could also fix this too. Now, I'm just wishing I didn't give my old 3ds to a friend so I could use it to test (>_<). EDIT: There is a system variable, HARDWARE, that specifies whether you are using an old or new 3DS but it's read only. This would be a nice feature to have though for debugging.

Update is now available. I've taken a quick pass at optimizing the draw functions (they only refresh when input is polled or states change). So this should look much better on the O3DS, or at least it will be functional for now. If you are a O3DS user, please let me know what your experience is like, so that I can make it better overall. This update is sort of a bandaid, as I think more can be done performance wise, but it should be functional now. Thanks for your patience.

Replying to:glennxserge
Update is now available. I've taken a quick pass at optimizing the draw functions (they only refresh when input is polled or states change). So this should look much better on the O3DS, or at least it will be functional for now. If you are a O3DS user, please let me know what your experience is like, so that I can make it better overall. This update is sort of a bandaid, as I think more can be done performance wise, but it should be functional now. Thanks for your patience.
Thanks, this runs pretty well now! There's still a good amount of flickering whenever s change is made, but that can probably be fixed with the double buffering (or whatever it's called) that people have been talking about. It also seems to be running too slow during playback. (Song plays at proper speed, but the tracking bar and time are way too slow.) It also kept crashing while messing with the ASDR settings. (But the auto backup kept my project from being lost!) This will be really nice once it's fully optimized!

Replying to:glennxserge
Update is now available. I've taken a quick pass at optimizing the draw functions (they only refresh when input is polled or states change). So this should look much better on the O3DS, or at least it will be functional for now. If you are a O3DS user, please let me know what your experience is like, so that I can make it better overall. This update is sort of a bandaid, as I think more can be done performance wise, but it should be functional now. Thanks for your patience.
hi mystman12, thanks for trying the new version out. It'll probably take a little back and forth to get this sorted, since I rely on feedback from 03DS users to identify issues. I expected that playback would still be slow, because it needs to draw every frame to update the timer and the progress bar, but I'm thinking of ways to optimize that as well. I might just disable playback on the bottom screen for older models so that the top screen timer still works correctly. The ASDR crash, is very unexpected, so I would be grateful for any line number or error feedback regarding what the context was when that happened. Thanks again! EDIT: Oh, and I meant to ask, is the flickering present in every mode or just the note editor? For example, does the splash screen flicker too?

Replying to:glennxserge
Update is now available. I've taken a quick pass at optimizing the draw functions (they only refresh when input is polled or states change). So this should look much better on the O3DS, or at least it will be functional for now. If you are a O3DS user, please let me know what your experience is like, so that I can make it better overall. This update is sort of a bandaid, as I think more can be done performance wise, but it should be functional now. Thanks for your patience.
The flickering only seems to be when you toggle things on the main editing screen.

Replying to:glennxserge
Update is now available. I've taken a quick pass at optimizing the draw functions (they only refresh when input is polled or states change). So this should look much better on the O3DS, or at least it will be functional for now. If you are a O3DS user, please let me know what your experience is like, so that I can make it better overall. This update is sort of a bandaid, as I think more can be done performance wise, but it should be functional now. Thanks for your patience.
Thank you, MZ952, that helps me focus my efforts.

I just crashed on ASDR too, the very first time I was messing with it. I was dragging in all directions after tapping the various elements and IIRC it crashed while dragging. The error is "Out of range in 0:2187(SPSET:1)" One request I would like to make it to be able to use the "hidden" instruments past the drum sets, like we can in NCF-MUSEQ. I just want access to that hollow flute square wave and raw noise. :)

Replying to:Unclesporky
I just crashed on ASDR too, the very first time I was messing with it. I was dragging in all directions after tapping the various elements and IIRC it crashed while dragging. The error is "Out of range in 0:2187(SPSET:1)" One request I would like to make it to be able to use the "hidden" instruments past the drum sets, like we can in NCF-MUSEQ. I just want access to that hollow flute square wave and raw noise. :)
Yep, that's the error I was getting. I'd actually like to have those instruments, too, and even the ability to load custom instruments into the editor. That would be really handy!

Replying to:Unclesporky
I just crashed on ASDR too, the very first time I was messing with it. I was dragging in all directions after tapping the various elements and IIRC it crashed while dragging. The error is "Out of range in 0:2187(SPSET:1)" One request I would like to make it to be able to use the "hidden" instruments past the drum sets, like we can in NCF-MUSEQ. I just want access to that hollow flute square wave and raw noise. :)
Ahh, that bug is related to my sprite optimizations. I know how to fix it. The hidden instruments I didn't even know about, but I will be sure to add them too. EDIT:The custom instruments is on my list of extra features. I just need to think more about how to bundle them with the MML export so they are not troublesome to deal with.

Should have called it Flickerbox am i rite

Update is live. This addresses the sprite bugs Unclesporky and mystman12 discovered. I also added the additional hidden instruments 144-151 and fixed the timer so that it can keep track even when VSYNCs are missed during playback. I still have more to do, but this should get rid of the problematic errors. Please let me know if you see anything else. I think I can make this even more stable at 30FPS, but I'm wondering what people think about lowering the frame rate.

More bugs: - I hit B a lot on one note, just playing around with portamento, but I can't select and delete those split up notes any more. Tapping on that space instead creates a new note, very short, rather than selecting the existing notes. I noticed that normally when you split up a note and delete part of it, it automatically selects another part of that split up note so you can delete the rest. After some messing around, I think they become permanent after you've done one playback. - Very weird things can happen when you select notes and press right. If you are further along in the pattern, they will warp backwards, with the backwards movement more extreme the further you are into the pattern. - After saving a new song, I was unable to reload that same song I had just saved. I had to exit out of the program and go back in, and then the song appeared in the load list. Also, could there be a button to exit and go back to the main menu? - This isn't a bug, but is there really no way to choose a volume and have all notes placed after that point take on that volume? I have to adjust the volume of every note individually? - Sorry to make more requests, but MUSEQ also has a series of instruments at the bottom of its second page that are all the same, 224 to 255. I assume these are custom instruments that haven't been customized. However, even in their uncustomized state they have a cool sound to them. Could we get one of these as an option too, even if actual customization isn't in yet?

Replying to:Unclesporky
More bugs: - I hit B a lot on one note, just playing around with portamento, but I can't select and delete those split up notes any more. Tapping on that space instead creates a new note, very short, rather than selecting the existing notes. I noticed that normally when you split up a note and delete part of it, it automatically selects another part of that split up note so you can delete the rest. After some messing around, I think they become permanent after you've done one playback. - Very weird things can happen when you select notes and press right. If you are further along in the pattern, they will warp backwards, with the backwards movement more extreme the further you are into the pattern. - After saving a new song, I was unable to reload that same song I had just saved. I had to exit out of the program and go back in, and then the song appeared in the load list. Also, could there be a button to exit and go back to the main menu? - This isn't a bug, but is there really no way to choose a volume and have all notes placed after that point take on that volume? I have to adjust the volume of every note individually? - Sorry to make more requests, but MUSEQ also has a series of instruments at the bottom of its second page that are all the same, 224 to 255. I assume these are custom instruments that haven't been customized. However, even in their uncustomized state they have a cool sound to them. Could we get one of these as an option too, even if actual customization isn't in yet?
I noticed the same issue with selecting the smaller notes, however you can still select them by selecting the previous note and then pressing A to select the next note.

Replying to:Unclesporky
More bugs: - I hit B a lot on one note, just playing around with portamento, but I can't select and delete those split up notes any more. Tapping on that space instead creates a new note, very short, rather than selecting the existing notes. I noticed that normally when you split up a note and delete part of it, it automatically selects another part of that split up note so you can delete the rest. After some messing around, I think they become permanent after you've done one playback. - Very weird things can happen when you select notes and press right. If you are further along in the pattern, they will warp backwards, with the backwards movement more extreme the further you are into the pattern. - After saving a new song, I was unable to reload that same song I had just saved. I had to exit out of the program and go back in, and then the song appeared in the load list. Also, could there be a button to exit and go back to the main menu? - This isn't a bug, but is there really no way to choose a volume and have all notes placed after that point take on that volume? I have to adjust the volume of every note individually? - Sorry to make more requests, but MUSEQ also has a series of instruments at the bottom of its second page that are all the same, 224 to 255. I assume these are custom instruments that haven't been customized. However, even in their uncustomized state they have a cool sound to them. Could we get one of these as an option too, even if actual customization isn't in yet?
Thanks Unclesporky, you're providing me a huge service by testing so thoroughly. No need to apologize, I'm happy to add the extra instruments, I just figured I'd wait until I understood how to do the custom instruments, but if they are immediately useful in their default state, then I'll add them in my next update. The volume can be set on the first note in a channel and the rest of the pattern/song should maintain that volume (for the channel) until it's changed. Are you finding that not to be the case? The volume controls are in one of the fx modes, just to the left of the note button on the top row. You can visually tell when an effect has been applied to a note because a blue or orange dot will show up above or below it. The song saving/loading issue when it's first made, is something I'm aware of, the file list just needs to be refreshed. This one will be easy to fix. The note zooming left issue is a bit weird, I see it now under the same circumstances you mentioned, so I'll try to figure out why that's not behaving properly. Portamento's shouldn't be able to continually be made if further subdivisions can't be visually represented, and notes in the same channel aren't supposed to occupy the same space. So I'll double check that as well. Thanks again Unclesporky, this is hugely helpful info. EDIT: oh and mystman12, if you hold L/R and press A it will select the previous note from your current selection too.