Breakpoint demolog, day 18: loading the Song.xml
I have finally decided that I'll load directly Renoise's Song.xml file instead of preprocessing it as I did with the .it files in to_the_beat.
Right now, I'm manually uncompressing the .xrns file and copying the contained Song.xml file to my data folder, but in the future I would like to automate the process so that I just leave a song.xrns file in the data folder and it gets uncompressed "on the fly", and the .xml file is extracted and used.
Any suggestion for a lightweight unzipping library that doesn't need to be installed to /usr/local or anything like that and can be easily added to a C++ project will be really appreciated. Yes, I know I can 'Google it', but I am asking for opinions from real library users. I wonder if there exists something like TinyUNZIP... :-)
Back to the XML front, I am using TinyXML for reading/parsing/traversing the XML, as I have been doing since 2005 since Shine suggested it to me, but I have also updated it to the latest version :D
Since Renoise's song format has way more nested elements than the common script.xml that I use, I have written a getElementByTagName function (like a mix of getElementById and getElementsByTagName functions from JavaScript) so that I can look for child nodes with a given name, instead of linearly processing the full document as I had been doing when parsing the demo script. This way I can ignore things that I don't care about such as the samples, envelopes, etc, and focus only on the data I am interested in - such as patterns, plugin parameters, etc :)
I guess the function could be really optimised since each time it looks for something it has to start at the parent node again -- but then again there's not much data to parse, and initial look ups are pretty much immediate so I'm not going to bother about it.
I haven't finished yet extracting the relevant data, but there's something else I have done: I tried yesterday's test in a real Windows machine and it worked, quite better than in Wine. So things look like progressing in the right direction!
No screenshot, nothing to see today, move along!