Help - Search - Members - Calendar
Full Version: foo_pod - Foobar2000 meets the iPod
Hydrogenaudio Forums > Hosted Forums > foobar2000 > 3rd Party Plugins - (fb2k)
Pages: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42
Aero
Version 0.5.5 is now available.

It was actually posted earlier today, but HydrogenAudio was offline and I couldn't post about it. I played around with the filename escaping, and it now always writes out ASCII filenames. So both European and Asian filenames should work now.

There are also some minor speed improvements that may or may not be noticable.
ronyzyz1
I think all these speed improvements call for some benchmarking against other iPod-related applications. smile.gif
Aero
QUOTE (DocUK @ Apr 24 2004, 04:31 AM)
I think all these speed improvements call for some benchmarking against other iPod-related applications.

There are other iPod applications? smile.gif

It will be hard to benchmark foo_pod against other programs, like Ephpod, because of the different ways they handle songs.

For example, when you add a directory in EphPod, it processes the files then sends them to the iPod. With foo_pod, you first load them into Foobar, then use foo_pod to transfer them to the iPod. The first time you load a file into Foobar, the process is slow. But for subsequent loads, it is very fast.

Overall, my gut feeling is that foo_pod is a little faster than Ephpod. But if you are transferring more than a few files, the overhead of the program is small compared with the time it takes to copy files to the iPod.
Aero
Version 0.5.6 is now available.


Not too much new feature or performance-wise, but 0.5.6 fixes a critical sync related bug. I believe this is the root cause of reardon's problem reported on March 31.

The problem was very hard to isolate, since it typically only presented itself after doing a full sync. Anyway, if you have done a sync and it appears that your iPod was wiped (and a blank playlist appears), then 0.5.6 should take care of your problem.

I also implemented the "Delete Selected File(s)" feature that somasatellite requested. This is a faster way to delete files from the iPod, rather than loading the playlist, removing the songs, and syncing.

Speaking of loading the iPod playlist, there is a new preference item to automatically reload the 'iPod (foo_pod)' playlist after any send/sync/delete. This is disabled by default, since large databases can take 10+ seconds to load, but if enabled, it will keep the foo_pod playlist in sync with what is on the iPod without having to manually reload it.


From the Readme:
Version 0.5.6 - April 26, 2004
* Finally fixed last known serious sync problem. In some rare cases, after a sync
you could see a blank playlist on the iPod and a few or no songs. This was
sometimes triggered by deleting iPod files then doing a sync.

* Added a "Delete Selected File(s)" context menu item, so it is possible to directly
remove files from the iPod, without having to do a sync. This option is only visible
when one or more files residing on the iPod are selected.

* Added preference item (Auto Update) to automatically update the "iPod (foo_pod)"
playlist after any send/sync/delete.

* Some minor performance improvements.
Aero
QUOTE (Otto42 @ Apr 14 2004, 09:42 PM)
When you sync, you have to do the following:

1. Read the Play Counts file off the iPod. This contains all the play counts and such since the last time you synched. Everything "new" in other words. There's a class I wrote at the bottom of the iPodDB stuff specifically for parsing this file. It can't write the file, but then you'll never need to write to that file.

2. Add/merge that data into foobar's database.

3. DELETE the Play Counts file off the iPod. Or rename it to .bak or something. This is important, you want to clear that file so you don't get dupe counts.

4. When you build the new iTunesDB file, make sure to include the Play Counts info as well as the timestamps and such in the proper fields that are there for them. This is so smart playlists (if and when) will work correctly on 2.0 and up iPod's.

And that's pretty much that.

Edit: Part 2 is trickier than it seems. The Play Counts file is basically linked to the existing iTunesDB in such a way that the first song entry in Play Counts corresponds to the first song entry in the iTunesDB, and so on. So you'll need to have some way to work out which song in the foobar database corresponds to each song entry that already exists in the current iTunesDB in order to add the new playcount to the right place, update the last played time, etc. If you can sync though, you probably have a good idea of how to figure this out already. smile.gif

I was thinking about how to implement this, and I'm kind of at a loss to figure out how to make it work.

Obviously, I can add metadata to files that is compatible with the Play Counter component. And I can parse the Play Counts file and map the counts back to songs that are currently on the iPod. When to do this is an open question, but for now, it could happen any time you did a load/send/sync.

The problem is that there is no way to map iPod files back to files on your hard drive, at least at the moment. (I could write a function that looks for matching files in the Foobar playlist(s)). Of course, updating a hard drive file would cause it to replace the equivalent iPod file on the next sync, so if you had a number of files that were updated, they would all need to be copied to the iPod. That could make a rather lenghty sync.

So at least at the moment, the only files I could write the play count values into are the ones on the iPod. Is this what you are looking for, knowning that a sync could wipe out the files on the iPod and replace them with non-play counted versions from the hard drive?

Edit: Actually, a sync would not necessarily replace the play counted iPod files, unless the source file changed. So if you are willing to live with the Play Count data living only on the iPod, then this would be doable.

Edit2: Maybe this would work better with the database? I dunno...I don't use it so I don't have much experience with Foobar's database.
ronyzyz1
Is there an easy way to sync a directory with the iPod?

When I update my music library, songs get added and deleted here and there, and it is a bitch to have to add all the songs to foobar2000 again just to sync with the iPod. I mean, it is not just a matter of adding the songs ive added to the playlist containing my library (for foo_pod syncs).

Is there a command to sync a foobar2000 playlist with a directory maybe? I saw remove dupes, but this doesnt exactly do what i wanted.

If this feature does not exist, I would love to see it as part of foo_pod... wub.gif
Aero
QUOTE (DocUK @ Apr 26 2004, 03:50 PM)
Is there an easy way to sync a directory with the iPod?

When I update my music library, songs get added and deleted here and there, and it is a bitch to have to add all the songs to foobar2000 again just to sync with the iPod. I mean, it is not just a matter of adding the songs ive added to the playlist containing my library (for foo_pod syncs).

Is there a command to sync a foobar2000 playlist with a directory maybe? I saw remove dupes, but this doesnt exactly do what i wanted.

If this feature does not exist, I would love to see it as part of foo_pod...  wub.gif

Not really, at least not like how I think you are expecting it to work.

foo_pod's current interface is only through Foobar, which means that it operates off of playlist entries and playlists, not files and directories.

Getting back to your problem, you can just select or create an empty playlist, then use Foobar's Add Directory to populate the playlist. Then either call foo_pod's Send Playlist to iPod or select the new songs and selected the Send Selected context menu item. foo_pod should only copy files that aren't already on the iPod, so it won't hurt if some or all of the files are already on the iPod.

If there was scripting support in either Foobar or foo_pod, you could probably automate this process. Maybe foo_lua can already do this (create a new playlist, add a directory, then call the foo_pod Send Playlist menu item, then remove the playlist)?

I am also toying around with making foo_pod a Foobar service, so anyone could write a custom GUI that uses it to perform iPod operations. Then you could have Add Directory add the files directly to the iPod. Something like this would be the ultimate iTunes killer, since you'd have the nice interface while hiding the playlists and other Foobar-isms, while still keeping all of the Foobar power.
ronyzyz1
QUOTE (Aero @ Apr 26 2004, 11:17 PM)
QUOTE (DocUK @ Apr 26 2004, 03:50 PM)
Is there an easy way to sync a directory with the iPod?

When I update my music library, songs get added and deleted here and there, and it is a bitch to have to add all the songs to foobar2000 again just to sync with the iPod. I mean, it is not just a matter of adding the songs ive added to the playlist containing my library (for foo_pod syncs).

Is there a command to sync a foobar2000 playlist with a directory maybe? I saw remove dupes, but this doesnt exactly do what i wanted.

If this feature does not exist, I would love to see it as part of foo_pod...  wub.gif

Getting back to your problem, you can just select or create an empty playlist, then use Foobar's Add Directory to populate the playlist. Then either call foo_pod's Send Playlist to iPod or select the new songs and selected the Send Selected context menu item.

Well this is what I am doing now, but with such a large music library, it takes way too long to add all the files to a playlist again (as I don't want to use foobar2000's database).
Mike Giacomelli
QUOTE (DocUK @ Apr 26 2004, 02:51 PM)
QUOTE (Aero @ Apr 26 2004, 11:17 PM)
QUOTE (DocUK @ Apr 26 2004, 03:50 PM)
Is there an easy way to sync a directory with the iPod?

When I update my music library, songs get added and deleted here and there, and it is a bitch to have to add all the songs to foobar2000 again just to sync with the iPod. I mean, it is not just a matter of adding the songs ive added to the playlist containing my library (for foo_pod syncs).

Is there a command to sync a foobar2000 playlist with a directory maybe? I saw remove dupes, but this doesnt exactly do what i wanted.

If this feature does not exist, I would love to see it as part of foo_pod...  wub.gif

Getting back to your problem, you can just select or create an empty playlist, then use Foobar's Add Directory to populate the playlist. Then either call foo_pod's Send Playlist to iPod or select the new songs and selected the Send Selected context menu item.

Well this is what I am doing now, but with such a large music library, it takes way too long to add all the files to a playlist again (as I don't want to use foobar2000's database).

You'll have to parse all the files anyway to get the tag info. The obvious solution is to turn on foobar's database so that you only have to parse each file exactly one time.
Otto42
QUOTE (Aero @ Apr 26 2004, 10:12 AM)
Obviously, I can add metadata to files that is compatible with the Play Counter component.  And I can parse the Play Counts file and map the counts back to songs that are currently on the iPod. When to do this is an open question, but for now, it could happen any time you did a load/send/sync.

The problem, as I see it, is that ideally, I wouldn't want the Play Count and Last Played Time and Rating stored in my song file itself, actually. A database should hold this information.

QUOTE (Aero @ Apr 26 2004, 10:12 AM)
Edit:  Actually, a sync would not necessarily replace the play counted iPod files, unless the source file changed.  So if you are willing to live with the Play Count data living only on the iPod, then this would be doable.

This is the best solution until it becomes possible to store the play count info locally without writing it to the music files themselves as metadata. As long as the play count is updated in the iTunesDB, live updating smart playlists can utilize this data, as least with newer iPods.

QUOTE (Aero @ Apr 26 2004, 10:12 AM)
Edit2:  Maybe this would work better with the database?  I dunno...I don't use it so I don't have much experience with Foobar's database.

Far, far better. There's no reason to write this info to the songs themselves, except to make the data transferrable, and ideally I wouldn't want it to transfer in most cases anyway.

Let me think about it a bit. Perhaps there's a better solution than we're thinking of. Foobar's database system has some definite drawbacks that I'm only now starting to see. Modifications to it may be needed to do this correctly, or it may be needed to implement some kind of database not related to foobar's database... Really, play counts and last played time and ratings data is only useful in conjunction with smart playlists, or whatever you want to call an auto-created playlist. So implementing that first might be required.
gandalf44
Otto42,

Can you somehow use foo_playlistgen_ex and foo_playcount in conjunction with foo_pod? I have been using the Extened Playlist generator and it virtually has enabled me to have Smart Playlists with foobar2000.

It would suck to have to re-invent the wheel since both plugins seem to work nicely currently, w/o of course foo_pod support.

-gandalf44
Aero
QUOTE (gandalf44 @ Apr 28 2004, 08:35 AM)
Can you somehow use foo_playlistgen_ex and foo_playcount in conjunction with foo_pod?  I have been using the Extened Playlist generator and it virtually has enabled me to have Smart Playlists with foobar2000.

It would suck to have to re-invent the wheel since both plugins seem to work nicely currently, w/o of course foo_pod support.

I think what Otto wants is a way to get the play count from the iPod (which is created on the iPod as you play each song).

Actually, I maybe know how to do this. Rather than writing metadata to the iPod files, I can just populate PLAY_COUNTER and the other metadata used by the Play Counter component when the file is loaded into the foo_pod playlist (and store the play count data for each song in the iTunesDB database on the iPod). I already sort of do this for the artist/title/album and other data from the iPod database, so adding the play counter stuff won't be very difficult.

The only fuzzy part in my mind is when to delete the Play Counts file on the iPod. I guess that any time you load/send/sync/delete from the database, foo_pod should parse the Play Counts file, copy the inforrmation to the iTunesDB database, then delete Play Counts.

Does that sound like that would work and what you are looking for, Otto?
gandalf44
What about integrating with Quick Tag (foo_quicktag) for ratings? Has this been discussed?

-gandalf44
Aero
QUOTE (gandalf44 @ Apr 28 2004, 09:14 AM)
What about integrating with Quick Tag (foo_quicktag) for ratings?  Has this been discussed?

I was unaware of foo_quicktag, but yeah, it looks like I would just have to add a RATING metadata item to Foobar when the iPod playlist is loaded. That is very easy to add - I just didn't know of anything that was using ratings on Foobar, or a "standard" metadata name, to warrant adding it to foo_pod.,
Otto42
Okay.. here's kind of what I'd like:

Play Counts to be syncronous. By this, I mean that playing songs on the iPod or in foobar will increment a play counter for that song, and these play counters would be syncronized between the two. In other words, if I play a song on foobar, then play it on the iPod, and then sync, that songs play count should go up by 2, and the updated play count should now be written back to the iPodDB. The play count should reflect how many times I've played the song. Simple as that.

There should be a last played time, also synced between the two, indicating when I last played the song.

Ratings, ditto. If I change a rating on the iPod, it should sync back to foobar when I sync the iPod.

None of these three should get stored as metadata in the song files themselves. Ever. Okay, at least I'd like an option to never store these in the song files. An MP3 file should not change just by playing it, I say.

Once all that is there, then I'd like to be able to build smart playlists using that data. But that's long term, and not a biggie right now.


Regarding when to do the play counts deletion, during a sync you do this:

1. Read the Play Counts file.
2. Add the play counts from there to the play counts stored in *foobar* (not those in the iTunesDB). Wherever they may be.
3. Delete the Play Counts file.
4. Now, actually sync the songs, and copy the new, updated play count data from foobar to the iTunesDB.

The idea being that the play counts file holds whatever has changed since the last time you synced, and that data needs to be merged into foobar's data, not just into the iTunesDB data. The iTunesDB data needs to be regenerated from foobar's data. Follow?
Otto42
Gandalf: I've not used foo_playlistgen_ex but I doubt it's compatible with smart playlists on the iPod. The wheel will very likely need to be reinvented for this part, at least.

foo_playcount might work, but I certainly won't use it in it's current form, where it modifies my music files. Until there's a way around that, it seems unlikely to work properly, in my view. This is just a dealbreaker for me. If my music is constantly changing, then I can't use most of my other music programs the way I use them currently.

Edit: I admit that for the time being, I've gone back to iTunes and stopped using foobar/foo_pod. Smart playlists on my iPod are just an essential for the way I listen to my music. I don't listen to music using the computer much, so having smart playlists there is not a big deal to me. I tried foo_pod, I really did, but it's just not enough, yet. This is why I'm posting this sort of thing. I hate iTunes, but just I gotta have live updating smart playlists on the iPod... sad.gif
Otto42
Aero: I noticed that during a sync with iTunes, it was spinning my external drive pretty hard, running through my music. I'm thinking it's creating a hash of the first X bytes in the file (or something similar) and then possibly using that as some sort of identifier in the iTunesDB. That may be what some of that weird looking data in the MHIT is. Investigation might be needed here, as that certainly would help with syncing, don't ya think?
Aero
QUOTE (Otto42 @ Apr 28 2004, 12:24 PM)
Aero: I noticed that during a sync with iTunes, it was spinning my external drive pretty hard, running through my music. I'm thinking it's creating a hash of the first X bytes in the file (or something similar) and then possibly using that as some sort of identifier in the iTunesDB. That may be what some of that weird looking data in the MHIT is. Investigation might be needed here, as that certainly would help with syncing, don't ya think?

Try installing and running FileMon and spy on what iTunes is doing. FileMon will show you exactly which files iTunes is accessing, and if it is doing a partial read, which range it is reading from (offset and length, in the far right column).
Aero
QUOTE (Otto42 @ Apr 28 2004, 12:11 PM)
Edit: I admit that for the time being, I've gone back to iTunes and stopped using foobar/foo_pod. Smart playlists on my iPod are just an essential for the way I listen to my music. I don't listen to music using the computer much, so having smart playlists there is not a big deal to me. I tried foo_pod, I really did, but it's just not enough, yet. This is why I'm posting this sort of thing. I hate iTunes, but just I gotta have live updating smart playlists on the iPod... sad.gif

Can't you set up your smart playlists on iTunes, then use foo_pod to transfer music? While I haven't tried it, my understanding is that iPodDB, and how I use it in foo_pod, will preserve the smart playlist MHOD data. So theoretically, at least, it should work.

Also, if you don't mind, email or PM me an example of how you use smart playlists, and why they are so essential to you. I'm curious, since have never used them...
Otto42
QUOTE (Aero @ Apr 28 2004, 10:59 AM)
Try installing and running FileMon and spy on what iTunes is doing.  FileMon will show you exactly which files iTunes is accessing, and if it is doing a partial read, which range it is reading from (offset and length, in the far right column).

I'll give it a shot when I get home and see what I can find out.

Regarding smart playlists, I hadn't considered that. I wiped the iPod before using foo_pod with it. Silly me. I might give that a shot later.

As for what I do with smart playlists, well, I listen to smart playlists almost exclusively. Here's a few I have on the iPod:

(unless I state otherwise, all my playlists also include two rules, those being "Genre is not Comedy" and "Genre is not Books and Spoken").

Good songs - Anything rated 3 stars or higher
Great songs - 4 stars and higher
Recently Played - Anything played in the last 2 weeks
Not Recently Played - Anything not played in the last 2 weeks
Old but Good - Anything rated 3 or higher and not played in the last 2 weeks (probably my most used playlist)
Old but Great - Same as "Old but Good" but 4 stars or higher
Fast songs - Songs with a BPM higher than 120
Slow songs - Songs with a BPM lower than 80
New Music - Anything I've added in the last month
Angry Music - A collection of songs by 311, Rage Against the Machine, AudioSlave, few other bands, that I've rated 3 or higher.
Good 90's music - Stuff from 1990-1999 that's rated 3 stars and up.
Least 100 Played - 100 songs with the lowest playcounts
Top 100 Played - 100 songs with highest playcounts

Etc, etc. You get the picture, I'm sure.

I've got several more SPL's that I can't think of off the top of my head. Anyway, I have 6000 songs on the iPod. When I'm driving along listening, I put it on a playlist with shuffle turned on and let it go. I don't make mixes myself, I let it make them for me. I don't feel the need to micromanage my listening, I just prefer to tell it what sort of things I want to hear and let it pick them automatically. I'm always coming up with new smart playlists, essentially, and I just leave them there on the off chance I might be in that sort of mood.

But all these rely on having 100% correct data. So I've gone to lots of trouble to put all the right data in there, sort of thing. All my "Comments" fields contain album reviews from AMG, for example (which makes for interesting smart playlists... think "Comments contains edgy" or some other descriptive type of weird adverb that music reviewers would tend to use). Anyway, having all the data correct is critical, which is why this sort of playcount syncing and such matters so much to me.
Aero
QUOTE (Otto42 @ Apr 28 2004, 01:52 PM)
As for what I do with smart playlists, well, I listen to smart playlists almost exclusively. Here's a few I have on the iPod:

(unless I state otherwise, all my playlists also include two rules, those being "Genre is not Comedy" and "Genre is not Books and Spoken").

Good songs - Anything rated 3 stars or higher
Great songs - 4 stars and higher
Recently Played - Anything played in the last 2 weeks
Not Recently Played - Anything not played in the last 2 weeks
Old but Good - Anything rated 3 or higher and not played in the last 2 weeks (probably my most used playlist)
Old but Great - Same as "Old but Good" but 4 stars or higher
Fast songs - Songs with a BPM higher than 120
Slow songs - Songs with a BPM lower than 80
New Music - Anything I've added in the last month
Angry Music - A collection of songs by 311, Rage Against the Machine, AudioSlave, few other bands, that I've rated 3 or higher.
Good 90's music - Stuff from 1990-1999 that's rated 3 stars and up.
Least 100 Played - 100 songs with the lowest playcounts
Top 100 Played - 100 songs with highest playcounts

Etc, etc. You get the picture, I'm sure.

...

But all these rely on having 100% correct data. So I've gone to lots of trouble to put all the right data in there, sort of thing. All my "Comments" fields contain album reviews from AMG, for example (which makes for interesting smart playlists... think "Comments contains edgy" or some other descriptive type of weird adverb that music reviewers would tend to use). Anyway, having all the data correct is critical, which is why this sort of playcount syncing and such matters so much to me.

Interesting. You obviously have much better metadata in your files than I! smile.gif I was happy when I spent the considerable amount of time just getting artist/title/album correct when I got my iPod.

It is facinating that everyone uses their iPod a little differently. I'm definintely a "throw everything on there that fits, turn on shuffle, and skip to the next track if you don't like the song" kind of guy... So foo_pod is definitely geared toward someone like myself, although with an intelligent playlist creator on Foobar, you could do everything you are doing with smart playlists, except for the Played * type lists. Once I hook up ratings and try to get play count working, maybe it be possible to create those as static playlists. Maybe I'm missing the point, but if you sync your iPod every day or so and have it rebuild the smart playlists, that is basically as good as having dynamic smart playlists.
Otto42
QUOTE (Aero @ Apr 28 2004, 12:26 PM)
Once I hook up ratings and try to get play count working, maybe it be possible to create those as static playlists.  Maybe I'm missing the point, but if you sync your iPod every day or so and have it rebuild the smart playlists, that is basically as good as having dynamic smart playlists.

True, but as good, in my particular case, isn't quite good enough. I don't sync every day or so. I generally sync once a week, sometimes a little more but not much more. Especially if I'm travelling, because my computer doesn't come with me. And travelling is kinda where I need it the most.

But yes, I go to a lot of trouble on my metadata. Took me a while to get my initial data going for 3000 songs, but after that was done it was a simple matter of doing the data correct for each album as I ripped (or otherwise "acquired" it). I had to write a program to correct the BPM number produced in MP3 tags by PCDJ Red, for example, just so I could make those fast/slow songs list.

I'm still unable to calculate BPM for a M4A file, so lately I've been converting them to MP3's, calculating BPM on those, then inputting them by hand into the M4A's metadata. It's not much fun, but I'm working on better ways.

My current rip/encode process is rip to WAV, encode to temp MP3 (at a pretty low quality), figuring BPM of MP3s with PCDJ Red, deleting MP3s, encoding WAVs to M4A's, using Tag&Rename for most of the metadata and for renaming the files to the correct directory structure, manually putting in the BPMs, add to iTunes Library. It's not really as involved as it sounds, but it does mean that I don't do it in batches, sort of thing.
Otto42
Edit: Never mind. iTunes isn't doing anything weird. I'm just not thinking straight. What it's doing during a sync when it gets a lot of drive activity is checking the attributes of all the files, looking to see if any file has changed. Probably checking out the Last Modified Timestamp on the file itself, or the date created timestamp or something.
Biscuits
I don't believe anyone has said this yet but:

In version 0.5.6, if you add some files to the iPod playlist and leave them highlighted and then say sync current playlist, it will delete everything and add just the highlighted files. I don't know if this was on purpose or not.

Thanks for the plugin. Good work so far!

-Tristan
Aero
QUOTE (Biscuits @ Apr 30 2004, 07:34 PM)
In version 0.5.6, if you add some files to the iPod playlist and leave them highlighted and then say sync current playlist, it will delete everything and add just the highlighted files. I don't know if this was on purpose or not.\

Are you sure it was only the highlighted files? The sync function doesn't do anything with selected/highlighted files - it only operates on playlists.

So if was only the highlighted files, then something weird might be going on. If it transferred the whole playlist and deleted all of the other files, then that is the expected behavior. Sync means "make the iPod looks like the current playlist (or playlists if you use the Sync All Playlists option)", which implies that everything that isn't in the playlist will be deleted.

Send Selected/Send Playlist will always only copy new files to the iPod, and never delete any, so if you are unsure, that is the best option to use.
Aero
Version 0.6 is now available.


This release adds some new stuff for both users and developers.

For users, there is a new "Ignore Playlist" feature (suggested by herr klang), so you can specify individual playlists to be excluded from the Send/Sync All command. This is available on the right-click context menu, where you can set and unset this feature. It is also saved along with the other prefs, so a playlist will stay ignored unless you rename/remove it or cancel the ignore.

For developers, I have been playing around with Foobar's service_base interface, and I have made an interface for foo_pod. There are two .h files that you should include, pod.h and pod_error_codes.h. Then you can get a pointer to the pod class with pod::get(), then call away on the pod functions. I don't use the service interface internally, so there are bound to be some problems with it, and I'd appreciate any feedback on the interface.

Also for users and developers, I added an "Export iTunesDB Database to XML" feature. This will dump out all of the songs and playlists that currently reside on the iPod to a structured XML document. I imagine this will be very useful for iPod developers (this means you, Otto42!), but it also could be nice for users. I am going to do some XSLT-fu, which will transform the XML into plain text or HTML, so you could run the transformation and put the resulting nicely formatted HTML up on a webpage, for example.



From the Readme file:
Version 0.6 - May 2, 2004
* Added an (experimental) Foobar2000 service interface for some of foo_pod's functions.
This is only useful for component authors.

* Fixed several instances where the progress dialog would not close, typically due to
an error condition.

* Delete All Songs And Playlists does a more complete job of removing all iPod music
related files.

* Added an "Ignore Playlist" feature. This is available on the context menu, and allows
the user to specify upto 30 playlists which foo_pod will not use when syncing or sending
playlist. This is useful for keeping playlists of songs that you do not want on your iPod.
This list of Playlists is saved between Foobar sessions, so the playlist will remained
ignored until you un-ignore it.

* Added a "Dump iTunesDB Database to XML" feature. This will parse the iPod's database file,
and output the data in XML format.

* Fixed a problem when using "Sync All Playlists" where the same song is in multiple playlists.
Previously, multiple copies of the song would be copied to the iPod.
Aero
BTW, I recommend that you do not update to iPod Software 2.2 (a.k.a iPod Update 2004-04-28), unless you must use the new iTunes features, like lossless encoded music.

While I haven't had any major problems with it and foo_pod, I noticed that it is doing some weird stuff when mounting. I believe that this is the problem described at news.com, although like I said, foo_pod doesn't seem to be affected. Also tonight, I noticed songs skipping and freezing with 2.2 that worked just a day ago with 2.1.
musicmusic
I made a small plugin using foo_pod's new api to sunc the ipod with a list of directories rather than the playlist.

binary
source

From some quick testing it seems to work fine.

Aero: Nice work on the plugin.

Do you thing you could add something to backup the on-the-go playlist? iTunes used to make a backup of it, and its severly annoying how it is wiped whenever the iPod is connected to the computer.

Edit: In fact does foo_pod wipe all playlists when syncing? It seems to, I don't think that is desirable behaviour.
Aero
QUOTE (musicmusic @ May 2 2004, 11:16 AM)
I made a small plugin using foo_pod's new api to sunc the ipod with a list of directories rather than the playlist.

binary
source

From some quick testing it seems to work fine.

Wow...that was so fast!

QUOTE
Aero: Nice work on the plugin.

Do you thing you could add something to backup the on-the-go playlist? iTunes used to make a backup of it, and its severly annoying how it is wiped whenever the iPod is connected to the computer.

Thanks!

I'm not currently doing anything the OTG playlist, but Otto has code in iPodDB for dealing with them (other than being in a separate file, they are no different than regular playlists). How about if I automatically read the OTG playlist and if it exists, when you load the iPod database into Foobar, it will create a second "iPod (foo_pod) OTG" playlist. Or do you want an actual physical copy of OTGPlaylistInfo?

Edit: Actually, it turns out the the OTG playlist is a little different. Regular playlists are lists of ids, while OTG is a list of indexes. I have no idea why Apple made it different, but that is why it has to be deleted after every sync - since it contains indexes instead of IDs, any changes to the array of songs will invalidate the index list.

I have OTG playlist reading implemented, but like iTunes, I believe I will need to delete the OTGPlaylistInfo file after any potential removal change to the song list (i.e. sync or remove songs). But at least you'll have the 'iPod (foo_pod) OTG' playlist in Foobar.

Edit 2: The more I think about how OTG is implemented, the less I think I can do what you are asking. I could display the OTG as it exists right before a sync, but that could be useless if the files in the list are deleted after a sync. If I display it after a sync, the list could be equally as useless, since the indexes could be pointing to different songs. I'm open to suggestions on what to do about OTG, but I think due to Apple's questionable implementation of OTG, I have no choice but clear it after any sync/remove operation. It will still be valid after send files, however.

QUOTE
Edit: In fact does foo_pod wipe all playlists when syncing? It seems to, I don't think that is desirable behaviour.

Yes, I rebuild all of the playlists after a sync that changes the iPod. I'm not sure I have a choice, since the playlist is really just a list of ids, which can be reused for different songs. So if you have a playlist with ids 2001, 2002, and 2003 and do a sync which deletes 2002 as well as adding a new file, you could have the new file with id 2002.

I'll see if there is a more intelligent way to dealing with the playlists, but for now, that is what is implemented.
musicmusic
QUOTE (Aero @ May 2 2004, 06:07 PM)
Wow...that was so fast!
Lol, I wanted it myself, so..

QUOTE (Aero @ May 2 2004, 06:07 PM)
Yes, I rebuild all of the playlists after a sync that changes the iPod.  I'm not sure I have a choice, since the playlist is really just a list of ids, which can be reused for different songs.  So if you have a playlist with ids 2001, 2002, and 2003 and do a sync which deletes 2002 as well as adding a new file, you could have the new file with id 2002. 

I'll see if there is a more intelligent way to dealing with the playlists, but for now, that is what is implemented.


The ID for the same song will remain unchanged, correct? You could still compare the filenames and remove bad entries, or even recreate the playlists based on path or something, or even try not to reuse the same IDs in a single sync.

If you don't want to do that, if you added some playlist interfaces I could at least add something to my component to recreate the playlists after a sync. Im not too concerned anyway since any playlists on my ipod I would have made in foobar anyway.

QUOTE (Aero @ May 2 2004, 06:07 PM)
I'm not currently doing anything the OTG playlist, but Otto has code in iPodDB for dealing with them (other than being in a separate file, they are no different than regular playlists).  How about if I automatically read the OTG playlist and if it exists, when you load the iPod database into Foobar, it will create a second "iPod (foo_pod) OTG" playlist.  Or do you want an actual physical copy of OTGPlaylistInfo?

Edit: Actually, it turns out the the OTG playlist is a little different.  Regular playlists are lists of ids, while OTG is a list of indexes.  I have no idea why Apple made it different, but that is why it has to be deleted after every sync - since it contains indexes instead of IDs, any changes to the array of songs will invalidate the index list.

I have OTG playlist reading implemented, but like iTunes, I believe I will need to delete the OTGPlaylistInfo file after any potential removal change to the song list (i.e. sync or remove songs).  But at least you'll have the 'iPod (foo_pod) OTG' playlist in Foobar.

Edit 2:  The more I think about how OTG is implemented, the less I think I can do what you are asking.  I could display the OTG as it exists right before a sync, but that could be useless if the files in the list are deleted after a sync.  If I display it after a sync, the list could be equally as useless, since the indexes could be pointing to different songs.  I'm open to suggestions on what to do about OTG, but I think due to Apple's questionable implementation of OTG, I have no choice but clear it after any sync/remove operation.  It will still be valid after send files, however.

The OTG playlist doesn't get cleared when I sync with iTunes, rather when the iPod is docked with the computer (I think when it is disconnected). However, iTunes would make a copy of it as a standard playlist. So, yes, being able to load it would be suffice as I can send it back afterwards. And well the deleting thing doesnt matter for me anyway. I wouldnt have songs on my OTG playlist that I want to delete.. I guess it depends if you keep all of your songs on your iPod or just what you want to listen to. I wouldn't imagine anyone doing the latter, unless they had a mini or something, but even then its better than nothing.
Otto42
Much like the Play Counts file, the OTGPlaylist file is wiped by the iPod itself, after you dock it to a computer and change.. well.. anything. You don't have to delete the file for it to be wiped, and writing the file is most likely useless.

The reason iTunes deletes both Play Counts and OTGPlaylist files is simply to ensure that iTunes itself doesn't accidently read those files back in twice.

What I think is actually going on is that, after you undock an iPod, it has to reread and parse the iTunesDB. At that time, it probably checks timestamps or something else to detect if the iTunesDB has changed. If it has, it'll wipe both OTGPlaylist and Play Counts the very next time you tell it to play a song. Any song. It has to, as both of these files are based on the index number of the songs in the iTunesDB, and not the ID numbers. So they're invalid after an iTunesDB change.
musicmusic
Yes that would make sense, it doesn't seem to get wiped when I don't change anything.

That would make more sense as to iTunes behaviour.

Perhaps, Aero, instead you could make an option, where whenever foo_pod syncs or whatever, it checks if there is anything in the on-the-go playlist, converts it to a list of IDs, and then after it finishes doing whatever it is doing it recreates it as a playlist named "On-The-Go dd/mm/yy" or something like that. Either that or it could recreate the actual on-the-go playlist..

Edit: Silly me, recreating the OTG playlist wouldnt work, and creating a new playlist is not a particulary good idea neither since it may get wiped if you sync again. with foo_pod's current behaviour

Perhaps automatically loading it to a foobar playlist then and leaving to the user to decide what to do with it.

Either way, thanks Aero for the nice work on the plugin, it was great to get my apev2 and replaygain info for my mp3s to my ipod wink.gif
Aero
QUOTE (Otto42 @ May 3 2004, 10:16 AM)
Much like the Play Counts file, the OTGPlaylist file is wiped by the iPod itself, after you dock it to a computer and change.. well.. anything. You don't have to delete the file for it to be wiped, and writing the file is most likely useless.

The reason iTunes deletes both Play Counts and OTGPlaylist files is simply to ensure that iTunes itself doesn't accidently read those files back in twice.

What I think is actually going on is that, after you undock an iPod, it has to reread and parse the iTunesDB. At that time, it probably checks timestamps or something else to detect if the iTunesDB has changed. If it has, it'll wipe both OTGPlaylist and Play Counts the very next time you tell it to play a song. Any song. It has to, as both of these files are based on the index number of the songs in the iTunesDB, and not the ID numbers. So they're invalid after an iTunesDB change.

The question is when exactly does OTGPlaylistInfo get deleted, and what triggers it. You say that the iPod does it after a change to iTunesDB, but later on, you say that iTunes does it.

If the iPod deletes OTGPlaylistInfo after you undock, which is what I expect is the case, then we are boned. There is no way to generate a new OTG playlist with updated info.

If it is deleted by iTunes or iPodService, then I can recreate the OTG playlist with updated info after a sync.

I'll investigate this further tonight...
Otto42
QUOTE (Aero @ May 3 2004, 09:13 AM)
The question is when exactly does OTGPlaylistInfo get deleted, and what triggers it.  You say that the iPod does it after a change to iTunesDB, but later on, you say that iTunes does it.

Both do it. And yes, you're likely boned on this one, but then again, maybe not...

iTunes does it for certain. But it doesn't have to do so. It deletes these files so it won't accidently read them in again, if, say you happen to undock and redock without playing anything. It does it "just in case" sort of thing. Since you're not iTunes, you don't have to do this if you don't want to do so.

But the iPod does it too. It will overwrite the existing files with new blank ones if/when:
a) iTunesDB changes
b) You then play a song.. any song.

The trick here is that if you knew how a) worked, then you might be able to bypass it. If, for example, it's comparing the timestamp of the iTunesDB to the timestamp of the OTG file and overwriting the OTG only if it's older... See what I mean? I don't know exactly when the iPod overwrites the file, just that it does, given normal circumstances.
scottder
I keep getting the following when I copy to my ipod (15gb 3G with latest firmware)

Scott

CODE
Illegal operation:
Code: C0000005h, flags: 00000000h, address: 0586EEFFh
Access violation, operation: read, address: 00000010h
Call path:
WinMain=>app_mainloop=>menu command: "Send selected to iPod"
This is the first crash logged by this instance.
Code bytes (0586EEFFh):
0586EEBFh:  A1 78 56 88 05 85 C0 75 05 B8 0C 59 88 05 80 38
0586EECFh:  00 74 25 6A 01 6A 00 B9 68 56 88 05 E8 90 CA FF
0586EEDFh:  FF 83 EC 18 8B CC 89 64 24 38 50 E8 21 CA FF FF
0586EEEFh:  E8 1C 44 FF FF 83 C4 20 85 ED 74 0E 8B 45 00 55
0586EEFFh:  FF 50 10 8B 4D 00 55 FF 51 08 8B 44 24 34 85 C0
0586EF0Fh:  74 0A 50 FF 15 4C F1 87 05 83 C4 04 8D 4C 24 64
0586EF1Fh:  C7 84 24 A8 02 00 00 FF FF FF FF E8 01 AA 00 00
0586EF2Fh:  8B 8C 24 A0 02 00 00 5F 5E 5D 64 89 0D 00 00 00
Stack (0012F838h):
0012F818h:  E1031078 81B3E4F1 F0AA7CE8 805968D9
0012F828h:  E1090870 E1031078 00000000 0012F82C
0012F838h:  00176520 057F3DE8 058858C0 0012FB18
0012F848h:  00000001 010088F0 00000014 00176520
0012F858h:  77F944A8 77F57D70 77F58A3A 00000026
0012F868h:  00000026 00000026 06408970 00000080
0012F878h:  00000050 00000001 0587F3AC 0587F384
0012F888h:  0000000D 8C100B7F 038503C9 00000017
0012F898h:  00000001 057B7448 0587F59C 0587F4BC
0012F8A8h:  00000068 0007CE86 00000001 0000000A
0012F8B8h:  00000002 C38495B1 0B5556D1 00000002
0012F8C8h:  057FEEC8 057D1008 003A0066 0069005C
0012F8D8h:  006F0050 005F0064 006F0043 0074006E
0012F8E8h:  006F0072 005C006C 00540069 006E0075
0012F8F8h:  00730065 0069005C 00750054 0065006E
0012F908h:  00440073 00000042 5AD71B48 5AD8A60D
0012F918h:  00000000 00000000 01AE02DB 00000001
0012F928h:  77D45A63 77D44124 77D9C064 77D458A7
0012F938h:  77D45899 00000100 00000000 05752E28
0012F948h:  00000001 00000010 00000001 0012F93C
Registers:
EAX: 00000000, EBX: 00000014, ECX: 0012F81C, EDX: 7FFE0304
ESI: 00000014, EDI: 057F3DE8, EBP: 00176520, ESP: 0012F838
Crash location: "foo_pod", loaded at 05860000h - 0589A000h

Loaded modules:
foobar2000                       loaded at 00400000h - 00451000h
ntdll                            loaded at 77F50000h - 77FF7000h
kernel32                         loaded at 77E60000h - 77F46000h
USER32                           loaded at 77D40000h - 77DCC000h
GDI32                            loaded at 7E090000h - 7E0D1000h
ADVAPI32                         loaded at 77DD0000h - 77E5D000h
RPCRT4                           loaded at 78000000h - 78087000h
ole32                            loaded at 771B0000h - 772D4000h
COMCTL32                         loaded at 71950000h - 71A34000h
msvcrt                           loaded at 77C10000h - 77C63000h
SHLWAPI                          loaded at 70A70000h - 70AD5000h
utf8api                          loaded at 10000000h - 1000D000h
comdlg32                         loaded at 763B0000h - 763F5000h
SHELL32                          loaded at 773D0000h - 77BC2000h
foo_input_std                    loaded at 008D0000h - 00972000h
MSACM32                          loaded at 77BE0000h - 77BF4000h
WINMM                            loaded at 76B40000h - 76B6C000h
foo_output_std                   loaded at 00A00000h - 00A09000h
foo_ui_std                       loaded at 00A10000h - 00A27000h
foo_vis_manager                  loaded at 00A30000h - 00A38000h
foo_cdda                         loaded at 00A40000h - 00A4E000h
foo_flac                         loaded at 00A50000h - 00A66000h
foo_ape                          loaded at 00A70000h - 00A8F000h
foo_wavpack                      loaded at 00A90000h - 00A9B000h
foo_speex                        loaded at 00AA0000h - 00AB8000h
foo_mod                          loaded at 00AC0000h - 00AC9000h
BASS                             loaded at 00AD0000h - 00B2A000h
foo_spc                          loaded at 00B30000h - 00B3F000h
foo_tfmx                         loaded at 00B40000h - 00B49000h
foo_shn                          loaded at 00B50000h - 00B5E000h
foo_ofr                          loaded at 00B60000h - 00B8E000h
foo_lpac                         loaded at 00BA0000h - 00BA7000h
lpac_codec_api                   loaded at 00BB0000h - 00BBA000h
lpaccodec                        loaded at 00BC0000h - 00BE9000h
foo_wma                          loaded at 00E10000h - 00E29000h
WMVCore                          loaded at 08530000h - 0872D000h
WMASF                            loaded at 07260000h - 07299000h
OLEAUT32                         loaded at 77120000h - 771AB000h
foo_ac3                          loaded at 00E30000h - 00E41000h
foo_psf                          loaded at 00E50000h - 00EFB000h
foo_nez                          loaded at 00F00000h - 00F2C000h
foo_festalon                     loaded at 00F30000h - 0106F000h
foo_sid                          loaded at 01070000h - 010B7000h
MSVCP60                          loaded at 55900000h - 55961000h
foo_xa                           loaded at 010C0000h - 010D1000h
foo_matroska                     loaded at 010E0000h - 0111F000h
foo_out_dsound_ex                loaded at 01120000h - 01129000h
DSOUND                           loaded at 73F10000h - 73F65000h
VERSION                          loaded at 77C00000h - 77C07000h
foo_out_ks                       loaded at 01140000h - 0114B000h
SETUPAPI                         loaded at 76670000h - 76757000h
foo_console                      loaded at 01150000h - 01157000h
foo_read_http                    loaded at 01160000h - 01169000h
WS2_32                           loaded at 71AB0000h - 71AC4000h
WS2HELP                          loaded at 71AA0000h - 71AA8000h
foo_rgscan                       loaded at 01170000h - 0117B000h
foo_diskwriter                   loaded at 01180000h - 01192000h
foo_albumlist                    loaded at 011A0000h - 011AA000h
foo_masstag                      loaded at 011B0000h - 011C0000h
foo_unpack                       loaded at 011C0000h - 011F1000h
foo_id3v2                        loaded at 01200000h - 0122E000h
foo_search_ex                    loaded at 01230000h - 01238000h
foo_bitcompare                   loaded at 01240000h - 01248000h
foo_abx                          loaded at 01250000h - 0125C000h
foo_burninate                    loaded at 01260000h - 0126C000h
foo_apl                          loaded at 01270000h - 0127A000h
foo_freedb                       loaded at 01280000h - 012B2000h
foo_shuffle                      loaded at 012C0000h - 012CE000h
foo_oggpreview                   loaded at 012D0000h - 013CD000h
foo_mpeg4u                       loaded at 013D0000h - 013F9000h
foo_history                      loaded at 01400000h - 0140E000h
foo_dsp_extra                    loaded at 01410000h - 01425000h
foo_convolve                     loaded at 01430000h - 01483000h
foo_dsp_crossfeed                loaded at 01490000h - 01496000h
foo_dynamics                     loaded at 014A0000h - 014A7000h
foo_dsp_soundtouch               loaded at 014B0000h - 014BB000h
foo_dsp_crossfade                loaded at 014C0000h - 014C7000h
foo_dsp_skip_silence             loaded at 014D0000h - 014D7000h
foo_dsp_nogaps                   loaded at 014E0000h - 014E7000h
foo_dsp_pause                    loaded at 014F0000h - 014F7000h
foo_vorbisenc                    loaded at 01500000h - 015FA000h
foo_monkey                       loaded at 01600000h - 0161E000h
foo_faac                         loaded at 01620000h - 01653000h
foo_toolame                      loaded at 01660000h - 01673000h
foo_lame                         loaded at 01680000h - 01689000h
foo_mpcenc                       loaded at 01690000h - 01698000h
foo_clienc                       loaded at 016A0000h - 016B4000h
foo_null                         loaded at 016C0000h - 016C7000h
foo_vis_simple_spectrum          loaded at 016D0000h - 016DA000h
foo_vis_vu_meter                 loaded at 016E0000h - 016E8000h
foo_vis_bubbla                   loaded at 016F0000h - 01704000h
OPENGL32                         loaded at 5ED00000h - 5EDC6000h
GLU32                            loaded at 68B20000h - 68B3E000h
DDRAW                            loaded at 73760000h - 737A4000h
DCIMAN32                         loaded at 73BC0000h - 73BC6000h
foo_osd                          loaded at 05710000h - 0571B000h
foo_audioscrobbler               loaded at 05720000h - 0572C000h
LIBCURL                          loaded at 05730000h - 05749000h
MSVCR71                          loaded at 7C340000h - 7C396000h
foo_pod                          loaded at 05860000h - 0589A000h
MSVCIRT                          loaded at 058A0000h - 058B0000h
uxtheme                          loaded at 5AD70000h - 5ADA4000h
mswsock                          loaded at 71A50000h - 71A8B000h
DNSAPI                           loaded at 76F20000h - 76F45000h
CLBCATQ                          loaded at 7C890000h - 7C911000h
COMRes                           loaded at 77050000h - 77115000h
msi                              loaded at 76400000h - 76601000h
winrnr                           loaded at 76FB0000h - 76FB7000h
WLDAP32                          loaded at 76F60000h - 76F8C000h
SXS                              loaded at 75E90000h - 75F37000h
rasadhlp                         loaded at 76FC0000h - 76FC5000h
imslsp                           loaded at 05DB0000h - 05ECB000h
lockbox                          loaded at 05ED0000h - 05F0C000h
imregexp                         loaded at 05F10000h - 05F1B000h
LIBEAY32_0.9.6g                  loaded at 05F20000h - 05FC9000h
WSOCK32                          loaded at 71AD0000h - 71AD8000h
wshtcpip                         loaded at 71A90000h - 71A98000h
iconv                            loaded at 05BB0000h - 05C8A000h
wdmaud                           loaded at 72D20000h - 72D29000h
msacm32                          loaded at 72D10000h - 72D18000h
midimap                          loaded at 77BD0000h - 77BD7000h
KsUser                           loaded at 73EE0000h - 73EE4000h
browseui                         loaded at 71500000h - 715FD000h
browselc                         loaded at 72430000h - 72442000h
imagehlp                         loaded at 76C90000h - 76CB2000h
DBGHELP                          loaded at 6D510000h - 6D58D000h

Stack dump analysis:
Address: 058858C0h, location: "foo_pod", loaded at 05860000h - 0589A000h
Address: 77F944A8h, location: "ntdll", loaded at 77F50000h - 77FF7000h
Symbol: "RtlRemoteCall" (+000001BEh)
Address: 77F57D70h, location: "ntdll", loaded at 77F50000h - 77FF7000h
Symbol: "RtlAllocateHeap" (+000001C2h)
Address: 77F58A3Ah, location: "ntdll", loaded at 77F50000h - 77FF7000h
Symbol: "RtlAllocateHeap" (+00000E8Ch)
Address: 0587F3ACh, location: "foo_pod", loaded at 05860000h - 0589A000h
Address: 0587F384h, location: "foo_pod", loaded at 05860000h - 0589A000h
Address: 0587F59Ch, location: "foo_pod", loaded at 05860000h - 0589A000h
Address: 0587F4BCh, location: "foo_pod", loaded at 05860000h - 0589A000h
Address: 00440073h, location: "foobar2000", loaded at 00400000h - 00451000h
Address: 5AD71B48h, location: "uxtheme", loaded at 5AD70000h - 5ADA4000h
Symbol: "DrawThemeParentBackground" (+000004D1h)
Address: 5AD8A60Dh, location: "uxtheme", loaded at 5AD70000h - 5ADA4000h
Symbol: "Ordinal9" (+000064CCh)
Address: 77D45A63h, location: "USER32", loaded at 77D40000h - 77DCC000h
Symbol: "GetWindowThreadProcessId" (+00000096h)
Address: 77D44124h, location: "USER32", loaded at 77D40000h - 77DCC000h
Symbol: "GetWindowLongW" (+00000092h)
Address: 77D9C064h, location: "USER32", loaded at 77D40000h - 77DCC000h
Address: 77D458A7h, location: "USER32", loaded at 77D40000h - 77DCC000h
Symbol: "DefWindowProcW" (+00000079h)
Address: 77D45899h, location: "USER32", loaded at 77D40000h - 77DCC000h
Symbol: "DefWindowProcW" (+0000006Bh)
Address: 77D7390Ah, location: "USER32", loaded at 77D40000h - 77DCC000h
Symbol: "CreateAcceleratorTableA" (+0000032Dh)
Address: 77D99B38h, location: "USER32", loaded at 77D40000h - 77DCC000h
Address: 77D45899h, location: "USER32", loaded at 77D40000h - 77DCC000h
Symbol: "DefWindowProcW" (+0000006Bh)
Address: 100036ADh, location: "utf8api", loaded at 10000000h - 1000D000h
Symbol: "uDefWindowProc" (+00000016h)
Address: 00A12C41h, location: "foo_ui_std", loaded at 00A10000h - 00A27000h
Address: 100031E5h, location: "utf8api", loaded at 10000000h - 1000D000h
Symbol: "uSetWindowLong" (+00000000h)
Address: 77D440BDh, location: "USER32", loaded at 77D40000h - 77DCC000h
Symbol: "GetWindowLongW" (+0000002Bh)
Address: 100031E5h, location: "utf8api", loaded at 10000000h - 1000D000h
Symbol: "uSetWindowLong" (+00000000h)
Address: 00A11EAEh, location: "foo_ui_std", loaded at 00A10000h - 00A27000h
Address: 77FA88F0h, location: "ntdll", loaded at 77F50000h - 77FF7000h
Symbol: "wcstombs" (+00003409h)
Address: 77F52310h, location: "ntdll", loaded at 77F50000h - 77FF7000h
Address: 77F8E3C3h, location: "ntdll", loaded at 77F50000h - 77FF7000h
Symbol: "RtlReAllocateHeap" (+00000D7Bh)
Address: 77C2AF77h, location: "msvcrt", loaded at 77C10000h - 77C63000h
Symbol: "realloc" (+0000031Fh)
Address: 77F944CBh, location: "ntdll", loaded at 77F50000h - 77FF7000h
Symbol: "RtlRemoteCall" (+000001E1h)
Address: 77F58BCDh, location: "ntdll", loaded at 77F50000h - 77FF7000h
Symbol: "RtlFreeHeap" (+0000018Fh)
Address: 77F59037h, location: "ntdll", loaded at 77F50000h - 77FF7000h
Symbol: "RtlFreeHeap" (+000005F9h)
Address: 77C2AA6Bh, location: "msvcrt", loaded at 77C10000h - 77C63000h
Symbol: "free" (+00000000h)
Address: 77C2AC19h, location: "msvcrt", loaded at 77C10000h - 77C63000h
Symbol: "free" (+000001AEh)
Address: 004342F4h, location: "foobar2000", loaded at 00400000h - 00451000h
Address: 00433749h, location: "foobar2000", loaded at 00400000h - 00451000h
Address: 10005B70h, location: "utf8api", loaded at 10000000h - 1000D000h
Address: 10005E39h, location: "utf8api", loaded at 10000000h - 1000D000h
Address: 77FA88F0h, location: "ntdll", loaded at 77F50000h - 77FF7000h
Symbol: "wcstombs" (+00003409h)
Address: 77F51C88h, location: "ntdll", loaded at 77F50000h - 77FF7000h
Address: 77F59037h, location: "ntdll", loaded at 77F50000h - 77FF7000h
Symbol: "RtlFreeHeap" (+000005F9h)
Address: 0587DF72h, location: "foo_pod", loaded at 05860000h - 0589A000h
Address: 0586E6A4h, location: "foo_pod", loaded at 05860000h - 0589A000h
Address: 058858C0h, location: "foo_pod", loaded at 05860000h - 0589A000h
Address: 058858C0h, location: "foo_pod", loaded at 05860000h - 0589A000h
Address: 00433435h, location: "foobar2000", loaded at 00400000h - 00451000h
Address: 77C2AA6Bh, location: "msvcrt", loaded at 77C10000h - 77C63000h
Symbol: "free" (+00000000h)
Address: 00415FAFh, location: "foobar2000", loaded at 00400000h - 00451000h
Address: 085E0091h, location: "WMVCore", loaded at 08530000h - 0872D000h
Symbol: "WMIsAvailableOffline" (+0002B61Dh)
Address: 00439644h, location: "foobar2000", loaded at 00400000h - 00451000h
Address: 0043946Ch, location: "foobar2000", loaded at 00400000h - 00451000h
Address: 00A1C784h, location: "foo_ui_std", loaded at 00A10000h - 00A27000h
Address: 00A13099h, location: "foo_ui_std", loaded at 00A10000h - 00A27000h
Address: 00A120C5h, location: "foo_ui_std", loaded at 00A10000h - 00A27000h
Address: 100031E5h, location: "utf8api", loaded at 10000000h - 1000D000h
Symbol: "uSetWindowLong" (+00000000h)
Address: 77D440BDh, location: "USER32", loaded at 77D40000h - 77DCC000h
Symbol: "GetWindowLongW" (+0000002Bh)
Address: 77D440C6h, location: "USER32", loaded at 77D40000h - 77DCC000h
Symbol: "GetWindowLongW" (+00000034h)
Address: 100031E5h, location: "utf8api", loaded at 10000000h - 1000D000h
Symbol: "uSetWindowLong" (+00000000h)
Address: 00A11EAEh, location: "foo_ui_std", loaded at 00A10000h - 00A27000h
Address: 77D7390Ah, location: "USER32", loaded at 77D40000h - 77DCC000h
Symbol: "CreateAcceleratorTableA" (+0000032Dh)
Address: 77D99B08h, location: "USER32", loaded at 77D40000h - 77DCC000h
Address: 77D440C6h, location: "USER32", loaded at 77D40000h - 77DCC000h
Symbol: "GetWindowLongW" (+00000034h)
Address: 100031E4h, location: "utf8api", loaded at 10000000h - 1000D000h
Symbol: "uGetWindowLong" (+0000000Eh)
Address: 00A11F0Ch, location: "foo_ui_std", loaded at 00A10000h - 00A27000h
Address: 00A11EAEh, location: "foo_ui_std", loaded at 00A10000h - 00A27000h
Address: 77D43A50h, location: "USER32", loaded at 77D40000h - 77DCC000h
Address: 00A11EAEh, location: "foo_ui_std", loaded at 00A10000h - 00A27000h
Address: 00A11EAEh, location: "foo_ui_std", loaded at 00A10000h - 00A27000h
Address: 77D43B1Fh, location: "USER32", loaded at 77D40000h - 77DCC000h
Address: 00A11EAEh, location: "foo_ui_std", loaded at 00A10000h - 00A27000h

Version info:
foobar2000 v0.8.1
UNICODE
Aero
QUOTE (scottder @ May 12 2004, 07:57 PM)
I keep getting the following when I copy to my ipod (15gb 3G with latest firmware)

Does this only happen when you use Send Selected (i.e. do the other options like Send Playlist work)?

It is hard to tell exactly what is going on from the crash log, but I can see where it could crash in some rare cases. I'll try to get an updated version ready for testing later on tonight.

Just in case anyone was wondering, I have been very busy at work (Foobar component development doesn't pay very well... smile.gif ) and on some other projects. So I haven't had much time to work on foo_pod, although I still hope to get transcoding support in soon.
Aero
Version 0.6.1 is now available.

This fixes an couple of regressions - one in Send/Sync files, where duplicate files weren't always detected, leading to unnecessary copying of files to the iPod. The other regression was with Delete Selected Files, which due to the bug, didn't actually delete anything.

I also attempted to fix the crash reported by scottder . Let me know if 0.6.1 takes care of the problem.


From the Readme:
CODE
Version 0.6.1 - May 12, 2004
*  Fixed a regression in send/sync files, where a duplicate file could be copied to the
  iPod, even though there was a copy already on the iPod.

*  Fixed another regression - this time in Delete Selected Files from iPod.  This feature
  would silently fail due to the bug.

*  Added preliminary support for reading OTG playlists.  For now, they can be dumped as
  part of the Export XML feature.

*  Possibly fixed a crash in Send Selected Files To iPod, as reported by scottder.

*  Automatically create all necessary directories, so that a completely blank iPod can
  be used without first being initialized by iTunes or the iPod Updater.
scottder
I'll try this new version, thanks (and yes it was only when I use the "Copy Selected FIles to Ipod" option, it would copy all the files then crash.

Scott
scottder
Ok, i tried it this morning and it worked without a hitch! Thank you for this wonderful plugin!
Aero
QUOTE (scottder @ May 13 2004, 07:39 AM)
Ok, i tried it this morning and it worked without a hitch! Thank you for this wonderful plugin!

Cool! Just out of curiousity, where you able to identify if any one particular file was causing the crash?
scottder
QUOTE (Aero @ May 13 2004, 02:49 PM)
QUOTE (scottder @ May 13 2004, 07:39 AM)
Ok, i tried it this morning and it worked without a hitch! Thank you for this wonderful plugin!

Cool! Just out of curiousity, where you able to identify if any one particular file was causing the crash?

No, it just seemed to happen each time I would send files to the ipod. Didn't seem to be any particular files that would trigger it. Odd.
Moonwhaler
The joy! Thanks for this GREAT plugin... I owe you one!
Moon
Aero
QUOTE (Moonwhaler @ May 13 2004, 03:35 PM)
The joy! Thanks for this GREAT plugin... I owe you one!

Thanks!

I am happy to accept donations... cool.gif
SNAG
Woah.
Even when I have yet to receive my iPod (it's in the mail), I can't wait to use this plugin!

You guys are really great programmers!! biggrin.gif

Foobar never fails to amaze me with its plugins and stuff...
Paya
Hello again, been a while! smile.gif

I was just wondering if you someway could make foo_pod write soundcheck tags, so that we can calculate Album Gain in foobar, and use that info in iTunes? Soundcheck is, afaik, only Track Gain-based, and from my experiences this is very annoying. I ask because iTunes still has some features that foo_pod lacks (rating playcount info updated from iPod when you sync, audible content, Apple Lossless Audio Codec), and therefore I - at the moment - use iTunes (started using foo_pod when I bought the iPod, though...). And it annoys me to extremes that Soundcheck is track gained, and so it would be nice if I could select all my music in foobar, right click, select "Replaygain -> Scan selection as album" and foobar/foo_pod would calculate and write the usual Replaygain values plus Soundcheck tags with proper Album Gain...

Did that make any sense? smile.gif

Would be very cool...
Fickle
Not sure if this is a bug but its quite strange -

Im using the latest iPod software + iTunes, and fortunately I havent noticed any major probjels (running foobar 0.8.1 with winXP pro) - except for this strange problem -

What I usually do is plugin the iPod - then select 'unmount' via components-->foo_pod-->unmount. This all works fine - however I notice the first time I right click the mouse button on the playlist - the iPod mounts itself. After unmounting the iPod again via the menu a second time - I can right-click again on the playlist without the iPod mounting itself.

Also - one other thing, I dont know if this has been discussed yet (as I havent had time to read the whole thread laugh.gif) - but has support for 'copy selected files to directory' been considered ? Currently I am still using Ephpod to copy files from my iPod back to my computer.

This is a great plugin ! Thanks for all the great work.
ronyzyz1
QUOTE (Fickle @ May 17 2004, 05:01 PM)
Also - one other thing, I dont know if this has been discussed yet (as I havent had time to read the whole thread laugh.gif) - but has support for 'copy selected files to directory' been considered ?  Currently I am still using Ephpod to copy files from my iPod back to my computer.

First, load the iPod songs into a playlist. Then select the files you want to copy to your computer. Then drag and drop them from the playlist into the folder you want them, or onto the desktop.
Aero
QUOTE (Paya @ May 17 2004, 09:49 AM)
I was just wondering if you someway could make foo_pod write soundcheck tags, so that we can calculate Album Gain in foobar, and use that info in iTunes? Soundcheck is, afaik, only Track Gain-based, and from my experiences this is very annoying. I ask

As far as I know, no one has reverse engineered the format that iTunes uses to store the SoundCheck data as part of the file's metadata. It is known that the information is stored as a Comment, but the last I knew, no one knew how to generate this data.

Since foo_pod does write the SoundCheck data into the iTunesDB file on the iPod, I would think that it should be possible to read that information in via iTunes and somehow coax it to save it out into a new/existing file?

If anyone is interested in doing the research, with the new "Export iTunesDB file as XML" feature in foo_pod, it should be possible to figure out the encoding. Just load up some songs from iTunes that have the Sound Check encoding as part of the file, use iTunes to load them onto the iPod, then use foo_pod to examine the Sound Check value in the DB. I'm don't use iTunes and have no interest in figuring out the encoding, but if someone tells me how to convert from a Sound Check integer into the Comment field encoding, I will add it to foo_pod.


QUOTE
because iTunes still has some features that foo_pod lacks (rating playcount info updated from iPod when you sync, audible content, Apple Lossless Audio Codec)

I can currently read the play count data, per the semi-recent discussion in this forum, but there is some question on how to actually use it in Foobar.

As for Audible and ALAC, I doubt there will ever been support for Audible in Foobar (and hence foo_pod), but ALAC support should be doable.
Aero
QUOTE (Fickle @ May 17 2004, 10:01 AM)
What I usually do is plugin the iPod - then select 'unmount' via components-->foo_pod-->unmount.  This all works fine - however I notice the first time I right click the mouse button on the playlist - the iPod mounts itself.  After unmounting the iPod again via the menu a second time - I can right-click again on the playlist without the iPod mounting itself.

This isn't really a bug, but I can see how it is irritating. The problem is that when the context (right mouse button) menu is displayed, foo_pod is doing some checking of the selected files (if any) to determine if it should show the "Send Selected" / "Delete Selected" menu items. This apparently mounts the iPod as part of the check. I'll fix this in the next version.

QUOTE
Also - one other thing, I dont know if this has been discussed yet (as I havent had time to read the whole thread laugh.gif) - but has support for 'copy selected files to directory' been considered ?  Currently I am still using Ephpod to copy files from my iPod back to my computer.

Yeah, this is something that I really want to implement. I want to set it up so that you can configure some TAGZ format strings to build the directory structure and filenames as you wish based on the metadata.

For example, if you want your file structure to be: artist\album\01 - The First Song.mp3, you could set the format string to "%artist%\%album%\%tracknumber% - %_filename%". You can currently do something very similar for DiskWriter, so I'm undecided whether I will try to figure out how to use DiskWriter, or just code it myself.
Paya
When I look at the tag of a file that has been "Soundchecked" by iTunes, this is what it says in the "comment" field: 00001020 0000118B 00003555 00004352 0002E675 0002230E 00008000 00008000 0001D4EE 0001D4EE

I thought that as you'd already figured out how to calculate Soundcheck values from Replaygain values, it would just be a matter of adding that into the "comment" field? Guess I was wrong then...
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2009 Invision Power Services, Inc.