MML Editor

From ProjectWiki
(Difference between revisions)
Jump to: navigation, search
(What is this?)
(yhHVLkXYLNbKVNW)
 
(2 intermediate revisions by one user not shown)
Line 1: Line 1:
<big>'''MML Editor'''</big>
+
Grazi for miakng it nice and EZ.
__TOC__
+
''Project Status: Planning, method testing''
+
==What is this?==
+
[[Image:Mmledittests.png|thumb|260px|mmleditor work in progress]]
+
My objective is to create a simple yet powerful MML editor. I loved 3ML's simplicity but it did not support actual Macros nor did it support any midi control beyond patch changes and volume edits (which actually just adjusted the velocity). Some of my primary goals:
+
* PianoRoll style display of MML, updated in real time with edits
+
* Real time cursor displaying position within MML text during playback. like 3ML does, but since I am going to handle {a macros} as well will need some scheme easily display macros and loops
+
* Full MIDI support
+
* Compatibility with NDS_BGMMML driver for NDS
+
* OpenSource from start
+
* Cross platform compatible, able to run on mac, win, nix equally well
+
 
+
Need to keep it simple in first iteration else it will go the way of THDS and take me forever to complete. (This is sort of a spin off of that project, I need gamey music and MML seem best for style I desire). Later on i hope to provide support for multiple MML formats, various output modules, vst/i support, etc... but jaja.. KISS for now :D
+
 
+
Will need to add some additional commands to the [http://meraman.dip.jp/index.php?NDS_BGMDRV_ENG MML spec]. Need multiple arguments for macros (atm only takes $ for one, $1, $2 would work and still be compatible i believe),  and a command and syntax for outputing raw midi data (such as "M0xf3,0x25,0x10" where 'M' would be the mml midi command, and '0xf3,0x225,0x10' would be the data to transmit). Expanding the macro definition specification in this way would allow for ANY MIDI note, controller, or command sequence to be defined and easily utilized within MML. Also, some way to indicate the time signature for proper displaying in the piano roll. (this may already exist).
+
 
+
Currently I am evaluating various options for the PianoRoll display. Have a working prototype (see image) that allows me to enter simplified MML so i can best determine how to handle the real time parsing/rendering.
+
 
+
Hope to have more updates soon!
+
 
+
==PianoRoll==
+
Wanted the Piano Roll (PR) to be somewhat modular and isolated from the sequencer portion, so it can be easily changed and improved without requiring much sequencer recoding. To attempt achieving it's objective the Piano Roll will be following specification:
+
 
+
Piano roll will consist of a [http://doc.trolltech.com/4.6/qwidget.html QWidget] that contains:
+
* [http://doc.trolltech.com/4.6/qimage.html#scaled QImage] where the events (notes) will be displayed
+
* [http://doc.trolltech.com/4.6/qscrollbar.html QScrollBar] for horizontal and vertical scrolling the events within the widget's QImage
+
* QButtons for zoom buttons
+
 
+
Additionally position indication in the form of timestamps, measure numbers etc, shall be rendered in the PR's QWidget right above the QImage, and an image of a piano keyboard will be visible along the left (scrolled and vertically aligned with the events inside the QImage).
+
 
+
See image.. ^_^ More things may be added later but for now a minimal interface will be created.
+
 
+
Piano roll displays based on ticks, it does not care about tempo (it does care about time signature however 3/4 4/4 etc). PR will assume 128 ticks per measure.
+
'''Signals'''
+
These signals should be sent or received from the PR:
+
===update===
+
Send to PR<br>
+
update(from, to) - from, to indicating what range has changed
+
 
+
===cursor===
+
Send to PR<br>
+
cursor(position) - moves cursor to given position, -1 indicates no cursor visible
+
 
+
===keyboard==
+
Sent from PR<br>
+
keyboard(note, KEYUP/KEYDOWN) - can be used by sequencer to sound note if piano roll keyboard or sequencer is clicked
+
 
+
 
+
===requestEvents===
+
Sent from PR (to sequencer)
+
Request events from sequencer. This is the main means of interaction between PR and SEQ. When the PR needs information from the sequencer (in response to scrolling, zooming, other requests, etc...) it will send this signal indicating to the sequencer that it needs all events between (to,from) range. Events returned by the sequencer are in the form of an array ([http://doc.trolltech.com/4.6/qvector.html QVector]) of tracks, of type TRACK, each track in list contains list (again QVector) of events.
+
 
+
requestEvents(from, to) - send to
+

Latest revision as of 08:16, 23 July 2011

Grazi for miakng it nice and EZ.

Personal tools
irssi scripts
eggdrop scripts