CD+G Authoring Tool Project
The project was deadA long time ago we found out that a bunch of code in the project wasn't originally GPL as we had been led to believe. The author asked us to remove the code. Since it was going to be a lot of effort on our part to remove the offending code, (and we don't have the time) it was agreed that we would have the project removed from SourceForge and our web site.
Eventually the original author re-released the code as GPL. We've taken the useful parts and created a new DLL using just that code.
IntroductionThe CD+G project was a project proposed by Computall to attempt to try to bring together all the pieces necessary for people to make their own CD+G CDs. We have done a lot of work with CD+G over the last few years and have had a large number of people ask about making their own discs. Up to this point the only software we've seen for this are a few very expensive packages from companies like Philips ($30,000) and MTU ($7,600) so they are not viable for most people. The aim of the project was to create a FREE CD+G authoring tool.
What's involved in making a CD+G disc...In order to create a CD+G CD, you need to have two parts, the music and the graphics. The music is just a standard 44.1KHz, 16-bit, stereo PCM data stream, while the graphics are a string of data "PACKs" which contain information on what to display and how to display it. These data packs are put onto the CD in the RW subcodes which are normally unused bits. This allows the graphics to be 'hidden' from a normal audio CD player, but made available for a CD+G player.
In order to create the PACKs, you need to have the Philips Red Book standard. If you check the link to Philips below you will find that the standard costs around $100US, but you have to have a compact disc license which costs around $5,000US. This is the main reason there has not been a CD+G authoring package freely available before.
What's done/What's known...There is a program available for Win9x/NT that will let you either copy or burn your own new CD+G discs. It is CDRWIN from http://www.goldenhawk.com and it is shareware. The 'freeware' version will work fine for making CD+G discs, except that it is limited to burning at 1x speed. The other thing we now know is the file format needed to use to make the binary files CDRWIN expects. There is now a simple example piece of code in the cdglib that will create these binary files.
There are now a growing number of CDR/CDRW drives available that will burn CD+G discs. The good news is that most of these new drives will do the Reed-Solomon encoding and the data interleaving automatically.
Thanks to a document written by Jim Bumgardner a few years ago, the minimum information needed to create the PACKs is available. It was this document that we used to create our CDGPLAY program. There are a few holes in the documentation which is where some of the routines we are making available come into play.
One person has submitted some VB software code to allow entering in lyrics and loading in BMP files and the start of swipes to match time in the track.
One person has started work on a WinAmp/karaoke plugin. It needs someone who is a WinAmp expert to take it over, clean up the code and then add all the remaining functions that aren't implemented yet.
There is a new function to merge the CDG files with WAV files of audio data, giving image files for use with CDRWIN.
Each PACK has a header which is covered by a Reed Solomon (RS) 4,2 code. The entire pack is covered by an RS 24,20 code. The Bumgardner document does not cover the RS codes, but the 3rd party code we found does handle both encoding and decoding RS codes
Before a PACK is put on the CD, it is run through an INTERLEAVING process which splits the data for that pack across 8 packs to reduce the overall data loss of a PACK when a block of data is lost when reading from the CD. We have completed both the interleaving and de-interleaving routines and are making them available as part of CDG_LIB.
On person has submitted functions to build packs. The lowest level functions are done and can be used with higher level functions to build streams of packs.