Lyric Converter V2!

If you just want to go use it:

But first…

The Backstory…

A few years ago my church used some lyric presentation software called SongShowPlus, and it worked… but we didn’t love it.  It only ran on Windows, it had some UI issues that made it hard to use and add/change songs before services. We wanted to get a Mac and run ProPresenter instead.  Friends in the same industry were telling us how they had switched and how much they loved it.  ProPresenter had a lot going for it, especially in the ease-of-use department and scalability for things we wanted to do in the future.

We were hesitant to make the change because there was no way to move all of our song files over. Neither program had a decent way to import or export song files, and there was certainly no way to convert between formats. A good friend of mine at a different church told me they were in the same position; they wanted to move from SongShowPlus to ProPresenter but they were holding off due to the inability to convert their songs. Honestly  I’m still surprised that to this day neither program provides a standard import/export for other file types.

The day finally came when our Windows machine died. We either had to buy a new one, or just go ahead and get a Mac with ProPresenter. We chose the latter option and manually converted the few songs we needed each week, or just downloaded them from a service called SongSelect. In the end this process wasn’t the best, but we got through it.  However, everything would have been much easier and less intimidating if there was just a simple way to import and export songs.

Version 1

This is the point when I decided to take a crack at it. I put our entire SongShowPlus library on my thumb drive and opened up the files in a text editor to see if it would be possible to get the text out.  The SongShowPlus file format is crazy, it appears to be a binary file with lots and lots of invisible control characters, but there is plain readable lyrics in there as well. Overall it seemed possible. Ok, so what about ProPresenter? Luckily the ProPresenter file format is a nicely formatted XML data, very easy to read and write from.  No problem!

At the time I was pretty comfortable programming in PHP, and I knew it’s file read/write capabilities so I decided to start there. I wrote a few complicated regular expressions to get the raw lyrics into an array, and it pretty much worked for most song files (with some tweaking)! This process took quite a while to get right because understanding the SongSHowPlus file format was fairly difficult. After that it wasn’t too much work to get it to generate the proper XML needed for a ProPresenter file. All that needed to be made now was a web UI for people to upload and download the songs! I put something together and I was pretty happy with it, and a few people used it. Yay! I even found out that the support staff at Renewed Vision (the company that makes ProPresenter) was actually recommending my site to customers making the switch, and that was pretty exciting news!

Oh and the name, LyricConverter… it just seemed obvious. (Also the domain was available.)


While what I wrote worked, it was a bit of a pain to use. If someone tried to upload too many songs at once the website would choke due to PHP’s upload file-size limit. Sure I could increase that, but someone could always upload more.  To solve this I had to impose restrictions of no more than 30 files at a time. This solved the problem, but if you had several hundred files to convert you were going to be here all day.

Another big problem was downloading the converted files. Each file was converted individually and stored on my server, but that meant after conversion you had to click on each file to download it.  So again, if you had several hundred files you were going to be here all day. That combined with the upload limit of 30 made this quite a pain to use. My eventual goal was to be able to have it produce a single .zip file with all the converted files in it, but that seemed a daunting task for PHP at the time.

One more problem I had, that was compounded by the above problems, was the amount of disk space and bandwidth used up on my server each month! I wrote a cron job that should have run once a day and deleted any files left on the server that were more than 12 hours old, but I found out that this did not run reliably on schedule and I often had to trigger it manually after I would get a “disk space exceeded” email form my hosting company. I also kept having to increase my monthly bandwidth because I was getting “bandwidth limit exceeded” emails. It was not uncommon for the site to blow through 1 or 2 Gigs of bandwidth in a month… and that’s for text files! (Although, it was a few hundred of them all transferred up once and then again back down)

Version 2

In my day job I’m a front-end web developer/designer, so I try to keep up with what the current browser technology supports and I’m quite honestly stunned at how many amazing things can be done all in the browser now.  Once I learned that there was a way to generate files in-browser with JavaScript to save to your desktop, I began to think about how re-writing LyricConverter could be a 100% in-browser process would solve all of the current problems I had.

Reading files dragged onto the browser was no problem, I was already doing that in the previous version.  Now I just had to take some of the regular expressions I had written in PHP and re-use or find a better way to achieve the same outcome in JavaScript. After some trial and error, I finally got this working how I wanted.  It will read SongShowPlus files and ProPresenter files, the output from either of those can be made to display in-browser as slides, convert to plain text files, or convert to ProPresenter files. Yes, you can convert ProPresenter files to ProPresenter files. Why? Well, why not. I doubt this is needed, but this does prove how flexible it is.

Since this is all in-browser there are no more “upload” limits, and there are no bandwidth restrictions. The only bandwidth used is just initially serving the page up to the browser. In fact since it’s all JavaScript now, it’s just being hosted on GitHub for free and none of my server resources are even needed any more.

Since files could be auto-downloaded (thanks to a library called FileSaver.js), that was great and it solved a huge problem of having to click individual links. A user could drag 1000 files into the browser, and then immediately click a button to download 1000 converted files… that is if you want 1000 files on your desktop… hmmm, that’s not appealing.  After some quick searching around I was amazed to find that someone has written a JavaScript library called jsZip that can actually generate .zip files with JavaScript! This was my ultimate goal, and it was to each to achieve with this library. Now when you convert songs you have the option to download all N number of files individually, or just download a .zip file containing them all.

I’m also extremely happy with how the code is structured now. Previously it was a huge mess and half of that was due to my unfamiliarity with PHP. Now it’s all written in JavaScript and it’s very modular. It should be easy to add on new file types that it could read from or output to.  It’s also all on GitHub, so anyone can feel free to improve the existing code or add new functionality like new input/output formats!

Use It & Improve It!

Like I said, all the code is on GitHub and I would just absolutely love it if people would contribute to this project to make it better.  Right now it works, but it certainly could be made better.  Occasionally I do get some strange conversion errors or random incorrect characters that slip through into the converted files.  I’d love to squash these bugs, but they aren’t deal-breakers at the moment.

So, please use it, let me know how it could be made better, and please contribute if you can.

26 replies

  1. Chris Rouse says:

    MediaShout and ProPresenter both export to plain text files. No other program in this area does. Since we have a lot of users switching from MediaShout, that’s been quite a good feature for them to have. It’s also really easy to import and parse the text files. There are a lot of reasons that no one converts between a competitors format that I know of (other than PowerPoint). One being the complexity of figuring out their file formats, as you’ve discovered.

    Now, if you could figure out how to convert EasyWorship, and the myriad other proprietary file formats people ask us about, you’d have the single greatest third-party tool available for our customers! We aren’t getting many people switching from SongShowPlus anymore; I think most already have.

    • Chris Barr says:

      Very true, and I did not realize that both of these programs support exporting plain text formats now. That’s good to know. I would love for this to also be able to convert to/from MediaShout or Easy Worship files, I just don’t have any to test with. Hopefully now that this is all on GitHub people can contribute things like this or at least get it started in that direction.

      • Chris Rouse says:

        Both have exported to text files for a long time. Grab my email off my comment and shoot me a message. I’ll see if I can get you some other sample files to work with.

  2. Pete says:

    Hi, I’m trying to convert song show plus files and all I get is errors. Any suggestions?

    • Chris Barr says:

      Not all song files will work perfectly with it, but it’s hard to tell what’s going wrong without any details. I’ll take a look at the files if you don’t mind sending them to me.

  3. Emmanuel Suarez says:

    Hi Chris, great job on your converter. Any plans to add the ability to convert chordpro files to ProPresenter? I have about 600 files that I’m trying to convert to propresenter 5. A converter similar to the one you have would be great.

    • Chris Barr says:

      I have not heard of this program before, but I am looking for other file formats to convert between. I’m not making and promises, but if you can send me your files I will take a look and see if anything can be done with them.

      • Emmanuel Suarez says:

        ChordPro is a simple text based file format for showing chords for a song. Its used in several programs such as Songsheet Generator and in an app called OnSong which I use on my IPad. Here’s an example using Jared Anderson’s song, Amazed:

        {title: Amazed}
        {artist: Jared Anderson}
        {key: D}
        {comment: Words and Music by Jared Anderson}

        You [D/F#]dance [G]over [Dmaj9]me
        While [D/F#]I am un[G]awa[Dmaj9]re
        You si[D/F#]ng all [G]aro[Dmaj9]und
        But I [D/F#]never h[G]ear[Dmaj9] the sound

        Lord, I’m[G] amazed by [Asus]you
        Lord, I’m[D/F#] amazed by y[G]ou
        Lord, I’m[Em7] amazed by y[Asus]ou
        How you love [D]me

        How w[G]ide[Asus]
        How d[D/F#]eep[G]
        How g[Em7]reat[Asus]
        Is your love for [D]me

      • Emmanuel Suarez says:

        By the way, how’s the best way to send you the files? I can package them in a zip file. But not sure if there’s a way to attach a file to a comment I post.

  4. Lawrence says:

    Hi Chris
    I’m looking at the possibility of switching from SongPro (Creation Software) to ProPresenter5 and like others, am put off by the song transfer problems for potentially hundreds of songs.
    I’d be eternally grateful if you were to have a go at this format? It doesn’t look too difficult, uses #[something] as control characters for title, v1, chorus, copyright info etc.
    Could I send you a sample file to look at and see what you think?

    • Chris Barr says:

      Hi Lawrence,

      I would love for LyricConverter to support as many file formats as possible, the only thing preventing that right now is my lack of access to sample files and my lack of time to work on it. I’ll email you, please reply with as many SongPro files attached as you can so that I have a large sample set to work with.

      I’m not making any guarantees though, especially about time, so right now please don’t rely on me for this to be completed. I’d love to support more formats, but I’m not sure when I’ll have the time to do so.

  5. Alvaro says:

    I am trying to convert three files to lyrics and i cannot do it, what can I do?

  6. David says:

    Good afternoon,
    Today I bought ProPresenter 5 and I’m trying to import files from SongShow Plus (september 2009 edition).

    Songs are in french, I don’t know if it could cause problems.

    The files created from the web sites are on this format: “library name..pro4” (there is really 2 dots before the pro4 extension).

    Every time I try to import a converted file it give’s me the error message: There was an error opening the file: “filename”. This file is damaged. It was moved to the trash to avoid further problems.

    Am I doing something wrong or it’s simply not working with my current software versions.

    • Chris Barr says:

      Hi David, I’m really not totally sure what the issue might be. It could be that the songs are in french and there are accented characters I am not accounting for, it also could deb the extra dots in the filenames. It’s hard to tell. You aren’t doing anything wrong as far as I can tell, it’s just that LyricConverter isn’t perfect and certainly has room for improvement. It’s designed to work with ProPresenter 4, and it needs to be updated to work with version 5. However, there is a way to convert song files form version 4 to version 5 – this would deb the same process as if you were upgrading and needed to update your song library.

      Quite honestly right now I am extremely busy and don’t have the time to look into this issue any further, but I would suggest testing out a few things like removing extra dots from filenames, trying out sound that don’t have accented characters, and looking into how to convert song files from v4 to v5. Sorry I can’t be of any more help right now!

  7. VideoPsalm has a nice converter and so does Easyworship

  8. I meant Easysearch

  9. Pingback:Set Goals, Not Resolutions | Chris Barr

  10. Van says:

    Any chance of a text-to-MediaShout converter? One of our worship files has 600 song lyrics in txt format. I can manually edit each one before importing into MS but this is time consuming!

    • Chris Barr says:

      Most likely not since MediaShout files are binary, which makes them extremely hard to read/write from a website like LyricConverter. Sorry! I did look into this at one point, but their file format is near impossible to read.

      • joshef disilva says:

        sorry sir …i copy your status ….

      • dibert says:

        MediaShout 5 exports to TXT files. Any change of supporting there export. Thanks!

        Here’s an example…

        Title: Amazing Grace
        Author: John Newton, John Rees
        Copyright: Public Domain
        CCLI: 22025
        Song ID: MS-0012-1
        Groups: Public Domain
        PlayOrder: Verse1, Verse2, Verse3, Verse4

        Verse 1:
        Amazing grace! how sweet the sound!
        That saved a wretch like me!
        I once was lost, but now am found;
        Was blind, but now I see.

        Verse 2:
        ‘Twas grace that taught my heart to fear,
        And grace my fears relieved.
        How precious did that grace appear,
        The hour I first believed.

        Verse 3:
        Thro’ many dangers, toils and snares
        I have already come.
        ‘Tis grace that brought me safe thus far,
        And grace will lead me home.

        Verse 4:
        When we’ve been there ten thousand years,
        Bright shining as the sun,
        We’ve no less days to sing God’s praise,
        Than when we first begun.

        • Chris Barr says:

          I didn’t realize they supported TXT export. If it’s in a standard format like ProPresenter can read, then you’re all set. If not, then LyricConverter could most likely support import/export of these MediaShout text files. I currently don’t have a way to access MediaShort or get any of these text files, so if you have some for me I could see what I can do.

          LyricConverter is open source as well, so if you have any programming knowledge feel free to open it up and add support for this new file format yourself.

  11. joshef disilva says:

    Most likely not since MediaShout files are binary, which makes them extremely hard to read/write from a website like LyricConverter. Sorry! I did look into this at one point, but their file format is near impossible to read.

  12. Paul says:

    Good work! I just wanted to let you know that I just released a Pro6 tutorial that lets people know about your work at as a resource for people to convert lyrics (and also an EasyWorship converter, too.):
    Thought you might find it interesting, (despite me making a mistake and listing Mediashout, not Easyworship, at the beginning). 😉

Leave a Reply