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
krmathis
QUOTE (Aero @ Apr 2 2004, 06:16 PM)
I have already implemented iPod Playlist creation, which will be released in 0.5 as soon as I redo the progress dialogs and look into reardon's sync problem. . .

I almost can`t wait to check out the new version!
The default playlist creating is just what I wanted, but I guess I will check out the others methods as well.

I guess EphPod will be leaving my computer pretty soon. tongue.gif

Solaris
ronyzyz1
Is it possible to use all of foo_pod's features without first installing iTunes (to get the IpodService)?
Aero
QUOTE (DocUK @ Apr 2 2004, 10:59 AM)
Is it possible to use all of foo_pod's features without first installing iTunes (to get the IpodService)?

If you don't have the iPodService installed, you can't do the following:

* Use the Mount feature (which should be ok, since the iPod should auto mount when you connect it to the computer if the service is not installed).
* Use the iPod Name, Owner's Name, and Disk Mode preference items.

Otherwise, foo_pod doesn't require iPodService or iTunes to be installed, and never will.
ronyzyz1
Will these features be available in the future? Will foo_pod give me an error message if I don't have IpodService installed?

By the way, I'm hoping to see foo_pod 0.5 released today, as I am leaving for 2 week vacation tomorrow, and I'd like a fresh iPod to go.
Aero
QUOTE (DocUK @ Apr 3 2004, 04:50 AM)
Will these features be available in the future? Will foo_pod give me an error message if I don't have IpodService installed?

No, there won't be an error message - the features that require iPodService will simply be grayed out / unavailable.

iPodService is also packaged with the iPod Updater utility, and while that version doesn't work with foo_pod at the moment, it might be possible to avoid having to install iTunes but still be able to utilize iPodService features.

But the main thing to remember is that the iPodService features are just icing on the cake - the core foo_pod functionality (read, send/sync, etc.) will never require iPodService. I only have iTunes on one of my computers, and that is just to create test iTunesDB files and test out the iPodService features in foo_pod.

QUOTE
By the way, I'm hoping to see foo_pod 0.5 released today, as I am leaving for 2 week vacation tomorrow, and I'd like a fresh iPod to go.

No 0.5 today, although I am getting close. I might put a preview version online so you can enjoy your vacation with playlists! smile.gif

Everything seems to working well, other than there are currently no progress dialogs in the program at all.
ronyzyz1
Don't worry, I'll live smile.gif
Otto42
QUOTE (Aero @ Mar 26 2004, 03:31 PM)
QUOTE (NEMO7538 @ Mar 26 2004, 05:15 PM)
It seems the link (Otto) is broken ....
BTW will foo_pod source code be available in the future?

I think Otto's URL is hosted on a DSL connected server, so it may not always be active.

Yep. Now it's on a cable modem and should be semi-always on for the forseeable future. Move is complete, as far as that goes.

What I'm saying is that the link is active again. Sorry about the inconvience.

However, there's still bugs in the code that I'm working on tracking down, and stuff I need to add to get the code up to date with what foo_pod has, so don't take anything as the latest version at the moment. Just be aware that if you want to develop something using the iPodDB code, that you're developing with something that's constantly under refinement. Aero's input on this has been invaluable in making something that works really well and is improving quite rapidly, or at least would be improving if I hadn't been on vacation for 10 days followed by a move to a new town and 10 more days of no internet access... smile.gif

As for licensing, I don't much care what license it'll be under. BSD/GPL/something along those lines. Whatever is easiest. I know that foobar itself requires GPL or something for its plugins, methinks. I haven't looked into it deeply. Anyway, I consider the code there so that people can do whatever they want with it... just be kind enough to send me the changes you make so I can make it better and more useful. I've seen a lot of crappy code out there to work with the iPod's formats, and mostly it seemed to be quick hack type stuff, which is why it's so crappy. I just thought that a reasonably well designed piece of code to deal with the iPod's file formats would significantly improve the state of the software out there and maybe help give rise to something better. So I tried to make a clean object-oriented type library for it. Aero gave me a reason to continue working on it after I finished the initial functionality. So much of the code that I write in my free time goes nowhere, so it's pretty cool to have someone using something I wrote, sort of thing. wink.gif

foo_pod is neat. Yes, I've finally tried it out. biggrin.gif Still gotta get the hang of foobar itself though. Don't have a good grip on it for anything beyond simple tasks yet.
Aero
Just a quick note - I am pretty close to posting 0.5. The only holdups are the progress dialogs and reardon's data loss problem (empty playlist and either no songs, or only a handful of songs). I am experiencing the same problem as reardon, but I have been unable to narrow down the cause and the problem is fairly infrequent, so I am leaning towards releasing 0.5 with this known problem and hope that someone can find a simple test case that reproduces the bug.

One other new feature that will interest a lot of posters is a ReplayGain -> Sound Check conversion. I'm using Otto42's data and Mike Giacomelli's analysis to do the conversion.

As usual, Sound Check is completely undocumented, and as far as I know, there are no other programs that handle Sound Check besides iTunes. But from some quick tests that I tried, it seems to be working as expected. For example, I ReplayGain'ed two albums - Aerosmith's Honkin' On Bobo (-11.93dB...damn!) and Robert Johnson's The Complete Recordings (-4.47 dB). Without Sound Check enabled, Bobo sounded obviously much louder at the same iPod volume. With Sound Check enabled and my ReplayGain -> Sound Check conversion, both albums sounded to me like they were about the same apparent volume on iPod. The conversion algorithm will only improve with more data, but I believe that it is good enough now for general testing.

Since I am fairly new to ReplayGain, I would like some feedback on how people use it. In the conversion function, I currently search for album RG, and use that if it is available. Otherwise I look for track RG, and if that isn't found, I disable sound check. Is this good enough, or should I put an option in the preferences like this:

ReplayGain -> Sound Check Conversion:
(o) Disable (*) Prefer Album Gain (o) Prefer Track Gain

Also, would people be interested in an overall preamp volume feature in foo_pod? It would be a slider that would boost or lower the volume for all songs, in addition to whatever Sound Check does. I haven't tried it, but I understand that this is what EUPod does, in order to boost the volume for European volume limited iPods.


Edit:Comments are still welcomed, but I have already implemented the RG prefs and Preamp as discussed above.
Canar
QUOTE (Otto42 @ Apr 3 2004, 04:57 PM)
As for licensing, I don't much care what license it'll be under. BSD/GPL/something along those lines. Whatever is easiest. I know that foobar itself requires GPL or something for its plugins, methinks. I haven't looked into it deeply. Anyway, I consider the code there so that people can do whatever they want with it...

BSD is the "optimal" license for foobar2000 plugins and related code. It sounds most like your design motives anyhow.

BSD License
krmathis
I use ReplayGain for ALL my tracks, so beeing able to transfer them to the iPod would be great. For my sake this would be enough for me:
QUOTE
Search for album RG, and use that if it is available. Otherwise look for track RG, and if that isn't found, disable sound check.
An overall preamp setting would also be a nice feature. I use EUpod for that at the moment..
Please release version 0.5 soon, so we could test the new playlist feature! cool.gif

Solaris
Aero
QUOTE (solaris @ Apr 5 2004, 12:36 AM)
I use ReplayGain for ALL my tracks, so beeing able to transfer them to the iPod would be great. For my sake this would be enough for me:

I just got back from a walk, on which I had my first "real world" experience with Replay Gain/Sound Check, and all I can say is Replay Gain rulez! cool.gif

At first, I was playing around with Sound Check just to see what the difference was, and it was ok. After awhile, I forgot that I had left Sound Check on and I was just listening to music. By chance (shuffle on), there was a Honkin' On Bobo (-11.93dB) song followed by a Robert Johnson song (-4.47 dB). Both were at similar, comfortable volume levels. Then I remembered Sound Check, and nearly blew my eardrums out when I turned it off and went back to the Aerosmith song!

So I can see why there are a lot of people who use Replay Gain, and I imagine there will be a few happy iPod/foo_pod users soon! wink.gif

QUOTE
An overall preamp setting would also be a nice feature. I use EUpod for that at the moment..
Please release version 0.5 soon, so we could test the new playlist feature!

I implemented it identically to iTunes (and apparently EUpod) : a -100% to 100% slider. I have no idea what those values translate to in decibels, but it is there.


I have posted a 0.5 preview version so people can play around with playlists, Replay Gain, and the Preamp features. Preamp is completely untested, there are no progress dialogs, and foo_pod is nearly as likely to wipe your iPod as it is to do anything useful.

Let me know if you have any problems with blank playlists and other data loss problems, but for the preview version, unless you can reliably reproduce the steps and recreate the problem, you should just wipe the iPod (use the Delete All Songs And Playlists feature) and reload it.
krmathis
Aero, thanks a lot for the preview version! wub.gif
I`m at work now, but will definately give it real test as soon as I get home. I will report back later on.

But, can I request one feature to be added?
I would really like a "Send/Sync all selected Playlists to iPod", in addition to the current choices.
In the foo_pod preferences set which playlist to sync (ex. General, Favorites, Rock), then use the menu to Send/Sync these playlists to iPod.

The reason are that I have 6 playlists in foobar2000, but only 4 or them have files compatible with the iPod. The others are FLAC files and radio streams...

Solaris
Aero
QUOTE (solaris @ Apr 5 2004, 04:52 AM)
But, can I request one feature to be added?
I would really like a "Send/Sync all selected Playlists to iPod", in addition to the current choices.

Send/Sync All is already in there! smile.gif New in 0.5.

QUOTE
In the foo_pod preferences set which playlist to sync (ex. General, Favorites, Rock), then use the menu to Send/Sync these playlists to iPod.

The reason are that I have 6 playlists in foobar2000, but only 4 or them have files compatible with the iPod. The others are FLAC files and radio streams...

That's not a bad idea, but foo_pod will only transfer audio files that the iPod can play (.mp3, .mp4/.m4p, WAV*), so you can sync your other playlists without harm. Maybe it will create a blank playlist...I don't think I have tested that, but I know it won't transfer unsupported formats. I'm not sure about the streams, though. I might have to add a check that only local files are transferrerd.

I was also thinking of adding an exclusion playlist option, so you could populate a playlist of songs that you do *not* want transferred to the iPod. Prefs are getting pretty crowded...


* AIFF is also supported by the iPod, but Foobar doesn't report AIFF files as such, so foo_pod sees them as an unknown codec and doesn't send them.
krmathis
Aero, I have some good news and some bad news! wink.gif

* The good news is that the new playlist creation and ReplayGain functions seems to work as they should.
At least when I use "Send/Sync current playlist to iPod". Great!

* The bad news is that when I use the "Send all playlists to iPod" foobar2000 hangs up totally (Not responding, have to kill it trough Task Manager). As you said it does not transfer unsupported files, but it tries to transfer my radio stream playlist files..
QUOTE
INFO (Foo_Pod) : iPodService is not available
INFO (CORE) : startup time: 320 ms
ERROR (Foo_Pod) : Error #2 copying 205.188.234.65:8022/ to h:
ERROR (Foo_Pod) : Error #2 copying 205.188.234.65:8020/ to h:
ERROR (Foo_Pod) : Error #2 copying 205.188.234.68:8006/ to h:
ERROR (Foo_Pod) : Error #2 copying 205.188.234.4:8028/ to h:
ERROR (Foo_Pod) : Error #2 copying 205.188.234.161:8030/ to h:
ERROR (Foo_Pod) : Error #2 copying 205.188.234.65:8018/ to h:
ERROR (Foo_Pod) : Error #2 copying 193.201.220.87:8000/ to h:
ERROR (Foo_Pod) : Error #2 copying 194.140.112.114:8000/ to h:
ERROR (Foo_Pod) : Error #2 copying 212.23.3.22:8000/ to h:
ERROR (Foo_Pod) : Error #2 copying 213.161.200.21:8100/ to h:
ERROR (Foo_Pod) : Error #2 copying 213.73.255.244:8000/ to h:
ERROR (Foo_Pod) : Error #123 copying 64.236.34.97:5190/stream/1065 to h:\iPod_Control\Music\F17\1065
ERROR (Foo_Pod) : Error #123 copying 64.236.34.97:80/stream/1065 to h:\iPod_Control\Music\F15\1065
INFO (Foo_Pod) : 0 files copied (0.00 MB) to the iPod in 0.40 seconds (0.00 MB/s)
It creates an empty playlist on my iPod, but thats all...
The sollution to create a playlist exclusion list is maybe the way to go?
If you find space for it in the preferences window! tongue.gif

I really appreciate what you done with this component so far!


Edit:
I tried with a playlist with 1 FLAC file and it copied it and created the playlist, but obviously iPod crashed when I tried to play it.
QUOTE
INFO (Foo_Pod) : iPodService is not available
INFO (CORE) : startup time: 461 ms
INFO (Foo_Pod) : 1 file copied (22.79 MB) to the iPod in 2.51 seconds (9.07 MB/s)


Edit #2:
I just experienced foobar2000 crashes when copying files to an empty iPod!
Maybe you can reproduce this: First "Delete all iPod music and Playlists", then copy a file or playlist to the iPod. foo_pod warn you with 'Unable to read the iTunes DB file....' , click Yes, iPod hd spins up and foobar2000 exits instantly.

More info: If I use foo_pod 0.4.1 to add one (1) file to the iPod, then switch to 0.5 the same happends. But when I add 36 tracks/1 playlist with 0.4.1, then switch to 0.5 no more crashes. Strange thing! crying.gif

Crash reproduced 3 times.
I can post the long crash log if needed!

Using Windows XP Pro and foobar2000 0.8.

Solaris
rufu
I'm having problems with the 0.5 preview. I used the "Delete All iPod Music and Playlists" then tried Sync All Playlists, and got this error message "Unable to read iTunesDB file. If you have a new or freshly formatted iPod, this is not an error. Do you want to continue?". I clicked Yes and which point foobar promptly crashed. I then tried formatting my iPod using the iPod firmware updater, tried again and it still crashed. I've tried using any of the transfer ablities of foo_pod and this happens for all of them. Here's one of the error logs:

QUOTE
Illegal operation:
Code: C0000005h, flags: 00000000h, address: 0141712Fh
Access violation, operation: read, address: 00000000h
Call path:
WinMain=>app_mainloop=>menu command: "Components/foo_pod/22| Sync Current Playlist"
This is the first crash logged by this instance.
Code bytes (0141712Fh):
014170EFh:  50 57 E8 5A E3 FF FF 8B F0 33 C0 89 45 EC 89 45
014170FFh:  F0 89 45 F4 89 45 F8 8D 44 36 02 83 C4 08 3D 00
0141710Fh:  10 00 00 77 0F 83 C0 03 24 FC E8 B2 71 00 00 89
0141711Fh:  65 10 EB 0C 50 8D 4D EC E8 B4 07 00 00 89 45 10
0141712Fh:  8A 07 8B DE 8B 75 10 C7 45 08 00 00 00 00 84 C0
0141713Fh:  74 75 85 DB 74 71 8D 4D FC 53 51 57 E8 60 FA FF
0141714Fh:  FF 83 C4 0C 85 C0 74 5F 3B C3 77 5B 03 F8 2B D8
0141715Fh:  8B 45 FC 85 C0 76 50 3D 00 00 10 00 73 49 3D 00
Stack (0012E044h):
0012E024h:  00BBD274 43000000 00000000 00000000
0012E034h:  00BBD5E8 77CD3E16 77CD3E1F 0000E4DA
0012E044h:  0141711E 02B123D8 77C2C1BB 02B56780
0012E054h:  00000000 00000000 00000000 00000000
0012E064h:  0012E074 00000000 0140274A 00000000
0012E074h:  02B123D8 0012E044 00000001 00000000
0012E084h:  FFFFFFFF 02B56780 0151CA90 00000000
0012E094h:  0012ED3C 4066E544 0000AC44 00000000
0012E0A4h:  0041D4DB 02B123D8 00000000 014202CC
0012E0B4h:  02B565C0 0000009C 0000009C 00000000
0012E0C4h:  0000008B 534D743E 01C3D82D 73AC1E32
0012E0D4h:  01C414D3 014202CC 02B568C0 0000009C
0012E0E4h:  0000009C 00000000 00000084 014202CC
0012E0F4h:  00000000 00000000 00000000 00000000
0012E104h:  00000000 014202CC 02B1A420 00000035
0012E114h:  00000035 00000000 00000024 014202CC
0012E124h:  00000000 00000000 00000000 00000000
0012E134h:  00000000 0012EC94 0141E5C3 00000020
0012E144h:  01404904 0151CA90 02B56780 0012ED3C
0012E154h:  00000000 01FCCD4C 00000001 66000000
Registers:
EAX: 0141711E, EBX: 02B56780, ECX: 00000000, EDX: 5DA70069
ESI: 00000000, EDI: 00000000, EBP: 0012E068, ESP: 0012E044
Crash location: "foo_pod", loaded at 01400000h - 01438000h

Loaded modules:
foobar2000                    loaded at 00400000h - 00451000h
ntdll                            loaded at 77CC0000h - 77D75000h
kernel32                      loaded at 77E60000h - 77F50000h
USER32                        loaded at 77D80000h - 77E11000h
GDI32                            loaded at 773E0000h - 77425000h
ole32                            loaded at 774D0000h - 7760D000h
msvcrt                        loaded at 77C10000h - 77C68000h
ADVAPI32                      loaded at 77F50000h - 77FEB000h
RPCRT4                        loaded at 77340000h - 773D1000h
COMCTL32                      loaded at 4D6C0000h - 4D7AC000h
SHLWAPI                          loaded at 772D0000h - 7731E000h
utf8api                          loaded at 10000000h - 1000D000h
comdlg32                      loaded at 763B0000h - 763F9000h
SHELL32                          loaded at 7C800000h - 7D010000h
foo_abx                          loaded at 008D0000h - 008DC000h
foo_ac3                          loaded at 008E0000h - 008F1000h
foo_albumlist                    loaded at 00900000h - 0090A000h
foo_ape                          loaded at 00910000h - 00935000h
foo_apl                          loaded at 00940000h - 0094A000h
foo_bitcompare                loaded at 00950000h - 00958000h
foo_burninate                    loaded at 00960000h - 0096C000h
VERSION                          loaded at 77C00000h - 77C08000h
foo_cdda                      loaded at 00970000h - 0097E000h
foo_clienc                    loaded at 00980000h - 0098B000h
foo_console                      loaded at 00990000h - 00997000h
foo_convolve                  loaded at 009A0000h - 009EF000h
foo_dbsearch                  loaded at 009F0000h - 00A06000h
foo_diskwriter                loaded at 00A10000h - 00A22000h
WINMM                            loaded at 76B40000h - 76B6D000h
foo_dsp_crossfade                loaded at 00AB0000h - 00AB7000h
foo_dsp_crossfeed                loaded at 00AC0000h - 00AC6000h
foo_dsp_extra                    loaded at 00AD0000h - 00AE5000h
foo_dsp_nogaps                loaded at 00AF0000h - 00AF7000h
foo_dsp_pause                    loaded at 00B00000h - 00B07000h
foo_dsp_skip_silence          loaded at 00B10000h - 00B17000h
foo_dsp_soundtouch            loaded at 00B20000h - 00B2B000h
MSVCP60                          loaded at 76080000h - 760E6000h
foo_dynamics                  loaded at 00B30000h - 00B37000h
foo_faac                      loaded at 00B40000h - 00B73000h
foo_festalon                  loaded at 00B80000h - 00CBF000h
foo_flac                      loaded at 00CC0000h - 00CD6000h
foo_flaccer                      loaded at 00CE0000h - 00CF6000h
foo_freedb                    loaded at 00D00000h - 00D2E000h
WS2_32                        loaded at 71AB0000h - 71AC7000h
WS2HELP                          loaded at 71AA0000h - 71AA8000h
foo_history                      loaded at 00D30000h - 00D3E000h
foo_id3v2                        loaded at 00D40000h - 00D6E000h
foo_input_std                    loaded at 00D70000h - 00E0F000h
MSACM32                          loaded at 77BE0000h - 77BF5000h
foo_lame                      loaded at 00E10000h - 00E19000h
foo_looks                        loaded at 00E20000h - 00E8D000h
gdiplus                          loaded at 4D120000h - 4D2C3000h
foo_lpac                      loaded at 00EA0000h - 00EA7000h
lpac_codec_api                loaded at 00EB0000h - 00EBA000h
lpaccodec                        loaded at 00EC0000h - 00EE9000h
foo_masstag                      loaded at 01110000h - 01120000h
foo_matroska                  loaded at 01120000h - 0115F000h
foo_mod                          loaded at 01160000h - 01169000h
BASS                          loaded at 01170000h - 011CA000h
foo_monkey                    loaded at 011D0000h - 011EE000h
foo_mpcenc                    loaded at 011F0000h - 011F8000h
foo_mpeg4u                    loaded at 01200000h - 01229000h
foo_nero                      loaded at 01230000h - 01240000h
MFC42                            loaded at 73DD0000h - 73ECD000h
foo_nez                          loaded at 01240000h - 0126C000h
foo_null                      loaded at 01270000h - 01277000h
foo_ofr                          loaded at 01280000h - 012AE000h
foo_oggpreview                loaded at 012C0000h - 013BD000h
foo_output_std                loaded at 013C0000h - 013C9000h
foo_out_dsound_ex                loaded at 013D0000h - 013D9000h
DSOUND                        loaded at 73F10000h - 73F6A000h
foo_out_ks                    loaded at 013F0000h - 013FB000h
SETUPAPI                      loaded at 779A0000h - 77A96000h
foo_pod                          loaded at 01400000h - 01438000h
OLEAUT32                      loaded at 77120000h - 771AC000h
MSVCIRT                          loaded at 01440000h - 01451000h
foo_psf                          loaded at 01560000h - 0160B000h
foo_quicktag                  loaded at 01610000h - 01619000h
foo_read_http                    loaded at 01620000h - 01629000h
foo_rgscan                    loaded at 01630000h - 0163B000h
foo_scheduler                    loaded at 01640000h - 01652000h
foo_search_ex                    loaded at 01660000h - 01668000h
foo_shn                          loaded at 01670000h - 0167E000h
foo_shuffle                      loaded at 01680000h - 0168E000h
foo_sid                          loaded at 01690000h - 016D7000h
foo_spc                          loaded at 016E0000h - 016EF000h
foo_speex                        loaded at 016F0000h - 01708000h
foo_stfu                      loaded at 01710000h - 01717000h
foo_tfmx                      loaded at 01720000h - 01729000h
foo_toolame                      loaded at 01730000h - 01743000h
foo_ui_columns                loaded at 01750000h - 01772000h
foo_ui_std                    loaded at 01780000h - 01797000h
foo_unpack                    loaded at 017A0000h - 017D1000h
foo_vis_manager                  loaded at 017E0000h - 017E8000h
foo_vis_simple_spectrum          loaded at 017F0000h - 017FA000h
foo_vis_vu_meter              loaded at 01800000h - 01808000h
foo_vorbisenc                    loaded at 01810000h - 0190A000h
foo_wavpack                      loaded at 01910000h - 0191B000h
foo_wma                          loaded at 01920000h - 01939000h
WMVCore                          loaded at 01940000h - 01B49000h
wmidx                            loaded at 4DF90000h - 4DFB9000h
WMASF                            loaded at 59A10000h - 59A4B000h
msdmo                            loaded at 736B0000h - 736B7000h
WININET                          loaded at 771B0000h - 77252000h
CRYPT32                          loaded at 77B00000h - 77B95000h
MSASN1                        loaded at 77BA0000h - 77BB1000h
urlmon                        loaded at 769C0000h - 76A50000h
MPR                              loaded at 71B20000h - 71B32000h
MSVFW32                          loaded at 755B0000h - 755D1000h
WSOCK32                          loaded at 71AD0000h - 71AD9000h
DRMClien                      loaded at 01B50000h - 01B9F000h
foo_xa                        loaded at 01BB0000h - 01BC1000h
uxtheme                          loaded at 5AD70000h - 5ADA7000h
MSCTF                            loaded at 74720000h - 7476B000h
Powrprof                      loaded at 74AD0000h - 74AD7000h
CLBCATQ                          loaded at 77610000h - 776BF000h
COMRes                        loaded at 77050000h - 77115000h
msi                              loaded at 74810000h - 74A72000h
USERENV                          loaded at 76620000h - 766D2000h
xpsp2res                      loaded at 03220000h - 034AF000h
SXS                              loaded at 75E90000h - 75F3F000h
mslbui                        loaded at 605D0000h - 605D9000h
imagehlp                      loaded at 76C90000h - 76CB8000h
DBGHELP                          loaded at 5D090000h - 5D131000h

Stack dump analysis:
Address: 0141711Eh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 77C2C1BBh, location: "msvcrt", loaded at 77C10000h - 77C68000h
Symbol: "free" (+00000000h)
Address: 0140274Ah, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 0041D4DBh, location: "foobar2000", loaded at 00400000h - 00451000h
Address: 014202CCh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 014202CCh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 014202CCh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 014202CCh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 014202CCh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 0141E5C3h, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 01404904h, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 014202CCh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 77CD1C91h, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "RtlFreeHeap" (+00000100h)
Address: 014202CCh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 014202CCh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 014202CCh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 019FF0E5h, location: "WMVCore", loaded at 01940000h - 01B49000h
Symbol: "WMCreateProfileManager" (+0001862Fh)
Address: 014207A0h, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 77CCE9FEh, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "NtOpenFile" (+00000000h)
Address: 77CD0DB6h, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "RtlNtStatusToDosError" (+0000002Fh)
Address: 77CD0DBBh, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "RtlNtStatusToDosError" (+00000034h)
Address: 014202CCh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 77CCF819h, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "ZwQueryPortInformationProcess" (+00000068h)
Address: 014202CCh, location: "foo_pod", loaded at 01400000h - 01438000h
Address: 77E77195h, location: "kernel32", loaded at 77E60000h - 77F50000h
Symbol: "FindFirstFileExW" (+00000345h)
Address: 77CD27C6h, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "RtlAllocateHeap" (+00000386h)
Address: 77CD281Ah, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "RtlAllocateHeap" (+000003DAh)
Address: 77CD2557h, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "RtlAllocateHeap" (+00000117h)
Address: 77DB24D2h, location: "USER32", loaded at 77D80000h - 77E11000h
Symbol: "GetClipboardOwner" (+000000F1h)
Address: 77D8AC58h, location: "USER32", loaded at 77D80000h - 77E11000h
Symbol: "IsWindowVisible" (+00000033h)
Address: 77D8AC53h, location: "USER32", loaded at 77D80000h - 77E11000h
Symbol: "IsWindowVisible" (+0000002Eh)
Address: 5AD74F4Bh, location: "uxtheme", loaded at 5AD70000h - 5ADA7000h
Symbol: "DrawThemeBackgroundEx" (+0000114Ch)
Address: 0175C662h, location: "foo_ui_columns", loaded at 01750000h - 01772000h
Address: 01766563h, location: "foo_ui_columns", loaded at 01750000h - 01772000h
Address: 77D8857Ah, location: "USER32", loaded at 77D80000h - 77E11000h
Address: 0175C662h, location: "foo_ui_columns", loaded at 01750000h - 01772000h
Address: 77D88896h, location: "USER32", loaded at 77D80000h - 77E11000h
Symbol: "GetWindowLongW" (+000000CCh)
Address: 77CD2100h, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "RtlFreeHeap" (+0000056Fh)
Address: 77CD1C91h, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "RtlFreeHeap" (+00000100h)
Address: 77CD1CA9h, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "RtlFreeHeap" (+00000118h)
Address: 77DB24D2h, location: "USER32", loaded at 77D80000h - 77E11000h
Symbol: "GetClipboardOwner" (+000000F1h)
Address: 77CCF819h, location: "ntdll", loaded at 77CC0000h - 77D75000h
Symbol: "ZwQueryPortInformationProcess" (+00000068h)

Version info:
foobar2000 v0.8.1 beta 3
UNICODE


Replay gain should be good once I get to listen to it wink.gif Being able to choose which playlist to sync with the iPod would be good. Finially, once all that is working, may be you can start thinking about Smart Playlists, though I get the feeling that they could be difficult to implement.
reardon
Feature Request:

Is there any way for you to make meta-variables available, such as sync-state, for text formatting? I am just thinking of how to easily recreate the sync-state stuff from iTunes. Something like %__ipod_resident%?

+Reardon
Mike Giacomelli
QUOTE (Aero @ Apr 4 2004, 04:03 PM)
Just a quick note - I am pretty close to posting 0.5.  The only holdups are the progress dialogs and reardon's data loss problem (empty playlist and either no songs, or only a handful of songs).  I am experiencing the same problem as reardon, but I have been unable to narrow down the cause and the problem is fairly infrequent, so I am leaning towards releasing 0.5 with this known problem and hope that someone can find a simple test case that reproduces the bug. 

One other new feature that will interest a lot of posters is a ReplayGain -> Sound Check conversion.  I'm using Otto42's data and Mike Giacomelli's analysis to do the conversion.

As usual, Sound Check is completely undocumented, and as far as I know, there are no other programs that handle Sound Check besides iTunes.  But from some quick tests that I tried, it seems to be working as expected.  For example, I ReplayGain'ed two albums - Aerosmith's Honkin' On Bobo (-11.93dB...damn!) and Robert Johnson's The Complete Recordings (-4.47 dB).  Without Sound Check enabled, Bobo sounded obviously much louder at the same iPod volume.  With Sound Check enabled and my ReplayGain -> Sound Check conversion, both albums sounded to me like they were about the same apparent volume on iPod.  The conversion algorithm will only improve with more data, but I believe that it is good enough now for general testing.

Since I am fairly new to ReplayGain, I would like some feedback on how people use it.  In the conversion function, I currently search for album RG, and use that if it is available.  Otherwise I look for track RG, and if that isn't found, I disable sound check.    Is this good enough, or should I put an option in the preferences like this:

ReplayGain -> Sound Check Conversion:
(o) Disable    (*) Prefer Album Gain   (o) Prefer Track Gain

Also, would people be interested in an overall preamp volume feature in foo_pod?  It would be a slider that would boost or lower the volume for all songs, in addition to whatever Sound Check does.  I haven't tried it, but I understand that this is what EUPod does, in order to boost the volume for European volume limited iPods.


Edit:Comments are still welcomed, but I have already implemented the RG prefs and Preamp as discussed above.

Outstanding! I've wanted someone to do this for ages, and been bitching about it for nearly as long smile.gif

Send me whatever numbers you got, I'll throw them into excel and see if anything looks about right. No promises though.

Also, any chance you could make a "write sound check values to text option" in your componet? That way anyone could create values. I have no idea how much effort that would involve, but it would be sort of cool.

Edit: playing with the plugin now. Is there anyway at all to see the souncheck values written by the plugin?

Edit2: Using .5 I get a 1kb database file no matter what when i sync my playlist. Any reason why? All the files are on my Ipod and show up when i load the playlist into foobar off my Ipod.

I'll try .4.

Edit3: Ah I see the problem is the ipod earased all its files. Good thing I saved them all to disk before playing with it.
Mike Giacomelli
Heres some feedback for you:

www.u.arizona.edu/~mikeg/failure_00000003.txt
www.u.arizona.edu/~mikeg/failure_00000004.txt

Crashes every time with .5 when I try and sync my whole collection (several thousand AACs). Smaller syncs seem to work pretty well though. At least i can duplicate it.

Heres the playlist I tried to sync:

www.u.arizona.edu/~mikeg/ipod.fpl

Edit: .4 seems to work fine. Any reason I don't get the cool sync screen with .5? wink.gif
Aero
I have posted a new 0.5 preview version (0.5 preview redux).
Edit:Redux had a problem with Sound Check, so I updated the link to the latest version, Redux ^ 2...

It fixes the crash that solaris, rufu, and Mike Giacomelli reported. The cause was a typo in my replay gain code which caused a null pointer to be dereferenced. The kicker is that it only was triggered if you tried to send/sync a song that didn't have replay album gain - and I just got done doing album gain on all of my songs, so I didn't see it. Thanks to everyone who reported it!

I also fixed solaris' problem with syncing streaming audio URLs (foo_pod only handles local files now, so it should be safe to sync any playlist item). I also (re)fixed the codec detection code, so foo_pod really will only transfer MP3, AAC, and WAV files now.
Aero
QUOTE (reardon @ Apr 5 2004, 03:16 PM)
Is there any way for you to make meta-variables available, such as sync-state, for text formatting?  I am just thinking of how to easily recreate the sync-state stuff from iTunes.  Something like %__ipod_resident%?

You mean write the "__ipod_resident" metadata out to the files as they are copied to the iPod? Yeah, I can add that, but I can see how it would out of date if you copied the files from the iPod back to the computer. This would be a good use of Lua scripting.

BTW, what is the iTunes sync-state feature?
Aero
QUOTE (Mike Giacomelli @ Apr 5 2004, 04:41 PM)
Also, any chance you could make a "write sound check values to text option" in your componet?  That way anyone could create values.  I have no idea how much effort that would involve, but it would be sort of cool.

Yeah, I can do that. I was planning to do something similar (output the filename, and replay gain and sound check values in a comma delimited format) just for testing and refining the sound check algorithm.

But it is esoteric enough that I don't think it will go into a regular version of foo_pod. I'll probably just comment it out of the regular build and supply a special version for whomever wants it.

QUOTE
Edit:  playing with the plugin now.  Is there anyway at all to see the souncheck values written by the plugin?

Not yet (see above).

QUOTE
Edit2:  Using .5 I get a 1kb database file no matter what when i sync my playlist.  Any reason why?  All the files are on my Ipod and show up when i load the playlist into foobar off my Ipod.

I'll try .4.

Edit3:  Ah I see the problem is the ipod earased all its files.  Good thing I saved them all to disk before playing with it.

Did you do a sync on a small-ish playlist? The thing with sync is that it changes the iPod to match the playlist(s), so if you have 40GB of music on your iPod and 1 song in a Foobar playlist then do a sync, foo_pod will delete all of the music and transfer the 1 song.

One way to avoid this is to always have the iPod (foo_pod) playlist (created by "Load iPod To ..." feature in foo_pod) open. foo_pod sees the files already on the iPod, and is smart enough to not transfer from the iPod to the iPod, but it also won't delete the files since they are part of the sync.

Basically, sync is fairly dangerous since it is easy to end up with less than you expected. But it is also the easiest way to avoid having old files build up on your iPod.
Aero
QUOTE (Mike Giacomelli @ Apr 5 2004, 05:39 PM)
Edit:  .4 seems to work fine.  Any reason I don't get the cool sync screen with .5?  wink.gif

Those are the progress dialogs that I keep complaining about. I didn't really like how there were internally implemented in 0.4, and in the process of fixing them, I made them worse. ohmy.gif

But I'm glad someone appreciates my amateur animation skillz!


Edit: I forgot to mention this earlier, but I did some analysis of iTunes' Sound Check creation vs. what I am doing in foo_pod. The results were encouraging - using the current algorithm, the difference between iTunes and foo_pod was less than 10% for the most common range of gains (meaning that what foo_pod is doing is basically correct and gives about the right volumes). For very quiet songs (+3dB and greater), the difference was from up to 28%, so Mike G and I are currently working with some better data to improve that.
krmathis
Bugs fixed! biggrin.gif
foo_pod now says "Unsupported file:" for all my radio strams and FLAC files. Then continues on with the supported files (AAC and MP3).
It creates empty playlists for the unsupported filetypes though, but that does not bother me much.
The crash problem with copying files to an empty iPod is gone as well!

Great work Aero!

Solaris
Aero
QUOTE (solaris @ Apr 6 2004, 12:35 AM)
Bugs fixed! biggrin.gif
foo_pod now says "Unsupported file:" for all my radio strams and FLAC files. Then continues on with the supported files (AAC and MP3).
It creates empty playlists for the unsupported filetypes though, but that does not bother me much.
The crash problem with copying files to an empty iPod is gone as well!

Great work Aero!

Hold off on those acolades for a little bit...I just realized that Sound Check is broken in Preview Redux... mad.gif

I was also going to fix your empty playlist problem, but forgot. I fixed it in Redux ^ 2, though.

So if you were one of the handful of people that downloaded Redux, please delete it and download Preview Redux ^ 2 instead.
krmathis
I just downloaded and tested 0.5 Preview Redux ^ 2.
Sound Check seem to be back now, at least I heard a difference in sound volume when turning the iPod`s Sound Check On/Off! wink.gif

It no longer created an empty playlist for my unsupported FLAC files, but it created an empty playlist for my radio streams.
So it seems like you partially fixed it. unsure.gif

Solaris
ronyzyz1
Just got an idea for a feature!

You know how many people complain about how the iPod uses tags to organize music, as opposed to directory structure? Well, knowing the iPod's playlists-within-playlists format, it should be trivial to emulate such a feature, right?

For every directory, make a playlist. For every directory in each directory, make another playlist in the appropriate playlist. Then put files in them, and so on. Would be cool.

Also, I'm looking forward to improved progress dialogs (I don't care much for the current animations - I prefer foobar2000's other very minimalist progress dialogs rolleyes.gif) and to custom TagZ formatted titles - Need tracknumbers here baby.

Woot!
Aero
QUOTE (DocUK @ Apr 6 2004, 04:42 AM)
You know how many people complain about how the iPod uses tags to organize music, as opposed to directory structure? Well, knowing the iPod's playlists-within-playlists format, it should be trivial to emulate such a feature, right?

For every directory, make a playlist. For every directory in each directory, make another playlist in the appropriate playlist. Then put files in them, and so on. Would be cool.

That is a good idea and it would be nice, but I don't think it is technical possible. For one, I don't believe that you can do playlists within playlists. Someone correct me if I'm wrong, but from my understanding of the iTunesDB format, there is no way for a playlist to contain anything except for songs.

What I believe you could do is use one of the Main Menu Browse items (such as Composer), to fake a directory tree structure.

For example, if you had the following structure, you could get it to show up on the iPod by using the Composer field, shown in parenthesis:
CODE
c:
  \mp3  (c)
    song1.mp3     (mp3)
    song2.mp3     (mp3)
     \album1          (mp3)
       song3.mp3  (album1)
       song4.mp3  (album1)
     \album2          (mp3)
       song5.mp3  (album2)


Which should appear on the iPod as:
CODE
mp3
  ----->
            song1
            song2
            album1/   (slash added to make it clear that it is a dir)
            album2/

Hmm...I'm just making this up as I type, but it is crazy enough that it just might work! I'll look into implementing it.
Mike Giacomelli
Here the Updated Ipod SC info:




Looks like we got a match smile.gif

Heres the data if anyone else is interested (hopefully Areo doesn't mind):

http://www.u.arizona.edu/~mikeg/RG vs. iTunes dB.xls
reardon
QUOTE (Aero @ Apr 5 2004, 07:15 PM)
You mean write the "__ipod_resident" metadata out to the files as they are copied to the iPod?  Yeah, I can add that, but I can see how it would out of date if you copied the files from the iPod back to the computer.  This would be a good use of Lua scripting.

BTW, what is the iTunes sync-state feature?

No, I meant can it be written or somehow held by foobar itself (I don't understand the interaction between foobar, ui_columns, and the foobar db). Its not useful inside the files.

iTunes has the nice little progress graphics when syncing. Rather than throwing up a modal dialog, it just grays out items in the playlist until they are synced.

+Reardon
rufu
QUOTE (reardon @ Apr 6 2004, 02:55 PM)
QUOTE (Aero @ Apr 5 2004, 07:15 PM)

You mean write the "__ipod_resident" metadata out to the files as they are copied to the iPod?  Yeah, I can add that, but I can see how it would out of date if you copied the files from the iPod back to the computer.  This would be a good use of Lua scripting.

BTW, what is the iTunes sync-state feature?

No, I meant can it be written or somehow held by foobar itself (I don't understand the interaction between foobar, ui_columns, and the foobar db). Its not useful inside the files.

iTunes has the nice little progress graphics when syncing. Rather than throwing up a modal dialog, it just grays out items in the playlist until they are synced.

+Reardon

May be if foo_pod wrote a "synced to ipod" tag, people could then create UIs whiched shows this graphically, the same way people display whether or not a file has replay gain info. The only problem would be how to make sure this info is accurate, for example if you didn't sync a song the next time how would you go back and change the tag? The way this is done in iTunes is that when the iPod is connected a new playlist is created showing the current content of the iPod then any new files added to the library since the last sync are added to this playlist and greyed out as they are transferred over. That is unless you tell it not to sync certain songs, so instead of a "synced to ipod" tag it would be a "don't sync" tag.

The method I've thought up to emulate a similar behavour in foobar would be to have foo_pod automatically create a playlist of current songs on the iPod, and then sync this with a pre-defined "library" playlist in foobar (or could you use the foobar database?). The only question is how do you handle displaying what playlists are present on the iPod?

Do you have it automatically create all the playlists present on the iPod in foobar? What if these playlists contain songs not present on the PC?

Do you have all the playlists in foobar transferred to the iPod? If not, how do you choose which ones are and how do you display this in foobar? (The best way I can think of doing this would be to give all those syncing with the iPod little iPod icons in their tabs)

Also how are smart playlists and on-the-go playlists going to be handled? I get the feeling smart playlists could be a real problem, but it is one of the features I really like crying.gif

I'm guessing that this is going to be the hard part.
Otto42
QUOTE (Mike Giacomelli @ Apr 6 2004, 02:54 PM)
y=1002*e^(-.2303x)

Good fit. However, whenever you see a 2303 in an exponential function like that, you're probably using e when you should be using 10. ln 10 = 2.303, sort of thing. That's one of those bits in math class that stuck with me. wink.gif

I'm betting this is the function they're actually using for the conversion:
y=1000 * 10 ^ (-.1x)


Edit: Hot damn! Thought about it a bit, and starting looking up power formulas. And BINGO! We have a winner!

milliWatts = 10 ^ ( dBm / 10 )
milliWatts * 1000 = Watts.

So, the answer I was looking for, at last: The value in the Sound Check field is expressed in Watts. The dB value that iTunes displays is expressed in dBm, which is decibels relative to 1 milliWatt of power. It's negated, but there it is.

On reflection, this makes sense. It's probably using the Watts value in the SoundCheck field to adjust the output power at the preamp stage, sort of thing.
Otto42
QUOTE (rufu @ Apr 6 2004, 03:30 PM)
Also how are smart playlists and on-the-go playlists going to be handled?  I get the feeling smart playlists could be a real problem, but it is one of the features I really like  crying.gif

I'm guessing that this is going to be the hard part.

I don't think foobar has any way to define anything similar to a "smart playlist" as of yet, no? I've worked out a great deal of the smart playlist structure in the iTunesDB (although bits and pieces of it still elude me), and feel fairly confident in being able to make simple smart playlists for the iPod. None of the code is in iPodDB yet, but it's not too difficult.

But only 3rd gen iPods and up (any iPod running 2.0 or up code) actually use the smart playlist tags in the iTunesDB, from what I can tell.. They rebuild the smart playlist themselves from the data they are given. They do it in semi-real time too, meaning that if you have a list based on, say, last played time, then when you play a song on the iPod, it goes away from that playlist, after you exit that smart playlist and come back to it. Without syncing to iTunes. Essentially, the iPod rebuilds the smart playlist from its data at the time that you tell it to play that playlist.

1st and 2nd gens only change the smart playlist on a sync with iTunes, and then all that's really happening is that iTunes puts the proper songs in the playlist, according to the rules of the smart playlist. In other words, it's only smart on one end, not smart on both ends.

Making one end smart (foobar) requires changes to foobar only. Making both ends smart requires more significant changes, but not that much harder. The key for doing both ends is to make the smart playlist support in foobar compatible with the iPod's smart playlist fields from the beginning, which probably eliminates using some form of advanced scripting, which would be difficult to convert to a form that will fit in iTunesDB's smart playlist fields.
Aero
QUOTE (Otto42 @ Apr 6 2004, 06:57 PM)
I'm betting this is the function they're actually using for the conversion:
y=1000 * 10 ^ (-.1x)

I think you're right - that is almost definitely the equation that describes the relationship between iTunes Sound Check dB value (x) and the Sound Check value (y), as written to the iTunesDB file.

Here is a question for anyone - is it better to emulate the Sound Check values that iTunes writes for a given song, or just use one of the functions to convert Replay Gain's value?

The problem is that while Replay Gain and iTunes generally calculate about the same gain for a song, sometimes they are slightly different and that difference is magnified by the exponent resulting in Sound Check values that are up to 20%-30% different.

I was originally trying to find an algorithm or algorithms that mapped what Replay Gain calculates to match that iTunes' value. But now that there is some understanding of the basis behind how Sound Check is really calculated and used, I'm thinking that it is best just to use the straight RG values and trust that it does a better job than iTunes.

Not that any of this really matters...the difference is small enough for most gain values that I doubt anyone could tell the difference. The current algorithm seems to work great, at least in my experience, all of the songs sound identically loud with SoundCheck enabled.
Aero
QUOTE (rufu @ Apr 6 2004, 05:30 PM)
May be if foo_pod wrote a "synced to ipod" tag, people could then create UIs whiched shows this graphically, the same way people display whether or not a file has replay gain info.  The only problem would be how to make sure this info is accurate, for example if you didn't sync a song the next time how would you go back and change the tag?  The way this is done in iTunes is that when the iPod is connected a new playlist is created showing the current content of the iPod then any new files added to the library since the last sync are added to this playlist and greyed out as they are transferred over.  That is unless you tell it not to sync certain songs, so instead of a "synced to ipod" tag it would be a "don't sync" tag.

Yeah, keeping a synced metadata item up-to-date is rather problematic. There would need to be a really good reason to implement it.

QUOTE
Do you have it automatically create all the playlists present on the iPod in foobar?  What if these playlists contain songs not present on the PC?

I don't currently create Foobar playlists from those on the iPod. I could add the ability to display the iPod playlists, just like there is the ability to display all of the iPod songs in the foo_pod playlist. Since the playlist items would point to the files on the iPod itself, there would be no problem if the files didn't exist on the PC.

QUOTE
Do you have all the playlists in foobar transferred to the iPod?  If not, how do you choose which ones are and how do you display this in foobar?  (The best way I can think of doing this would be to give all those syncing with the iPod little iPod icons in their tabs)

There are two ways to transfer Foobar playlists to the iPod - Send/Sync Current Playlist and Send/Sync All Playlists. There is no current way to only sync some of the open playlists. I could add the ability to exclude playlists (that was brought up before when foo_pod tried to sync playlists containing streaming audio URLs), but that would be a pretty low priority item for me to add at this point since it is possible to accomplish the goal by just send/sync'ing the desired playlists directly.

The default UI doesn't even have icons in the tabs, so I don't know how I could add status indicators to the tabs themselves.

QUOTE
Also how are smart playlists and on-the-go playlists going to be handled?  I get the feeling smart playlists could be a real problem, but it is one of the features I really like

Smart Playlists, at least the little I know of them, would seem to be pretty hard to add to the current Foobar based interface. Also, as Otto mentioned, the backend code might not be completely ready to handle smart playlists. So I'm afraid this is another lower priority at the moment.
kl33per
I don't know if this is possible, but if you could somehow have option to copy either the AlbumGain or TrackGain (obviously not both) values to the DB, that'd be fantastic (not having AlbumGain is the only thing that really bugs me about SoundCheck, might as well be normalizing).
Aero
QUOTE (kl33per @ Apr 7 2004, 09:57 AM)
I don't know if this is possible, but if you could somehow have option to copy either the AlbumGain or TrackGain (obviously not both) values to the DB, that'd be fantastic (not having AlbumGain is the only thing that really bugs me about SoundCheck, might as well be normalizing).

I believe what you are asking for is already in Preview Redux^2, and will be in the next version, 0.5. There is a preference item that controls how Replay Gain -> Sound Check is calculated - disable, prefer album gain, or prefer track gain.

Disable is self-explanitory. Prefer album gain means that if album gain is available, it is used. Otherwise the Sound Check value is determined from the track gain, or disabled if not available. Prefer track gain is just the opposite.

Is that what you were looking for?

Edit: There might be some confusion about the terminology as well. When I refer to Sound Check, I'm referring to the mechanism on the iPod which adjusts the volume based on a per-song value stored in the iTunesDB file.

There is also Sound Check in iTunes, which calculates the gain - the equivalent of Foobar's Replay Gain support. foo_pod uses the Replay Gain information, if available, and translates it into a Sound Check values used on the iPod, which as I mention above, is user configurable to prefer album or track gains.
kl33per
Doh, just installed the Redux 2 version (had 0.4 installed with 0.8.1 Beta 3) and just came back here to delete my post, sorry. It has exactly the functionality I wanted (nice work on the quick reply to).
herr klang
(hopefully) simple feature request: to better emulate a real media library, i keep one playlist filled with everything i've got in the database (hopefully with future extensions of playlistgen this will be automatically updated).. but i do have a substantial amount of other playlists that i'd like to keep synced. if there was a way to exclude playlists from the sync, this could be done in one click, and that would be well excellent smile.gif

this could be done either in the config screen, or if that's hairy to implement, you could just have some manner of user-editable tagz test condition on the playlist name to allow/disallow syncing of a playlist.

man that'd be awesome.

oh, and unrelated: it seems to be par for the course for many foobar actions, but how plausible is it to make foo_pod not block when syncing? i've got a 30gb pod, and syncs can take a while smile.gif
Otto42
QUOTE (Aero @ Apr 6 2004, 10:50 PM)
I think you're right - that is almost definitely the equation that describes the relationship between iTunes Sound Check dB value (x) and the Sound Check value (y), as written to the iTunesDB file.

Here is a question for anyone - is it better to emulate the Sound Check values that iTunes writes for a given song, or just use one of the functions to convert Replay Gain's value?

The problem is that while Replay Gain and iTunes generally calculate about the same gain for a song, sometimes they are slightly different and that difference is magnified by the exponent resulting in Sound Check values that are up to 20%-30% different.

I was originally trying to find an algorithm or algorithms that mapped what Replay Gain calculates to match that iTunes' value.  But now that there is some understanding of the basis behind how Sound Check is really calculated and used, I'm thinking that it is best just to use the straight RG values and trust that it does a better job than iTunes.

Not that any of this really matters...the difference is small enough for most gain values that I doubt anyone could tell the difference.  The current algorithm seems to work great, at least in my experience, all of the songs sound identically loud with SoundCheck enabled.

Well, the dB value that iTunes or RG figures is bound to be different because they're essentially different algorithims.. Rather than try to convert from one to the other, just calculate the Sound Check based directly on the RG dB value (whichever one you prefer) and go with that.

In theory, the conversion to the Sound Check value isn't actually changing anything, it's just expressing the amount of volume change in another format (microWatts). So since RG probably does a better job at calculating the actual volume change needed, I'd say to simply convert it using that function and stick it in there. It'll likely work better than iTunes Sound Check does. RG is a bit more robust, methinks.
Aero
QUOTE (herr klang @ Apr 8 2004, 06:13 PM)
(hopefully) simple feature request:  to better emulate a real media library, i keep one playlist filled with everything i've got in the database (hopefully with future extensions of playlistgen this will be automatically updated).. but i do have a substantial amount of other playlists that i'd like to keep synced. if there was a way to exclude playlists from the sync, this could be done in one click, and that would be well excellent smile.gif

I could add a context menu item to enable/disable a playlist. I'm not sure if you can interface directly with a playlist/playlist tab, but I could set up a handler to add/remove a playlist name to a list of excluded playlist and save that list so it persists when you restart Foobar.

QUOTE
oh, and unrelated: it seems to be par for the course for many foobar actions, but how plausible is it to make foo_pod not block when syncing? i've got a 30gb pod, and syncs can take a while smile.gif

Unfortunately, Foobar is pretty unfriendly to multithreaded components.

From playlist.h:
CODE
//important: playlist engine is SINGLE-THREADED. call any APIs not from main thread and things will either blow up or refuse to work. all callbacks can be assumed to come from main thread.

There are ways around this restriction, but they are messy and time consuming to implement. You could always run 2 instances of Foobar - one for regular playback and one for foo_pod.
Mike Giacomelli
Would it be possible to add a way to convert files and then place the output onto the Ipod?

I'd like to be able to highlight a flac file, hit one command and have that file converted to AAC and then placed on the Ipod without needing any further attention. Can a plugin do this or would peter need to be involved?
Aero
QUOTE (Mike Giacomelli @ Apr 10 2004, 05:37 PM)
Would it be possible to add a way to convert files and then place the output onto the Ipod?

I'd like to be able to highlight a flac file, hit one command and have that file converted to AAC and then placed on the Ipod without needing any further attention.  Can a plugin do this or would peter need to be involved?

Hmm...it will take some thought to figure out the best way to do what you are asking.

It would be nice to have a general facility in foo_pod to be able to automatically transcode any iPod unsupported audio format into MP3 or AAC, and transparently send/sync those along with the regular supported files. Currently, foo_pod just displays a console warning and ignores the unsupported files. It could also theoretically extended to transcode any file, so you could have your big 320kbps MP3s on your hard drive, but transcode them to tiny 128kbps AAC when copying them to the iPod. Obviously, transcoding will greatly slow down the transfer process, but it would be a good feature to have in foo_pod.

It seems like DiskWriter would be perfect for this task. I'm not sure how controllable it is from another component, but assuming it can be programmatically controlled, it shouldn't be too hard to add transparent transcoding to foo_pod.



On a side note, I'm wrapping up work on 0.5. I finally was able to reproduce and fix the "blank playlist" data loss problem that reardon posted about. I also fixed a problem that cropped up recently where Send Selected To iPod copied files but didn't add them to the database, so they didn't appear on the iPod. I also just fixed the Preamp feature, so it actually works now.
Lew_Zealand
QUOTE (Mike Giacomelli @ Apr 10 2004, 04:37 PM)
Would it be possible to add a way to convert files and then place the output onto the Ipod?

I won't even pretend to be a programmer, but it sounds like you're looking for an auto-syncing smart playlist feature. The conversion process (as you know) is already fairly automated, so the missing piece would be a way for foo_pod to know that new files needed to be added from some specific playlist, and to actually do that.

I'm hopeful Aero, Otto, and anyone else working on foo_pod will eventually be able to do this, but getting the intermediary steps working would have to come first.

Keep up the great work guys - I just started testing using ReplayGain/SoundCheck on my (1st gen) iPod...and it absolutely rocks.
Aero
Version 0.5 is now available.


Well, here it is. I readded the progress dialogs and fixed all of the major known bugs since 0.4.1 and Previews. If you're upgrading from 0.4.x, playlists, Replay Gain/Sound Check, and the preamp are going to be the big new features. For those of you that have been using the Preview versions, fixing reardon's dataloss, making the preamp work, and of course, the progress dialogs are worth checking out.


From the Readme:

Version 0.5 - April 11, 2004
* Added the ability to create iPod playlists. When one of the Send/Sync Playlist
features are used, foo_pod will optionally (see Preferences) create an identical
playlist on the iPod, as well as optionally create a randomized playlist and/or
a playlist sorted according to a user defined TAGZ string.

* iPod database creation should be faster and safer than previous versions.

* Fixed a data loss problem where files on the iPod would appear to be deleted.
The problems also caused a playlist with no name to appear in the Playlist
display.

* Improved the progress dialog dialogs.

* Fixed the megabytes per second statistics displayed on the Foobar console after
copying files to the iPod.

* Improved the sync algorithm, so that it is better able to detect multiple files.
This means that you can send any files to the iPod, and it should be able to
determine which ones actually need to be transferred.

* Implemented a translation between Replay Gain values and the values used by the
Sound Check feature on the iPod. There are 3 new preferences dealing with Replay
Gain - disable, Prefer Album Gain, and Prefer Track Gain. Prefer Album Gain will
cause foo_pod to search for album gain on any transferred files and use that value,
otherwise it will attempt to use track gain, and finally display Sound Check for
that file.

* Added better detection of invalid iPod format songs, such as FLAC and streaming
audio URLs.

* foo_pod will now retry several times to mount the iPod, hopefully reducing the
problem of it not finding a recently connected iPod.

* Added a Preamp preference item. This will raise the volume of all songs by the
percentage shown by the slider. This is apparently what EUpod does, and is
equivalent to the volume feature in iTunes. iPods apparently do not support
negative values, so even though iTunes allows the user to reduce the volume,
this does not have an effect on the iPod, so foo_pod only allows volume increases.
krmathis
Great!
Have done some simple tests and no problems detected. biggrin.gif

Solaris
ronyzyz1
I'm looking forward to testing the new version when I get home. Meanwhile, I think I've supplied you with enough ideas for 0.6? laugh.gif
Aero
QUOTE (DocUK @ Apr 12 2004, 05:05 AM)
I'm looking forward to testing the new version when I get home. Meanwhile, I think I've supplied you with enough ideas for 0.6? laugh.gif

Oh yeah,I forgot to mention, but I tested the idea of implementing a directory browse mode, and the results weren't encouraging. I was able to build the directory structure and have it appear under the Composer browse option, but the next level down from Composer is album view.

So you would see:
CODE
dir1/
   ------> All
              Album 1
              Album 2
dir2/
   ------> All
              Album 3


That's not to say that it is impossible to do a directory structure, but I can't think of a way to make it work on the iPod at the moment. However, it seems likely that the iPod is just too hardcoded to make it doable.
dragonfin
Great work!

I have only one problem. I have some songs with Asian characters in the file names. I can upload them to my iPod using foo_pod, and all the tags display correctly. But my iPod won’t play them. If I upload those files using iTunes, they all work fine. It looks like that iTune automatically renames those files with foreign characters on the iPod. Could you add this feature to foo_pod? Thank you. laugh.gif
Aero
QUOTE (dragonfin @ Apr 12 2004, 11:06 AM)
I have only one problem. I have some songs with Asian characters in the file names.  I can upload them to my iPod using foo_pod, and all the tags display correctly. But my iPod won’t play them. If I upload those files using iTunes, they all work fine. It looks like that iTune automatically renames those files with foreign characters on the iPod. Could you add this feature to foo_pod?

So the songs are showing as expected up on the iPod, but when you attempt to play them, the iPod just moves on to the next song?

I have noticed that iTunes renames some files that contain only ASCII characters, but I haven't tested either iTunes or foo_pod with filenames containing other characters. I'll test it tonight and see if I can reproduce the problem and find a simple mapping that the iPod will tolerate.
.
dragonfin
QUOTE
So the songs are showing as expected up on the iPod, but when you attempt to play them, the iPod just moves on to the next song?


Yes, the iPod just skips those song. If I load the iPod songs to the iPod Playlist in foobar, they all play fine in foobar.

Thanks!
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.