LoginLogin
Might make SBS readonly: thread

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: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?
It looks like volume is preserved after setting it once earlier in the song. I was confused because placing new notes plays them at full volume, so I thought they were being set at full volume, but in playback they are correct. Mystman12 is right that you can press A to get to those portamento notes and still be able to delete them, but it still doesn't behave quite like I would expect, you can't tap to select them. Not sure of a better way to handle them though.

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?
Oh, sorry, just a correction on my terminology, I've been referring to triplets as portamentos. What I meant to say is that creating triplets from a note that isn't long enough doesn't work. As far as selecting a note goes, if a note is very small, the default grid snap value (the button with the magnet), probably can't select it. The grid snap is by default set to an eighth note (16 pixels). If you create a note when you are trying to select one, it's probably because the grid snap is trying to snap it to the nearest grid point. I'll think a bit more about how I want this to behave, and whether this is the right choice.

When you make a new pattern then delete it and make another new one it keeps going up and it doesnt go back down. The problem is that when you press the play Song thing it does an out of range error. Please fix.

Replying to:ElzoBro
When you make a new pattern then delete it and make another new one it keeps going up and it doesnt go back down. The problem is that when you press the play Song thing it does an out of range error. Please fix.
The new pattern always increments to a new value as any of the preceding ones, even if deleted, could have values in them. If you want to use a previous pattern number, up or down on the dpad will change the number of the selected pattern. Edit: found the bug, fixing this now The out of range error is unexpected though. I'll make sure to fix that.

Okay, I just found a new, really bad bug. When you raise the amount of measures (in my case four) and try to then move a note placed in a measure after the second horizontally with the d-pad, it just moves backwards, a lot spaces, no matter which direction you press. This is really messing things up making it a pain to edit notes after the second measure. Edit: Oh wait, I just noticed unclesporky already mentioned this, sorry. :/

Replying to:mystman12
Okay, I just found a new, really bad bug. When you raise the amount of measures (in my case four) and try to then move a note placed in a measure after the second horizontally with the d-pad, it just moves backwards, a lot spaces, no matter which direction you press. This is really messing things up making it a pain to edit notes after the second measure. Edit: Oh wait, I just noticed unclesporky already mentioned this, sorry. :/
Yes, this was an issue with how many positions I could store in a 8 bit field, however, I've done some extra bit squeezing here and there, and managed to expand that by 16 times. Hurrah! I'll be releasing my next update later today that addresses this issue, as well as placing some reasonable limitations on measure amount in conjunction with time signature. You'll still be able to have about 20 measures in a single pattern, but it'll prevent the note position rollover that currently happens. That and I've fixed the serious pattern bug that ElzoBro found, as well as added some features. Stay tuned!

New update is available: V 1.02 (This list is included in the program description, but this one is more detailed for those interested) Features and bug fixes: Some cosmetic fixes to interface: pattern editor text positioning, keyboard sprite now fades when touched, instrument selection now highlights properly past the standard instruments Fixed pattern bug: subscript error when not all pattern numbers are used, this was an error in calculating the frames in each pattern for the playback timer. Now if patterns aren't used they contribute 0 frames, but are indexed properly. Fixed note hopping near end of measures: increased the maximum note position by 16 times. Optimizing note position bit field to sqeeze out some extra storage, went from 8->12 bits. Time signature limited to practical values, in conjunction with expanded measure amount (from 8 -> 20 measures). To prevent note position overflow (the above bug), I've calculated the maximum number of measures + time signature and set that as the limit. Added Custom 1 instrument, so default can be used as an instrument. This is just the default sound that is already loaded in that slot, but in the future I'll make customizing it possible. 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. Loop points affect both playback and MML export. So you could use this to design a one time intro. Pattern playback timer is now much more accurate, fixed a precision rounding error. To be precise, the timer was calculated in seconds with float precision, but it resulted in rounding errors, so I calculate the timer in frames instead, which gives almost perfect accuracy. 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. Previously, this was very buggy and the note editor and the song would get out of sync. Now you can start song playback at any pattern. Bug fixed in MML generation relating to notes outside pattern measure range. This is in the case that a pattern has been resized, by lowering the measure amount. If notes are outside the new measure range, they don't get deleted, but they also no longer get factored into MML generation. General maintenance and cleanup: code cleanup, tidyness, etc., not that interesting.

Just a quick update, I got my hands on a O3DS with SmileBASIC, so I can much better test and optimize. I've already fixed the upper screen during playback so it doesn't flicker, and I'll be doing the same for the bottom screen as well. It means refactoring a bit of the rendering code so it won't get done overnight, but stay tuned in the next couple of weeks for an update that levels the playing field for 03DS users.

Replying to:glennxserge
Just a quick update, I got my hands on a O3DS with SmileBASIC, so I can much better test and optimize. I've already fixed the upper screen during playback so it doesn't flicker, and I'll be doing the same for the bottom screen as well. It means refactoring a bit of the rendering code so it won't get done overnight, but stay tuned in the next couple of weeks for an update that levels the playing field for 03DS users.
This is good, because it's very hard to use the other one, as there is lag between the graphics and the actual song, whilst playing.

Replying to:glennxserge
Just a quick update, I got my hands on a O3DS with SmileBASIC, so I can much better test and optimize. I've already fixed the upper screen during playback so it doesn't flicker, and I'll be doing the same for the bottom screen as well. It means refactoring a bit of the rendering code so it won't get done overnight, but stay tuned in the next couple of weeks for an update that levels the playing field for 03DS users.
Yeah, this is the first time I've gotten to see my program on the older model, and it's an epileptic nightmare in playback.

Replying to:glennxserge
Just a quick update, I got my hands on a O3DS with SmileBASIC, so I can much better test and optimize. I've already fixed the upper screen during playback so it doesn't flicker, and I'll be doing the same for the bottom screen as well. It means refactoring a bit of the rendering code so it won't get done overnight, but stay tuned in the next couple of weeks for an update that levels the playing field for 03DS users.
Good to hear! Hopefully you can get the UI factored into something that sitting.

Version 1.03 - No more flicker at all on O3DS! See version changelog in the program description for all the details. As this includes very big changes to the way the rendering process happens, and while I feel like I tested it well, please report any bugs you encounter and I'll make sure to fix them. Thanks for your patience, this update was a long time coming. Aside from fixing reported bugs, I'm going to put this project down for a while, so I can focus on other things. I have a feature list for 2.0 that I want to tackle, but I need a break. In case you are curious, here are some features at the top of my list:
  • Song sharing - send song/mml files to others, directly from Litterbox.
  • Custom instrument creation - users can add pre-built modules representing various types of synth waveforms and stack them together using mathematical operations. Will also support recording from the mic so you can make your cat sound like a robot.
  • Copy and paste groups of notes
Suggestions are welcome too!

Quick amendment to V 1.03 - that fixes a playback issue with longer patterns.

Hi, first let me say that your program is really good. I can port music from synthesia without problem because they look similar. Can you add the hidden instrument?. I mean the ones that appear between [256,410]. I have them in my MML editor and trying to edit your program to use them on my O3ds. However, it would be useful if the other user could use those instrument on the next version.

Replying to:raimondz
Hi, first let me say that your program is really good. I can port music from synthesia without problem because they look similar. Can you add the hidden instrument?. I mean the ones that appear between [256,410]. I have them in my MML editor and trying to edit your program to use them on my O3ds. However, it would be useful if the other user could use those instrument on the next version.
Hey, raimondz. Sure I can add those. I honestly didn't even think to include the SFX samples, but some of those are pretty nice. I've been taking a break from the project, but this shouldn't require much work, and I need to get my motivation back for 2.0. I'll post when I have this done. EDIT: Also, I've never heard of Synthesia, is it another MML editor?

Replying to:raimondz
Hi, first let me say that your program is really good. I can port music from synthesia without problem because they look similar. Can you add the hidden instrument?. I mean the ones that appear between [256,410]. I have them in my MML editor and trying to edit your program to use them on my O3ds. However, it would be useful if the other user could use those instrument on the next version.
The mml instruments actually go up to 511 (512?) but there's a lot of blanks. I don't remember if there's anything that high up.

Replying to:raimondz
Hi, first let me say that your program is really good. I can port music from synthesia without problem because they look similar. Can you add the hidden instrument?. I mean the ones that appear between [256,410]. I have them in my MML editor and trying to edit your program to use them on my O3ds. However, it would be useful if the other user could use those instrument on the next version.
Synthesia is a program for PC(Windows or Mac) to learn to play piano. It can load Midi files and display the songs in a similar way to guitar hero. It also show the tempo and the length of the notes. PS: I found a bug that occur when you delete a pattern and then create a new at the end. For example. Patterns:(1-2-3) Delete 3 and create a new one(1-2-4) When I play all the patterns, it use (1-2-3) instead of (1-2-4). I solved it by changing the line 2410: Before: PRG1_2_PATTERN L AFTER: PRG1_2_PATTERN PLIST[L]

Replying to:raimondz
Hi, first let me say that your program is really good. I can port music from synthesia without problem because they look similar. Can you add the hidden instrument?. I mean the ones that appear between [256,410]. I have them in my MML editor and trying to edit your program to use them on my O3ds. However, it would be useful if the other user could use those instrument on the next version.
Thanks for reporting that. Bug feedback is super helpful. I'll take a look when I get back home. I finished adding the other instruments you requested, and it gave me an opportunity to add tabs to the instrument gui for organizationand because I'll likely add specialized custom fm synth stuff later. I'm on vacation at the moment, and closing on a house in the next week so I haven't had a chance to upload. Given the bug you found, I'll wait until I have time to sort that before I post.

Good program. Saves time. Anyways...there is a problem with one song I converted to mml. The right hand consists of nothing but triplets and left is just regular notes. I only copied nine measures of the song, and they sound good for a while. However, after a few loops things start to get out of sync. The tempos are the same for both line, so that's not it.

Does anybody else have the problem that they cant scroll to the right? I am on the old 3ds, please fix it.