W3C home > Mailing lists > Public > www-svg@w3.org > November 2010

Re: SVG and MIDI

From: James Ingram <j.ingram@netcologne.de>
Date: Wed, 03 Nov 2010 13:29:03 +0100
Message-ID: <4CD1558F.3000600@netcologne.de>
To: www-svg@w3.org
CC: helder.magalhaes@gmail.com
Hi Domenico,

Thanks for the welcome! :-)

Following Helder's suggestion, I joined the svg developers group at [1] 
yesterday, and sent my latest contribution there.

However, in reply to your post:

> The type of extension you are suggesting relates to music
> and its reproduction using synthesized sounds and/or samples from the 
> sound
> card's onboard library, through an interface with the system sound 
> driven by
> MIDI events described in the XML markup.
> If I understand, you are proposing an extension for SVG that would
> graphically render the score from the information in the markup. 
That does not require an extension to SVG. I need extensions describing 
the *meaning* of the graphics (time and MIDI).
(I'm developing these ideas as we go along, so the following is an 
updated version of my post to the svg developers group yesterday.)

I was thinking of defining <g> sub-types like these:
     mus:msPos (int)
     mus:msDefaultDuration (int)
     mus:staffName (string)
     mus:midiChannel (int)
     mus:midiPitches (list of ints)

The *system* mus:msPos would be the default number of milliseconds from 
the beginning of the performance.
The *chord* and *rest* mus:msPos would be the default number of 
milliseconds from the beginning of the system.
The *mus:msDefaultDuration* would only be applicable to chords (think 
Mozart staccato).

For example:

<svg ...  xmlns:mus="http://www.james-ingram-act-two/Moritz/svgTypes" ... >
<!-- there will be a sequence of systems in the page -->
<g mus:type="system" mus:msPos="0">
<!-- a sequence of staffs in the system -->
<g mus:type="staff" mus:staffName="Flute" mus:midiChannel="0">

<!-- a sequence of clefs, barlines, rests, chords etc -->

<g mus:type="rest" mus:msPos="0" >
<!-- the rest text character -->
<g mus:type="drawObjects">
<!-- objects associated with the rest -->
</g> <!-- end of rest -->

<g mus:type="barline">
<!-- the barline line -->
<g mus:type="drawObjects">
<!-- objects associated with the barline -->
</g> <!-- end of barline -->

<g mus:type="chord" 
mus:msPos="1348"mus:msDefaultDuration="1000"mus:midiPitches="64 67 83 90">
<!-- graphics for the chord symbol -->
<g mus:type="drawObjects">
<!-- control texts and other objects associated with the chord-->
<!-- The control texts can be parsed for things like dynamics
                      or patch changes ->
</g> <!-- end of chord -->

<!-- etc. more chords, rests, barlines etc. -->

</g> <!-- end of staff -->
<!-- more staves -->
</g> <!-- end of system -->
<!-- more systems -->

This has the interesting side effect that there does not have to be a 
rest or chord at the start of every staff. That's very useful, because 
notations should not have to insist on having tied notes where durations 
cross systems. We are not restricted to standard notation. :-) There 
probably has to be a special typemus:tiedChord for chord symbols which 
are continuations.
A mus:chord is where MIDI noteOns get sent...
> I suspect you would like such extension to be
> implemented natively. If this is right then this is the right place 
> for such
> a proposal, as all the implementers have a presence here.
It would of course be very helpful if all score authoring programs could 
export these extensions in a standard way.
> Then comes the question of the execution of the score. You say that your
> Assistant Performer software could easily integrate this new format. 
My Assistant Performer first analyses the information in a (CapXML) 
score to create a "MIDIScore" consisting of all the MIDI messages 
waiting to be played. All the live performer does is trigger those 
messages in real-time. If the original file was not CapXML but extended 
SVG, it would be much easier to construct the MIDIScore.

> Do I read you well if I say that you would like this engine to 
> possibly become a
> plugin or, better, be implemented natively or taken as a model for the
> reproduction?
At the moment, its primarily a proof-of-concept - a prototype. It would 
be very nice to make a browser plug-in, or even implement it natively in 
browsers... But doing that would require a team of experienced 
programmers. I'd very much like to be part of such a project.

> I checked Assistant Performer and found that its timing controls, pedal
> marks, dynamics and sliding dynamics are excellent. I'm not crazy 
> about the
> interpretation of articulations. Overall it's very convincing.
Thanks! Yes, I'm not too happy about the articulations either. Maybe its 
me, maybe its MIDI. :-)

> Apart from the natural vocation of interpreting scores, this implemented
> interface would allow native and active control over music (not to be
> confused with audio) in all the possible situations where it is commonly
> used, but also allow aleatory composition -I'm sure you're well used 
> to this
> ;-) - through scripted (ECMAscript) algorithms, interpreted by the 
> computer,
> that could be used as incidental music. And more. Lots of real fun.
Quite! :-))

Another thing I'm developing is the notation itself.
Having a format in which the logical and graphical information is 
clearly separate, means that non-standard notations can be implemented. 
(A chord with mus:midiPitches="64 72 93" could be notated with a single 
red notehead or in any other way...)
And there are situations where it would be preferable to use a 
simplified notation which can easily be generated automatically from an 
audio file. (see [3]). (This is very difficult to do using full 
19th-century notation.)
I can well imagine adding such simple "event-oriented" notations to 
today's post-production software (Cubase, Protools, Ableton etc.). At 
present, the best they have is old-fashioned, analogue, space-time 
notation [4]...
> If this is the sense of your proposal and if it encounters some expressed
> interest from officials at this stage I'll be glad to give you some 
> support.
> If I've got it all wrong please ignore.
Thanks very much! I think you got it (mostly) right. :-)

All the best,

[1] http://tech.groups.yahoo.com/group/svg-developers/
[2] http://en.wikipedia.org/wiki/The_ascent_of_man
Received on Wednesday, 3 November 2010 12:29:44 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 22:54:29 UTC