[jmsl] Jmsl to Xml/Midi and Xml/Midi to Jmsl?
jmsl at music.columbia.edu
jmsl at music.columbia.edu
Sat Apr 11 10:30:13 EDT 2009
Hi Chi
Here's what I would do: I'd develop my own simple text-based shorthand
for encoding this to a text stream, and write it / read it to/from a
text file for testing. Not sure XML is really needed for this since it
is so straightforward, but I'll use XML-like tags.
Mark the beginning of pc with <parallelcollection>
Mark the end with </parallelcollection>
Mark the beginning of sc with <sequentialcollection>
Mark the end with </sequentialcollection>
Everything encountered between the <collection></collection> tags gets
added to that collection instance
Mark the beginning of ms with <musicshape>
Mark the end with </musicshape>
Examine the following to save/load the musicshape data, maybe they will
be of use:
MusicShape.save():
/**
* Save a MusicShape to a file
*
* PrintWriter out = new PrintWriter(new BufferedWriter(new
FileWriter("foo.out")));
*
* First line is number of dimensions, followed by dimension names,
one per line, followed by
* data, one element per line *
*/
MusicShape.load():
/**
* BufferedReader in = new BufferedReader(new FileReader("foo.in"));
*
* Replace data with data loaded from a file. Also reads dimension
names from file.
*
*/
So a simple example of a text file that has a Sequential Collection
containing one ParallelCollection containing two MusicShapes might look
like this (assumes your MusicShapes have 4 dimensions and you called
ms.useStandardDimensionNameSpace() )
<sequentialcollection>
<parallelcollection>
<musicshape>
4
duration
pitch
amplitude
hold
0 1.0 68.0 0.3320770263671875 2.0
1 0.25 68.0 0.3054046630859375 2.0
2 1.0 66.0 0.1468963623046875 2.0
3 0.0 64.0 0.6534271240234375 2.0
4 0.25 66.0 0.8718719482421875 0.5
5 0.0 68.0 0.0991058349609375 1.0
6 0.25 65.0 0.8820037841796875 2.0
7 0.0 68.0 0.0174407958984375 2.0
8 0.0 66.0 0.5522918701171875 0.5
9 0.75 63.0 0.7834320068359375 1.0
10 0.25 64.0 0.2577362060546875 1.5
11 0.5 62.0 0.7720794677734375 1.5
12 0.0 64.0 0.3733367919921875 2.0
13 0.5 62.0 0.3583831787109375 2.0
14 1.0 64.0 0.2740936279296875 1.5
15 0.5 66.0 0.9173431396484375 0.5
16 0.25 66.0 0.3350067138671875 2.5
</musicshape>
<musicshape>
4
duration
pitch
amplitude
hold
0 1.0 63.0 0.384246826171875 2.5
1 0.25 65.0 0.930084228515625 1.0
2 0.75 64.0 0.855804443359375 1.5
3 0.75 63.0 0.020782470703125 1.5
4 0.25 62.0 0.534393310546875 1.0
5 1.0 62.0 0.756011962890625 2.0
6 0.75 61.0 0.295013427734375 2.5
7 0.75 61.0 0.010772705078125 1.0
8 0.75 61.0 0.012664794921875 2.0
9 0.0 58.0 0.660064697265625 2.5
10 0.25 55.0 0.562347412109375 2.5
11 1.0 53.0 0.578887939453125 1.5
12 0.0 53.0 0.819061279296875 0.5
13 0.0 53.0 0.642242431640625 2.0
14 0.25 52.0 0.657806396484375 1.5
15 0.25 50.0 0.725128173828125 2.5
16 0.5 53.0 0.953582763671875 1.5
</musicshape>
</parallelcollection>
</sequentialcollection>
Thanks
Nick Didkovsky
jmsl at music.columbia.edu wrote:
> Hi,
>
> I'm pretty new at programming, but I'm trying to write an applet that people can compose some music and save it on the web to share.
> I need to way to pass a sequential collection to php and import back from url. The way I organized the collection is:
> 1. ParallelCollections (pc) contains one measure of MusicShapes (ms) for different instruments.
> 2. SequentialCollection (sc) contains all the pcs above.
> I tried to convert the entire sc into xml with XStream, but since jmsl is third party library, it throws a security error.
> My alternative is midi which might be simpler. I've checked out MidiLoggerNonRealTimeTest, but is there way to feed the entire collection into MidiLogger? MidiLoggerNonRealTimeTest seem to feed one midi message at a time to the logger. If I can export the entire sc into midi, I could just let users save the midi file and share the midi file on the web.
> Thanks for all your help.
>
> Chi
> _______________________________________________
> jmsl mailing list
> jmsl at music.columbia.edu
> http://music.columbia.edu/mailman/listinfo/jmsl
>
More information about the jmsl
mailing list