Support for MML music notation format.

Discussion in 'Other' started by Havoc1337, Dec 6, 2013.

  1. Rydian

    Rydian Big Damn Hero

    MML has the L character, which is used to set the default note length for the notes following it. So you can take...
    a8b8c8d8e8f8a8b8c8d8e8f8
    And make it
    L8abcdefabcdef
    This can be used to save a ton of character space and make composing much easier. And of course, you can change the default note length multiple times per song, and it's per-track too.

    It also supports the N## MIDI command for playing a very specific note, incase you need to play one or two notes that's a few octaves out of reach of the current note sets, you can do that directly instead of shifting octaves a few times over and then a few times back.
     
  2. Havoc1337

    Havoc1337 Scruffy Nerf-Herder

    @BPLevia
    I agree that most of the problems with ABC stem from the programs that are available for it.
    But doesn't that just strengthen our point? If all we have are inferior tools that can't get the job done right past the most basic functions, we're still (star)bound to put in a lot of time and effort to make it all sound decent.
    And don't forget that there are maybe people who become interested in this system that have neither musical nor coding talent. They would get shut down immediately.
    As I also mentioned the ABC syntax is designed to be typed on qwerty keyboards, the German language space would get totally screwed. But don't worry, I'll go get their support for this soon.

    If you compare the syntax available for abc with the standard midi file structure you end up having a lot of unnecessary stuff that people might try to use and completely break things. And what pain it must be for the devs to implement all that.
    ABC is also written the way we write our day to day pen-and-paper music scores. Which tbh is crap anyway. It takes time and to write very specific things you sometimes have to take incredibly silly routes.
    I also know a bunch of people who can't do jack with normal sheet music, can't read it can't write it, but they do absolutely amazing and original things with MML. What good would abc do for them?
    MML on the other hand simply instructs the midi output.

    No matter how we try to bend it, abc will never be as user and newbie friendly as mml is. And I think the easier the system is to learn, the bigger the Starbound music community can grow. And isn't that what we all want? ;D

    Thanks to everyone for feedback and support!
     
    Trainzack and Britefire like this.
  3. Tremendo Dude

    Tremendo Dude Pangalactic Porcupine

    I'm not sure if the problems between the formats have anything to do with being equitable with standard music notation. MML seems to me to work exactly like a traditional music score would, but each part separated into its own staff and inability to play 2 notes at once on the same line. ABC seems to attempt to allow notes to be played on the same line, but ends up outputting a ridiculous mesh of notes stacked on top of each other, which is both difficult for programs to interpret and difficult for a reader to properly interpret, yet perhaps somewhat easier to write by hand once the format is known as opposed to filling a line with rests in MML just to do the occasional double-stop.

    I write using traditional notation on a daily basis, and I really like the way MML works, despite its limitations. However, I kind of wish that 3mle's track display was editable on its own without digging through and messing with the MML code underneath, or had an option for a traditional notation display. I can easily make due, however.
     
  4. dra6o0n

    dra6o0n Big Damn Hero

    ABC, being older, is pretty much like Windows in it's day with use.
    While MML, being newer, is like Linux.

    You can tell which one is far more optimized or specialized in something.
    If we were to go literal, then ABC was created in a environment a long time ago such as OLDER Windows systems, and updated their standards in the 2011s. But with a foundation so old and probably outdated MML offers a easier and efficient (and probably saves a lot of system resources too!) solution than ABC.

    Not sure if Implementing MML support into the game itself would require a MSXspirit file like how Mabinogi needed in order to get instruments working ingame (Mabinogi uses custom instruments of it's own over window's midi).

    Plus, in order to do this, means time put into development to update it, which is probably not high of a priority to the game's main feature till later on.

    Even so, something as 'small' as a MML reading and 'writing' system file or text based, is dramatically tiny in code compared to a code of a RPG system. Most of the time spent is from probably have to look for programming examples of a MML reading and writing method and come up with a way to incorporate it into the game.

    With some of the community from Mabinogi, I'm pretty sure it's quite an importance though.
     
  5. Tremendo Dude

    Tremendo Dude Pangalactic Porcupine

    Starbound already seems to have its own instrument library. Merely converting those over to support MML (not sure how difficult that would be) would be sufficient.
     
  6. dra6o0n

    dra6o0n Big Damn Hero

    KIS. Keep it simple. Midi pretty much is all about simplicity.

    Alphanumeric is the way to go when it comes to simplicity.

    I have a bit of a programming logic to know that something the size of a MML 'read' and 'write' and 'play' systems wouldn't be as hard compared to something complex, like the AI.

    In most languages, you'd stick to 3 functions:

    Read - Read the MML language and in the process 'loading' it into the game to be used.
    Write (optional) - Write the MML language into text boxes for tracks This wires into Read method/functionality as it is then 'read' again when the text file is created (temporarily maybe?).
    Play - With the MML song saved in memory (probably tiny size in characters), all it does is follow a certain ruleset to play the music back. Like t120 is tempo of 120.

    Though I think the devs would have to change their 'parsing' function to MML standards, which does require a bit of a different take on programming. It would have to change the rules so it doesn't follow the ABC notation completely.

    But it should be easier due to less 'rules' in the MML notation, as whether it's capitalized or lower case, a letter has the same function.

    ABC notation, when I looked at it, utilized it to 'look' like music sheet in a sense, when it's not necessary in computer text (It just looks like a pile of mess).
     
    Last edited: Dec 8, 2013
  7. Havoc1337

    Havoc1337 Scruffy Nerf-Herder

    @dra6o0n
    I think there is a 4 year difference between MML and ABC. I could be wrong on that, I just know that some Japanese came up with mml around 1980. It had something to do with the random music that the MIDI of Japanese arcade machines worked. They basically made it so you could transcribe the sound MIDI makes into a readable form and feed it back into a MIDI synthesizer. You could also have instruments, e.g. electric pianos directly output MML I believe.
    And yes, if you compare the MML syntax with the ABC syntax you have your simplicity on a silver platter :p

    @XGShadowstar
    I strongly believe Starbound just has a built in MIDI synthesizer. All the ingame instruments can be found in the MIDI library. (And like a hundred more) There is just no other way that would be reasonable. Making a custom library would require them to record 127 notes for every one of the instruments.
    As to the difficulty of implementing MML, I'm not sure. Knowing the basic workings of MIDI in code, I know that it is very simple in itself.
    I didn't do my research on how Starbound is written and I have not disassembled the games exe yet.
    HOWEVER(!), since MML is a direct command set for MIDI, I am convinced that controlling the in-game synthesizer would be MUCH easier with MML than with ABC.
    You can write a lot of things into ABC that would need odd workarounds to be used by the standard midi format. Or be even completely useless to it.

    When working with MIDI, using the more compatible language will solve a lot of problems. I can be wrong on this, but that's how I see it work.
    I'm sure the devs had their reasons... or maybe they didn't. The only example of western games, being LotRO, and that uses ABC. But it has a massive engine and a huge team working on it to make it work somehow. So maybe they just figured it was the only way to do this, and were completely unaware of MML at the time of the implementation. If we manage to get enough support for this suggestion maybe we can show @Tiy and @bartwe that MML would actually be the way to go.
    Maybe they're just unaware how popular this feature can be, and how much more popular it could be with a better system.
     
    Xenowar and Tremendo Dude like this.
  8. Holy_Cabbage

    Holy_Cabbage Orbital Explorer

    I'd at least like to see MML given a chance via test run while we're all in beta anyways. As long as we're in the state of things changing constantly, now would be the best time to try out a different system instead of when things have become more set in stone for the game and the risk of extra bugs occurring during such a change would be higher.
     
    Rydian and Xenowar like this.
  9. Jetter

    Jetter Subatomic Cosmonaut

    Think you could make an actual poll for this somewhere? Everyone in this thread seems to support MML but I'm curious if ABC has any backers among musicians here.

    That said, I'd really like an option for MML. I just tried using in ABC for the first time, and it's kind of annoying to work with. In contrast, I remember learning MML for Mabi (Tarlach ftw!) and it was very easy to pick up and use.

    Another advantage of MML over ABC: synthesizers. I'd be very surprised if 'Synthesizer' didn't appear as an instrument at some point in Starbound (if it doesn't, it should be added). MML is literally made for such an instrument and could take advantage of it far better than anything ABC could do.
     
  10. LtGeneral Andrew

    LtGeneral Andrew Tentacle Wrangler

    The above quote that I've read really goes to show that MML would be the way to go.
    MML notation is very easy to use due to the lack of formatting sensitivity.
    ABC notation on the other hand is very tricky to use due to its multiple standards and high formatting sensitivity.

    However, the underlying issue is that the SB music system isn't very robust at the moment.
    I believe that switching to MML will make it easier to code the music system due to its single standard of notation and lack of formatting sensitivity.
     
    Havoc1337 likes this.
  11. Havoc1337

    Havoc1337 Scruffy Nerf-Herder

    I considered a poll at first, but I made bad experiences with polls attached to ideas which a portion of the userbase needs to be educated about first. Obviously people who like MML will vote for MML right away, and people who only ever used ABC for whichever purpose may vote before reading and the entire poll would be just about bias and not about whether or not people think MML is a good idea or not.
    Also I'm not sure if I can still add a poll into the existing thread.

    @LtGeneral Andrew
    Very well put, thanks for that. I also think that getting the instrument system bugfree would be a hell of a lot easier with MML.


    And as someone here mentioned again, ABC is really just made for writing normal music notation on computers, not for writing code for MIDI synthesizers, you just have the painstaking possibility to make it work for MIDI, causing a bunch of bugs along the way.
    That's the purpose and origin of ABC in one sentence. It's been later adapted to work well with MusicTEX typeset so you could write musical scores with ABC and directly convert them into Musical Scores with proper notation. At no point was its purpose to code for MIDI.
     
  12. Rydian

    Rydian Big Damn Hero

    For the benefit of anybody that's not familiar with MML and how it plays in games that use it, I recorded myself playing a few varied songs in Mabinogi to show what's possible. Each is followed by the MML that makes up what I played, and a screenshot of what it looks like in an editor.

    The MML here is given as you would CTRL+V it directly into the game. The syntax is simply MML@(track1),(track2),(track3); so MML is quite easy to split apart and put back together (and of course editors can and will do this right to your clipboard when you tell them to export something for use in game.


    Dear You
    Baseline, melody, and accompaniment. Three tracks that are easy to compose, and sound nice together.

    MML@t90l64c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+&c+v14l8o2a+>fg+4n30c+f4n32d+f+4c+g+b+4n34fg+4n30c+f4n32d+f+4c+g+b+4n34fg+4n30c+f4n32d+f+4c+g+b+4n34fg+4n30c+f4n32d+f+4c+g+b+4n34fg+4n30c+f4n32d+f+4c+g+b+4n34fg+4n30c+f4n32d+f+4c+g+b+4n34fg+4n30c+f4n32d+f+4c+g+b+4n34fg+4n30c+f4n32d+f+4c+g+b+4n34fg+4n30c+f4n32d+f+4c+g+b+4n34fg+4n30c+f4n32d+f+4c+g+b+4n34fg+4n30c+f4n32d+f+4c+g+b+4n34fg+4n30c+f4n32d+f+4c+g+>c1,l1rrrrrv15>d+4l16fd+c+8d+8<g+8>fd+c+8d+4fd+c+8c+8g+8d+4d+4fd+c+8d+8<g+8>fd+c+8d+4fd+l8c+c+4.<g+g+frg+>c+r4c+d+d+d+ff4.<g+g+frg+r>c+c+d+d+d+d+g+f4ff+g+g+16g+.g+g+l16fc+8.ff+g+8g+g+8.g+8g+8fc+8.c+d+f8fl8f.ffa+l32d+.fd+.c+8d+4.l16d+d+d+4n56c+d+fd+8c+c+2&c+n56c+d+fd+8c+d+8f8f4&fn56c+d+fd+8c+c+2&c+n56c+d+fd+8c+d+8g+8f4&fl8rg+g+frg+g+c+rd+d+c,l1.rrrrrrrrrrrr2v14d+4l16fd+c+8d+8<g+8>fd+c+8d+4fd+c+8c+8g+8d+4d+4fd+c+8d+8<g+8>fd+c+8d+4fd+l8c+c+4ff+g+g+16g+.g+g+l16fc+8.ff+g+8g+g+8.g+8g+8fc+8.c+d+f8fl8f.ffa+l32d+.fd+.c+8d+4.l16d+d+c+1;

    [​IMG]


    Cara Mia (Portal 2 Ending)
    Tempo and volume changes (volume per-track even!) to give a song recognizable emotional changes.
    As easy as Txxx and Vxxx wherever you want.

    MML@t150v9l64a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&at52v15l8aa+b+l16a+a>dc<a+8a8a+>ct56r8t52d8c4<a+8b+4a+>cd8c<a+a+8a+8b+a+aa+>c8d+8dcd8c8<a+8>c4.dcn58cl8c<a+aa+>fl16d+dcn58cdd8c4d+d+l8d+dcdc<a+a+>cdl16cn58c8t46dd+d+8d8c8n58cc4l8<a+at52a+3r6aa+b+l16a+a>dc<a+8a8a+>cdcc4<a+8b+4a+>cd8c<a+a+8a+>cc<aa8>c8d+ddcd8c8<a+aa+>c4&cdcl8c<a+48b+14.a+aa+>fl16d+dcn58cdd8c4dd+l8d+dcdc<a+a+>cdl16cn58l12cdd+l8d+dc<a+16>c16c4<a+aa+>cdl16cn58c<a+a8a+8a+>cd8c4d+8d+8d8cn58l8cd2v11fgv12fgd+ga+gl16fd+fd+v13fd+32fd+f32l8n58dcd<a+.l32&a+al24a+>cdd+dcl16<a+a+32>cd21c21dd32d+l21dd+l32ffffffffffffffffl16ga+ga+gl32gaa+b+a+ag16gaa+16gaa+16gl19a+agl16d+d+gaa+a32gfl32d+ffffgfd+fffffffffl23n58cn58cn58cn58cn58cn58cco0c,r1l8o2a+>fn34fn34fn34frn34gn34gn34gn34f+n34fn34fn34fn34fcgcgcgcgn34fv7n34fn34fv6n34fv5n34gv4n34gn34gv3n34f+v2n34fv1n34fr1r1v9>ffffddddd+d+d+d+ccccddddccccl12n46d+gd+n46d+l8ffffddddccccd+d+d+d+<a+a+a+a+>ddddddddv13l12n46d+gd+n46d+l8ffffv11ddddddddd+d+d+d+ccccv12dfv14fd+ddcdd+gd+dccn46cddd+dccdcl12n46d+gd+n46d+l8fffd+ddd+dcccdd,l1.rrrrrrr2r8v10l4<a+aggd+d+faa+a+afr2d+f<a+a+aaggd+d+a+a+a+a+d+d+ffa+aggd+d+faa+aggd+d+faa+a+afga+d+fa+a+aaggd+d+a+a+;

    [​IMG]


    U.N. Owen Was Her (Flandre's Theme)
    Each track does it's own octave shifts at different times throughout the song.
    It's easy to keep track of the makeup of a song when each part has it's own separate line.

    MML@t160l64e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&e&er2v15l16>d<bf+>d<bf+>d<bf+>d<bf+>c+8.c+8.c+8d<bf+>d<bf+>d<bf+>d<bf+>e8.e8.e8d<bf+>d<bf+>d<bf+>d<bf+>c+8.c+8.c+8d<bf+>d<bf+>d<bf+>d<bf+>e8.e8.e8d<bf+>d<bf+>d<bf+>d<bf+>c+8.c+8.c+8d<bf+>d<bf+>d<bf+>d<bf+>e8.e8.e8d<bf+>d<bf+>d<bf+>d<bf+>c+8.c+8.c+8d<bf+>d<bf+>d<bf+>d<bf+>e4.e8l2>dc+fe&e8l4ddc+c+ffeeddc+c+ffeeddc+c+ff8e2<c-f+c+f+de8f+8eg+l8bf+>c+dc+d16c+16<baf+aef+d2l4c-f+c+f+de8f+8eg+l8bf+>c+dc+d16c+16dc+<b1l4b>f+c+f+de8f+8eg+l8bf+>c+dc+d16c+16<baf+aef+d2l4c-f+c+f+de8f+8eg+l8bf+>c+dc+d16c+16<bav12<<bf+dc+<b2,r1.v13c-.f+b8e2c-.f+b8e2c-.f+b8e2c-.f+b8e2<g.>dg8c+2<g.>dg8a+2c-.f+b8c+2c-.f+l8be.e.el4<c-f+n34fc+g+cgc-f+n34fc+g+gcc-f+n34fc+g+cgc-f+n34fc+g+g2l8rb>dc-4c+ec+4df+d4c-e<b4b>dc-4c+ec+c-df+bf+d<a4gb>dc-4c+ec+4df+d4c-e<b4b>dc-4c+ec+c-df+bf+d<a4.b>dc-4c+ec+4df+d4c-e<b4b>dc-4c+ec+c-df+bf+d<a4gb>dc-4c+ec+4df+d4c-e<bgdc-4c+ec+c-df+ab2,r1.v12o2b2.l8.aaa8b2.>c+c+c+8<b2.aaa8b2.>c+c+c+8<g2.aaa8b2.>eee8<b2.aaa8b2.>c+c+c+8l4>f+dfc+g+fegf+dfc+g+fe2f+dfc+g+fegf+dfc+g+fe2<<gban37bal2g+gaf+n37b>c+degab.l4c+<gban37bal2g+gaf+n37b>c+degab1;

    [​IMG]


    You should pick one of these or another example for the first post so people can see what the alternative is actually like (including the MML that matches).
     
    Havoc1337 likes this.
  13. Shadoxx-Aurion

    Shadoxx-Aurion Scruffy Nerf-Herder

    A better support for ABC files should be enough. (With a complete support for ABC we should be able to convert Midi files without having to do too much things to fix them.)

    MML seems more attractive anyway, I would like to see the two file formats co-exist, but I think it's impossible. At least, during the beta.
     
  14. Havoc1337

    Havoc1337 Scruffy Nerf-Herder

    Ah, but you see, support for ABC is tricky. The programs available to accomplish MIDI-2-ABC conversion do it fairly poorly, because a program that that transcribes a midi into abc has to interpret the midi in a whole different way.
    Here's an example for how EasyABC fetches a note from midi to write down in abc:
    Code:
    class Note:
      def __init__(self, start, end, note):
      self.start = start
      self.end = end
      self.note = note
      self.length = time_to_note_length(self.end - self.start)
    
    class MidiHandler(MidiOutStream):   
      def __init__(self, first_channel, last_channel):
      self.division = None
      self.first_channel = first_channel
      self.last_channel = last_channel
      self.noteon_time = {}
      self.notes = []
    
      def sysex_event(self, data):
      pass
    
      def time_signature(self, nn, dd, cc, bb):
      sig = Fraction(nn, 2**dd)   
    
      def header(self, format=0, nTracks=1, division=96):   
      self.division = division   
       
      def note_on(self, channel=0, note=0x40, velocity=0x40):
      if self.first_channel <= channel <= self.last_channel:
      self.noteon_time[note] = float(self.abs_time()) / self.division
    
      def note_off(self, channel=0, note=0x40, velocity=0x40):
      if self.first_channel <= channel <= self.last_channel:
      if note in self.noteon_time:
      end_time = float(self.abs_time()) / self.division
      self.notes.append(Note(self.noteon_time[note], end_time, note))
    
    def is_triplet(notes):
      if len(notes) < 3:
      return False   
      tolerance = 0.025
      for total_len in [1.0, 0.5]:   
      if abs(notes[0].end-notes[1].start) < tolerance and \
      abs(notes[1].end-notes[2].start) < tolerance and \
      abs(notes[2].end-notes[0].start - total_len) < tolerance and \
      abs(notes[1].start-notes[0].start - total_len/3) < tolerance:   
      return True
      return False
    
    def bar(time):
      global num_quarter_notes_per_bar
      return int(time/num_quarter_notes_per_bar + 0.003)
    
    def bar_residue(time):
      global num_quarter_notes_per_bar
      return time - bar(time) * float(num_quarter_notes_per_bar)
    
    def duration2abc(f):
      if f == Fraction(1,1):
      return ''
      elif f == Fraction(1,2):
      return '/'
      elif f == Fraction(1,4):
      return '//'   
      elif f.numerator == '1':
      return '/%d' % f.denumerator
      else:
      return str(f)
    
    def note_to_string(note, duration, default_len, key_accidentals, cur_accidentals):   
      n_accidentals = sum(key_accidentals)
      accidentals_to_scale = {
      7: '^B ^C ^^C ^D ^^D ^E ^F ^^F ^G ^^G ^A =B',
      6: '^B ^C ^^C ^D =E ^E ^F ^^F ^G ^^G ^A B',
      5: '^B ^C ^^C ^D E ^E ^F ^^F ^G =A ^A B',
      4: '^B ^C =D ^D E ^E ^F ^^F ^G A ^A B',
      3: '^B ^C D ^D E ^E ^F =G ^G A ^A B',
      2: '=C ^C D ^D E ^E ^F G ^G A ^A B',
      1: 'C ^C D ^D E =F ^F G ^G A ^A B',
      0: 'C ^C D ^D E F ^F G ^G A _B =B',
      -1: 'C ^C D _E =E F ^F G ^G A _B =B',
      -2: 'C ^C D _E =E F ^F G _A =A _B =B',
      -3: 'C _D =D _E =E F ^F G _A =A _B =B',
      -4: 'C _D =D _E =E F _G =G _A =A _B =B',
      -5: '=C _D =D _E =E F _G =G _A =A _B _C',
      -6: '=C _D =D _E _F =F _G =G _A =A _B _C',
      -7: '=C _D =D _E _F =F _G =G _A __B _B _C', }
       
      scale = accidentals_to_scale[n_accidentals].split()
      notes = [n.lower().translate(None, '_=^') for n in scale]  # for semitone: the name of the note   
      accidentals = [n.count('^') - n.count('_') for n in scale] # for semitone: 0 if white key, -1 or -2 if flat, 1 or 2 if sharp
       
      note_scale = 'CDEFGAB'   
      middle_C = 60
      octave_note = (note - middle_C) % 12
       
      n = notes[octave_note].upper()
      accidental_num = accidentals[octave_note]
      accidental_string = ''   
      scale_number = note_scale.index(n)
      if cur_accidentals[scale_number] != accidental_num:
      cur_accidentals[scale_number] = accidental_num
      accidental_string = { -1: '_', -2: '__', 0: '=', 1: '^', 2: '^^' }[accidental_num]
       
      octave = (note - middle_C) / 12
    
    So that's for making things complicated....

    Next I will show you how you can transcribe a note, or in this case "tick" from a midi into mml, using the crappiest languages a man can use: JAVA
    Code:
    
      public String getNote(int length)
      {
      if (length < 0)
      {
      throw new IllegalArgumentException("Note length is negative.");
      }
    
      StringBuffer sb = new StringBuffer();
      while (length > (tpqn * 8))
      {
      sb.append(notes[tpqn * 8].getText());
      sb.append(MMLSymbol.TIE);
      length -= tpqn * 8;
      }
      sb.append(notes[length].getText());
      return sb.toString();
    
    You just repeat that like 3 times for some different cases.

    I may be exaggerating here a bit, but in essence that's how it works.

    That is because, and I've mentioned this many times now: ABC has nothing to do with midi. It was not designed for that purpose and no matter how good you write your midi2abc program, you will never get as efficient as MML.



    Now I'd really like for everyone to pay attention, because I will be making this even a bit clearer:

    Here is what goes into a .mid file. That's all that a midi output needs to operate.
    http://faydoc.tripod.com/formats/mid.htm

    Here you can read about the syntax of the MML language:
    http://en.wikipedia.org/wiki/Music_Macro_Language#Versions

    And here is the syntax of the ABC language:
    http://abcwiki.selfthinker.org/abc:syntax


    One of those things is not like the others... one of those things will(should) die alone...
    If you're a musician, a composer, in real life. And you're used to composing some wicked music on paper. Now you decide to do it on computer... that makes you a hipster, but have it your way.
    But let's say you learn how to compose in ABC and write some wicked good music.
    Now let's say you want to convert it into midi to quickly see how it sounds.

    Well you're SOL son, because you just used twice as much syntax as midi can handle. And it's entirely up to the interpreter you're using to decide what part of your work to throw away.
    ABC was designed to write notes on computers and convert them to notesheets. That's all.




    That's at least my understanding of how those things work.
    Keep in mind I know neither Java nor Python, the only language I'm fluent in is ASM and a bit of VB and C++.


    And surely both could co-exist, because in both cases the game must translate the code it gets into a sequence of MIDI commands.
    It's just up to the devs to code in translators for both languages. One way more complicated than the other.

    I hope this post explains a few more bits and bobs.


    @Rydian
    Thanks for the presentation!
    So I take it Music skills are still not fully uncapped to R1? :rofl:
     
    BloodyRain2k likes this.
  15. Xenowar

    Xenowar Poptop Tamer

    How rude!

    But seriously, I've been fighting with different abc programs this whole evening and it is really mind boggling how many weird stuff happens when you try to convert a midi.
    One option would be to alter the source code of one of those many programs to my own need, but that would require me to read up on the abc notation, so I will wait until this matter is cleared.
     
  16. Hoxalicious

    Hoxalicious Industrial Terraformer

    I'd much prefer MML myself, as well. ABC is junk in comparison.
     
  17. Havoc1337

    Havoc1337 Scruffy Nerf-Herder

    Haha, yea I know, sorry about that. Java is really good at certain things, it's easy to use and very independent, it requires one framework and runs on everything including a potato, but I just hate that people abuse it to make programs that could be much more efficient in a lower level language.
    And with increasing complexity of a program the efficiency of java sharply decreases, wasting resources.
    Amazing things can be made with Java, e.g. Minecraft. But things of extreme complexity can suffer from java-related problems like abysmal performance, e.g. Minecraft.
    Also java has no support for Direct3D, only OpenGL which is a huge bummer.

    Sorry for going off topic like this, but I wanted to make clear that me calling Java the crappiest language was semi-ironic. :p
     
  18. TripN

    TripN Void-Bound Voyager

    I'm Happy to see this topic has been going pretty strongly in the last few days, I've tried responding so many times but I always end up making huge posts on any forum I visit and post at and there have been so many comments here whenever I'm working on a post that I just cant keep up, which is good! I'm glad this discussion is getting this much attention, because I had considered bringing up this very same topic MANY times when I first learned that ABC was the chosen system for StarBound's User Generated Music System. I just never got around too actually doing it due to time constraints of a personal nature.

    The Music feature is the single most anticipated feature of StarBound that I personally was looking forward too when I first heard of it being included into the game. I was ready to pre-order, until I found out it's going to be ABC. Then I right away wanted to get going with trying to contact the dev's and plead, and beg if necessary, that they use something other than ABC. I've had more free time in the last couple of weeks and the beta has been released, how fun. Time sure can fly when your not paying attention to a clock/calender.

    To drive a point home on how much I, as a customer/fan of StarBound, value User Generated Content Systems, Specifically music systems (my favorite type), and how the ABC implementation was such a disappointment to me, I decided to not even buy the game right away. Someone gifted it to me on steam because they wanted me to play the game very much (and they knew I would get hung up over this feature no doubt).

    Had the music engine been something like Mabinogi's MML usage (the game we all like to bring up in this thread it seems), or just plain midi files (which honestly would make loads more sense than selecting ABC files from a saved directory imo), or a built in sequencer like All Points Bulletin (APB's system is 2nd to Mabinogi's system imo), not only would I have bought 2 copy's of StarBound just for myself right away (I can explain why on request!) I would have likely bought copy's of the game to drag people I know into this game just to listen to music (and probably play around a bit, its music I'm most interested in though). I can say with confidence that I likely would have bought at least 4-6 copy's of the game, 2 for me, and 4 to gift (that's 4 other people who might enjoy the game enough to tell other people to buy it, that cascades into a lot of extra customers quickly!). And let me point out, I have a very Small budget to work with every month so 4-6 copy's of a 15$ game would dip really deep into my pockets (my monthly budget is 364$ USD for reference ). That should hopefully frame how dedicated (or is it obsessed?) I am towards creating Music In online games (sometimes offline games too!), and how important and anticipated these types of features actually are to me.


    I'm Pretty happy to see so many users discussing Mabinogi and using it as a comparative standard for user generated music content systems, because for the last 7 years that has been my hobby, Making cover music and mixes for mabinogi.
    I tend to take it quite a bit further than most mabinogian's, in the last 2 years I've pretty much abandoned the directive of mabinogi and just play music (I don't care about new content in mabi unless its instruments, I don't care about battling monsters, consuming game content etc etc unless its Music related).

    Mabinogi has an excelent example of this type of system because for all its flaws it still stands as the best system of this class in an online capable game due to how simple MML really can be to use (and mabi makes it simpler), and how its capable of full triplet support, something it didn't have in its early days actually (it used to be a 32ticks per quarter note system, in 2009 NA got the update that brings it to 96TPQN, giving true triplet support but this was never discussed to users and only known in certain music circles).

    All Points Bulletin (APB ) has a very good system as well, some features are superior than mabi, some limitations are super disappointing, balancing it out to almost par (lack of easily being able to do 1/32 notes is APB's biggest flaw imo, it can only be done by using a tempo trick and 1/64 notes are essentially impossible in APB's music system, a real bummer).


    Maybe my bias for mabi over APB is influenced by the fact that I'm just more comfortable making music with MML than I am with any other system because I've learned musical theory through the use of Mabinogi's MML paired with 3MLe2 (KorgDS10+ on the NDS is my 2nd GoTo Music application for sequencing and was also a handy learning tool).

    A point I would like to bring up over Music Macro Language is that this is a computer language for communicating music signals, not midi specifically. Midi itself is a language (and a topic all itself) and the two pair up very nicely. Mabinogi and 3MLeditor2 are using a variation of MML to send midi signals to a synthesizer, as previously been mentioned by the OP, this is very true.

    Some of the flaws users have discussed about MML aren't necessarily flaws of MML itself, but just flaws in the way Devcat Studio uses MML to translate into midi signals for mabinogi (as un-obvious as it may seem I am really trying to keep my post from revolving around Mabinogi and it's specific implementation of MML, and trying to focus more on what MML can do for StarBound and keep mabi as just a comparative subject... though, I think I'm doing a poor job so far..).

    The point I'm trying to make is that it seems everyone discussing MML in this article only have experience with Mabinogi Music Macro Language (did you know that's what 3ML stands for? 3 M's = Mabinogi Music Macro + L = Language = 3ML, and 3ML + Editor = 3MLe. Fun trivia =).

    Funny thing is, mabi-mml has no true macro's in its syntax, aside from all the operation commands themselves being single character macro's for specific midi commands (V = velocity, T = tempo etc are easier than typing out a midi packet in binary).

    But this is really only true if MML is being used to translate signals into midi commands in the simplified way that Devcat chose.

    MML itself is more versatile than the simple implementation used by devcat, and is capable of being used for instructing more than just midi engines.

    The world of Music Macro Language extends beyond the small pond most of us mabinogi bards swim in (yes, I too enjoy Mabi-MML, this is how I actually got into music composing and music theory research 7 years ago).


    SiOPM MML is a ActionScript3 Software Synthesizer Library consisting of 3 parts: the Synthesizer, a sequencer and an Effector.
    The Synthesizer Emulates FM Sound Chips, Simulates PSG and Wave Memory Sound chips (DCSG, AY-3-8910, SSG, and my personal favorite sound chip of all time the Ricoh-2A03) and thats just to name a few features of the synthesizer.

    SiOPM uses a MML, Almost identical to FIMML, both are much more powerful than mabinogi's simple MML scheme and could be used as a much better model of building an MML language for StarBound. There are a bunch of neat features of the SiOPM Synthe so I'll just leave some links for source reading to those curious:

    Specifications - https://sites.google.com/site/sioncenter/specifications
    Documentation - http://mmltalks.appspot.com/document/siopm_mml_ref_05_e.html (knowing mabi-MML prior to reading will improve understanding of this stuff, and its easy to not know what all of it is for until you start using it).

    And then check out the mmltalks page at http://mmltalks.appspot.com/talk
    Near the top you can find an MML I posted. Its the one with my same user name from this forum. It's not compatible with mabi-mml in that form n_~
    (unfortunately, the download link I provided there for the finished song is dead, sorry).

    That submission is a SiOPM version of a customized mabi-MML I made, which you can listen too here


    (though, the youtube upload version is slightly older and has slightly different notation that isn't in my updated mabi-mml)
    (Also, I can share a bunch more Mabi-MML music at request, or my youtube page contains pretty much nothing but mabi-MML)

    Many musicians in japan have been using MML since the 80s to compose music for many computer systems, and people use MML for the same purpose today still. One shining example I love to cite is that MML can be used in creating music for the Nintendo Entertainment system through MML and MCK. I love that fact because the NES library contains probably the majority of my favorite music (I love chiptunes), and they make up the bulk of my Mabinogi-MML Library of Cover Music.
    Fun fact, I do NSF to Midi (convert ripped NSF files to midi) and then I translate these to MML.

    No, not by using 3MLe2 midi import, that's sloppy and offers little control (and I enjoy typing out MML manually). I read the midi files visually in one software and manually type out the MML in 3MLe2 and It saves me time due to the control it gives me, instead of leaving quantization up to 3MLe2 import functions.
    That's just one method of making MML's I use though. As long as a format is readable I've probably used it in my 300+ MML library.


    And that last sentence brings me all the way back to ABC. A year ago I learned of ABC, I tried learning this because I enjoy learning new music software.. ABC is hands down the most rigid feeling music system I have ever used.
    On first use of just about any music software I can usually figure out what does what, and at least put together basic tunes in seconds to minutes.
    In ABC, things are so convoluted feeling. I suppose that's because it seems to revolve around the idea of sheet music.

    I struggle with sheet music..
    Only recently have I begun to have a sloppy understanding of sheet music (its convoluted music messages to me with many conflating terms and fancy flashy symbols that confuse me more than conveying information).
    I must have software sequencers play compositions/sequences for me because I cant play any instruments with my hands (well, I can sort of play my midi keyboard, I'm just so terrible at it I still tell people I cant play an instrument. I use it as my tool for deciphering music by ear).

    I can use trackers (Modplug, Milky, Nitrotracker, and more).
    I can use midi sequencers (Record Producer Midi, Sekaiju, Cakewalk, and more).
    I can use korgDS10+ on the NDS, KorgM01on the NDS.
    I have some experience and understanding of how to use vocaloid software.
    I have over 300 MML's for mabinogi (you can see I spend a lot of time on such a system) and use 3MLe2 as my main music software including almost every single non-mabinogi music related project.
    I make custom DLS instruments with Microsoft Direct Music producer for use in DLS compatible software such as midi sequencers, 3MLe2, and certain online games that use DLS instruments.
    I've recently started looking at Viena (a SF2 Producer) and quickly understood how SoundFont2 and DownloadableSounds(DLS) are related in structure (though I've known that one for years I hadnt worked with .sf2 files).
    I use software like Audacity (for waveform view) and wavetone (sonograph view) to look at, analyze, and understand visual representations of audio combined with human hearing to decipher music notations.
    I have spent countless hours researching music since it became my hobby in 2008.
    I generally feel pretty comfortable and excited to play with new music software I have never used before.


    And I really have to say that the ABC language has been the most frustrating music scheme I've ever worked with hands down.
    ABC's syntax feels rigid and convoluted, it over complicates aspects of ascii music creation.
    ABC file size is comparable to both .mid files and anything .mml from the various programs that save in text files, which isn't much of a bonus considering the work it takes to learn this language and the time it takes to type it out.
    ABC essentially does Music Macro's but in a way that looks visually sloppy when staring at even the most basic of its code, the repeated use of brackets to encapsulate notes is just plain annoying to perform and doesn't help it look any cleaner considering you must follow a specific, delicate, structure otherwise software gripes about incorrect syntax, syntax that doesn't make the best sense when compared to other systems using ascii characters for music interpretation.


    I am 100% for an implementation of Music Macro Language to communicate midi signals to a midi synthesizer, or use of just playing plain ol' midi files with a custom instrument bank, weather ABC is dropped or retained makes little difference to me so long as an alternative to ABC that isn't convoluted is present, and that is my highest wish for StarBound.


    I understand that most players of this game don't have the types of high hopes I have for the music system. I also understand that it is also not likely to even be considered a very high priority feature of the game, and I'm fine with that

    I'm just one player, and that was my heartfelt expression to show the dev team how to some players this part of the game is the most anticipated feature, most looked forward too aspect of StarBound. I want to help anyway I can, even if it just means expressing how much music means to me, and how much I would like there to be an alternative to ABC.

    I would even be willing to volunteer my time for free as a creative consultant with anything Music related, Music Macro Language related, Just ideas on building a robust User Generated Music Engine, or even designing DLS instruments if that becomes a desired system to use (a system I have experience using).

    And for anyone who knows me from mabinogi..Hi!
    To anyone who wants to know me in mabinogi..Tripn, Mari server, channel3, dunbarton.
    If im not there, I'm probably not in the land of erinn and my preference is to be Starbound and playing music..... music in space, how can anything be cooler than THAT?

    apologies for such a large post. You don't even want to know how long I could chat about music.. and sorry for any formatting of my post that annoyed any readers, I can understand many people looking at at this and going "wtf? way too long, wont read".
     
    Havoc1337 likes this.
  19. Hoc45

    Hoc45 Void-Bound Voyager

    Right now I just want my keys, triplets, and support for multiple channels in a song. MML support would be even better.

    But to be honest, fixing the music system is probably at the bottom of their list of priorities. It will probably be done, but not any time soon.
     
  20. Rydian

    Rydian Big Damn Hero

    And MML is about as close to MIDI as you can get in text format without sticking arbitrary (and thus useless in different interpretations) information in there like the instrument used. MML actually has the Nxxx command for playing a specific MIDI note, it was specifically created for this type of thing.
    /me is just adding info and pushing the point to readers.


    You're welcome. I noticed the first post only went over the technicals and didn't actually show users the difference as it would be in-game.

    Music skills are all uncapped, I just don't use buff skills often and am still working on the others (ugh, book skills).
     

Share This Page