Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: foo_lastfm_radio (Read 338827 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

foo_lastfm_radio

This is a component for playing Last.fm radio stations in foobar2000.

Get version 0.5.7d here.

The component gives you several ways of adding stations. Artist stations can be added from the context menu. Your personal stations can be added from the "File/Open Last.fm Radio Station" menu, as can custom stations. The component will also catch Last.fm URIs entered from the "File/Add location..." dialog or command line, but these don't create automatically refreshing playlists.

Thanks to those that answered my questions during development. As usual, all feedback is welcome!

Regarding the future of this component
The component is still using the old Last.fm Radio API, which was due to be discontinued over half a year ago, and is therefore running on borrowed time. When the new radio API was released I went some way to updating, but hit some problems and then didn't have the time.

However the new radio API requires users to be subscribers in order to listen, and as I expect the continuing popularity of foo_lastfm_radio stems from the fact that you don't need to subscribe, it is unlikely that I'll update to the new API any time soon. This means that if and when the old radio API is deactivated, it will be RIP foo_lastfm_radio.

A note on Love/Ban
This functionality is part of a separate API, and additionally requires a corresponding audioscrobbler submission (see http://www.last.fm/api/show?service=260). It therefore won't be implemented in foo_lastfm_radio. Sorry.

Changed in version 0.5.x:
  • 0.5.7d: Removed limit on text length in custom station dialog.
  • 0.5.7c: Can assign keyboard shortcuts to Last.fm Radio contextmenu items.
  • 0.5.7b: Recompiled with latest foobar2000 v1.0 SDK; no noticeable changes.
  • 0.5.7: Updated to support foobar2000 v1.0.
  • 0.5.6b: Working again now? Let's hope so.
  • 0.5.6: New technical info field "lastfm:imageURL". Use $info(lastfm:imageurl) to retrieve.
  • 0.5.5: Removed 'fan' custom station as it only returns empty playlists.
  • 0.5.5: New advanced preference: cache album art to a file.
  • 0.5.4: Context menu for opening artist stations now uses %artist% rather than %album artist%. This was causing problems with various artist albums.
  • 0.5.4: Small usability improvements to the Custom Station dialog.
  • 0.5.3: Updated new advanced preference from 0.5.2 to also disable 'Playback Follows Cursor' setting if set.
  • 0.5.2: No longer possible to add non-Last.fm tracks to Last.fm playlists. This includes tracks cut from Last.fm playlists. Prevents reordering playlist contents and potential problems with playlists not refreshing.
  • 0.5.2: New advanced preference: Set playback order to 'Default' when playing Last.fm radio.
  • 0.5.1: Fixed: Custom station dialog OK button would remain disabled when first selecting an item from history.
  • 0.5.1: Adding lastfm:// URLs from the command-line or 'File/Add Location...' dialog creates automatically updating playlists. Note that adding from the command-line halts playback and clears your default or current playlist in the same way adding any other file does.
  • Option to reuse a single playlist for all stations.
  • Favourite stations: managed from the preferences page, accessed in the File/Last.fm Radio menu.
Changed in previous versions:
  • 0.4.2: FIX: Using the close button in the custom station dialog doesn't return control to the main window.
  • 0.4.2: FIX?: Rare crash on track selection/playback.
  • 0.4.1: Playlists update silently.
  • 0.4.1: No more obnoxious popups on expired tracks, or empty playlist retrievals.
  • 0.4.1: FIX: On startup, sometimes two lots of tracks will be retrieved for a single playlist.
  • 0.4.1: FIX: $if(%album%,then,else) always returns then, even if album tag is empty.
  • 0.4: Album art support. (Specify a default image in the preferences page.)
  • 0.4: Improved custom station dialog. Now remembers previous entries.
  • 0.4: Last.fm links can be accessed from the context menu.
  • 0.4: Improved error handling.
  • Fixed crash when attempting to write tags.
  • Fixed tags disappearing on playback.
  • Fixed non-ANSI characters not displaying correctly.
  • Improved auto-refresh playlist logic. Old tracks (tracks retrieved prior to the currently playing item) are removed from all playlists, which refresh when 3 tracks or less are remaining.
  • Fixed crash when selecting keyboard shortcuts preferences page.
  • Playlists are given friendlier names and can be renamed.
  • Fixed escaped characters in tags.
[/size]
Note: Played tracks are not scrobbled. (Use foo_audioscrobbler with "Only submit tracks from the Media Library" disabled if you want this functionality.)
Note 2: Users of foo_playback_custom (or other components which write tags to files during playback) should check "Only tracks in the media library update playback statistics" in that component's options to avoid problems with playback.

foo_lastfm_radio

Reply #1
Oh my. This is awesome. One thing I would like is the ability to add stations to an existing playlist, as I have an "Internet Radio" playlist, and if I could add last fm stations to it that would be amazing! Also it doesn't seem to be scrobbling what you play, which would be good. Oh and another suggestion, it would be nice if playlists were called something like "TomBarlow's Recommended Station" instead of "lastfm://user/TomBarlow/recommended".

Really excited by this plugin though! Nice one!

foo_lastfm_radio

Reply #2
nausea, thank you so very much for this awesome pluggin. I am trying it out now. Report any problems i get.

foo_lastfm_radio

Reply #3
I've just tested it and noticed a few things.

Context menu
The command is shown even though the artist tag is undefined (shows "?'s station"). The description of the command description only shows "Last.fm Radio".

Main menu
The command descriptions should end with a (single) period to be consistent with the style used by foobar2000 itself (core and official components). I also suggest to change the name of the root command to "Open Last.Fm Radio Station" and move it to the file_open section, file_playlist would be my second choice.

Playlists
It would be nice if the playlists had friendlier names and could be renamed. If you need to store information associated with a playlist, the best solution is to use a playlist property.

Tags
Non-ASCII characters do not display correctly. They look as if the strings had been converted from ISO 8859-1 to UTF-8 while they already where UTF-8 before. XML entities like &_amp_; appear untranslated (underscores added to keep the forum software from translating it).

There are several solutions for the tags-disappearing-on-playback problem:
  • Provide metadata for titleformatting through a metadb_display_field_provider. This limits you to a fixed set of fields, and components that do not use titleformatting will not be able to use the information (for example the properties window or the selection properties UI element).
  • Rewrite the URL and implement a "redirecting" input service. The rewritten URL would point to a file in a local cache or would use a custom scheme. Your input service would then internally open the input for the real file and forward all requests to it. For the metadata retrieval methods you would add the cached tag information to the data returned by the real input.

foo_lastfm_radio

Reply #4
I also frequently get this error when trying to play a song from a previously generated playlist:
Unable to open item for playback (Invalid ticket (403)):
"http://kingpin6.last.fm/user/c9aba423b670940774b96984f728630e.mp3"

foo_lastfm_radio

Reply #5
I also frequently get this error when trying to play a song from a previously generated playlist:
Unable to open item for playback (Invalid ticket (403)):
"http://kingpin6.last.fm/user/c9aba423b670940774b96984f728630e.mp3"
The URLs returned by the last.fm server represent "tickets" which are only good for one use.

Actually, a few minutes after my last post I came to the conclusion that the component currently uses an approach that makes things more complicated than they need to be - both for users and for the implementation. I'm not an expert on Last.fm radio stations, but as far as I know they are conceptually streams that support skipping to the next song as a bonus features.

On the technical side, the server returns XSPF playlists for a given station that contain a few songs in the form of one-use URLs and metadata for the song. The most straightforward way to implement this in foobar2000 would be an input service that acts as a proxy to this "stream". When it is used for playback, it would retrieve the XSPF playlist from the server, open the input for the first track and report the songs metadata as dynamic track metadata (like a regular HTTP stream). When the track ends or playback of the stream is restarted (like when you double-click the playlist entry when it is already playing), it would go to the next. When it runs out of tracks, it would retrieve the XSPF playlist with the next few songs from the server.

There are a few technical issues - for example, the caching and retrieval of the XSPF playlist should not actually be handled by each input instance but by a central module - but overall I think this approach would make it easier to handle Last.fm stations in foobar2000. The current way with automatically updating playlists that contain one-use URLs seems a bit out-of-place.

foo_lastfm_radio

Reply #6
Thanks for the feedback guys.

The URLs returned by the last.fm server represent "tickets" which are only good for one use.

Yes, this is a little unfortunate. When I first started working on the component a few months ago the tickets weren't single use and you could replay tracks and jump around within the playlist (with some limits I believe), so the current method made sense. (I also observed this in other media players with Last.fm functionality.) I just started working on it again the other day and the behaviour had changed.

I still think it makes some sense to have playlists though as it means you can see which tracks are coming, and skip forward as you wish. The logic needs to be changed though, perhaps removing played or skipped tracks as well as adding new ones.

Thanks for the detailed points foosion. Are playlist properties persistent between opening and closing foobar2000?


foo_lastfm_radio

Reply #8
Updated original post with info about version 0.2. I'll work on the problems with tags for the next version.

foo_lastfm_radio

Reply #9
thanks for the update

foo_lastfm_radio

Reply #10
Thanks for the plugin, nausea. Looking forward for further developments!

foo_lastfm_radio

Reply #11
Nice plugin nausea. Thanks for the effort you're putting in.

foo_lastfm_radio

Reply #12
It's good, but i'm waiting for the version 0.5 

But this plugin is awesome. RESPECT!

foo_lastfm_radio

Reply #13
I'm getting a crash whenever I go to Prefs>General>Keyboard Shortcuts. I just tried it with and without this component, it seems to be the guilty one. Here's a log:

Code: [Select]
Illegal operation:
Code: C0000005h, flags: 00000000h, address: 0049B0A7h
Access violation, operation: read, address: 00000000h
Call path:
entry=>app_mainloop=>preferences_page::create
Code bytes (0049B0A7h):
0049B067h:  FF 50 10 84 C0 74 D9 83 4C 24 3C FF 8B 4C 24 04
0049B077h:  85 C9 74 04 8B 01 FF 10 B0 01 EB 13 83 4C 24 3C
0049B087h:  FF 8B 4C 24 04 85 C9 74 04 8B 01 FF 10 32 C0 8B
0049B097h:  4C 24 34 64 89 0D 00 00 00 00 5F 8B E5 5D C3 56
0049B0A7h:  8B 30 85 F6 74 07 8B 06 8B CE FF 50 04 8B 0F 85
0049B0B7h:  C9 74 04 8B 01 FF 10 89 37 8B C7 5E C3 8B 41 04
0049B0C7h:  57 8B 7C 24 08 E8 D5 FF FF FF 5F C2 08 00 B8 70
0049B0D7h:  89 4B 00 E8 95 A1 01 00 83 EC 4C 8B 45 0C 53 56
Stack (0012F380h):
0012F360h:  015DFC4C 7C9C93C0 77F643DD 7C9C93C0
0012F370h:  00000004 00000000 015DF158 00000000
0012F380h:  0012F3C8 00413068 00000000 01724813
0012F390h:  0012F3C8 00000000 17C90275 0012F4B4
0012F3A0h:  00000001 0012F3E0 01743229 00000000
0012F3B0h:  01722FF0 0012F3C8 17C90255 00000000
0012F3C0h:  017724B0 00000000 00000000 017724C0
0012F3D0h:  FFFFFFFE 00000004 0040CA30 017702B0
0012F3E0h:  0012F504 017439C0 FFFFFFFF 004271E0
0012F3F0h:  0012F42C 0012F478 0012F4B4 004DC010
0012F400h:  0012F600 00000000 00000000 00000080
0012F410h:  7C910551 01710718 00000000 00000000
0012F420h:  01715600 02A22190 00000048 004DD304
0012F430h:  00000000 00000000 00000000 00000000
0012F440h:  0012F288 017702C0 0012F490 7C90EE18
0012F450h:  7C917BB8 FFFFFFFF 7C917BB0 004A328C
0012F460h:  003E0000 00000001 02A1B208 004A32C3
0012F470h:  179826DE 0000000A 00000000 02A22230
0012F480h:  00000200 7C90EE18 0012F470 017725F0
0012F490h:  0012F4F8 017724A8 01770160 00000000
Registers:
EAX: 00000000, EBX: 00000000, ECX: 00000000, EDX: 004D1464
ESI: 0012F3C8, EDI: 0012F3C8, EBP: 0012F510, ESP: 0012F380
Crash location: "foobar2000", loaded at 00400000h - 0052B000h

Loaded modules:
foobar2000                      loaded at 00400000h - 0052B000h
ntdll                            loaded at 7C900000h - 7C9B0000h
kernel32                        loaded at 7C800000h - 7C8F5000h
COMCTL32                        loaded at 773D0000h - 774D3000h
msvcrt                          loaded at 77C10000h - 77C68000h
ADVAPI32                        loaded at 77DD0000h - 77E6B000h
RPCRT4                          loaded at 77E70000h - 77F02000h
Secur32                          loaded at 77FE0000h - 77FF1000h
GDI32                            loaded at 77F10000h - 77F57000h
USER32                          loaded at 7E410000h - 7E4A0000h
SHLWAPI                          loaded at 77F60000h - 77FD6000h
SHELL32                          loaded at 7C9C0000h - 7D1D6000h
ole32                            loaded at 774E0000h - 7761D000h
shared                          loaded at 10000000h - 1002A000h
COMDLG32                        loaded at 763B0000h - 763F9000h
IMM32                            loaded at 76390000h - 763AD000h
LPK                              loaded at 629C0000h - 629C9000h
USP10                            loaded at 74D90000h - 74DFB000h
avgrsstx                        loaded at 00390000h - 00395000h
uxtheme                          loaded at 5AD70000h - 5ADA8000h
RocketDock                      loaded at 00A50000h - 00A62000h
PSAPI                            loaded at 76BF0000h - 76BFB000h
MSCTF                            loaded at 74720000h - 7476B000h
SynTPFcs                        loaded at 63000000h - 63013000h
VERSION                          loaded at 77C00000h - 77C08000h
msctfime                        loaded at 755C0000h - 755EE000h
foo_abx                          loaded at 00B00000h - 00B31000h
foo_albumlist                    loaded at 00B60000h - 00BCC000h
foo_appcommand                  loaded at 00BF0000h - 00C06000h
foo_audioscrobbler              loaded at 00C30000h - 00C60000h
WS2_32                          loaded at 71AB0000h - 71AC7000h
WS2HELP                          loaded at 71AA0000h - 71AA8000h
foo_autoplaylist                loaded at 00C80000h - 00CB0000h
foo_burninate                    loaded at 00CD0000h - 00D07000h
foo_cdda                        loaded at 00D30000h - 00D71000h
foo_comserver2                  loaded at 00DA0000h - 00DF6000h
OLEAUT32                        loaded at 77120000h - 771AB000h
foo_converter                    loaded at 00E20000h - 00E87000h
foo_cwbowron                    loaded at 00EB0000h - 00EDA000h
gdiplus                          loaded at 4EC50000h - 4EDF3000h
foo_discogs                      loaded at 00F10000h - 00F8D000h
WINMM                            loaded at 76B40000h - 76B6D000h
foo_dsp_skip_silence            loaded at 01020000h - 01033000h
libmmd                          loaded at 01050000h - 01301000h
MSVCR80                          loaded at 78130000h - 781CB000h
foo_dsp_std                      loaded at 01330000h - 01379000h
foo_fileops                      loaded at 013A0000h - 013E6000h
foo_freedb2                      loaded at 01410000h - 01450000h
foo_highlightplaying            loaded at 01470000h - 01491000h
foo_input_monkey                loaded at 014C0000h - 0150A000h
foo_input_mslive                loaded at 01530000h - 015B3000h
WMVCore                          loaded at 15110000h - 1536A000h
WMASF                            loaded at 11C70000h - 11CAA000h
foo_input_std                    loaded at 015D0000h - 016FD000h
foo_lastfm_radio                loaded at 01720000h - 0175B000h
foo_lyricsdb                    loaded at 01780000h - 017AF000h
WININET                          loaded at 017C0000h - 0189C000h
Normaliz                        loaded at 018A0000h - 018A9000h
urlmon                          loaded at 1A400000h - 1A52B000h
iertutil                        loaded at 5DCA0000h - 5DE55000h
foo_masstag                      loaded at 01AE0000h - 01B30000h
foo_navigator                    loaded at 01B50000h - 01B84000h
foo_playcount                    loaded at 01BB0000h - 01BDA000h
foo_rgscan                      loaded at 01C00000h - 01C5B000h
foo_son                          loaded at 01C80000h - 01C83000h
foo_uie_albumart                loaded at 01C90000h - 01CCD000h
foo_uie_elplaylist              loaded at 01CF0000h - 01D55000h
foo_uie_lyrics                  loaded at 01D80000h - 01DDC000h
foo_uie_lyrics_panel            loaded at 01E00000h - 01E64000h
foo_uie_panel_splitter          loaded at 01E90000h - 01ED8000h
foo_uie_quicksearch              loaded at 01F00000h - 01F46000h
foo_uie_tabs                    loaded at 01F70000h - 01F9A000h
foo_uie_wsh_panel                loaded at 01FC0000h - 01FF4000h
foo_ui_columns                  loaded at 02140000h - 0226C000h
foo_ui_std                      loaded at 02290000h - 02365000h
MSIMG32                          loaded at 76380000h - 76385000h
foo_unpack                      loaded at 02390000h - 023BD000h
SXS                              loaded at 75E90000h - 75F40000h
CLBCATQ                          loaded at 76FD0000h - 7704F000h
COMRes                          loaded at 77050000h - 77115000h
jscript                          loaded at 63380000h - 63407000h
xpsp2res                        loaded at 20000000h - 202C5000h
mscms                            loaded at 73B30000h - 73B45000h
WINSPOOL                        loaded at 73000000h - 73026000h
mswsock                          loaded at 71A50000h - 71A8F000h
DNSAPI                          loaded at 76F20000h - 76F47000h
rasadhlp                        loaded at 76FC0000h - 76FC6000h
msi                              loaded at 7D1E0000h - 7D49E000h
hnetcfg                          loaded at 662B0000h - 66308000h
wshtcpip                        loaded at 71A90000h - 71A98000h
MOUDL32A                        loaded at 03ED0000h - 03EE3000h
imagehlp                        loaded at 76C90000h - 76CB8000h
DBGHELP                          loaded at 59A60000h - 59B01000h

Stack dump analysis:
Address: 00413068h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 01724813h, location: "foo_lastfm_radio", loaded at 01720000h - 0175B000h
Address: 01743229h, location: "foo_lastfm_radio", loaded at 01720000h - 0175B000h
Address: 01722FF0h, location: "foo_lastfm_radio", loaded at 01720000h - 0175B000h
Address: 0040CA30h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 017439C0h, location: "foo_lastfm_radio", loaded at 01720000h - 0175B000h
Address: 004271E0h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004DC010h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 7C910551h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlFreeHeap" (+00000114h)
Address: 004DD304h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 7C90EE18h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "strchr" (+00000117h)
Address: 7C917BB8h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlReAllocateHeap" (+000001BBh)
Address: 7C917BB0h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlReAllocateHeap" (+000001B3h)
Address: 004A328Ch, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004A32C3h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 7C90EE18h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "strchr" (+00000117h)
Address: 004D1464h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 7C90EE18h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "strchr" (+00000117h)
Address: 7C9106F0h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000011Ch)
Address: 7C9106EBh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+00000117h)
Address: 01730A9Eh, location: "foo_lastfm_radio", loaded at 01720000h - 0175B000h
Address: 01731066h, location: "foo_lastfm_radio", loaded at 01720000h - 0175B000h
Address: 004BBDD0h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 0042770Eh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004D1464h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004D1214h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004D1214h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004BCC4Fh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004280CAh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 01750784h, location: "foo_lastfm_radio", loaded at 01720000h - 0175B000h
Address: 004CDCCFh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 0042818Ch, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004BD6EAh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 00425221h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004F6360h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004BD707h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 00426347h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004F6360h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004BDD8Fh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 0042601Ch, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004BA9A0h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 0045A1EBh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 7E4184FCh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Address: 01100061h, location: "libmmd", loaded at 01050000h - 01301000h
Symbol: "_csqrtq_f90" (+000AD725h)
Address: 7E440457h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DeregisterShellHookWindow" (+000001CFh)
Address: 7E418830h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+00000169h)
Address: 7E41882Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+00000163h)
Address: 7E41B89Bh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetParent" (+0000016Ch)
Address: 7E42379Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefDlgProcW" (+00000000h)
Address: 004F6360h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004B9093h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 0045A649h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 0045A561h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 0045B0D1h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 00403FF5h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 7E418734h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000006Dh)
Address: 7E423745h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "PrivateExtractIconExW" (+000002B2h)
Address: 7E440457h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DeregisterShellHookWindow" (+000001CFh)
Address: 7E423768h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "PrivateExtractIconExW" (+000002D5h)
Address: 7E423591h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "PrivateExtractIconExW" (+000000FEh)
Address: 7E42379Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefDlgProcW" (+00000000h)
Address: 7E4184FCh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Address: 7E4185A4h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Address: 7E4184FCh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Address: 7E4185A4h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Address: 7E4237BCh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefDlgProcW" (+00000022h)
Address: 7E418734h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000006Dh)
Address: 7E42379Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefDlgProcW" (+00000000h)
Address: 7E42379Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefDlgProcW" (+00000000h)
Address: 7E418816h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000014Fh)
Address: 7E42379Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefDlgProcW" (+00000000h)
Address: 7E440457h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DeregisterShellHookWindow" (+000001CFh)
Address: 7E418830h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+00000169h)
Address: 7E41B89Bh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetParent" (+0000016Ch)
Address: 7E42379Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefDlgProcW" (+00000000h)
Address: 7E41B903h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "SendMessageW" (+00000049h)
Address: 773EAFF1h, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal414" (+00000FB4h)
Address: 7E41882Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+00000163h)
Address: 7E41B89Bh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetParent" (+0000016Ch)
Address: 7E42379Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefDlgProcW" (+00000000h)
Address: 77407392h, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001B4F2h)
Address: 77407720h, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001B880h)
Address: 7E41BF78h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "RedrawWindow" (+0000000Ch)
Address: 7740885Ch, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001C9BCh)
Address: 774096BDh, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001D81Dh)
Address: 7740A4CBh, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001E62Bh)
Address: 7E4188D1h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowLongW" (+0000002Bh)
Address: 7E4184FCh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Address: 7E4185A4h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Address: 7740A549h, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001E6A9h)
Address: 7E4188D1h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowLongW" (+0000002Bh)
Address: 7E4188DAh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowLongW" (+00000034h)
Address: 7740A549h, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001E6A9h)
Address: 7740AB7Fh, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001ECDFh)
Address: 7740A549h, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001E6A9h)
Address: 7E41F896h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "CallNextHookEx" (+0000003Bh)
Address: 7E418734h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000006Dh)
Address: 7740A549h, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001E6A9h)
Address: 7E418734h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000006Dh)
Address: 7740A549h, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001E6A9h)
Address: 7740A549h, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001E6A9h)
Address: 7E418816h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000014Fh)
Address: 7740A549h, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001E6A9h)
Address: 7E418830h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+00000169h)
Address: 7E440457h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DeregisterShellHookWindow" (+000001CFh)
Address: 7E418830h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+00000169h)
Address: 7E4189CDh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowLongW" (+00000127h)
Address: 7740A549h, location: "COMCTL32", loaded at 773D0000h - 774D3000h
Symbol: "Ordinal384" (+0001E6A9h)
Address: 7E440457h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DeregisterShellHookWindow" (+000001CFh)
Address: 7E4189F0h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowLongW" (+0000014Ah)
Address: 7E418A10h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DispatchMessageW" (+0000000Fh)
Address: 7E42D99Dh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "IsDialogMessageW" (+000000DBh)
Address: 0042D9E2h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 7E41DAEAh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DestroyWindow" (+00000000h)
Address: 004B7789h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 0042DA58h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 10002589h, location: "shared", loaded at 10000000h - 1002A000h
Symbol: "uPrintCrashInfo_SetDumpPath" (+000000C8h)
Address: 0041DAEAh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 0042E4F7h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004D1214h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004DD304h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004DD304h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 00400000h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004DD2E8h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 7C90EE18h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "strchr" (+00000117h)
Address: 7C9106F0h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000011Ch)
Address: 7C9106EBh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+00000117h)
Address: 004AAC33h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004A52D0h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004AAC33h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004A9088h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 10002589h, location: "shared", loaded at 10000000h - 1002A000h
Symbol: "uPrintCrashInfo_SetDumpPath" (+000000C8h)
Address: 004D3AE8h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004BE721h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004D3AE8h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 0042E736h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 00400000h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004A34A1h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004A349Bh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004C5B14h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004C3860h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004A52D0h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004A349Bh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004A34AFh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004C3860h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004BEB19h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004A4EBAh, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 00400000h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 015DF028h, location: "foo_input_std", loaded at 015D0000h - 016FD000h
Address: 004A52D0h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 7C816FD7h, location: "kernel32", loaded at 7C800000h - 7C8F5000h
Symbol: "RegisterWaitForInputIdle" (+00000049h)
Address: 015DF028h, location: "foo_input_std", loaded at 015D0000h - 016FD000h
Address: 7C839AA8h, location: "kernel32", loaded at 7C800000h - 7C8F5000h
Symbol: "ValidateLocale" (+000002B0h)
Address: 7C816FE0h, location: "kernel32", loaded at 7C800000h - 7C8F5000h
Symbol: "RegisterWaitForInputIdle" (+00000052h)
Address: 004A4F25h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004E0049h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 004F0044h, location: "foobar2000", loaded at 00400000h - 0052B000h
Address: 01C4D5EDh, location: "foo_rgscan", loaded at 01C00000h - 01C5B000h
Address: 004B0063h, location: "foobar2000", loaded at 00400000h - 0052B000h

Version info:
foobar2000 v0.9.5.5
UNICODE
Windows 5.1


Additional info:
Tabbed panel modified 0.2.5  (foo_uie_tabs)
RAR reader 1.1  (foo_unpack)
ABX Comparator 1.3.3  (foo_abx)
freedb Tagger 0.6  (foo_freedb2)
CD Audio Decoder 2.1.3  (foo_cdda)
Lyrics panel 0.35  (foo_uie_lyrics_panel)
foo_lyricsdb 0.0.7 beta 5  (foo_lyricsdb)
Album List 4.3  (foo_albumlist)
Album Art Panel 0.2.7.1  (foo_uie_albumart)
ZIP/GZIP reader 1.0  (foo_unpack)
Columns UI 0.3.4.1  (foo_ui_columns)
Last.fm Radio 0.2  (foo_lastfm_radio)
foobar2000 core 0.9.5.5  (Core)
Default User Interface 0.9.5  (foo_ui_std)
ReplayGain Scanner 2.0.8   (foo_rgscan)
Standard Input Array 1.0  (foo_input_std)
ELPlaylist 0.6.1.0(beta)  (foo_uie_elplaylist)
File Operations 2.1  (foo_fileops)
Lyric Show Panel 0.3.3.2 [Aug 17 2008 - 15:30:33]  (foo_uie_lyrics)
Masstagger 1.6  (foo_masstag)
Autoplaylist Manager 1.0  (foo_autoplaylist)
Highlight playing 0.1.0  (foo_highlightplaying)
APPCOMMAND multimedia key support 0.1  (foo_appcommand)
Navigator 0.63  (foo_navigator)
Stop On Next 0.0.2  (foo_son)
Playback Statistics 2.1.5  (foo_playcount)
Album Art Browser 0.0.5 [Jul 23 2007 - 08:27:55]  (foo_cwbowron)
Standard DSP Array 1.0  (foo_dsp_std)
Quick Search Toolbar 2.8l  (foo_uie_quicksearch)
Startup Actions 0.0.2 [Jul 23 2007 - 08:27:55]  (foo_cwbowron)
Audio CD Writer 2.0.1  (foo_burninate)
COM Automation server 0.7 alpha 6  (foo_comserver2)
WSH Panel (uie) 0.7.2  (foo_uie_wsh_panel)
mslive 0.4.1 (Intel SSE)  (foo_input_mslive)
Audioscrobbler 1.3.16  (foo_audioscrobbler)
Panel Stack Splitter 0.3.4(alpha)  (foo_uie_panel_splitter)
Skip silence 0.1 (Intel SSE)  (foo_dsp_skip_silence)
Monkey's Audio decoder 2.1.2  (foo_input_monkey)
Converter 1.1.2  (foo_converter)
Discogs Tagger 1.0  (foo_discogs)


foo_lastfm_radio

Reply #14
Thanks for letting me know. See OP for fixed version.

foo_lastfm_radio

Reply #15
A really great plugin. I hope you can fix that tagging-problem as soon as possible. Because it's quite important to know what song you are listening to at the moment

Thanks alot!

foo_lastfm_radio

Reply #16
Yes, this is potentially a great plug in, I have very high hopes for it 

Thanks

foo_lastfm_radio

Reply #17
This is fantastic, I've been hoping for a plugin like this for a long time. Thanks a lot for sharing this!

Oh btw, do you have any plans to implement the track ban and love features from LastFM in the future? That would make the awesomness grow even bigger

foo_lastfm_radio

Reply #18
Awesome. Thanks. I've never really used this feature of Last.fm because I can't stand their crappy client.

I'd love this component even more if you'd implement foosion's suggestions!

Also, it'd be great if the tracks played got scrobbled. Right now it doesn't seem to.

foo_lastfm_radio

Reply #19
Awesome. Thanks. I've never really used this feature of Last.fm because I can't stand their crappy client.

I'd love this component even more if you'd implement foosion's suggestions!

Also, it'd be great if the tracks played got scrobbled. Right now it doesn't seem to.


+1.

Great job and great plugin. Many thanks

foo_lastfm_radio

Reply #20
it's great!!! I was looking for this for a very long time:
http://www.hydrogenaudio.org/forums/index....showtopic=54264
many thanks


suggestion: auto normalize volume please, some tracks are much more louder than other, I think there is no other sollution cause files are streaming? it just can be normalized on the fly to play all files on same volume

foo_lastfm_radio

Reply #21
Updated original post with info about version 0.3.

Regarding scrobbling tracks: I've had a look at the documentation for this and although I haven't tried it yet it looks like it may cause conflicts with other programs also retrieving sessions for the same user account (e.g. foo_audioscrobbler), causing both plug-ins to be repeatedly disconnected. This may not be a problem, but we'll see...

btw. does password stored encrypted?

Yes, it's sent to Last.fm as a md5 hash, so that's how I store it.

Thanks for all the positive feedback!

foo_lastfm_radio

Reply #22
Thank you for your plugin.
This 0.3 version is working quite well for me

foo_lastfm_radio

Reply #23
Thanks, tags now working fine. Now how to display the album and artist images? All of the information is stored in the COMMENTS section of the Tag, for example...

Code: [Select]
image = http://userserve-ak.last.fm/serve/174s/8652249.jpg, lastfm:trackauth = 1a6e7, lastfm:albumId = 1428879, lastfm:artistId = 5705, http://www.last.fm/artistpage = http://www.last.fm/music/Rammstein, http://www.last.fm/albumpage = http://www.last.fm/music/Rammstein/Reise+Reise, http://www.last.fm/trackpage = http://www.last.fm/music/Rammstein/_/Ohne+dich, http://www.last.fm/buyTrackURL = http://www.last.fm/affiliate_sendto.php?link=catchdl&prod=1428879&rt=8&pos=9b944892b67cd2d9f7d9da1c934c5428&s=13, http://www.last.fm/buyAlbumURL = , http://www.last.fm/freeTrackURL = ,
 

And can the GENRE field be auto-filled too?

This is a truly great plug-in 

foo_lastfm_radio

Reply #24
And can the GENRE field be auto-filled too?

No info on the genre is given by Last.fm, so no.

Now how to display the album and artist images?

I'll have to read up on those parts of the SDK, but if it's possible I'll try and get it done.

As you spotted I've dumped all the info given into the comment tag. Feel free to offer suggestions on what to do with it, the obvious being provide menu options to go to load those sites.