History 4

From kJams Wiki
Jump to navigation Jump to search

Next Versions

Click Here

Version 1.0d41: December 12, 2005

  • completely re-wrote the spooler, hopefully for the last time. You're wondering, what's the spooler for?
    • playing direct from disc (with sample-accurate video sync)
    • 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(!)
    • Spooler Cache: only ever unpack (ie: rip, unzip, or decode) a song once, for instant playback, while the cache persists
  • 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
  • fixed a crasher when you had "pause between tracks" turned on. Also, we're much closer now to pausing at the first non-silent sample.
  • the import pref that nobody on the planet uses except for me "ignore CDG ripping errors" was broken. fixed.
  • not so fast with claiming "the spooler is done", actually i've been frantically debugging it. It's heavily threaded and has lots of mutexes and semaphores and crazy sync issues and wow it's hard to debug 13 threads with only one brain. But i'm working on it.
  • if you double click a song that's already playing, it rewinds, rather than stopping and starting again (there's a MAJOR difference when playing direct from CD)
  • fixed a crash trying to draw a "metal rect" when the window had disappeared
  • put slightly more exception handling around version checking, not sure it'll help with the "crash on version check if the 'net isn't really there" bug
  • d40r8
  • if you double click a song that's a bad zip file, then, double click the SAME song, don't crash.
  • the "Tasks" and "Video" windows should now behave better with respect to act/deact/ivation
  • if you double click a song that somehow stopped due to an error, but was left sortof halfway alive, you don't crash.
  • if you would have gotten the error "Assert Fail: strs.track_index == -1, in file: 'CSong.cpp' at line xxx" you now instead just get a log entry with the song name
  • when ripping or playing from CD, the speed (eg: 2.4x) is displayed in the task window
  • if you click on an album name in a playlist, like you're going to edit it, you don't get an assert
  • fixed a bug where if you tried to re-order some playlist items and the number of items > the index of the last item, you'd crash
  • SOOOOOO close to done with play direct from CD, but there are a couple more things still...
  • d40r9
  • I had busted QuickTime export, sorry. It's fixed. And as a special bonus for Lite users: until I get iPod export done, which will be built into the Lite version, you have access to QuickTime export. (still only Animation Compressor with uncompressed 44k 16 bit Stereo)
  • Deselect all is now MUCH faster. ie: if you accidentally do "select all" on your 64,000 song library, then click to deselect, it's instant, not like 15 seconds.
  • Clicking on an item in the browser window when it's in the background now brings it to the front. Still have a local/global issue if the entire app was in the background when you clicked
  • d40r10
  • I've always got several pokers in the fire, and one that's finally cooked is the "Glitchy Graphics" problem. Solved!
  • kJams is now more Theme compliant, so if you use eg: ShapeShifter, it'll look okay.
  • If you use ⌘-1, ⌘-2 or ⌘-3 to change the window size, it no longer draws black in the browser window
  • The Window->Tasks menu item actually works
  • d40r11
  • Woops! Don't crash after sticking in a CD to rip!
  • d40r12
  • no more crashing on TVFont if the bounds are corrupted and not recoverable (thanks to anonymous user "Ron", who did not provide me his email address in the crash report. I'd really like to talk with you Ron, I need a copy of the song that crashed you.)
  • Well sh*t! Sorry guys, fixed a bug where it wouldn't go to the next song after the current one was done. Jeeeeeeez!
  • d40r13
  • and yikes, a bug that's been in there since 11/7 and nobody but Joe Paradis reported on it: I was writing corrupted MP3 files, especially on MP (multi-processor) machines. On non-MP machines, you might get a skip in the audio, on MP machines you might CRASH while ripping!! Well thanks Joe for being persistant!! I didn't actually debug it, i just shut off threaded encoding.
  • d40r14
  • debugged the threaded encoding, i've turned it back on. This gives that 5% speed increase in ripping + encoding. (note: this is NOT "background ripping" and "background encoding", which will give a much better 200% speed increase in ripping, and another small increase in encoding speed. eg: a song that is 6:40 long now takes a total of 2:55 to rip + encode (done in one step). Eventually, "background riping" the same song will take 1:10, and "background encoding" will just chug along in the background (no timing info yet) at the same speed! meanwhile you can eject your disc.) (feel free to correct my math, i'm admittedly winging it with the percentages)
  • I think i finally fixed the cosmetic bug where the controls jump around the window nope
  • you can now click and activate and track controls even if the window was not frontmost. eg: the video window is front, but you click the play button in the Browser, or the stop button in the Tasks
  • the hilite of the tracks in the browser now goes all the way across, like iTunes (at least on 10.4) (still no alternating rows)
  • no longer leaking a region whenever drawing a control in the browser window (wow, old bug)
  • I think i made a release that could make some zips downloaded off the internet come out even MORE glitchy, i thought I shut that off, but maybe not. Anyway it's definitely fixed now.
  • the interpret song name dialog and the get info dialog (and all others, for that matter) no longer have invisible items in them
  • Okay! I think i've got the spooler debugged enough to really actually turn on "Play Direct From Disc". This is a new feature!! There are probably bugs!! Use it only after you've tested it and you know it works for you!! Note the extreme coolness: if you play a song from disc, and it finishes ripping, next time you play it, it doesn't need to rip (within the same session)
  • d40r15
  • fixed a bug where playing zips from the internet would get even MORE glitchy, now they don't. They might even bet better now.
  • fixed the issue with Stuffit 10
  • d40r16
  • ripping from CD, the speed reported now gives a moving average over the last 20, rather than total average
  • wow fantasitc news: encoding in the background chugs along at the SAME speed as the ripper! pretty fast, if it's at low quality. At high quality, it's real slow, but that is no longer an issue cuz it's doing its work in the background. You can continue working, or even quit and come back later and it'll pick up where it left off.
  • you can now eject a disc that is playing, and not crash.
  • finished theme-izing the databrowser. if you use ShapeShifter things will look nice. note: drag image no longer has popup or stars, but who would even notice?
  • erasing with MetalRect() (eg: the rectangle surrounding the big "Play" button, looks like a right facing triangle) now lines up perfectly with the background metal pattern grrrr
  • fixed freedb access so song tracks that take more than 256 characters are supported, no more "freedb thinks there are the wrong number of tracks" alerts
  • new local freedb access option: download a mac .dmg file instead of the tar.rar which takes like 2 hours to decompress. see freedb for more info
  • fixed a problem unzipping some files zipped on OS X 10.4, they had these meta info files zipped up with them and kJams got confused which ones were the real audio and video. Symptom was, you'd get the "Error playing Audio: Are you sure you ripped the audio into MP3 format?" dialog or the "This audio file is not (yet?) compatible with modern CoreAudio" dialog.
  • while typing text into the search field, if you select all it will select all the text in the search field
  • Fixed the CDG scrolling bugs. To see them, download this and add it to your library, then watch it.
  • when dragging the playhead all the way to the left or the right, if you overshoot, it's pinned to the edge, rather than sticking somewhere before the edge
  • alerts and asserts reported in the audio thread are now reported on the main thread, so you don't crash.
  • raw PCM files have their own icon now (these are files that have been completely "unpacked", ie: they are raw audio like WAVE or AIFF, decompressed. They are used to get locked on sync with video)
  • debugged scrubbing quicktime audio (not that you'll see that, necessarily)
  • d40r20
  • oops! i had turned on the new threaded ripping, but it's not yet fully debugged. if you downloaded r20 you got a sneak peek at just how much faster it will be. shut back off pending complete debugging
  • if you target a playlist, then delete it, you don't crash. This could be the cause of "crash when deleting playlist" bug
  • there was a bug where if you rip once, you couldn't rip again, you'd get the "please wait for the rip to finish" dialog. Also quitting could be problematic.
  • d40r21
  • made resizing the browser window a tad faster. while resizing, the graphics window continues to update so as not to interrupt the singer
  • no longer allow background saving while resizing a window
  • i think i *really* this time fixed the (cosmetic) bug where controls in the browser would sometimes draw in the upper left corner of the window
  • moved the "Volume Lower" speaker icon 1 pixel to the left so as not to overlap the left edge of the volume slider
  • in an effort to not crash while saving XML files, I no longer write empty strings to the file. If the string is empty, it's entry isn't even written. I don't know if that will help, but it'll make the files slightly smaller at least.
  • there was a situation where I would kill the file save thread if it took longer than 4 seconds. Ooops. Fixed.
  • if you click on a playlist NAME and press delete quickly, without moving the mouse, you could have crashed cuz kJams would delete the playlist and THEN try to rename it.
  • got a couple reports of crash on startup, related to "CFDictionaryCreateMutableCopy" in your crash report. Fixed two ways: 1) i think i removed the offending line, so the database should never get into that state again and 2) if the DB is detected to BE in that state, it will self-correct
  • finished up the spooler enough to make a release, i think!

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)

Previous Versions

Click Here