History 4
Version 1.0d41: Not released yet
- completely re-wrote the spooler, hopefully for the last time. You're wondering, what's the spooler for?
- playing direct from disc
- perfectly sample-accurate video sync with *any* kind of audio (even Variable Bit Rate) while adjusting the playhead
- ripping in the background (so as not to slow your GUI)
- encoding in the background (so as not to slow your ripping)
- zipping in the background (so as not to slow your encoding)
- playing *any* kind of QuickTime compatible file(!)
- ability to cue a song to the first non-silent sample, so un-pausing means instant-on
- ability to cue two songs for cross fade
- of course, none of this is implemented yet, I have yet to debug and optimize the spooler itself, THEN i have to write each feature that depends on it. Actually, playing direct from disc *is* hooked up to it, but if you try it, you'll reveal all the bugs and non-optimizations (read: skips and pops) that are still present.
- there's a new freedb pref panel where you can specify your email address and the server you want to use
- HAHA! Fixed the incompatability with multi-channel output devices, eg: firewire and soundflower-16. (tested with an Edirol FireWire FA-101)
- Updated the Help menu to be aware of the new web site
- nobody reported that the "freedb get" function was turned off?!? now it works again.
- not to mention that if it failed it would CRASH! fixed.
- You can now access a *local* freedb. that means, you can still get CD info even if you're not online. See the documentation.
- shut off play direct from disc, it's not done yet, don't want it accidentally triggered.
- r1
- in the freedb pref pane, now using a real, OS-supplied help button, not a picture of one. (so if they ever update the theme, it'll "just work")
- more debug work on Spooler
- the FreeDB thing was i think never checking the local database, now it is
- renamed the "Graphics" window to the "Video" window
- lots more work on the Spooler
- There's a new window called "Tasks", that has progress bars for whatever is going on. Like the "Activity Viewer" in Apple's Mail.app
- fixed a bug where you'd crash if you tried to get info on a song with a blank title or artist or somesuch
- started working on background ripping, encoding and zipping (those are 3 separate "spools")
- started working on QuickTime spool (yes! to play any quicktime compatible file, and eventually output to QuickTime too (eg: to kPod))
- FINISHED the spooler!! okay, now I can start building the things that rely on it. I've already done a preliminary "play direct from disc" function, so give that a try if you want. WARNING: NOT ready for prime time, use at your own risk, don't use it during a show! But it works! (mostly) Wow! (note: not perfectly sync'd with video) and you can see some of the spools that run to make it go! (yes, there are others involved that are hidden)
- r3
- fixed a bug that would crash when you rip (Yikes!)
- fixed a bug that would crash when you import (Double Yikes!!)
- the task window's progress bars look all nice now, and have an indeterminate state when there's nothing in there
- d40r4
- fixed crash on startup if you had the Video window in full screen mode
- the QuickTime input spool is done. This means you'll be able to play audio from any QuickTime supported file format. Not hooked up yet.
- sped up the ripping spool by allowing it to read 16 sectors at a time (went from 38 sec to 32 sec to rip a 4:33 song on my 1GHz PBG4 on my 52x drive) (i'm not talking about encoding, just ripping)
- the browser window now appears activated (on startup, the controls drew like they were not active)
- when playing from disc, the area you can scrub is now shown in the playhead progress bar, like when quicktime loads a movie in the background even after it's started playing
- doing some serious plumbing on how the audio and video gets around under the hood. re-wiring *everything* to use the spooler.
- The LCD panel is now updated 2x per second, on a timer, not in response to sectors going by
- the Video stream is now always handled with a spooler
- you can now "scrub" the playhead when playing direct off a CD. This will always be sample accurate, ie: the graphics will always line up perfectly to the audio when scrubbing. (soon everything will go thru this code, so even VBR MP3's will be sample accurate). Currently, the graphics and the audio go by their own individual clocks. Eventually they'll run from the same clock so they'll be locked together.
- Turned off the ability to play direct from disc, too many bugs, not ready yet.
- Fixed a "crash after ripping" bug (thanks: Philip Gruber)
- Fixed a crash when writing a NULL CFString to an XML file (eg: export playlist)
- d40r5
- Oh I just couldn't wait!! Now the Pro version has QuickTime export. Animation Compressor only. No Sound. But there you go, CDG->QuickTime. This is the start of the kPod revolution!
- Okay, now exports sound too. Uncompressed. So your files are around 80MB. But you can open it in QT Player and export them for iPod, then use iTunes to copy them in to your iPod. Hahah! (Eventually it'll all be automated from within kJams)
- The Video window and the Tasks window are now of "Utility Window" type, ie: they have small title bars. But they aren't *really* utility windows (that float above everything else), they're actually document windows, so you can layer them the way you want.
- When exporting QuickTime, if you do NOT want the movie padded with a black frame to make it 320 x 240, then edit your prefs file in a text editor and search for "Pad QuickTime Export to 320 x 240" and change it to "false". The default setting means you can just take the output and open it in QuickTime and export it as iPod and it'll be perfect.
- finished debugging the spooler. Tho parts of it are ugly (using helper objects instead of templates) it works. I can always change the implementation later. By monday night I hope to have "Play From Disc" actually useable.
- Welp, there's more work to do on the spooler, mostly debugging the abort procs and the finish-without-errors procs. It's all run on preemptive threads, which is *hard* to get right without deadlocking or leaking a thread that never finishes. So I'm gonna do a release cuz there's some good bugs to fix.
- Fixed the "pause between songs" preference, it was busted since i moved to spawning a separate play thread, it wasn't communicating when it actually finished getting the song underway, so the "pause" code never knew when to pause.
- if you have no song playing, and no current play item (it would show up with a speaker next to it), then pressing next or previous will now look at the selection to decide which song to play next.
- fixed a bug where, if your library was offline when you started kJams, it would reset your library path.
- QuickTime export can now be aborted by pressing the stop sign in the Tasks window
- updated the QuickTime export documentation
- now compiling on OS X 10.4 and CodeWarrior 9.6 (previously 10.3)
- d40r6
- Yaay! Now using clean, fresh templates for the spooler adapters instead of separate helper objects, which were a mess to keep track of and an endless supply of bugs. (This object? Oh you meant THAT object!)
- Woops! Do you ever get a system beep right in the middle of a song and wonder where it came from? Well, that was me, sorry about that. If I ever decoded a section of graphics that sets the background transparency, well, it would beep. Now it just spits out a log entry. Silently.
- fixed a bug of trying to pull audio out of iTunes would get the song from the wrong album
- Bad juju errors now say what kind of error it was
Bugs I'm aware of that will be fixed
- it's insanely hard to get work done on a 1 CPU system while ripping. and sometimes you crash.
- sometimes deleting a playlist will crash
- can't enter unicode in meta info
- the album popup may crash under certain situations
To Do
- Problem: NOT dealing with UTF-8 very well. Must replace all std::str with ustring
- Set ID3 tags
- write Zip function so after you rip MP3+G they'll get zipped up together, with a canonical name, enable Zip after rip in the prefs pane
- When editing meta info on Zipped files: unzip files, set ID3 tags, then zip them up again, but leave a copy unzipped so you can get them easily again.
- During import of pre-existing MP3's, scan ID3 tags. Also, write a one-shot utility to both scan for bad zips and also read ID3's from valid zips, and re-canonicalize the names. Move bad zips to a new folder.
- Allow a 'placeholder' track to be input into a singer's "Tonight" list, that includes the disc name and track number, and when it comes up, the dialog comes up, says "stick in the disc", to let it play direct from disc, automatically picking the right track. Alternately, allow KJ to drag a track from a CD into a playlist. then, eject disc. when that song is coming up next, put up a dialog that says "please stick that disc back in" and it'll go play it from disc, Alternately, rip the song when it gets drug from the CD into the singer's "Tonight"
Version 1.0d40: September 29, 2005
- made the thread manager thread safe. duh.
- ripping with LAME now on a separate thread (for 1/3 speed increase on an MP machine)
- if you try to rip while already ripping, you'll just get a warning, not an assert
- I'm now forcing correct track numbers when you submit to freedb. Somebody submitted "Dolly Parton / CB90255" and had track 1 listed as track 4, so there were two track 4's.
- YIKES! There was a problem in 10.4 where ripped audio would truncate to 4KB (basically it seemed like the audio did not rip) FIXED!
- r1
- re-wrote a buncha the thread handling stuff to be better behaved in an attempt to get rid of the "bad joojoo". Also, corrected spelling to "juju". didn't get to any other bug, and may not have even fixed this one. Do you still get the juju bug?
- r2
- dam! it was an uninitialized variable. and guess which one? the error code, of all things. so I was *extremelylucky in *mytesting that it miraculously was set to zero (no error), that is why ripping worked just fine for me. But for the rest of you, it was set to some non-zero value, indicating an error condidition. And I realize i'm not handling an error correctly, leaving you in a bad, un-quittable state!! Wow!
- r3: Tested and functioning on 10.3 and 10.4!!! REALLY!!!
- and now you can rip more than one song at a time, really! Sorry folks, this is the first time i've ever used semaphores and signalling and mutexes and MP threads to any real extent where it REALLY has to be done right. It'll get better, I promise!
- r4
- now that I'm using more preemptive threds, I realize I need to make my logging thread safe. People have been crashing in the strangest places (places that never crashed before). I think it is probably due to using non-thread safe code inside threads. Well, now I can Log() to my heart's content from a million threads at once and it works just fine.
- fixed a possible problem sending an empty log file. now we won't crash if there's nothing there.
- when you stick in a CD, kJams will search your library for songs with identical names and albums. Used to be I'd skip checking track number. Now it'll only match if the track number matches too.
- The "Get Info..." dialog now does the right thing, and the "next" and "previous" buttons now work as expected
- if you try to delete a song that is currently loaded for playing (even if paused), you'll get a warning, and if you go thru with it, the song will stop playing, and actually get deleted. you're welcome.
- if you get an error deleting a song, you now get an error dialog, with possibly more info in the log file
- you can now consistently delete songs. and they really do get removed.
- upon loading your library, no longer will kJams delete a song that has no audio or .cdg reference, in preparation for the "play direct from disc" placeholder song feature (see below)
- after ripping, the new info on tracks is actually remembered when you quit and re-launch (eg: genre, year)
- YIKES!! Really bad bug where if you made a change and quit real quick, the change would not stick! Fixed!
- if you sorted a CD by other than track, quit and came back, the order was messed up. Actually all the meta info was scrambled! eeks!
- r5
- OOPS! Found a bug that would crash ANYONE who does not have AltiVec when they tried to rip. Doh!
- MP3's should have the default icon again (probably iTunes)
- MP3's should hopefully get encoded with the correct header info specifying number of packets, that should make them able to load instantly instead of making you wait 12 seconds sometimes?
- turned on PPC 7450 instruction scheduling. May make some things a teentsy bit faster
- When switching albums in the KJ Rotation, the pitch updates
- if you click Pitch but drag away, it leaves the pitch alone, rather than change it to like negative a million.
- version checker is now thread safe
- the audio player is now thread safe. I was accessing a "done playing" flag from more than one thread. If one was writing it at *exactly* the same time another was reading it, you'd crash. Rare, but it happens.
- the song importer is now thread safe. we're another step closer to background ripping and having a cancel button
- started writing a thread safe deque (where you push onto the end and pull off the front) for things like: play direct from disc, play from quicktime, play from mp3, ripping in the background, ripping, encoding, and playing simultaneously, things like that.
- r6
now really ACTUALLY writing proper Xing header on MP3 files i create, so you don't get that "Error playing Audio: Are you sure you ripped the audio into MP3 format?" dialog, and you also won't get that 12 second delay.The function (lame_mp3_tags_fid) crashes my machine every time.- I wrote this wizard new thing called the Spooler, that runs in the background, and spools data from one "place" to another, bit by bit. A "place" can be a CD, memory, a file, an MP3, a QuickTime, the video screen, the speakers, and eventually the network. Can you feel the goodness?
- Handling errors again, nicely, if your drive does not support ripping.
- no longer logging threads while ripping (would flood the log file)
- no longer causing the prefs to get saved merely by invoking the prefs dialog, nor by switching pref panes
- presf ACTUALLY get saved when you press OK! WOW! Can't believe nobody reported this. They'd get saved if you hit Cancel!!
- more work on the Audio Spooler, still skipping. sneak peak for those with wicked fast machines: you can just barely play direct from disc now. It is NOT debugged, use at your own risk, NOT during a show, please.
- r7
- fixed the "crash when a song stops playing" bug
- r8
- Now I *can* write the VBR Xing header to MP3 files. problem was the LAME framework was linking against a different file <stdio> library than the codewarrior code. I've now updated the LAME framework to have it's own file routines that I now use. Note: using VBR compression will make your playhead get VERY un-synced to your graphics if you move it, until I fix that (actually i'm working on that now, so it won't be long)
- fixed the "auto full screen when playing" bug
- if you "Stop" a song while playing it honors the "auto full screen" setting
- made a new LAME installer that installs the new framework that has the required FILE API so I can write that Xing header. If you use LAME, you will NEED to upgrade (or UN-install)