History 0

From kJams Wiki
Jump to: navigation, search

Next Versions

Click Here

Version 1.0d10: September 28, 2004

  • Fixed some bugs with crashing, added more ASSERTs
  • You can now delete songs from the Library. You'll be asked if you want to move them to the trash. (only if they're in your kJams Library Folder
  • Now removing event timers and handlers before disposing (during quit) so you don't crash during quit
  • Yet again reworked the iterating routines, now they're slimmer, slicker and quicker.
  • You can delete an empty playlist without the "Are you sure?" dialog.
  • When parsing song file names, underscores are converted to spaces
  • When choosing the name format during Import, you now have a "more choices" button that gives you a 2nd screen of potential interpretations.
  • Fixed yet more crashy bugs in the browser window. I hope I'm gettin' the ones you're all reporting.
  • Added the little search text field in the top right, like iTunes. not working yet, just looks good.
  • Pitch bending now correctly sets the pitch when you go up or down multiple times, but don't go changing it a lot, or you'll crash, it's ont completely debugged
  • Search field now actually filters the view!! Yeah!
  • Cleaned up the window a bit
  • Scrolly wheel now works, as well as tab key, arrow keys, page up, page down etc.

Version 1.0d9: September 24, 2004

  • Cursor is set to arrow cursor each time thru event loop, so it doesn't get stuck on whatever strange cursor.
  • Debug version now has sample rate conversion in the debug menu, so i can downsample to see if that allows me to do pitch bending in realtime. (Not actually hooked up yet)
  • Started looking into zlib, so I can deal with zipped files. This is a prerequisite to reading zipped MP3+G directories.
  • No longer freeing the artist/album/track name references after importing from CD, since they get free'd upon deleting the song, and they are needed in between. This may have been causing a crash.
  • Saturday: Started writing the "Add To Library" code. The design will let you choose 1 or more files/folders in an open dialog. It will search those items (folders recursively) for .mp3, .cdg and .zip files and guess what? add them to your library!
  • Fixed a bug where it was saving mounted CD playlists in your library.xml file (that's a no-no, what if it's not mounted next time you start?)
  • Fixed a bug when initializing playlists, it could potentially loose it's sort order, now it doesn't.
  • Fixed another bug when ejecting a disc that would crash (trying to update the playlist that was already deleted)
  • When you stick a CD in which you have already ripped, you get the song meta info back.
  • Fixed a nasty bug that would wipe your library.xml file out when you import or open a file. if you then crash without quitting gracefully, you've lost your library. Trash your library.xml file to recover, but sorry, you just lost your playlists.
  • Fixed a bug with zooming to very small monitors
  • Yeah! We can now do "Open / Add to library..." it works! With Zip files!!!
  • Baby! Now we can play zipped MP3+G files!! Whohooo! Another victory for open source!
  • There are some files in .zip archives that are not compressed with "deflate". In these degenerate cases, I have "Stuffit Expander" deal with it, since it is capable. Too bad zlib can't do these :( But at least we have a fallback strategy. You need expander installed on your machine for this, it should be, it came with the system.
  • Fixed an icon refcount bug where, if you delete a playlist, your playlist icons may disappear. You might crash too.
  • Fixed a selection bug where you could possibly select two sources by typing their name
  • Added a "What's New..." in the help menu that leads to this page
  • Added ability to swap meta info in the Edit menu. eg: if you import a buncha stuff, but you got the artist and album swapped, you can select all the items that are wrong and choose "Edit->Swap Artist <-> Album" and it will swap'em.

Version 1.0d8: September 17, 2004

  • Tuesday night: I now have my own audio player, that is, I'm no longer asking iTunes to play the audio. (Presently we still *store* the audio with iTunes, so you still get that delay before playing) It can handle any audio format that QuickTime deals with, but we're really mostly concerned here with MP3, since that's the standard for CDGs. Presently it requires the entire file to fit in memory, but i'll fix that.
  • Wednesday night: Kay now I've implemented the sound bender. It lets me adjust the pitch and tempo independently. It could even do beat matching. I haven't debugged it yet, right now it seems to not affect the audio at all, no matter what the settings. Hmmmm.
  • Monday: After much wrangling and head scratching, i've got it figger'd. I can pitch bend now, but it's too slow to do in realtime. Dam. I'm on a 1 GHz machine, trying to process 44KHz \ 32bit float \ Stereo. I'll see if it'll work with 44k \ 16 bit integer \ Stereo, and if that fails, 22k \ 16 bit int \ Stereo. If THAT fails, well, that would suck. Here goes.
  • Well there must be a bug in the integer version, cuz it just don't work at all.
  • Wednesday night: Well gard darnit FINE!! Pitch bending goes on the back burner too. Be that way. Obviously there are bugs in the integer version of the code, or compiler dependancy bugs, or non-obvious you-should-be-doing-this-but-you're-not bugs.
  • Back to work: I'm now using the OS PList utilities to write a for real actual XML file and now I can read it too!! If you find your library strange, first quit kJams, then throw out the "kJams Music Library.xml" file and start again, that should clear things right up! What this means is: I'm now ready to enable playlists, singers, rotation, and best of all, adding your pre-existing library of MP3+Gs without you having to do that crazy rigamorole.
  • Added "New Singer" to file menu, "Rotation" to windows menu. (Eventually there'll be a new, separate window that can show the current rotation, with pictures and a large font, that's so you can stick it on it's own monitor)
  • In the help menu, added "Why won't my music play?" , and enabled "Send Feedback"
  • Actual news on the burning front: word from Apple is, they will *try* to offer support for burning around the time of Tiger (by July 2005). They are aware of the issue and are hoping to have something soon. The engineer I spoke with said I could possibly begin testing with the next seed of Tiger, in about a month or so (that'll be mid October 2004), so I'll have real news for you then.
  • Monday: Wahooo! We can now create a new untitled playlist and drag and drop songs into it! (err, you can't reorder them, or delete them, or rename the playlist, um, yet. Or save it. But I'm working on that.)
  • Wednesday: Okay, you can now rename or a playlist, and reorder or delete playlist items. Still not saving yet.
  • Made the font a tad smaller, to match iTunes. Don't worry, one day it'll have the alternating stripes, and it will draw nicer when selected.
  • Implemented a 3 button dialog for things like "Close Window: Save, Don't Save, Cancel" or somesuch. Right now you'll only see the 2 button variant "Delete Playlist?: Delete, Cancel"
  • Converted all allert and assert dialogs to use the new moveable modal one used by the 3 button dialog
  • Version Checker is now built in!! It will attempt to check your version against the one on the server and notify you if there's a new version available. Does this in the background on a preemptive thread, so it won't hang the user interface. It'll check once a day if you're the type that just leaves kJams running 24/7. You can do this manually thru the Help menu.
  • Yeeeehaaa! I can now use the XML database file to store AND retrieve info. What this means: Your playlists will SAVE! When you open kJams next time, they're there!! Also!! Each time you play a song where the audio was ripped with *i*Tunes, k will ask i for the song file, and remember where it is! Next time you ask for that song, we don't have to launch iTunes. If you play each song in your kJams library, then you can quit iTunes and it won't launch ever again! Ready for a new release!! It also means, you can no longer use the finder to reorganize your kJams folder. If you need to add existing CDGs to kJams, or rename things or move things around in the finder, you'll have to trash the "kJams Music Library.xml" file and you'll loose your playlists.

Version 1.0d7: August 31, 2004

  • Thanks to my tireless tester Roger, I was able to remotely diagnose a crashing problem that I could not reproduce locally!! Symptom was, program would launch, just barely show the browser window, and unexpectedly quit.
  • Actually I've fixed a total of 3 crashers, and updated some old hacky code to use the newest Carbon accessor APIs (instead of peeking directly)
  • iTunes now stops playing at the end of the song, and kJams stops looping the graphics
  • The skip forward and backward buttons now actually work, to go to the next or previous song
  • Actually, now that I've done that, now when you get to the end of a song it plays the next one (instead of just stopping)
  • I'll probably make another release soon, but just wanted to say, right now i'm working on decoding MP3 into a raw audio stream. That way I can: 1) change the pitch and/or tempo and 2) mix it with incoming audio from your mic and 3) pipe it to your speakers while 4) keeping perfect sync with the graphics. (right now, iTunes plays the music, which can get out of sync with the graphics)
  • Sunday: Added key equivs for pitch bending, "-" is down, "=" is up, and "0" is normalize.
  • Added text overlays to the graphics window, so now you see things like "Play", "Pause", changing pitch etc. (Pitch bending is NOT actually hooked up, you can only see the little graphic when you adjust it)
  • Now, when you press the "previous" or "skip back" button, it will go to the previous song only if you press it within 3 seconds of the song start, otherwise it rewinds the current song.
  • Fixed a bug (reported by Faithful Tester Bradley) with built in/vs 3rd party drives: Apple drives, for some hysterical raison, return Binary numbers (correctly) in the Table of Contents (TOC) of a CD, but with 3rd party drives, eg my external Plextor, the apple driver returns BCD numbers (incorrectly). I now detect this and correct it on the fly. Symptom was, you could not import a track > 9, or when you import a track it imported the wrong segment of the disc (Bizzare track start times).
  • Now, when you click next or previous, or when you let kJams play multiple songs, we stop the graphics pump between tracks, until the next song starts playing, then we start it again, to prevent the music and graphics from getting out of sync
  • kJams now includes the free font "Musical Symbols", in order to be able to print the "Sharp" and "Flat" symbols (for later when I hook up pitch bending)
  • The Zoom function will now zoom to the monitor the window was on, and zoom fully, not just 2x

Version 1.0d6: August 26, 2004

Version 1.0d5: August 25, 2004

  • Friday: More work on the SongDataBase. It now has a notion of all songs (in a big fat std::map), PlayLists which consist of references into the song map (and thier order), columns (which and order), selection, currently playing, play or not (checkbox), and singer per song), sources (list of: 1 library, N CD-ROMs and N PlayLists). whew. Too bad you can't see any of this yet.
  • Sunday: We now have our own domain!!
  • Monday: Okay! I got the SDB to spit out an XML file with data in it. Not a complete xml file, but it's a start. Has all the salient info about all the songs eg: DB ID, name, track number, artist, album, length, path etc. Next is to get it to save playlists, which is the point here. Then i'll have to write a parser so I can read it in when you start kJams. If the xml file is missing (which it is right now), it scans your kJams Music Folder to build the DB.
  • Wednesday: Okay! Now it's a real, actual, complete XML file. So I know the SDB is working. Next up is to use it as the back end to the Browser Window yippee!
  • Thursday: If you've been ripping cdg and discover they're very noisy (lots of video artefacts) it's because the Apple driver i'm using does NOT invoke the reed-solomon error correction on the subcodes. It certainly wasn't removing the 8-x interleaving. I have a contact at apple who is "interested" in this, and I have high hopes, he seems like a friendly guy. In any case I'm attempting to implement this in software, just in case it can't be turned on in the driver.
  • Saturday: And here's the real kicker: I implemented the reed-solomon codec, and can successfully encode/decode RS(4, 2) and RS(24, 20) on 6 bit symbols, and yes I have the correct irreducible polynomial. I can *verify* that the algorythm works. But when I run the cdg files thru it, it makes them WORSE. DAM!
  • With error correction (reluctantly) on the back burner, back to main development: We've now got the browser window able to show you your library! You can sort by or resize any column, and select items.
  • You can now click a song in your library and press "play", you no longer must "Open" the song first! To play another song, select it, press "Stop", then "Play" again.
  • Now, when you stick a CD in, it mounts, and you see it's song list. When you eject it, it dismounts. (That was a lot more work than you realize)
  • Tuesday: Fixed a bug that prevented you from importing any track > 9.
  • Now you can import songs off your the CD you see right in the kJams browser and it goes into your library. YAAAY! No more "Open/Import" dialogs just to rip or play a song!

Version 1.0d4: August 13, 2004

  • Saturday: Really trying to fix ripping. Made a teeny bit of headway, we now know the bytes are coming in in the wrong order, must figure out correct order and reassemble them. If we can't find doc, we'll reverse engineer it.
  • Now using the CD Table of Contents to find the start of each track. I was just guessing before, based on the file sizes as reported by the file manager. Of course it was way off. I'm still guessing on the length, but that is still much more reliable than the track start. I do have enough info now to get the precise track length from the TOC, i'll get to it later.
  • Ripped cdg files now have a track number at the beginning, to better match what iTunes does, and so they list in the correct order when you view them in the finder.
  • Added a percent sign after the progress feedback number shown during ripping
  • Moved the version history off the main page to a sub-page
  • Sunday: Got to it later: I am now reading the actual track length from the track info data field on the CD, no longer "faking it" by asking the file manager how many "bytes" the "file" has
  • Wrote a SubCode descrambler to re-assemble the ripped data in the correct order, tho for now it only goes in linear "original" order, since I don't yet know the correct order. When I do, i'll plug it in and it should "just work".
  • Fixed a bad bug in the importer loop, if you selected many files to import, you would only get the last one, and I would leak lots of memory.
  • Tuesday: Started writing more of the browser window, now I reaize it requires that I have a database back end (model) for it to refer to (you can't store real data in the DataBrowser controls, the objects in it are just references to the model)
  • Fixed 32x32 document icon mask
  • Fixed off-by-one track error in file ripping
  • Wrote my CMusicDataBase object. This is the necessary back end to support the browser window.
  • Thursday: Now using my custom song DB for song importer wow!
  • fixed some crashing bugs
  • Hey! Got applescript to get me the artist info from iTunes. Yuck it is slow. Will launch iTunes if necessary. Songs are now stored in ~/Music/kJams/kJams Music/[artist name]/[album name]/## [song name].cdg.
  • Much more robust error reporting
  • You can import many tracks at once
  • Now you can open your console to get some debug info
  • Started the almost monumental task of converting the entire app to use FSRefs and CFStrings (unicode). This will allow for long file names, which is quite necessary when you don't want your song to be called "02 I want to dance with #66.cdg", cuz when we try to look that up to get artist info, there ain't no song with that name.
  • Whew! The whole app uses FSRefs and CFStrings now, neat! No more truncated song and album names, make 'em as long as you want!
  • Friday: HAH! Successfully reverse engineered the subcode scrambling, so I can now really actually rip cdg files!! YAAY!
  • The progress indicator during ripping is more graphicalized

Version 1.0d3: August 6, 2004

  • Saturday night: Started to make the browser window. This is the window that looks like iTunes, with sources on the left (containing your local library, any mounted CDs and your playlists). I made the list controls and the divider. It's ugly and doesn't function, but neat, it's starting to look like the real thing.
  • Sunday: browser window hooked into live resizing events, the list views now reisize with the window, metal background erases properly. Yes I'm sitting around while the movers do the work.
  • added a "disk mounted" carbon event that will fire when you insert a CD (so it's icon shows up).
  • As I was adding the data browser controls, it occured to me this code is very crusty. So I went ahead and made it all lovely C++ objects. Now all windows and thier methods are objects with wonderful subclassable dispatching. Ahhhh. No more global variables!
  • Moving now.
  • Boy, getting the "databrowser" thingie to work is a learning curve. Starting from scratch, there's a lot involved.
  • Hooked up the 2 items in the Windows menu that will be obvious upon inspection
  • Monday: unpacking now (yikes, we have WAAAY too much stuff!)
  • Downloaded some sample code for making a DataBrowser. JEEEEZ this is complicated. But I trust it will be worth it in the end cuz I know it'll "just work" and handle all the hard stuff for me.
  • Tuesday: Got my Plextor from the nice people at MTU, (for details on the drive itself, click here), I got the IDE "internal" drive and a wiebetech firewire dock, plugged it all in and guess what? It WORKS!! Using the subchannel reading code from apple, I CAN SEE SUBCHANNELS!! WOOHOO! But I must keep unpacking.
  • Stayed up like half the night and wrote a CDG ripper. Now you can do file->Import and you get a file selection dialog, you can pick an AIFF file off a CD and it'll RIP that file into ~/Music/kJams/kJams Music/[album name]/[song name].cdg. Too bad it spits out garbage at the moment. Eventually it will be sorted by artist not album. (once I get iTunes integration going)
  • Wednesday: More unpacking, got my TV and network completely set up. Had a site outage for several hours today whilst I moved my server from my old house to the new one.
  • Still poking at that data I'm ripping, trying to massage it into the proper format.
  • Shoot! I've tried deinterleaving, i've tried raw, i've tried short and long byte swapping. All I get is garbage! Time for bed.
  • CDG files now have their own icon (document icon, like iTunes mp3 files).
  • Fixed so there's no pause on startup, and icon in dock makes only one bounce.
  • Still doesn't rip CDG files correctly, but i'm going to release it anyway, i've done a lot of work on this version, so here you go!

Version 1.0d2: July 30, 2004

  • Tuesday: The "Stop" button will now rewind, so if you then press play, it starts over
  • the scan back/forward buttons are hooked up, but eeeewww, gross. They don't really know they need to erase the screen, so your screen will get very schmutzy if you use them
  • Now using real carbon idle timer for graphics processing, so you have much finer grain in the timing slider (the volume slider is the timing slider for now)
  • Fixed buffer underrun when reading .cdg files. If you read past the end, the whole end was skipped. Now, the part that DID get read is returned and piped to the screen.
  • Wednesday: Hooked up "space bar" to play / pause
  • Enabled the "pitch up", "pitch down" and "original pitch" menu items. No audio yet, but it does adjust the timing. If you pitch up or down, the timing is wrong, i'm NOT accurately stepping the speed by the delta of a single note pitch bend.
  • Figured out the accurate timing of "original pitch", so we're no longer "winging it". We must play exactly 75 blocks per second. A block holds 4 subcode records, in case you care. I'm currently using a carbon event timer to cause the graphics engine to idle (75/4) times per second, and each time thru handling 4 blocks. Neat in that the screen updates in the background and while the mouse is in the menu bar too. It works out pretty well except for the part about when the CPU gets real busy, like when you drag the volume slider
  • This website now has a favicon.
  • Duuuuude! I got the graphics engine running on a drift-free interrupt using the Time manager. Now it's guaranteed to stay playing at the correct speed regardless of CPU load or whatever the user does! An added benefit is, the engine can go MUCH faster now.
  • Thursday: I got some sample code from apple on how to read subchannel data. Now I'm just waiting for my Plextor drive to arrive monday!! wohoo!
  • Got info on how to move my project from CFM to Mach-O (so I can use that code that reads subchannel info), so I'm just cruisin' along here yeah!
  • Converted kJams from CFM to a Mach-O packaged app. What does this mean to you? Nothing, except that now the app is now 380k instead of 236k in size. But now I have access to the latest OS X frameworks.
  • Incorporated the subchannel reading code from apple. Now if you go File->Import, it'll spit out (in the console) some info. If your drive does not support CD+G, you will be informed of that. You must have a disc in the drive for it to get info. At the moment, it goes thru all mounted CDs so if you have more than one drive you'll see them all. Eventually i'll let you pick.
  • Packed up my whole home office into little boxes, we're moving on sunday to our NEW HOUSE!
  • Added keywords to this website, and now Jim's site links to mine.
  • Corrected the copyright info in the get info dialog

Version 1.0d1: July 27, 2004

  • Week of July 20th: downloaded original source code from jbum, start perusing, got Jim to send me some C versions of the assembly code
  • Sunday: started to compile. carbonized the entire app, got it running. re-wrote the "object" window handler to NOT use same space as window record. commented out all device calls to CDRom. Actually got the splash screen showing with it's lovely color cycling
  • Monday: made a new splash screen.
  • Spent an hour and a half scouring the internet for a free sample CDG file I could use to test the app. Finally found this and this, and the referring page is here.
  • Tuesday: wrote some brand new code to handle reading in .cdg files, and actually got it working!! It will now play the graphics files. Note the timing is just "winging it", it's NOT yet based on the original timing of the song.
  • You ain't gonna hear no music dude, eventually I'll apple-evently instruct iTunes to hand me the music file, so I can play it. I'll need to play the music myself so I can adjust the pitch. Meanwhile kJams will also handle reading from the sound-in port and playing it thru, mixing it with the music. I'll add a nice "chorus" or lite echo effect to your voice!
  • You can adjust the timing by using the volume slider, since it's not doing anything else right now. Drag left to go faster, right to go slower.
  • Created nice OSX icon, and this web site
  • Now it it will always loop your file (for testing)
  • The user interface is the same as the old "CD+G Player". Eventually it will look just like iTunes
  • Laid out the menu bar to be what I think it will eventually be (most items don't work)