From the Sequencer panel:
The XML file generated from exporting a sequence doesn’t seem to be valid XML.
The “xmllint” program says this:
Ahseed Mooger.seq:5: parser error : StartTag: invalid element name
<0 note="48" note2="0" vel="90" mod="255" rest="0" tie="0" SkipBit="0"
^
When I try reading a sequence file with Go’s ‘encoding/xml’ package, it gives this:
test: XML syntax error on line 5: invalid XML name: 0
Also, would it be a benefit to be able to send only the sequence over MIDI to the hardware, instead of the whole preset?
GilW
January 3, 2016, 1:15pm
2
Hello Mike and thanks for your in-depth inspection.
I have checked the file generated by the sequence export function, and I realize it’s just the way it is designed. I have posted this to our developer just in case and will let you know his official reply on this. Anyway, please note the file is not marked as .xml but as .seq (specifically used for the Editor).
Thanks!
<?xml version="1.0" encoding="UTF-8"?>
<SUB37_SEQUENCE version=“0.9.28” p_Ratchet_Count=“0” firstStep=“3” lastStep=“25”
p_Seq_Mod_Dest=“Off / None” p_Seq_Mod_Amt=“0” p_Seq_ModOnly=“0”>
<0 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<1 note=“0” note2=“6” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<2 note=“16” note2=“65532” vel=“110” mod=“105” rest=“1” tie=“1”
SkipBit=“0” RatchetBit=“0”/>
<3 note=“32” note2=“16” vel=“19” mod=“56” rest=“0” tie=“1” SkipBit=“0”
RatchetBit=“0”/>
<4 note=“65527” note2=“40” vel=“24” mod=“40” rest=“0” tie=“1” SkipBit=“0”
RatchetBit=“1”/>
<5 note=“2” note2=“65533” vel=“115” mod=“27” rest=“1” tie=“1” SkipBit=“0”
RatchetBit=“1”/>
<6 note=“65516” note2=“3” vel=“45” mod=“36” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“1”/>
<7 note=“65497” note2=“8” vel=“48” mod=“65” rest=“1” tie=“1” SkipBit=“0”
RatchetBit=“0”/>
<8 note=“22” note2=“14” vel=“61” mod=“99” rest=“1” tie=“1” SkipBit=“0”
RatchetBit=“1”/>
<9 note=“31” note2=“65521” vel=“37” mod=“44” rest=“1” tie=“1” SkipBit=“0”
RatchetBit=“1”/>
<10 note=“10” note2=“65512” vel=“97” mod=“119” rest=“1” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<11 note=“12” note2=“2” vel=“50” mod=“14” rest=“1” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<12 note=“21” note2=“65521” vel=“39” mod=“12” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<13 note=“11” note2=“11” vel=“33” mod=“93” rest=“1” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<14 note=“8” note2=“6” vel=“41” mod=“64” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“1”/>
<15 note=“18” note2=“65532” vel=“100” mod=“53” rest=“1” tie=“1” SkipBit=“0”
RatchetBit=“0”/>
<16 note=“65527” note2=“17” vel=“118” mod=“89” rest=“1” tie=“1” SkipBit=“0”
RatchetBit=“1”/>
<17 note=“65530” note2=“65523” vel=“58” mod=“90” rest=“0” tie=“1”
SkipBit=“0” RatchetBit=“1”/>
<18 note=“29” note2=“65531” vel=“7” mod=“58” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<19 note=“27” note2=“65530” vel=“1” mod=“99” rest=“0” tie=“1” SkipBit=“0”
RatchetBit=“0”/>
<20 note=“3” note2=“32” vel=“125” mod=“82” rest=“0” tie=“1” SkipBit=“0”
RatchetBit=“0”/>
<21 note=“65529” note2=“65521” vel=“27” mod=“102” rest=“0” tie=“0”
SkipBit=“0” RatchetBit=“1”/>
<22 note=“19” note2=“65530” vel=“116” mod=“30” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<23 note=“36” note2=“65535” vel=“0” mod=“106” rest=“0” tie=“1” SkipBit=“0”
RatchetBit=“1”/>
<24 note=“65520” note2=“20” vel=“0” mod=“7” rest=“1” tie=“1” SkipBit=“0”
RatchetBit=“0”/>
<25 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<26 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<27 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<28 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<29 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<30 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<31 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<32 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<33 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<34 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<35 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<36 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<37 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<38 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<39 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<40 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<41 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<42 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<43 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<44 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<45 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<46 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<47 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<48 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<49 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<50 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<51 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<52 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<53 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<54 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<55 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<56 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<57 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<58 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<59 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<60 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<61 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<62 note=“0” note2=“0” vel=“0” mod=“0” rest=“0” tie=“0” SkipBit=“0”
RatchetBit=“0”/>
<63 note=“21536” note2=“27491” vel=“24946” mod=“8226” rest=“1” tie=“1”
SkipBit=“1” RatchetBit=“1”/>
</SUB37_SEQUENCE>
Hi, Gil! Thanks for the reply.
I understand that it’s Moog’s own file format, and it’s for Moog’s own instrument, but the first line of the file says that it’s an XML file, and that it will comply with the XML spec. So, I thought it was unfortunate that it did not conform to the spec and that standard libraries in some programming languages were unable to read it, and that XML testers would reject it.
Here’s what I thought when I found out that the import/export sequence format was a straightforward XML file:
Someone could generate a MusicXML file from the .seq file and display the sequence in a music notation program.
Someone could programmatically generate sequences for use by the Sub 37.
In other words, we could extend the reach of the editor by having more choices to save and manipulate recorded sequences, and by having more ways to get sequences into the Sub 37.
Picking XML is a good decision, because it is a good import/export format. But for that to be useful, for us to get all the benefits, it needs to comply with the spec.
That’s what I had intended to say.
Oh, and as proof of concept, here’s some generated sequences - they’re sampling a ramp wave – something like the external Moog 1125 S/H of yore.
sahseq2.zip (4.17 KB)
Edit: Jan 8
Just for the record, the “fix” is to change lines like this:
<0 ...
to lines like this:
<step pos="0" ...
aroom
January 8, 2016, 12:18am
4
I like the way you’re thinking Mike!
GilW
January 8, 2016, 1:19am
5
Thanks Mike !
It’s a good point, and it’s being discussed on a product design level. The current format of the .seq file seems correct, for what it currently does.