blog.humaneguitarist.org

discoveries in digital audio, music notation, and information encoding

Archive for the ‘MXMLiszt’ tag

VPS’ ain’t cheap: MXMLiszt demo no longer online

leave a comment

Just FYI:

The live demo for MXMLiszt is no more.

I decided to save money and stop paying monthly rates for a VPS on KickAssVPS.com that was originally purchased because I needed to have a live demo for my research while in graduate school. I've been out of school for a while and now it's time to move on.

--------------

Related Content:

Written by nitin

January 31st, 2012 at 6:55 pm

Posted in news

Tagged with ,

MXMLiszt article published

leave a comment

If anyone's truly bored, an article of mine about MXMLiszt has been published through OCLC Systems & Services.

Here's the citation:

Nitin Arora, (2011) "MXMLiszt: a preliminary MusicXML digital library platform built on available open-source technologies", OCLC Systems & Services, Vol. 27 Iss: 4, pp.298 – 316.

I need to give a huge shout-out to Dr. Steven MacCall at the University of Alabama under whom I did the research for MXMLiszt which included delivering the software and a paper – that's much longer than the published one! – about libraries and digital sheet music. It was cool to finish up my library degree with stuff that meant more to me than just a means to, well, finishing up the degree.

Update, November 26, 2011: I should have mentioned that this article is not openly available. If you want to read the article but can't access it through your institution or local library, please email me at "nitaro74 AT gmail DOT com". Under the publication rules, I am allowed to distribute the version of the article I submitted to the publisher. I don't have any problem doing so if someone is genuinely interested provided you agree not to openly distribute copies and provided you check with your local library first. Most libraries have access to more resources than most of their patrons know!

--------------

Related Content:

Written by nitin

November 12th, 2011 at 11:23 am

MXMLiszt version 0.9.2 released

leave a comment

If anyone's interested, MXMLiszt version 0.9.2 is now available for download.

MXMLiszt is a web-based delivery and search/retrieval environment for MusicXML files and their manifestations.

The documentation and source-code download links are available here.

Here's the changelog:

0.9.2
- included Bach and Schubert MusicXML files from MusicSQL project (http://musicsql.googlecode.com/).
    - For the Bach, cleaned up diacritics (in titles only) and changed "Soprano", etc. to "Soprano", etc.
        - diacritics are still messed up in lyrics. I'm too lazy to fix them. :]
    - For the Schubert, changed "Part_1" through "Part_4" to "Violin 1", "Violin 2", "Viola", and "Cello".
    - original files available here:

http://musicsql.googlecode.com/files/Bach_SATB-1.0.zip

http://musicsql.googlecode.com/files/Schubert_quartets-1.0.zip

- adjusted <hr> rules in style.css to accomodate Internet Explorer 9
    - Removed "optimized for Firefox" in welcome.php since MXMLiszt now works well in IE, Firefox, Chrome, Safari, and Opera (see below).
- fixed generateIndex.php so the <img> tag now closes in this line:
        echo nl2br('<img src="png/' . $filenamePlain . '.pre.png" />'); //line #12
    - This was the only reason the Index view wasn't working in Opera.
        - Opera was the only browser that caught this error. :]
- made "Results" header for search results an <h2>, just as with the MIR results header.
- added two modules: startWatch.php and stopWatch.php to reduce coding redundancy in regard to reporting the time it takes for actions to finish.
- changed mxml2mods.xsl to output the MODS namespace.
    - adjusted mods.xsl, loadMODSasDC.php, and XQuery syntax as needed.
    - Sample XQueries using a namespace prefix:

        This is a Faust query example:
                    declare namespace mods = "http://www.loc.gov/mods/v3";
                    for $x in doc("../concat/concatMODS.xml")/hyperMODS/hypoMODS/mods:mods
                    let $x1 := $x//mods:subTitle
                    return $x1

        This is a Dante example:
                    declare namespace mods = "http://www.loc.gov/mods/v3";
                    for $x in doc("../concat/concatMODS.xml")/hyperMODS/hypoMODS
                    let $x1 := $x/mods:mods
                    where $x1//mods:subTitle contains text "You"
                    return data($x/@file)

- simplified some of the built in MODS related XQueries (same functionality, just less wordy).
- changed order of MODS search drop down terms on Search page.
- changed <i> and <b> to <em> and <strong>, respectively.
- replaced "pop1", etc. with better-named CSS variables like stickyNote and IndexPopup, etc. in style.css.
- added a streamed comment in each module with a one or two sentence description of what it does.
- added .htaccess file.
    - to hide root folder.
    - to make the "/~foo.xml" forward (with masking) to:"transmuteMXML.php$fname=musicXML/foo.xml".
        - adjusted mxml2mods.xsl accordingly.
    - to hide directory icons.
    - to use fancy indexing.
- changed displayMODS.php to display MODS files via an <iframe> only as a fallback if PHP XSL processing not available on server.
_______________________________________________________________________
0.9.1
- created mods.css file to display MODS on a transparent background.
- changed displayMODS.php to display MODS files via an <iframe>.
    - The previous version was using the mods.xsl stylesheet to parse the MODS element values in real-time.
_______________________________________________________________________
0.9.0
- this was the first version - that worked!
--------------

Related Content:

Written by nitin

July 23rd, 2011 at 10:29 am

Posted in music notation,news,scripts

Tagged with ,

MXMLiszt version 0.9.1 released

leave a comment

I've made some minor changes to MXMLiszt to address a bug that began to appear after months of trouble-free performance.

So here are the changes I made to address the issue related to the display of MODS metadata:

  • Created mods.css file to display MODS on a transparent background.
  • Changed displayMODS.php to display MODS files via an <iframe>. The previous version was using the mods.xsl stylesheet to parse the MODS element values in real-time.

You can read the documentation and download the source code for version 0.9.1 here.

--------------

Related Content:

Written by nitin

October 2nd, 2010 at 12:08 pm

Posted in music notation,scripts,XML

Tagged with

MXMLiszt release 0.9.0

4 comments

MXMLiszt version 0.9.0 is now available for download.

MXMLiszt is a web-based delivery and search/retrieval environment for MusicXML files and their manifestations.

MXMLiszt was created in order to complete a Master’s in Library and Information Science at the University of Alabama under the direction of Dr. Steven L. MacCall.

The documentation and source-code download links are available here.

The accompanying research paper, “Beyond Images: Encoding Music for Access and Retrieval” can be accessed here.

As of June, 2010 the live demo of MXMLiszt can be accessed at:

http://opensourcelibrarian.org/MXMLiszt

--------------

Related Content:

Written by nitin

June 13th, 2010 at 6:32 pm

Posted in music notation,scripts,XML

Tagged with

MXMLiszt

leave a comment

MXMLiszt 0.9.2 (Beta)


Table of Contents

Introduction

Installation

Troubleshooting

How it works

FAQ

Links


Introduction

MXMLiszt is a web-based delivery and search/retrieval environment for MusicXML files and their manifestations.

MXMLiszt and an accompanying research paper, Beyond Images: Encoding Music for Access and Retrieval, were created in order to complete a Master's in Library and Information Science at the University of Alabama under the direction of Dr. Steven L. MacCall.

On the name "MXMLiszt":

MXMLiszt = MusicXML List.

MXMLiszt is pronounced [mak-suh-muh-list].

MXMLiszt references the great musical maximalist, Franz Liszt.


Installation (Windows 32-bit, home-based server)

MXMLiszt is currently known to work on the following 32-bit Windows servers:

  • Successfully tested for production and hosting on Windows XP Home Edition (Service Pack 3) and Windows 7 (Professional).
  • Successfully tested for hosting on Windows Server 2003.

MXMLiszt uses the following backend software*:

  • Musescore (version 0.9.5)
  • MusicXML Library (version 2.0)
  • ImageMagick (version 6.5.9-5)
  • Zong! Player (version 0.4.48)**
  • Saxon-HE (version 9.2)
  • BaseX (version 6)
  • Additionally, you need the Java Runtime Environment and an Apache server that supports PHP 5.

* Note that many of the software versions are not the most current; this will be addressed in future versions.

** The Zong! Player is included with MXMLiszt 0.9.2.

To get MXMLiszt up and running do the following:

  1. Assuming you don't have an Apache/PHP setup, download XAMPP.

    • Create a "bin" folder inside the root XAMPP folder.

    • Because some of the MXMLiszt scripts take a lot of time to run, increase the maximum execute time in "php.ini" to more than the default of 60 seconds. I used “3600”.

  2. Download the MXMLiszt-0.9.2.zip file.

    • Extract the files/folders and place the root "MXMLiszt" folder inside XAMPP's “htdocs” folder.

    • Open "setup.php" and change line 5 (below) to replace the default Administrator password from “tausig” to your own password.

      • $validPassword = "tausig";

  3. Download MuseScore.

    • Install MuseScore inside the “bin” folder you made in Step 1.

    • Rename the root folder to just “MuseScore”.

    • The program executable should be located at "bin\MuseScore\bin\mscore.exe".

    • Run MuseScore and go to Edit>Preferences>Export and uncheck “Screen shot function”.

    • Click "Apply".

    • Go to Edit>Preferences>Score and select "A4" as the default paper size and make sure "Landscape" and "Two sided" are unchecked.

    • Click “Apply”.

    • Close the program.

  4. Download MusicXML Library.

    • Create a folder called “libmusicxml” inside your “bin” folder and extract all the MusicXML Library files in that folder.

    • The transposition executable should be located at "bin\libmusicxml\xmltranspose.exe".

  5. Download ImageMagick.

    • Install ImageMagick inside the “bin” folder.

    • Rename the root folder to simply “ImageMagick”.

    • The “convert” executable should be located at "bin\ImageMagick\convert.exe".

  6. Download the Java version of BaseX.

    • Place the .jar file in the “bin” folder.

  7. Download Saxon-HE.

    • Extract the .jar file to the “bin” folder.

  8. Run “xampp-control.exe” from the root XAMPP folder and start only the Apache module:

  1. You should now be able to go to “http://localhost/MXMLiszt/” or "http://127.0.0.1/MXMLiszt/" from your browser and see the MXMLiszt welcome page:

  1. Now login via the "Administrator>Login/Logoff" link and execute options 1 through 6; this may take a while.

  2. Hope it works!


Troubleshooting

Administrator errors:

  1. generateMODS.php not working

    • Make sure Java is installed.

    • You must have a live internet connexion for Saxon to perform XSLT operations due to xsd/schema needs.

User errors:

  1. Zong! Player not working

    • Make sure Java is installed. I use version 1.6.0_20.

    • Make sure you've installed the Java Soundbank.

    • Occassionally, there are MusicXML files Zong! Player cannot play. I plan to contact the programmers and ask why this might happen from time to time.

  2. Some of the PDFs have very odd spacing and page layout issues.

    • I think this is an issue with MuseScore. I own Finale Notepad and it seems to do a better job with MusicXML import. But, I really don't know yet why these things happen from time to time with certain pieces. I should probably experiment more with MuseScore style configurations.


How it works

MXMLiszt works on the principle that while the MusicXML encoding for a given composition is itself a manifestation of a work (i.e. the “composition”), the MusicXML file itself can function as a sub-work capable of birthing derivative image and audio files; manifestations also include musical transpositions in MusicXML format, thus allowing the the transpositions to serve as sub-sub-works also capable of spawning new image and audio content.

The following graphic attempts to depict the essential overall framework of the platform:

 


FAQ

  1. Why are you using the Zong! Player? MuseScore can create OGG files from free SoundFonts and the audio can be embedded in the HTML5 <audio> tag.

    • I'm not clear on the licensing situation with SoundFonts even though there are many "free" ones available. Also, Zong! Player doesn't require OGG files to be written and saved to the server, so the Zong! Player applet saves storage space as well.

    • I have thought about adding an OGG/<audio> tag option as a backup for MusicXML files that Zong! Player is not able to play.


Links

  • Arora, Nitin. "MXMLiszt: a preliminary MusicXML digital library platform built on available open-source technologies." OCLC Systems & Services. Retrieved November 20, 2011, from http://dx.doi.org/10.1108/10650751111182605.
--------------

Related Content:

Written by nitin

June 13th, 2010 at 10:20 am

Posted in

Tagged with

LS-598 #4: MXMLiszt on Windows Server 2003

one comment

Yesterday I wrote about trying out a Windows VPS using KickAssVPS.com to run MXMLiszt, my web demo for my music encoding research project.

Well, so far so good. Sort of …

I use Windows XP Home Edition (SP3, 32-bit) on my laptop, so my software and everything that it utilizes runs well on XP since I naturally made sure everything works.

;)

But to my surprise things didn't go that great when I uploaded everything to my VPS which uses Windows Server 2003. Here's what was problematic:

  1. Musecore version 0.9.5 is what I call to make PDFs and PNG preview files from the MusicXML files. On the VPS, the titles of the pieces weren't showing up when these image files were getting made, so I went on to version 0.9.6 which is still in beta. It's working OK. The PDFs are getting made when one transposes a piece, but they look better with the XP version of MXMLiszt on my laptop which uses version 0.9.5 of MuseScore. But, there's something funny going on with the administrative PHP script that makes PNG preview files for the site. These are small image of the 1st page of each piece so the user can get a feel for the piece, its key and initial texture, etc. Not all the previews are getting made. Weird.
  2. I also use MuseScore to "normalize" each MusicXML file by opening/saving them in MuseScore so that every file gets "spit out" by the same application before I use an XSL transformation to auto-generate MODS metadata from the MusicXML files. Works great on XP and with MuseScore 0.9.5 but on the VPS with the beta version of MuseScore, the title of each piece is showing up in the MODS as the primary and sub-title – so it's redundant. If you don't know what I'm talking about, don't worry. Bottom line is things are wonky.
  3. The software that makes the transpositions, MusicXML Library version 2.0, wasn't working on the VPS. So I went down to version 1.09. Moreover, my PHP script that calls the MusicXML Library to transpose the music per user request looks for the "xmltranspose.exe" executable in version 2. The older version of the software calls that file "transpose.exe". So rather than change my script, I just renamed "transpose.exe" to "xmltranspose.exe" on the VPS.

So in other words, MXMLiszt really isn't too compatible with Windows Server 2003. It's working well enough as a live demo now, but I wouldn't try and run it "for real" on the VPS since the PNG preview and MODS generation are problematic. So the production version is the XP version as on my laptop.

Oh well. The user doesn't miss out, it's just the Administrator who has to do the work on a local machine and upload everything to the VPS for the sake of having a live demo.

Such is life.

p.s. it'll be a few more weeks before I can post the link to the demo. It needs more documentation before I can share it with anyone other than my professor. Feel free to email me off-list if you would like me to send the link as long as you agree not to post the link until the documentation is done.


This blog post is part of a semester-long investigation into digital encoding of symbolic music representation (SMR), its context in libraries, web-based delivery, preservation and metadata, and search and retrieval technologies..

--------------

Related Content:

Written by nitin

March 18th, 2010 at 7:58 pm

LS-598 #3: web demo update

leave a comment

Before I provide a quick update on the status of the web demo for my MusicXML digital library delivery mock-up, it goes without saying that I haven't been bloggin per my original intent. That is to say, the initial idea of writing my paper with a modular approach fed by blog posts, has essentially been scrapped. The idea of it all seemed a bit too piece-meal to me. Instead, I'll write the paper and post it in its entirety when it's been written.

As for the web demo, it's more or less completed from a programming p.o.v at this point, but there are a few things I want to mention:

  • The software has a name in MXMLiszt, i.e. "MusicXML List". It's pronounced "maximalist" and happily references my favorite composer in the process.
  • It should run "out of the box" (after you install all dependencies) on Windows servers running XAMPP or at least an Apache installation on a Windows server with the same folder configuration as XAMPP.
  • It will utilize open-source software only, with the ironic exception of the OS.
  • MXMLiszt will be released with a BSD license approximately 6-8 weeks from now after the documentation is complete and my paper is finished.

Eventually, I'll port MXMLiszt to Linux (in all likelihood for Ubuntu specifically), but that will entail some work I'm not willing to be distracted by just yet. With Linux, I'll have more homework to do before I can distribute it and ask people to expect it to work.

Other problems are finding a server to support MXMLiszt. Given all the software requirements and that I *do not* want to have to rearrange  – for either a Windows or Linux server – all the paths to the various executable I utilize and - for Linux hosting – the fact that I can't control what Linux distro a web hosting company offers, I have only two options:

  1. Use my own laptop as a server. The downside of this is that I can't leave it on 24/7. I'll only be able to offer it from roughly 9-5 EST Mon-Fri since I'll need my computer to rest and/or be available for personal use while I'm home.
  2. Run MXMLiszt from a Virtual Private Server (VPS) – i.e. instead of a typical web hosting plan, I'll rent out a virtual machine running Windows from a hosting provider. This gives me total control of the VM and I don't have to make compromises and/or rearrange folders and paths to executables, etc.

I've decided to go with the 2nd option for now using KickAssVPS. I'll report back how that works out, but I want to close with the economic dilemma all this presents.

It's roughly $35 a month to have a Windows VPS with KickAssVPS. And that's on the low end of VPS pricing. That's not that expensive but when one factors in that for that rate I could finance a brand-new really high end laptop, I have to ask myself "Why not just use my current low-end Dell laptop as a server and use the $35 bucks a month to get a really nice laptop?".

Good question. For now I'll try the VPS, but I have a feeling that my narcissistic need to control everything will lead me back to running a server from home. And I think in the end I just won't be able to justify the cost of renting (VPS) vs. renting to own (financing a new laptop).

If you're asking "Why get an expensive laptop? Why not get a really cheap one or better yet a used headless server?"

Well, my friend, it doesn't get much cheaper than my Dell Vostro. If I buy a low-end laptop, it'll end up being comparable in price and specs to my Dell. It doesn't make much sense to essentially have two of the same thing. As for headless servers, that would be better from the p.o.v. of running a server 24/7 but I'd need a monitor at some point and I don't want to get into buying more peripherals …

… unless someone can tell me how to remotely control a headless server from a laptop without *ever* needing a monitor for the headless.

;)


This blog post is part of a semester-long investigation into digital encoding of symbolic music representation (SMR), its context in libraries, web-based delivery, preservation and metadata, and search and retrieval technologies.

--------------

Related Content:

Written by nitin

March 17th, 2010 at 2:43 pm

LS-598 #2: XQuery problems and solutions

leave a comment

Just a quick morning post today …

The last 10 days or so I've been struggling with some major problems that arose in trying to implement effective XQuer-ies on my web demo.

  1. Dublin Core doesn't allow me to differentiate creator "types", so I was limited to searching across the DC:creator element for all creators, be they Composer, Lyricist, or Arranger. MusicXML does differentiate these types, so essentially Dublin Core was making me "dumb down" some information. I want people to be able to search creator specifically by their role: Composer, Lyricist, or Arranger.
  2. I needed a way to iterate an XQuery over all the MusicXML documents and I needed it to be relatively fast. A demo is a demo, but impatience is impatience and I just can't accept slow query processing.
  3. The XQuery processor I was using didn't support some XQuery functions that would allow a searcher to type in "Bach" and retrieve documents for which the creator was "J.S Bach", "Johann Sebastian Bach", "Bach, J.S", "P.D.Q Bach", etc. This really was limiting the search/query coolness factor and I wasn't at all happy about it.

Here are my solutions (details to follow in a few days or so):

  1. Ditch Dublin Core and switch to MODS, which does allow me to specify the role of a creator. Last week, I made a MusicXML to MODS XSL transformation for descriptive metadata and it's working well.
  2. Steal an idea from Using XQuery on MusicXML Databases for Musicological Analysis so that rather than iterate one query (say for the number of notes in a piece) across multiple MusicXML docs, I just concatenated all the MusicXML documents. The original files are left alone, but a "super" MusicXML file gets created so that one can just query that one file, hence no need for lengthy iteration. I'm not sure how those fellows did it, but I just automated it via PHP using the following format:

 <hyperMXML>

<hypoMXML file="foo1.xml">

1st MusicXML document

</hypoMXML>

<hypoMXML file="foo2.xml">

2nd MusicXML document

</hypoMXML>

</hyperMXML>

  1. Switch XQuery processors! I'll go into the ones that didn't support the function I needed another time, but I will say that BaseX did the trick. Below is the query that searches for creators with "Bach" somewhere in MusicXML's <creator> element. For the deliverable demo, I won't be querying these big MusicXML documents for simple descriptive metadata like Creator, that's what the MODS is for. But this is just an example. The "ftcontains" syntax is what allows for retrieval of values where "Bach" is somewhere within the element, but isn't necessarily equivalent to the entire element value.

for $i in doc("../temp/concat/concatMXML.xml")/hyperMXML/hypoMXML/score-partwise
where $i/identification/creator ftcontains "Bach"
return ($i/work/work-title)


This blog post is part of a semester-long investigation into digital encoding of symbolic music representation (SMR), its context in libraries, web-based delivery, preservation and metadata, and search and retrieval technologies.

--------------

Related Content:

Written by nitin

February 4th, 2010 at 8:29 am

LS-598 #1: intro

leave a comment

This is my final semester at the School of Library and Information Studies at the University of Alabama.

For my final credits, I’ll be researching the digital encoding of symbolic music representation (SMR), i.e. "sheet music", its background, and the benefits it offers over simply thinking of SMR as an image – all within the context of libraries, including avenues of web-based delivery, preservation and metadata, and search and retrieval technologies. My research will be directed by Dr. Steven MacCall.

In addition to a paper addressing these issues, I’m required to deliver what is essentially a "demo" of a MusicXML web-based delivery system that could serve to demonstrate to librarians the possibilities that arise with the usage of XML-encoded musical information.

I’ll be blogging along this semester as part of a modular approach to constructing the paper. Currently, I’m plugging away at the demo which utilizes open-source server-side music applications.

The first idea behind the demo is that one could "drop" MusicXML documents on their server and – via automation – PDF, audio, and preliminary Dublin Core metadata are generated. So far, I’ve got all that covered but I need to polish the output and I really need to comment-up my PHP code as I’m even forgetting at times what I’ve done and why. I’ll be sharing the code as well as the XSL transformations that are used to generate the Dublin Core metadata from the MusicXML documents.

As time allows, I’ll try and add some cool features. For example, this week I implemented libmusicxml so that the user can generate a PDF of a musical score in a different key than the original. I’m guessing this is the same way that the Wikifonia site offers this transposition option. I’ll have to ask them to make sure.

The second idea behind the demo is to implement a search/retrieval mechanism using XQuery. This will prove the biggest challenge as I don’t know XQuery well, but I have some excellent sources on querying MusicXML documents from which I can learn. Implementing XQuery on the site has – for the most part – already been dealt with in terms of scripting. In other words, the hard, hard work is done in terms of the demo, but I’m not quite there yet …

ps: Unfortunately, the server-side software required to run the demo can’t be added to a free server like the one I use for this blog. But while I can’t host the demo, I will at the end of the semester offer it as a download-able package so that one can run it on their personal computer as server.


This blog post is part of a semester-long investigation into digital encoding of symbolic music representation (SMR), its context in libraries, web-based delivery, preservation and metadata, and search and retrieval technologies.

--------------

Related Content:

Written by nitin

January 23rd, 2010 at 4:44 pm

Switch to our mobile site