foo_dsp_fsurround, a new surround processor for foobar2000 0.9.x |
![]() ![]() |
foo_dsp_fsurround, a new surround processor for foobar2000 0.9.x |
Jan 28 2007, 00:59
Post
#1
|
|
|
Group: Developer Posts: 97 Joined: 6-June 06 Member No.: 31515 |
FreeSurround
is meant to be the foobar2000 equivalent of your hi-fi receiver's Dolby ProLogic II button (except that it uses a different algorithm). Its purpose is to decode surround information from your stereo music (including mp3, of course), and to produce 5.1 output from it. It works with any stereo music containing surround info in a coding scheme compatible with any the following decoders: - Dolby Surround - Dolby ProLogic - Dolby ProLogic II - SRS CircleSurround - SRS CircleSurround II - DTS Neo:6 - Lexicon Logic7 - Stereo Quadrophonic (SQ) * - Quadrophonic Stereo (QS) ** It will also faithfully play back your 'plain old' stereo music, with the exception that echoes are usually played over the surround speakers, and some sound sources, usually strongly distorted guitars, choirs etc., tend to surround the listener instead of being played over the front speakers alone. Download The plugin is attached at the bottom of this post. Operation notes In contrast to the other foobar2000 surround processors (Channel Mixer, Matrix Mixer and ATSurround Processor, as of Aug. 2008), FreeSurround provides independently steered surround channels, and very low crosstalk between channels. If your want to check the state of your surround decoders, you find a test mp3 file at the bottom of the post. It will play a voice on your left front, left rear, right rear, right front and center speaker (one speaker at a time) -- if your decoder is good; otherwise there will be some mishmash on the other channels. Also, FS, being a surround decoder, should not be confused with DSP effects which merely give you an enriched stereo experience, such as Creative CMSS 3D and foobar's Convert Stereo to 4 Channels, or common DSPs like Stadium, Hall etc. Nevertheless there are some options to upmix plain stereo content meaningfully. Configuration notes Here is a screen shot of the default settings in the config dialog (these happen to be also the settings that I use at home). ![]() The default settings are good for many surround setups, but there are some tweakable options (see screen shot).
Change log 0.9.0 - fixed a steering bug in the 0.8.1 beta (sound field was shifted by a few degrees to the left due to an oversight; also steering was less accurate than it should have been) - removed a library dependency (boost serialization) that could cause conflicts with other plugins using the same library but different version (to be confirmed as fixed) 0.8.1 (beta) - basically a rewrite & cleanup; see this post for more details on the original beta announcement. - supports more speaker arrangements (up to 16.1) - supports more controls for sound field transformations (shift, stretch, wrap, ...) - probably a bit faster, too 0.3.5 - now much faster when switching tracks 0.3.4 - new front and rear stereo separation controls - 4 phase shifting modes are supported now - new linear steering mode (better than the old one) - fixed the dimension slider (negative values were mapped to 0) - the gain is back at 100% due to request (you can still put the equalizer before FS to control the gain) 0.3.3 - added the option to invert the rear phase (like pl2 movie mode) - added the option to specify the (surround) mixing coefficients which are assumed for decoding pre-0.3.3 - changed "center width" into "center image", which controls how present the center speaker is (0.3-0.7 are good values for music). - expanded the range of "dimension" to [-0.5 .. 1.0] where 0 is a normal surround soundfield, -0.5 moves the sound towards the front, 1.0 moves it backwards. - changed the gain to ~85% to avoid clipping in practically all cases. - fixed center/surround level (both were too loud it appears). * SQ is decoded with mono surrounds (i.e. like ProLogic I), due to a defective coding specification. ** QS requires the front stereo separation to be set to 1.5, or else the sound field will be too narrow. *** There is one little catch with the more exotic channels: foobar2000 (or Windows) do not expose some of the rarely used positions but instead allow to connect "top" speakers (meant for the ceiling). Therefore there is a bit of remapping going on for these positions: If you have 'side front left'/'side front right' speakers, connect them to the 'top front left'/'top front right' channels, if you have 'side back left/right' connect them to 'top back left/right', and if you have 'back center left/right' speakers you need to connect them to the 'top front center' and 'top back center' channels, respectively. This post has been edited by pro_optimizer: Sep 25 2012, 04:05
Attached File(s)
foo_dsp_fsurround_0.9.0.zip ( 333.2K )
Number of downloads: 4232
channeltest.mp3 ( 69.99K )
Number of downloads: 1302 |
|
|
|
Jan 28 2007, 11:29
Post
#2
|
|
![]() Group: Members Posts: 52 Joined: 26-January 07 From: Germany Member No.: 40023 |
What does it exactly do? I mean, I've got 5.1-headphones and for example I can hear my subwoofer when listening to stereo-files without any plugin :?
And does it improve the sound of 5.1-encoded files aswell? (sorry I'm a newbie This post has been edited by pyr0rrzzz: Jan 28 2007, 11:31 |
|
|
|
Jan 28 2007, 13:12
Post
#3
|
|
|
Group: Members Posts: 18 Joined: 31-March 06 Member No.: 29028 |
I was actually thinking a few hours ago that I'd like some more surround processors, despite not having a surround system. As such, there's not much I can say about this, although I notice that it seems to be quadraphonic for now?
Immediately I notice that when switching tracks, it proceeds to play the next snippet of what it was on (I suppose this qualifies as one of those buffer glitches). |
|
|
|
Jan 28 2007, 17:58
Post
#4
|
|
|
Group: Members Posts: 121 Joined: 28-March 06 Member No.: 28928 |
Hi,
does this plugin offers any definite improvement in confront of my favourite 5.1 foobar plugin, i.e, Foo_channelmixer from Skypirich? For me, channelmixer is the best 5.1 plugin around, even better that dolby systems, Creative Labs Neo and Cmss and even better than SSR labs AudioSandbox, so you'll have a difficult time trying to get anything better than Channelmixer Ys, rozzo |
|
|
|
Jan 28 2007, 20:28
Post
#5
|
|
|
Group: Developer Posts: 97 Joined: 6-June 06 Member No.: 31515 |
What does it exactly do? I mean, I've got 5.1-headphones and for example I can hear my subwoofer when listening to stereo-files without any plugin :? And does it improve the sound of 5.1-encoded files aswell? (sorry I'm a newbie It takes stereo music and decodes it according to the Dolby Surround scheme, which results in 6 channels output, although I do not redirect bass to the subwoofer (which you can do by chaining foo_channel_mixer afterwards IIRC). This means that plain Stereo Music which was not encoded this way sounds very similar to normal Stereo, except that echoes or very distorted sounds usually come over the surround speakers, too. Encoded music sounds much better, of course. Theoretically, sound sources can be placed freely in the soundfield as long as they do not interfere with other sources in the same frequency range. Unfortunately, there is close to zero info about what music "works" on a 5.1 system, so you need to find that out yourself. Recently I stumbled across albums from Lamb (e.g. What Sound/Between Darkness And Wonder), Blank & Jones (Monument), Cog (any), Tool (10.000 Days), Wumpscut (Music For a Slaughtering Tribe), RMB (Widescreen/Mussion Horizon) which are quite "surroundish". It doesn't affect 6-channel sound (e.g. DTS/AC3 music). I was actually thinking a few hours ago that I'd like some more surround processors, despite not having a surround system. As such, there's not much I can say about this, although I notice that it seems to be quadraphonic for now? Immediately I notice that when switching tracks, it proceeds to play the next snippet of what it was on (I suppose this qualifies as one of those buffer glitches). Yeah, you're right. I have yet to find the buffer which I forget to clear in this situation :/ This post has been edited by pro_optimizer: Apr 12 2007, 19:42 |
|
|
|
Jan 29 2007, 00:33
Post
#6
|
|
|
Group: Developer Posts: 97 Joined: 6-June 06 Member No.: 31515 |
Fixed a major problem with the overlapped filtering which caused relatively high-frequency crackling.
So please redownload it. |
|
|
|
Jan 29 2007, 22:43
Post
#7
|
|
|
Group: Developer Posts: 97 Joined: 6-June 06 Member No.: 31515 |
Here is a short sound sample from Mike Oldfield's Tubular Bells.
I would use the latest plugin version for testing this because it can steer more sources simultaneously (~1000). Tell me if your jaws hit the ground (just joking ;-) Note: The sample is from the DTS version of that album, converted to stereo with the ATSurround-Encode2 plugin. Edit: Sorry, didn't see your post, rozzo! Hi, does this plugin offers any definite improvement in confront of my favourite 5.1 foobar plugin, i.e, Foo_channelmixer from Skypirich? For me, channelmixer is the best 5.1 plugin around, even better that dolby systems, Creative Labs Neo and Cmss and even better than SSR labs AudioSandbox, so you'll have a difficult time trying to get anything better than Channelmixer Ys, rozzo Well, the most definite improvement is that its output channels are fully independent which means that they *can* play completely different things (if the recording engineer wants them to). There is a stereo test file which plays a voice on each of the 5 channels, one channel at a time. When you play this with foo_channel_mixer, you hear the voice always on every channel (only at slightly different volume), even if you turn "front in rear" and "rear in front" down to zero. OTOH, if you have "vanilla stereo" music, you may want to mirror the front sounds in the rears (like e.g. CMSS does) and there foo_channel_mixer gives you more control. It would be cool if Skypirich allowed this kind of blending for 6 channel inputs, too, because then you could chain his plugin after mine (and I, Andrew Tan, Chungalin or the author of foo_dts don't have to implement all those controls). Actually, we really need a plugin where one can control the volume of each channel separately. This post has been edited by pro_optimizer: Jan 30 2007, 03:06 |
|
|
|
Jan 30 2007, 18:19
Post
#8
|
|
|
Group: Members Posts: 121 Joined: 28-March 06 Member No.: 28928 |
Thanks Prooptimizer.
I've been trying your plugin with my megahifi 5.1 equipment, five big towers + a full rank Subwoofer. In confront with channelmixer, Mike Olfield's sample offers a real difference: sound seems to move around oneself from one speaker to another in a definitively deeper conception of stereo. On the counterpart, I was forced to give some more decibeles to my amplifier to get a clear sound; at the same level fee-surround was not giving a bright sound. I'm getting good results now by applying the Vlevel plugin after your mixer, many things previously muddy or unaudible came to surface. I keep enjoying this new way of surround, thanks, Ys, Rozzo |
|
|
|
Feb 2 2007, 14:16
Post
#9
|
|
|
Group: Members Posts: 913 Joined: 22-October 01 From: the Netherlands Member No.: 335 |
.. decodes it .. which results in 6 channels output, although I do not redirect bass .. Here the center channel stays silent. For music this is not so bad, but I got the impression, from the posts here, that it should have some signal too. The plugin works nicely but, as you said, it depends on the (stereo) source. |
|
|
|
Feb 2 2007, 22:31
Post
#10
|
|
|
Group: Developer Posts: 97 Joined: 6-June 06 Member No.: 31515 |
Here the center channel stays silent. For music this is not so bad, but I got the impression, from the posts here, that it should have some signal too. The plugin works nicely but, as you said, it depends on the (stereo) source. Your're right, the center signal is equally distributed to front left/right. You'll be able to control this with "center width", once I add a GUI configuration. For now, it should be ok (since, as you said, no center not a big loss for music anyway). |
|
|
|
Feb 3 2007, 02:38
Post
#11
|
|
|
Group: Developer Posts: 97 Joined: 6-June 06 Member No.: 31515 |
OK, added the GUI controls for center width and dimension (shifts soundfield backwards) now.
Hope you like it. DSP chains which contain the non-config version of this plugin have to be rebuilt. |
|
|
|
Feb 3 2007, 23:13
Post
#12
|
|
|
Group: Members Posts: 913 Joined: 22-October 01 From: the Netherlands Member No.: 335 |
|
|
|
|
Feb 5 2007, 21:52
Post
#13
|
|
|
Group: Members Posts: 21 Joined: 9-May 03 Member No.: 6487 |
This plugin seems to work great to me except for one problem, which is it seems to be assuming that input is at 44.1 KHz - other sample rates are played back either too quickly or too slowly, so something that's 48 KHz, for example, is played back too slowly by about 10% (and yes the pitch is affected as well). I haven't checked into bit-depth just yet, just 16-bit mono and stereo at different sample rates...
This post has been edited by Googer: Feb 5 2007, 21:55 |
|
|
|
Feb 5 2007, 23:38
Post
#14
|
|
|
Group: Developer Posts: 97 Joined: 6-June 06 Member No.: 31515 |
This plugin seems to work great to me except for one problem, which is it seems to be assuming that input is at 44.1 KHz - other sample rates are played back either too quickly or too slowly, so something that's 48 KHz, for example, is played back too slowly by about 10% (and yes the pitch is affected as well). I haven't checked into bit-depth just yet, just 16-bit mono and stereo at different sample rates... Oops, what a stupid mistake (forgot to set the correct output sample rate). It's fixed now. Btw: It works with 32bit floating point precision internally, so bitrates should be no problem. |
|
|
|
Feb 6 2007, 17:43
Post
#15
|
|
|
Group: Members Posts: 21 Joined: 9-May 03 Member No.: 6487 |
Thanks for the quick fix, though I have another bug to report - with a 22 KHz mono mp3 (the htguys.com podcast to be specific), foobar2000 crashes in foo_dsp_fsurround upon seeking. Interestingly I configured foo_gep to output at 22 KHz as a test and tried some nsf files (so its output should also have been 22 KHz mono) and had no problems with seeks...
And here's the contents of failure.txt (and yes this is with fsurround as the only active DSP to try to cut down on potential failure points CODE Illegal operation:
Code: C0000005h, flags: 00000000h, address: 0149480Ah Access violation, operation: read, address: 00000000h Call path: playback_process entry=>dsp::flush This is the first crash logged by this instance. Code bytes (0149480Ah): 014947CAh: CC CC CC CC CC CC 51 8B 49 18 03 C9 33 D2 B8 00 014947DAh: 20 00 00 F7 F1 85 C0 89 04 24 DB 04 24 7D 06 DC 014947EAh: 05 70 9E 4A 01 59 C3 CC CC CC CC CC CC CC CC CC 014947FAh: CC CC CC CC CC CC 53 56 8B F1 8B 86 F0 00 00 00 0149480Ah: 8B 18 E8 BF D0 FF FF 8D 5E 20 E8 97 07 00 00 5E 0149481Ah: 5B C3 CC CC CC CC 6A FF 68 0B 72 4A 01 64 A1 00 0149482Ah: 00 00 00 50 83 EC 08 56 A1 54 10 4B 01 33 C4 50 0149483Ah: 8D 44 24 10 64 A3 00 00 00 00 6A 04 E8 1E 2C 00 Stack (02A5F688h): 02A5F668h: 0000040B 00001000 022FD238 773DE50B 02A5F678h: DCBAABCD 00000000 0012F68C 773DE50B 02A5F688h: 10002DA0 024CE008 0048303D 5E612E0B 02A5F698h: 0248A228 024CE2D8 0046A7AE 00000016 02A5F6A8h: 024CE308 02485FD0 024CE308 02485FD0 02A5F6B8h: 00000000 02A5FEDC 004A7439 00000003 02A5F6C8h: 02A5FEDC 02A5FEE8 00445BDE 024CE308 02A5F6D8h: 00000000 00000000 024CE008 7C839AA8 02A5F6E8h: 7FFDD000 7FFDD000 02A5FB6C 00000000 02A5F6F8h: 00000000 001A0018 7FFDDC00 02080000 02A5F708h: 02A5F928 02080000 02A5F720 00000000 02A5F718h: 00000000 7C800000 00000000 001A0018 02A5F728h: 7FFDDC00 02080000 02A5F950 02080000 02A5F738h: 02A5F748 00000000 00000000 7C800000 02A5F748h: 7C800000 02080000 02A5F760 00000000 02A5F758h: 00000000 7C800000 00000000 00000000 02A5F768h: 00000000 00000000 00000000 00000000 02A5F778h: 00000000 00000000 00000000 00000000 02A5F788h: 00000000 00000000 00000000 00000000 02A5F798h: 00000000 00000000 00000000 00000000 Registers: EAX: 00000000, EBX: 024CE008, ECX: 014F4218, EDX: 014A9D48 ESI: 014F4218, EDI: 10002DE0, EBP: 02A5F6CC, ESP: 02A5F688 Crash location: "foo_dsp_fsurround", loaded at 01490000h - 014B9000h Loaded modules: foobar2000 loaded at 00400000h - 004F3000h ntdll loaded at 7C900000h - 7C9B0000h kernel32 loaded at 7C800000h - 7C8F4000h COMCTL32 loaded at 773D0000h - 774D3000h msvcrt loaded at 77C10000h - 77C68000h ADVAPI32 loaded at 77DD0000h - 77E6B000h RPCRT4 loaded at 77E70000h - 77F01000h GDI32 loaded at 77F10000h - 77F57000h USER32 loaded at 77D40000h - 77DD0000h SHLWAPI loaded at 77F60000h - 77FD6000h SHELL32 loaded at 7C9C0000h - 7D1D5000h ole32 loaded at 774E0000h - 7761D000h shared loaded at 10000000h - 10029000h comdlg32 loaded at 763B0000h - 763F9000h IMM32 loaded at 76390000h - 763AD000h LPK loaded at 629C0000h - 629C9000h USP10 loaded at 74D90000h - 74DFB000h CACheck loaded at 003D0000h - 003F0000h CAHook loaded at 009E0000h - 00A08000h PSAPI loaded at 76BF0000h - 76BFB000h CAServer loaded at 00F20000h - 00F46000h MSVCP71 loaded at 7C3A0000h - 7C41B000h MSVCR71 loaded at 7C340000h - 7C396000h MSCTF loaded at 74720000h - 7476B000h MsgPlusLoader1 loaded at 00FD0000h - 00FDE000h msctfime loaded at 755C0000h - 755EE000h foo_abx loaded at 01000000h - 01034000h foo_ac3 loaded at 01060000h - 0108C000h foo_adpcm loaded at 010B0000h - 01102000h foo_albumlist loaded at 01130000h - 01177000h OLEAUT32 loaded at 77120000h - 771AC000h foo_audioscrobbler loaded at 011A0000h - 011D7000h WS2_32 loaded at 71AB0000h - 71AC7000h WS2HELP loaded at 71AA0000h - 71AA8000h foo_cdda loaded at 01240000h - 01276000h foo_common loaded at 012A0000h - 012DA000h foo_converter loaded at 01300000h - 01369000h foo_dbsearch loaded at 01390000h - 01405000h foo_dsp_continuator loaded at 01430000h - 01462000h foo_dsp_fsurround loaded at 01490000h - 014B9000h libfftw3f-3 loaded at 63740000h - 6380B000h foo_dsp_skip_silence loaded at 01500000h - 0150A000h MSVCR80 loaded at 78130000h - 781CB000h foo_dsp_std loaded at 01530000h - 01571000h foo_dts loaded at 015A0000h - 015D7000h foo_dumb loaded at 015F0000h - 01679000h foo_freedb2 loaded at 016A0000h - 016E0000h foo_game loaded at 6C810000h - 6C843000h MSVCP80 loaded at 7C420000h - 7C4A7000h foo_gep loaded at 01710000h - 017AB000h MSIMG32 loaded at 76380000h - 76385000h foo_input_awma loaded at 017D0000h - 017E9000h WMVCore loaded at 01800000h - 01A5D000h WMASF loaded at 070E0000h - 07119000h foo_input_monkey loaded at 01A60000h - 01AAA000h foo_input_mslive loaded at 01AD0000h - 01AF7000h foo_input_shorten loaded at 01B10000h - 01B3E000h foo_input_std loaded at 01B60000h - 01C74000h foo_lnk loaded at 01CA0000h - 01CB9000h foo_lock loaded at 01CE0000h - 01CF8000h foo_m1 loaded at 5FC80000h - 5FCB7000h foo_masstag loaded at 01D30000h - 01D80000h foo_menu_addons loaded at 01DA0000h - 01DBF000h foo_midi loaded at 01DD0000h - 01E7A000h foo_out_ks loaded at 01EA0000h - 01ECB000h SETUPAPI loaded at 77920000h - 77A13000h foo_playlist_manager loaded at 01EF0000h - 01F36000h foo_pqview loaded at 01F60000h - 01F7C000h foo_psf loaded at 01FA0000h - 02081000h foo_random loaded at 020B0000h - 020EF000h foo_rgscan loaded at 02110000h - 02158000h foo_sid loaded at 02180000h - 02200000h foo_tradersfriend loaded at 02220000h - 0225D000h foo_ui_columns loaded at 02280000h - 02317000h foo_unpack loaded at 02340000h - 0236E000h foo_unpack_jma loaded at 02390000h - 023B1000h foo_unpack_lha loaded at 023E0000h - 02400000h foo_utils loaded at 02420000h - 02459000h uxtheme loaded at 5AD70000h - 5ADA8000h ctagent loaded at 02780000h - 02786000h wtsapi32 loaded at 76F50000h - 76F58000h WINSTA loaded at 76360000h - 76370000h NETAPI32 loaded at 5B860000h - 5B8B4000h mswsock loaded at 71A50000h - 71A8F000h DNSAPI loaded at 76F20000h - 76F47000h mhook loaded at 02810000h - 02816000h rasadhlp loaded at 76FC0000h - 76FC6000h hnetcfg loaded at 662B0000h - 66308000h wshtcpip loaded at 71A90000h - 71A98000h WINTRUST loaded at 76C30000h - 76C5E000h CRYPT32 loaded at 77A80000h - 77B14000h MSASN1 loaded at 77B20000h - 77B32000h IMAGEHLP loaded at 76C90000h - 76CB8000h ksuser loaded at 73EE0000h - 73EE4000h appHelp loaded at 77B40000h - 77B62000h CLBCATQ loaded at 76FD0000h - 7704F000h COMRes loaded at 77050000h - 77115000h VERSION loaded at 77C00000h - 77C08000h cscui loaded at 77A20000h - 77A74000h CSCDLL loaded at 76600000h - 7661D000h browseui loaded at 75F80000h - 7607D000h USERENV loaded at 769C0000h - 76A73000h ntshrui loaded at 76990000h - 769B5000h ATL loaded at 76B20000h - 76B31000h shdocvw loaded at 77760000h - 778CF000h CRYPTUI loaded at 754D0000h - 75550000h WININET loaded at 771B0000h - 7727E000h Normaliz loaded at 03900000h - 03909000h iertutil loaded at 5DCA0000h - 5DCE5000h WLDAP32 loaded at 76F60000h - 76F8C000h MPR loaded at 71B20000h - 71B32000h drprov loaded at 75F60000h - 75F67000h ntlanman loaded at 71C10000h - 71C1E000h NETUI0 loaded at 71CD0000h - 71CE7000h NETUI1 loaded at 71C90000h - 71CD0000h NETRAP loaded at 71C80000h - 71C87000h SAMLIB loaded at 71BF0000h - 71C03000h davclnt loaded at 75F70000h - 75F79000h wpdshext loaded at 40000000h - 40396000h WINMM loaded at 76B40000h - 76B6D000h gdiplus loaded at 4EC50000h - 4EDF3000h PortableDeviceApi loaded at 03950000h - 039A8000h WINHTTP loaded at 4D4F0000h - 4D548000h Audiodev loaded at 09200000h - 09244000h DBGHELP loaded at 59A60000h - 59B01000h Stack dump analysis: Address: 10002DA0h, location: "shared", loaded at 10000000h - 10029000h Symbol: "uCallStackTracker::uCallStackTracker" (+00000000h) Address: 0048303Dh, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 0046A7AEh, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 004A7439h, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 00445BDEh, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 7C839AA8h, location: "kernel32", loaded at 7C800000h - 7C8F4000h Symbol: "ValidateLocale" (+000002B0h) Address: 7C800000h, location: "kernel32", loaded at 7C800000h - 7C8F4000h Address: 7C800000h, location: "kernel32", loaded at 7C800000h - 7C8F4000h Address: 7C800000h, location: "kernel32", loaded at 7C800000h - 7C8F4000h Address: 7C800000h, location: "kernel32", loaded at 7C800000h - 7C8F4000h Address: 7C80B62Eh, location: "kernel32", loaded at 7C800000h - 7C8F4000h Symbol: "GetModuleFileNameA" (+0000015Fh) Address: 7C80B643h, location: "kernel32", loaded at 7C800000h - 7C8F4000h Symbol: "GetModuleFileNameA" (+00000174h) Address: 7C800000h, location: "kernel32", loaded at 7C800000h - 7C8F4000h Address: 7C906274h, location: "ntdll", loaded at 7C900000h - 7C9B0000h Symbol: "RtlCaptureContext" (+00002A2Fh) Address: 7C919BD3h, location: "ntdll", loaded at 7C900000h - 7C9B0000h Symbol: "LdrGetProcedureAddress" (+0000004Bh) Address: 004C7008h, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 7C919B3Fh, location: "ntdll", loaded at 7C900000h - 7C9B0000h Symbol: "towlower" (+000003D3h) Address: 7C97C0D8h, location: "ntdll", loaded at 7C900000h - 7C9B0000h Address: 7C919AEBh, location: "ntdll", loaded at 7C900000h - 7C9B0000h Symbol: "towlower" (+0000037Fh) Address: 02441B04h, location: "foo_utils", loaded at 02420000h - 02459000h Address: 004C7008h, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 0921A9E2h, location: "Audiodev", loaded at 09200000h - 09244000h Address: 09223426h, location: "Audiodev", loaded at 09200000h - 09244000h Address: 0921A93Ch, location: "Audiodev", loaded at 09200000h - 09244000h Address: 004C7008h, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 010C1000h, location: "foo_adpcm", loaded at 010B0000h - 01102000h Address: 40110000h, location: "wpdshext", loaded at 40000000h - 40396000h Address: 4010A7EDh, location: "wpdshext", loaded at 40000000h - 40396000h Address: 004C2C28h, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 004AF2EDh, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 4010A7EDh, location: "wpdshext", loaded at 40000000h - 40396000h Address: 004456E5h, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 004C2B04h, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 10002D87h, location: "shared", loaded at 10000000h - 10029000h Symbol: "uPrintCrashInfo_SetDumpPath" (+000000A7h) Address: 004C2B04h, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 004AF308h, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 00445687h, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 004A67D9h, location: "foobar2000", loaded at 00400000h - 004F3000h Address: 7C80B683h, location: "kernel32", loaded at 7C800000h - 7C8F4000h Symbol: "GetModuleFileNameA" (+000001B4h) Address: 7C839AA8h, location: "kernel32", loaded at 7C800000h - 7C8F4000h Symbol: "ValidateLocale" (+000002B0h) Address: 7C80B690h, location: "kernel32", loaded at 7C800000h - 7C8F4000h Symbol: "GetModuleFileNameA" (+000001C1h) Address: 00445650h, location: "foobar2000", loaded at 00400000h - 004F3000h Version info: foobar2000 v0.9.4.2 UNICODE Additional info: Randomized playlist entry 1.2.3 (foo_random) FLAC Decoder 1.1.0 (foo_input_std) RAR reader 1.1 (foo_unpack) DUMB module decoder 0.9.8.4 (foo_dumb) Playlist Manager 1.0 (foo_playlist_manager) Menu Addons 0.3.7c (foo_menu_addons) Album List 3.2.0 (foo_albumlist) Skip silence 0.1 (foo_dsp_skip_silence) RAC decoder 1.0 (foo_adpcm) Masstagger 1.6 (foo_masstag) Kernel Streaming Output 1.2.1 (foo_out_ks) Monkey's Audio decoder 2.1 (foo_input_monkey) ADX decoder 1.6 (foo_adpcm) GCN DSP decoder 1.3 (foo_adpcm) Continuator 0.4.0 (foo_dsp_continuator) CD Audio Decoder 2.1.1 (foo_cdda) Shorten decoder 0.4.2a (foo_input_shorten) Acro WMA decoder 0.1.6.2 (foo_input_awma) Playlist tools 0.5.6 (foo_utils) mslive 0.2 (foo_input_mslive) ReplayGain Scanner 2.0.2 (foo_rgscan) ABX Comparator 1.3.1 (foo_abx) freedb Tagger 0.5.2a (foo_freedb2) foobar2000 core 0.9.4.2 (Core) MIDI synthesizer host 1.7 (foo_midi) kode's ADPCM decoders 1.2 (foo_adpcm) Columns UI 0.1.3 beta 1v7 (foo_ui_columns) Audioscrobbler 1.3.5 (foo_audioscrobbler) Shell link resolver 1.1 (foo_lnk) Standard Input Array 1.0 (foo_input_std) Highly Experimental 2.0.5 (foo_psf) WMA Decoder 1.1 (foo_input_std) Converter 1.0.1 (foo_converter) FreeSurround 0.3 (foo_dsp_fsurround) JMA unpacker 1.0 (foo_unpack_jma) AC3 decoder 0.8 (foo_ac3) Common services 0.1 (foo_common) Database Search 1.4 beta 4 (foo_dbsearch) sidplay2 1.13 (foo_sid) Game Audio Decoder 1.08 (foo_game) XA ADPCM decoder 1.2 (foo_adpcm) Live show tagger 0.6.1 (foo_tradersfriend) Pause on Lock 0.4 (foo_lock) Game Emu Player 1.5 (foo_gep) DTS decoder 0.1.1 (foo_dts) OKI-ADPCM decoder 0.14 (foo_adpcm) BRR decoder and converter 0.7 (foo_adpcm) LHA unpacker 1.2 (foo_unpack_lha) Foobar200-M1 bridge DLL 1.0 (foo_m1) Standard DSP array 1.0 (foo_dsp_std) Interplay ACM decoder 1.0 (foo_adpcm) ZIP/GZIP reader 1.0 (foo_unpack) |
|
|
|
Feb 7 2007, 05:49
Post
#16
|
|
|
Group: Developer Posts: 97 Joined: 6-June 06 Member No.: 31515 |
Thanks for the quick fix, though I have another bug to report - with a 22 KHz mono mp3 (the htguys.com podcast to be specific), foobar2000 crashes in foo_dsp_fsurround upon seeking. Interestingly I configured foo_gep to output at 22 KHz as a test and tried some nsf files (so its output should also have been 22 KHz mono) and had no problems with seeks... <snipp> Thanks for the detailed info, it's fixed now. The bug was that the decoder core is not loaded in bypass mode (i.e. non-stereo source), but was flushed upon seeking. |
|
|
|
Feb 7 2007, 22:09
Post
#17
|
|
|
Group: Members Posts: 21 Joined: 9-May 03 Member No.: 6487 |
¡Muchas gracias! This seems to be rock-solid now; I'll let you know if I have any more problems with it.
|
|
|
|
Feb 9 2007, 21:24
Post
#18
|
|
![]() Group: Members Posts: 50 Joined: 26-November 05 Member No.: 26010 |
Very promising, really. It may become my substitute of Channel Mixer as feeder of Dolby Headphone plugin, beacuse this one is more deterministic in the volume domain. I mean, I can disable dynamic compression and set "amplification" to 100% with less chances of getting eventual clippings.
To my taste the Front channels are too "separated", I think the Dimension control should have a "negative" side in order to get the Fronts closer. Is that possible? Also the Center control has little effect on the Center presence. Not very related to that, but I'm missing some kind of visual control over channel contents. I think that would be a good idea to code some kind of passthrough-DSP with integrated VU-meter visualization that could be able to display EACH channel level independently at the same time. You could insert that plugin in any position of the DSP chain to see what's going on at THAT point (number of channels and what's playing on them). I know the fb2k scene is not visualization-friendly (and I don't want this to change) but there're a few visualizations that DO aid in monitoring multichannel audio, specially if you don't have all those speakers! What do you think about this matter? |
|
|
|
Feb 10 2007, 21:15
Post
#19
|
|
|
Group: Developer Posts: 97 Joined: 6-June 06 Member No.: 31515 |
Very promising, really. It may become my substitute of Channel Mixer as feeder of Dolby Headphone plugin, beacuse this one is more deterministic in the volume domain. I mean, I can disable dynamic compression and set "amplification" to 100% with less chances of getting eventual clippings. Well, I use 100% amplification in DH myself and did not notice any clipping yet. The reason is that I do not change the volume at all but just redistribute the sound to the different channels. Edit: Okay, of course clipping can happen even when one doesn't change the total volume (in an extreme case by putting everything from left and right just into left). I changed the master gain to 0.7 (which is very safe) for now. I think I'll add a slider for this (b/c many people would probably dislike a DSP which reduces the overall volume). And I added a warning mechanism that writes a line into the console whenever the plugin produces data which is above the maximum volume (1.0), so you can check that it doesn't clip. The absolutely worst case follows from the PL2 encoding matrix: The signal <Lt=0.8165*i, Rt=0.5774*j> (rear left) would be turned into <Lsurr=0.8165+0.5774, Rsurr=0>. So if someone maximized the volume of the <Lt, Rt> signal, the decoded signal would have the volume level <Lsurr=(0.8165+0.5774)/0.8165, Rsurr=0>. In other words, the worst case gain would have to be 0.5858. Under the (reasonable) assumption that there is at least one front source in the file which is at least as loud as the loudest rear source, then the worst case gain would have to be 1/(0.5774+0.8165) = 0.7174, so 0.7 is fully sufficient for any non-pathetic music. To my taste the Front channels are too "separated", I think the Dimension control should have a "negative" side in order to get the Fronts closer. Is that possible? Also the Center control has little effect on the Center presence. Good point, I changed the allowed range of dimension to [-0.5 .. 1.0] (where -0.5 means that nearly everything ends up in the front channels), hope you don't need even more front-ness (this would defeat the original purpose of this plugin a bit). But if you experience strongly increased stereo separation with FS enabled compared to stereo, then it's very likely that the more separated sources are actually behind you (if this is the case I'd like to know to what material you are referring to). The central reason for this effect is that in PL2, the surround channels are encoded very close to the center and thus sound rather "mono" when the stereo file is played back undecoded. So if this is annoying you, you probably need a crossfeed slider for rear and one for front. A simple criterion to find out if what you hear behind you is really surround (instead of crosstalk) is whether there is no other source at the same time which occupies the same frequencies (this is the only situation in which crosstalk can occur). On the center matter: I changed the meaning of "center width" to "center image" so that it's more clear what this slider does: 0.0 means there is no center, so left front an right front have to emulate center sounds. 1.0 means that the center just plays its part of the music. If there was a sound source at location X, the volume levels (for X) would be approx. like this: [--------X------------------------] L---------------------------------R "no center (0.0)": L=0.75, C=0.00, R=0.25 L---------------C----------------R "center on (1.0)": L=0.45, C=0.55, R=0.00 As you see, the stereo separation remains completely untouched, it just enables a third speaker in the middle. The effect in DH is rather subtle, because all virtual speakers have (theoretically) equal properties so its more about how "virtual" or how "concrete" the center sources sound. Personally, I have it at 0.3 (according to the new meaning). Not very related to that, but I'm missing some kind of visual control over channel contents. I think that would be a good idea to code some kind of passthrough-DSP with integrated VU-meter visualization that could be able to display EACH channel level independently at the same time. You could insert that plugin in any position of the DSP chain to see what's going on at THAT point (number of channels and what's playing on them). I know the fb2k scene is not visualization-friendly (and I don't want this to change) but there're a few visualizations that DO aid in monitoring multichannel audio, specially if you don't have all those speakers! What do you think about this matter? I too think that such a plugin is a very good idea for monitoring purposes (including clipping). Another thing that I thought would be cool & useful is a visualization of the soundfield (where sources are marked as dots in a 2d plane, which works under the assumption that each frequency in a short period of time comes from exactly one source). This way, one could quickly determine if the music is actually surround encoded or not. The minimal version would just be a DSP plugin which displays the visualization in its config dialog. Another option would be to open an external window when the DSP is loaded. And the king of options would be to have a ColumnsUI-Panel which can use information from a special (passthrough) probe dsp. Once I have time again, I might try options 2 and 3, but therefore I need a least a decent setup of ColumnsUI (for the motivation!). Habla, do you read?! This post has been edited by pro_optimizer: Feb 11 2007, 09:44 |
|
|
|
Feb 13 2007, 21:31
Post
#20
|
|
|
Group: Members Posts: 57 Joined: 11-July 06 Member No.: 32807 |
I am interested in a good free dpl II decoder and your tool seems very promising.
A first goal for me is obtain a good channel separation and I make a first test: 1) Five channel test (each normalized 100%) not coincident in time. 2) Mixed like dpl II with normalized matrix: Lt = 0.3254*FL + 0.2301*FC + 0.2818*SL + 0.1627*SR Rt = 0.3254*FR + 0.2301*FC - 0.1627*SL - 0.2818*SR 3) Dpl II decoded with CyberLink Audio Effect (PowerDVD 7) and Free Surround. Recovered channels are with ', numbers are % from original channel: CODE PowerDVD 7 Mode ProLogic II Movie FL FR C SL SR --- --- --- --- --- FL' 23 0 0 0 0 FR' 0 23 0 0 0 C' 1 1 23 0 0 SL' 0 0 0 23 1 SR' 0 0 0 1 23 Free Surround Center Image=1 FL FR C SL SR --- --- --- --- --- FL' 23 0 0 1 0 FR' 0 23 0 0 1 C' 0 0 64 0 0 SL' 0 0 0 27 0 SR' 0 0 0 0 -27 Free Surround Center Image=0 FL FR C SL SR --- --- --- --- --- FL' 23 0 16 2 1 FR' 0 23 16 1 2 C' 0 0 0 0 0 SL' 0 0 0 27 0 SR' 0 0 0 0 -27 - Dimension slider (-0.5, 1.0) without effect. - The surround channels must be attenuated by 0.83. - The SR channel is inverted. - With Center Image=1 the center channel must be attenuated by 0.35. If downmix matrix is not normalized or the downmix is after normalized we obtain overflow. - With Center Image=0 the center channel have a good relation with front channels (70%). The separation is really good, is possible a little adjust to obtain a correct decoded wav with any preset? |
|
|
|
Feb 14 2007, 07:46
Post
#21
|
|
|
Group: Developer Posts: 97 Joined: 6-June 06 Member No.: 31515 |
Hey tebasuna,
this is some very interesting data - thank you! You're right with the center thing, changed that. Is it possible that the actual value is 0.5*sqrt(0.5) (=0.3536)? The fact that surround sources have to be attenuated surprises me a bit but actually its quite practical since this mitigates the clipping issue, changed it. But there are two things related to the mixing matrix you used: 1. Shouldn't the factors for SL and SR be 0.8165 and 0.5774, scaled by some normalization constant? Because 0.8165/0.5774 = 1.4140 and 0.2818/0.1627 = 1.7382 which seems not to match. I think this is the reason why you get the two off-diagonal 1's. 2. Did you apply the +90 degree phase shifts to SL and SR? In case you didn't, I would try to encode it with ATSurround-Encode2, which appies the correct hilbert filter. I'd like to know what correlation coeffs you get with PL2 then. It's no problem for me to un-shift the signal by +90/-90 since I work in the frequency domain anyway but I'm not sure if you can do this with an analog filter (which PL2 mimics AFAIK). I uploaded a version called foo_dsp_fs-phaseshift.dll which does that un-shifting for your testing. There is another test which should be conducted. This is how PL2/FS reconstructs a source when it is arbitrarily distributed across LF,FR,C,SL,SR. Thing is that it's not a piece of cake to get a linear behaviour over all positions. I think I'd need access to Mathematica to get this 100% right and I think PL2 doesn't do this perfectly either. |
|
|
|
Feb 14 2007, 17:52
Post
#22
|
|
|
Group: Members Posts: 57 Joined: 11-July 06 Member No.: 32807 |
Thanks for you quick answer.
I agree with "how PL2/FS reconstructs a source when it is arbitrarily distributed across LF,FR,C,SL,SR", because is the real problem. But simplified data can help to adjust some parameters before go to more sophisticated test. To answer your questions: 1) The dpl II matrix coeficients: 1/0.7071/0.8660/0.5000 (0.3254/0.2301/0.2818/0.1627 normalized) is used by Midas Azid 1.9 (Dec-2003) and since BeSweet v1.5b20 after this discussion instead the old one: 1/0.7071/0.8165/0.5774 (0.3225/0.2280/0.2633/0.1862 normalized) Using: Lt = 0.3225*FL + 0.2280*FC + 0.2633*SL + 0.1862*SR Rt = 0.3225*FR + 0.2280*FC - 0.1862*SL - 0.2633*SR I obtain: CODE PowerDVD 7 Mode ProLogic II Movie FL FR C SL SR --- --- --- --- --- FL' 23 0 0 0 0 FR' 0 23 0 0 1 C' 0 0 23 0 1 SL' 0 0 0 21 6 SR' 0 0 0 6 21 Free Surround Center Image=1 FL FR C SL SR --- --- --- --- --- FL' 23 0 0 0 0 FR' 0 23 0 0 0 C' 0 0 64 0 0 SL' 0 0 0 31 0 SR' 0 0 0 0 -31 Free Surround Center Image=0 FL FR C SL SR --- --- --- --- --- FL' 23 0 16 0 0 FR' 0 23 16 0 0 C' 0 0 0 0 0 SL' 0 0 0 31 0 SR' 0 0 0 0 -31 With better channel separation results for Free Surround (surround channels more amplified) but worse for PowerDVD 2) "Did you apply the +90 degree phase shifts to SL and SR?" Hard question. My opinion is: - The 90 degree phase shifts is out of dpl2 encode/decode phases. Only 180 degree (- sign) is necessary. - The 90 degree phase shifts is necessary when we create a 5.1 signal only if rear channels are generated from front channels to avoid interaction in mixes. And is not necessary when the channels are independents or "if the source was recorded using five discrete microphones placed in the corners of an auditorium", like say Dolby in their docs. - I don't apply 90 degree phase shifts to SL and SR because the precedent reasons. BeSweet-Azid don't aply any phase shifts. - ATSurround don't work for dpl II, only dpl I. I know that my test and requirements are based in premises that can be wrong, but I don't know another reference: - Dpl II soft encoder: Azid 1.9 (with ac3 sources) - Dpl II soft decoder PowerDVD 7 And, of course, dpl II is not perfect. BTW, the Dimension slider don't must affect the relation between the front and rear channels volume? EDIT: all values and comment without test the new release. I'm testing... This post has been edited by tebasuna51: Feb 14 2007, 18:29 |
|
|
|
Feb 14 2007, 20:31
Post
#23
|
|
|
Group: Members Posts: 57 Joined: 11-July 06 Member No.: 32807 |
Near perfect your new version.
- The Dimension slider affect: CODE Free Surround Center Image=1, Dimension=1 FL FR C SL SR --- --- --- --- --- FL' 14 0 0 4 0 FR' 0 14 0 0 4 C' 0 0 14 0 0 SL' 12 0 8 44 0 SR' 0 12 8 0 -44 Free Surround Center Image=1, Dimension=0 FL FR C SL SR --- --- --- --- --- FL' 28 0 0 1 0 FR' 0 28 0 0 1 C' 0 0 28 0 0 SL' 0 0 0 28 0 SR' 0 0 0 0 -28 - The center chanel is perfect at 1. Now using the same sample and normalizing 100%, in this case is the same than: Lt = FL + 0.7071*FC + 0.866*SL + 0.500*SR Rt = FR + 0.7071*FC - 0.500*SL - 0.866*SR and with 1/1000 instead % for more precision: CODE PowerDVD 7 Mode ProLogic II Movie FL FR C SL SR --- --- --- --- --- FL' 706 1 14 8 4 FR' 1 706 14 4 36 C' 9 9 704 2 22 SL' 5 6 10 702 72 SR' 6 9 10 31 700 Free Surround Center Image=1, Dimension=0 FL FR C SL SR --- --- --- --- --- FL' 864 0 0 37 0 FR' 0 864 0 0 37 C' 0 0 864 0 0 SL' 0 0 0 865 0 SR' 0 0 0 0 -866 - With: Lt = FL + 0.7071*FC + 0.8165*SL + 0.5774*SR Rt = FR + 0.7071*FC - 0.5774*SL - 0.8165*SR CODE Free Surround Center Image=1, Dimension=0,-0.5 FL FR C SL SR --- --- --- --- --- FL' 864 0 0 0 0 FR' 0 864 0 0 0 C' 0 0 864 0 0 SL' 0 0 0 999 0 SR' 0 0 0 0 -999 - About the back channel inverted: Using a downmix like (ignoring numeric coeficients, looking only the signs): CODE 1) Seems required by PowerDVD
Lt = FL + FC + SL + SR Rt = FR + FC - SL - SR PowerDVD: SL'= SL, SR'= SR FreeSurround: SL'= SL, SR'=-SR 2) Azid-BeSweet style Lt = FL + FC - SL - SR Rt = FR + FC + SL + SR PowerDVD: SL'=-SL, SR'=-SR FreeSurround: SL'=-SL, SR'= SR 3) Seems required by Free Surround Lt = FL + FC + SL - SR Rt = FR + FC - SL + SR PowerDVD: SL'= SL, SR'=-SR FreeSurround: SL'= SL, SR'= SR 4) Lt = FL + FC - SL + SR Rt = FR + FC + SL - SR PowerDVD: SL'=-SL, SR'= SR FreeSurround: SL'=-SL, SR'=-SR This post has been edited by tebasuna51: Feb 14 2007, 20:34 |
|
|
|
Feb 15 2007, 17:37
Post
#24
|
|
|
Group: Developer Posts: 97 Joined: 6-June 06 Member No.: 31515 |
Thanks again for the tables (interesting how much crosstalk PL2 has!).
But I'd like to know how well PowerDVD's PL2 performs when you used the coefficients from wikipedia for mixing. I expect that it's at least not worse than what you got with BeSweet's coefficients. Concerning the phase shifts: I think it's quite a strong assumption that front and rear channels are fully independent. If I want to position an instrument to the right side of the listener, I would mix it equally at right surround and right front. This works perfectly if the phases of front and surround are orthogonal and it doesn't work at all if they are collinear. Effectively, you would pan the final output somewhere along the front plane. Btw: ATSurround may not be able to decode PL2 properly, but at least it can encode it with the (relatively new) Encode2 mode. And I'm quite sure that it follows the wikipedia rules for encoding. I read that PL2's music mode doesn't flip the signs of any of the surround channels (just like I do in the official version of FS). The reason is that it this treats non-encoded music more carefully, metaphorically speaking. OTOH, sources which are PL2 encoded do most likely have the 90° phase shift applied (for the aforementioned reasons). It would be ridiculous if Dolby's $4000 encoder doesn't do this. So one needs at least these two decoding modes: 1. +0,+0 / 2. +90,-90. I will expose them in the next version (which will ship, erm... this night). Note that proper phase shifts are less important for decoding than for encoding because the brain doesn't rely on phases to steer front/back but PL2 does. Actually I have no clue if one can hear a difference between those 2 decoding modes at all. So someone would have to conduct an ABX test through Dolby Headphone I guess. This post has been edited by pro_optimizer: Feb 15 2007, 17:51 |
|
|
|
Feb 15 2007, 19:28
Post
#25
|
|
|
Group: Members Posts: 57 Joined: 11-July 06 Member No.: 32807 |
But I'd like to know how well PowerDVD's PL2 performs when you used the coefficients from wikipedia for mixing. I expect that it's at least not worse than what you got with BeSweet's coefficients. Of course is worse. With values 1/1000: CODE Lt = FL + 0.7071*FC + 0.866*SL + 0.500*SR Rt = FR + 0.7071*FC - 0.500*SL - 0.866*SR PowerDVD 7 Mode ProLogic II Movie (BeSweet coef.) FL FR C SL SR --- --- --- --- --- FL' 706 1 14 8 4 FR' 1 706 14 4 36 C' 9 9 704 2 22 SL' 5 6 10 702 72 SR' 6 9 10 31 700 Lt = FL + 0.7071*FC + 0.8165*SL + 0.5774*SR Rt = FR + 0.7071*FC - 0.5774*SL - 0.8165*SR PowerDVD 7 Mode ProLogic II Movie (Wikipedia coef.) FL FR C SL SR --- --- --- --- --- FL' 706 1 14 7 6 FR' 1 706 14 6 28 C' 10 10 704 5 17 SL' 5 6 10 650 205 SR' 6 9 10 198 648 - About phase shifts: I say is unnecessary: If the channels are independent like this channel test sample. If the channels are from an decoded ac3 because the rear channels are already shifted (if are Dolby compliant). But is necessary if we are generating the rear channels from the front channels. Because a high % of dpl II encodes are from ac3 5.1 decoded channels, with rear channels already shifted, the dpl II encoder can't do another shift, must be optional and applied when needed. - About ATSurround Encoder2. You are right seems like Wikipedia coef. I need make more test. |
|
|
|
![]() ![]() |
|
Lo-Fi Version | Time is now: 22nd May 2013 - 11:59 |