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: REACT 2 Released (Read 1281565 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

REACT 2 Released

Reply #1175
I had been using "$album$.[MG].cue" to reference cuesheets, but I realize this is not always accurate as the $album$ token will do character replacements according to react preferences and not necessarily match 1:1 with EAC's replacements.

Which variable would be best to use in this instance?

Copy from REACT:
"@albumfile@    The base path to the cuesheet files without extension, created when CreateAllCuesheets=1 in the INI file. E.g, "@albumfile@.[mg].cue" is the multiple wav files cuesheet with gaps."

does EAC, for cuefiles (created automatically) replace all illegal characters with spaces, or does it use the conversion table it uses for tracknames?

I see a few functions in the code that may help, but I am not sure if there is an existing token that may already do precisely what I need. I'm getting a little caught up between $album, $gui_albumfile, $gui_albumfile2, etc.

From fGUISetVars():
Code: [Select]
; The format that EAC uses
$gui_albumfile = $g_directory & $album
; The format that the processing instance will use
$gui_albumfile2 = $g_directory & fSubstIllegalCharsWithSpaces(StringReplace($gui_album, '"', "'"))"

REACT 2 Released

Reply #1176
Yeah, I think I overcomplicated something somewhere. It's a bit of a friday and I think a tall glass of liquid stupidity is in order.

I renamed the cuesheets in my version of the cuesheets extraction code using $gui_albumfile2 ... I should probably just use a simpler version instead. seems as though @albumfile@ is for directory + $g_albumfile.

I just needed something without directory-- but I can just change the cuesheet renaming code to rename to straight up fSubstIllegalChars($g_album, 1)  (equivalent of $album$) and then using $album$ to find the cuesheet should work just fine....

Anyway: How's your modwork going, Akkurat?

REACT 2 Released

Reply #1177
Editing the code seems pointless to me, and just confuses support issues further.

Use the config to name the cuesheet how you want!

If you are going to mess with the code, be aware that "$gui_albumfile" (or $g_albumfile as it is called in the proecssing instance) is used in both REACT instances.  Akkurat has quoted the code from the wrapper instance, but it is also set in the processing instance, and this is the value that populates @albumfile@:

Code: [Select]
$g_albumfile = $g_sourcedir & "\" & fSubstIllegalCharsWithSpaces($g_album)
...
$str = fStringReplaceForDOS($str, "@albumfile@", $g_albumfile)

Of course, the hope is that both will refer to the same string value.  Perhaps this is another aspect that will fall down if the artist name contains a double quote ("), as (off the top of my head) I would think $g_album would have an apostrophe where $album would have a double quote.
I'm on a horse.

REACT 2 Released

Reply #1178
Anyway: How's your modwork going, Akkurat?

Well.. rather stagnated situation. I'll update the Data Track Backup Wiki guide first. Then I'm going to have to wait until I get my new Corsair PSU to heal my wounded PC (boy, I really hope that this will fix it, fingers crossed). Then, back to fixing the cuesheet generation AGAIN, it currently has two new situations where the generation fails. It seems that all I do is fix the cuesheet thingy over and over again (by the way, I just had a confirmation that at least one other user than me had problems with ssb16p cuesheets; no error messages, cusheets wrongly created.. quite hard to catch if you're not so vigilant.. so it's highly recommended to upgrade to my mod if you're saving cuesheets.. when I get it out to public that is). Lastly a small change to the code and bang, it should be finally out. That's my plan.

And how's your "kitchen sink" coming?

I think that we have some unfinished email correspondence.. I'll have to go thru the old mail one day and see what the hell we were on about.

And thanks Synthetic Soul for the additional details I forgot because I was in a bit of a hurry.

REACT 2 Released

Reply #1179
Then, back to fixing the cuesheet generation AGAIN, it currently has two new situations where the generation fails. It seems that all I do is fix the cuesheet thingy over and over again (by the way, I just had a confirmation that at least one other user than me had problems with ssb16p cuesheets; no error messages, cusheets wrongly created.. quite hard to catch if you're not so vigilant..
Any idea what these are?  As someone who has found it difficult for REACT to not create the cuesheets - apart from when the main window is unfocused, which I believe was resolved (whatever that means with the cuesheet generation code!) - I'm interested to hear how these issues are occurring.  I don't understand how it can be so problematic.

.. so it's highly recommended to upgrade to my mod if you're saving cuesheets.. when I get it out to public that is
 

And thanks Synthetic Soul for the additional details I forgot because I was in a bit of a hurry.
No worries. I'm not sure that it is relevant now, but it may be worth bearing in mind if nago is adapting what @albumfile@ refers to, or doing something similar.
I'm on a horse.

REACT 2 Released

Reply #1180
Any idea what these are?  As someone who has found it difficult for REACT to not create the cuesheets - apart from when the main window is unfocused, which I believe was resolved (whatever that means with the cuesheet generation code!) - I'm interested to hear how these issues are occurring.  I don't understand how it can be so problematic.

Ok. As you know, the main problem is that the code relies on what windows are showing during the whole cuesheet generation phase, if there's a window which is not detected in the code, all goes haywire. The ssb16p version, which gave me lots of problems, fails to recognize one quickly flying by window and many times you end up with wrong cuesheet contents and/or missing cuesheets.. sometimes with no error messages at all! That's bad. Because it's VERY hard to detect these if you don't open up all cuefiles manually.. and even then it could be hard; sometimes the M, MC & MG cues can be the same (if I remember right.. at least some of these can be the same in some situations), sometimes not.

I have fixed this in my mod (akku.b01 version, not public yet, some people have this).

And now to the new two problems where the cuefiles generation fails:

1. "Retrieve UPC/ISRC code in CUE sheet generation" option checked in EAC (this came up in the thread (EAC React2 Creates All Cue Sheets, Only Need 1) where greynol swept the floor with me by his knowledge in track gaps / cuesheets.  I'm still trying to "decipher" what you were on about.. I'll do that some day.. when the red blush from my cheeks vanishes)

2. EAC "standard directory not set to: use this directory". A destination confirmation window comes up to foil the cuesheet generation.

REACT 2 Released

Reply #1181
Thanks for the info Akkurat.

2. EAC "standard directory not set to: use this directory". A destination confirmation window comes up to foil the cuesheet generation.
Yes, I wonder whether this should be set as part of the REACT set-up really - the value of @OutRoot@ could be used, or just the user's "My Music" folder, or something...
I'm on a horse.

REACT 2 Released

Reply #1182
Hello,

I have a small issue I am unable to resolve. All of my tracks are getting encoded properly - both FLAC & V0 in track mode. RG is applied and cues & m3u are created. The problem I am having is getting the EAC log file moved to the proper directory. Most of the time it works just fine, other times the log file sits in the working directory after post processing has run. I am truly puzzled why it works sometimes and not others.

INI:
Code: [Select]
[Settings]
Version=2.0.ssb16
ImageExt=wav
ImageNaming=$artist$ - $album$
ImageHotKey={F10}
TracksHotKey={F4}
TracksHotVal=+{F6}
VA=Various
CreateAllCuesheets=1
RunCoverDownloader=0
CoverDownloader=C:\Program Files\AlbumArtDownloader\AlbumArt.exe
CoverDownloaderXUI=0
EAC=C:\Program Files\Exact Audio Copy\EAC.exe
Tools=C:\Program Files\REACT2\tools
MinimizeCompressionWindow=0
ProcessPriority=1
Sla_Bks_Col_Qst_Bar_Quo_Ast_Lt_Gt=-|-|-||!|'|#|[|]
Test=1

[UserTrackFormats]
Flac=1
Wavpack=0
LameMP3=1
NeroAac=0
iTunesAac=0
OggEnc2=0

[UserOutputNames]
OutRoot=D:\Rips-Audio
ImageDir_Flac=@OutRoot@\$cdartist$ - $album$ (FLAC)
ImageDir_Wavpack=@OutRoot@\WV-images\$cdartist$
ImageDir_MP3=@OutRoot@\$cdartist$ - $album$ (V0)
TrackDir_Flac=@OutRoot@\$cdartist$ - $album$ (FLAC)
TrackDir_Wavpack=@OutRoot@\WV\$cdartist$\[$year$] $album$
TrackDir_MP3=@OutRoot@\$cdartist$ - $album$ (V0)
TrackDir_AAC=@OutRoot@\AAC\$cdartist$\[$year$] $album$
TrackDir_OGG=@OutRoot@\OGG\$cdartist$\[$year$] $album$
TrackName_SA=$track$ - $title$
TrackName_VA=$track$ - $artist$ - $title$
TrackName_SA_acdir=$n - $~t
TrackName_VA_acdir=$n - $~t [$~a]

[UserSettings]
Debug=0
Comment=
EmbedCover=0
ReplayGain=1
ApplyAlbumGain=1
AdjustAlbumGain_dB=+0
AddCuesheetAG=0
UseWaveGainAG=0
Opt_Flac=-8 -f
Opt_Wavpack=-hmy
Opt_LameMP3=-V0 --vbr-new --noreplaygain --nohist
Opt_NeroAac=-lc -q 0.21
Opt_iTunesAac=-d -s 2000
Opt_OggEnc2=-q 3.0
Ver_Flac=1.1.3
Ver_Wavpack=4.40
Ver_LameMP3=3.97
Ver_NeroAac=1.0.0.2
Ver_OggEnc2=2.83 Lancer aoTuV b5

[DefaultMetaData]
discnumber=1
totaldiscs=1
discname=

Track Config:
Code: [Select]
@ECHO OFF
REM CHCP 1252
TITLE @track@/@numtracks@ - "@album@"

REM Copyright © Tycho, 2006
REM
REM ** Create compressed audio tracks from ripped .wav tracks.
REM **
REM ** You may consider using image mode (F10)
REM ** as it supports creating tracks via acdir.exe,
REM ** and post-processing will always work (see below).
REM **
REM ** Flac requires flac.exe/metaflac.exe (v1.1.3)
REM ** NeroAac requires NeroAacEnc.exe/NeroAacTag.exe/AacGain.exe.
REM ** OggEnc2 requires OggEnc2.exe/VorbisGain.exe.
REM **
REM ** I prefer applying album gain 92dB to get a reasonable
REM ** volume for my DAP. The RG tags are still relative
REM ** to 89dB SPL, i.e. album gain will be about -3.0dB.


REM ============== Begin Main Script ==================


IF @Debug@==1 ECHO ON

SET TrackDir_Flac="@TrackDir_Flac@"
SET TrackDir_Wavpack="@TrackDir_Wavpack@"
SET TrackDir_MP3="@TrackDir_MP3@"
SET TrackDir_AAC="@TrackDir_AAC@"
SET TrackDir_OGG="@TrackDir_OGG@"

IF @various@==0 SET TrackName=@TrackName_SA@
IF @various@==1 SET TrackName=@TrackName_VA@

SET have_cover=0
SET embed_cover=0

IF EXIST "@cover@" (
SET have_cover=1
SET embed_cover=@EmbedCover@
)

REM ---- Track ----


IF NOT @Flac@==1 GOTO end_flac_tracks
IF NOT EXIST %TrackDir_Flac% MKDIR %TrackDir_Flac%
PUSHD %TrackDir_Flac%
IF @various@==1 SET VA_tag=-T "album artist=@VA@"
IF %embed_cover%==1 SET Cover_tag=--picture="|image/jpeg|||@cover@"
ECHO ON
@tools@\flac.exe @Opt_Flac@ %Cover_tag% %VA_tag% -T artist="@artist@" -T album="@album@" -T tracknumber="@track@/@numtracks@" -T title="@title@" -T date="@year@" -T genre="@genre@" "@source@" -o "%TrackName%.flac"
SET trackCueFile="$cdartist$ - $album$.cue"
IF NOT EXIST %trackCueFile% (
    COPY "@albumfile@.[mg].cue" %trackCueFile%
    ECHO CHCP 1252 ^| PROMPT>>update-cuesheet.bat
)
ECHO @tools@\GSAR.EXE "-s@basename@.wav" "-r%TrackName%.flac" -o %trackCueFile%>>update-cuesheet.bat
@tools@\tag.exe --playlist --onlyfiles --sort track --plname "$artist$ - $album$.m3u" *.flac
@ECHO OFF
IF %have_cover%==1 IF NOT EXIST folder.jpg COPY "@cover@" folder.jpg
POPD
:end_flac_tracks


IF NOT @LameMP3@==1 GOTO end_lame_tracks
IF NOT EXIST %TrackDir_MP3% MKDIR %TrackDir_MP3%
PUSHD %TrackDir_MP3%
IF @various@==1 SET VA_tag=--user-text "[album artist]@VA@" --frame "TPE2:@VA@"
IF %embed_cover%==1 SET Cover_tag=--pict "{3}@cover@"
ECHO ON
@tools@\lame.exe @Opt_LameMP3@ "@source@" "%TrackName%.mp3"
@tools@\metamp3.exe %Cover_tag% %VA_tag% --artist "@artist@" --album "@album@" --track @track@/@numtracks@ --title "@title@" --year "@year@" --genre "@genre@" "%TrackName%.mp3"
SET trackCueFile="$cdartist$ - $album$.cue"
IF NOT EXIST %trackCueFile% (
    COPY "@albumfile@.[mg].cue" %trackCueFile%
    ECHO CHCP 1252 ^| PROMPT>>update-cuesheet.bat
)
ECHO @tools@\GSAR.EXE "-s@basename@.wav""" WAVE" "-r%TrackName%.mp3""" MP3" -o %trackCueFile%>>update-cuesheet.bat
@tools@\tag.exe --playlist --onlyfiles --sort track --plname "$artist$ - $album$.m3u" *.mp3
@ECHO OFF
IF %have_cover%==1 IF NOT EXIST folder.jpg COPY "@cover@" folder.jpg
POPD
:end_lame_tracks


REM ** Delete the source .wav
DEL "@source@"


REM ---- Post-processing ----


rem ** Scan and compute ReplayGain and add cover picture for supported formats.
rem ** NB: The following will only work if at least the last track is selected,
rem ** and it is a regular audio track.

REM ** Compression threads workaround. Ensures that all compression threads are closed before starting post-processing.
:checkTmp
IF NOT EXIST processing[*].tmp GOTO allProcsClear
ECHO.
ECHO Waiting for all other processes to clear... If program hangs here and there are no other tracks being encoded, delete all processing[#].tmp files in your "@sourcedir@" directory.
ECHO.
REM ** Pause for 10000 milliseconds
PING 1.1.1.1 -n 1 -w 10000 >NUL
GOTO checkTmp
:allProcsClear

IF NOT @track@==@numtracks@ GOTO end_post_process

SET add_rg=@ReplayGain@
SET aac_enc=@NeroAac@
IF @iTunesAac@==1 SET aac_enc=1

IF NOT @ReplayGain@==1 GOTO end_RG
SET RG_MetaFlac=--add-replay-gain
SET RG_MetaMP3=--replay-gain
:end_RG

IF NOT @ApplyAlbumGain@==1 GOTO end_apply_AG
SET RG_MetaMP3=--apply-gain album@AdjustAlbumGain_dB@
SET RG_AacGain=/a /o /c /d @AdjustAlbumGain_dB@
SET add_rg=1
:end_apply_AG


REM ** Audio Formats:

IF @Flac@==1 (
PUSHD %TrackDir_Flac%
IF %add_rg%==1 @tools@\Glob.exe -v -c @tools@\metaflac.exe %RG_MetaFlac% *.flac
IF %add_rg%==1 @tools@\Glob.exe -v -c @tools@\metamp3.exe --remove [mp3gain_*]TXXX *.flac
@tools@\GSAR.EXE -s%% -r%%%% -o update-cuesheet.bat
CALL update-cuesheet.bat
DEL update-cuesheet.bat
COPY /Y "@eaclog@" "$cdartist$ - $album$.log"
POPD
)


IF @LameMP3@==1 (
PUSHD %TrackDir_MP3%
IF %add_rg%==1 @tools@\metamp3.exe %RG_MetaMP3% *.mp3
IF %add_rg%==1 @tools@\metamp3.exe --remove [mp3gain_*]TXXX *.mp3
@tools@\GSAR.EXE -s%% -r%%%% -o update-cuesheet.bat
CALL update-cuesheet.bat
DEL update-cuesheet.bat
COPY /Y "@eaclog@" "$cdartist$ - $album$.log"
POPD
)

REM ** Cleanup

DEL "@eaclog@"
DEL "@albumfile@.[*].cue"
DEL "@cover@"

:end_post_process


REM ================ End Main Script ===================


IF @Debug@==1 (
PAUSE
EXIT
)

REM ** Delete this .bat file:
DEL %0

REACT 2 Released

Reply #1183
Take a look at this wiki article: REACT:Pausing For The Logfile.

As you are using the track config, just put the first piece of code somewhere just before the code that requires the log file, possibly line 128, before:

Code: [Select]
REM ** Audio Formats:

Edit: Also ensure that you are using the latest version of my mod, to ensure that this is not actually caused by the post-processing phase falling down on discs with a data track (you need 2.0.ssb16m or later).
I'm on a horse.

REACT 2 Released

Reply #1184
I have finally updated the REACT:Backup DATA Track Wiki guide. Any comments are welcomed.

I'm picking up my new PSU tomorrow, so maybe I can get back to coding the couple of TODO things for my mod. Although the Ice Hockey World Championships & NHL finals will be eating almost all of my free time.. there's always something.

REACT 2 Released

Reply #1185
I see that you ask users to set CreateAllCuesheets=1.

Given that, since 2.0.ssb16m, a cuesheet is already created in track mode to detirmine the number of actual audio tracks, you could potentially use this cuesheet, or the image cuesheet in image mode.

Given the potential trouble with CreateAllCuesheets=1, this could save a few headaches, and unnecessary processing.

Aside from that suggestion, the concept and execution look great.  Nice work.
I'm on a horse.

REACT 2 Released

Reply #1186
I see that you ask users to set CreateAllCuesheets=1.

Given that, since 2.0.ssb16m, a cuesheet is already created in track mode to detirmine the number of actual audio tracks, you could potentially use this cuesheet, or the image cuesheet in image mode.

Thanks for the feedback. The cuefile generated in both of these cases is the "S" (range) cuefile which doesn't have the necessary information to determine if the CD has a data track. I sure would have liked to used those but I have no choice. The "MG" cuefile is the only one which has the "data track info"... and also, if I'm not mistaken, the REACT.cue file generated in track mode is deleted BEFORE the "DOS part" starts for the last track.

Given the potential trouble with CreateAllCuesheets=1, this could save a few headaches, and unnecessary processing.

Well, I'm so confident in my own mod (you got to be, right?) that I don't count this as a problem.. that is IF people are going to use my mod of course. (I think I'll publish the first version this weekend.. to get things rolling a bit faster)

OT: My fingers are really sore from yanking the stupid super tight power connectors, can't they design these things better? I'm happy that I didn't break anything. Now couple of memory tests for the new RAM and I'm set to run my 2GB RAM monster (to me it is) with new & quiet (& problem solver?) PSU.


REACT 2 Released

Reply #1188
Hello, could you please help set me up REACT2 (with Akkurat mod) with EAC?
I'd like to have mp3 (i an set this up  ), plus individual flac tracks with a correspondig cuesheet (noncompliant). I've tried this:

ImageExt=flac
Flac=1
LameMP3=1

But I got a flac image and corresponding cuesheet which i don't need, and miss a cuesheet for individual flac tracks. Is there a way to ahive what i'd like to?

Thanks is advance
Darvas Dorottya

REACT 2 Released

Reply #1189
Set CreateAllCuesheets=1 to get the cuesheet.

Set ImageExt=wav if you don't want an image file.

Hit F4 (tracks) to start ripping, not F10 (images).

To do something with the cuesheet you will need to edit REACT-track.cfg.  In the section "REM ---- Post-processing ----" near the bottom you will see:

Code: [Select]
    IF @Flac@==1 (
        PUSHD %TrackDir_Flac%
            IF %add_rg%==1 @tools@\Glob.exe -v -c @tools@\metaflac.exe %RG_MetaFlac% *.flac
            REM COPY /Y "@eaclog@" "EAClog.txt"
        POPD
    )

Change this to:

Code: [Select]
    IF @Flac@==1 (
          PUSHD %TrackDir_Flac%
              IF %add_rg%==1 @tools@\Glob.exe -v -c @tools@\metaflac.exe %RG_MetaFlac% *.flac
              REM COPY /Y "@eaclog@" "EAClog.txt"
            COPY /Y "@albumfile@.[mg].cue" "$cdartist$ - $album$.cue"
          POPD
      )

... to copy the cuesheet into your FLAC folder.
I'm on a horse.

REACT 2 Released

Reply #1190
Set CreateAllCuesheets=1 to get the cuesheet.

Set ImageExt=wav if you don't want an image file.

Hit F4 (tracks) to start ripping, not F10 (images).

To do something with the cuesheet you will need to edit REACT-track.cfg.  In the section "REM ---- Post-processing ----" near the bottom you will see:

Code: [Select]
    IF @Flac@==1 (
        PUSHD %TrackDir_Flac%
            IF %add_rg%==1 @tools@\Glob.exe -v -c @tools@\metaflac.exe %RG_MetaFlac% *.flac
            REM COPY /Y "@eaclog@" "EAClog.txt"
        POPD
    )

Change this to:

Code: [Select]
    IF @Flac@==1 (
          PUSHD %TrackDir_Flac%
              IF %add_rg%==1 @tools@\Glob.exe -v -c @tools@\metaflac.exe %RG_MetaFlac% *.flac
              REM COPY /Y "@eaclog@" "EAClog.txt"
            COPY /Y "@albumfile@.[mg].cue" "$cdartist$ - $album$.cue"
          POPD
      )

... to copy the cuesheet into your FLAC folder.


Thanks, i think i did something similar (exept the modificatio of track-cfg. of course), and my problem is that the cuesheet refers to .wav files. Now i found this and i am trying to understand and do this thinng with gsar. Is this the right solution? Or how does this go with the above suggested copying.

REACT 2 Released

Reply #1191
Thanks, i think i did something similar (exept the modificatio of track-cfg. of course), and my problem is that the cuesheet refers to .wav files. Now i found this and i am trying to understand and do this thinng with gsar. Is this the right solution? Or how does this go with the above suggested copying.

Yes. Just follow the instructions carefully and you should be ok.

REACT 2 Released

Reply #1192
Thanks, i think i did something similar (exept the modificatio of track-cfg. of course), and my problem is that the cuesheet refers to .wav files. Now i found this and i am trying to understand and do this thinng with gsar. Is this the right solution? Or how does this go with the above suggested copying.

Yes. Just follow the instructions carefully and you should be ok.


Thank You Both!
After some trouble, i finnaly got what i wanted! Great!!!

REACT 2 Released

Reply #1193
Just an idea: what about using OGG chapters for cuesheet embedding ? 

REACT 2 Released

Reply #1194
I don't know: what about it?  If you are an Ogg user then I guess you can best explain how this would happen.

Can oggenc read a cuesheet for the chapters?  Or, do you know of a 3rd party console app that can read a cuesheet and create Ogg chapter values to pass to oggenc?

Edit: Ah, just seen your other post here.
I'm on a horse.

REACT 2 Released

Reply #1195
I don't know: what about it?  If you are an Ogg user then I guess you can best explain how this would happen.

This image should explain better than any word:

 

REACT 2 Released

Reply #1196
That doesn't help.  I know what Ogg chapters look like; I have Chap2Cue and Chapter-X-Tractor installed and have used them to convert IFO indexes into a cuesheet.

As you well know from your other thread, we need an application to convert a cuesheet into a chapter list, and then some way of applying that list to the Ogg file.  If we had those, I could suggest some config (batch file) code that would create an Ogg image and add chapters to it.

I don't know how you apply chapters to an Ogg file.

It would be relatively simple to write something that converted a cuesheet into a chapter list.... but I don't use Ogg, and I have other things to do.
I'm on a horse.

REACT 2 Released

Reply #1197
That doesn't help.
I don't know how you apply chapters to an Ogg file.


Well, OGGMux seems the answer:
Quote
For example, it's nearly impossible to setup chapter information with GraphEdit. In OggMux it's just a mouseclick to import the chapterlist generated by ChapterXtractor or SmartRipper.


Under linux there are OGMtools instead.

REACT 2 Released

Reply #1198
Well, OGGMux seems the answer
Except that it is not a command line application (on quick inspection).

Under linux there are OGMtools instead.
You do realise that this is the REACT thread?

I feel the need to use a smiley to show that I am not angry with you, although my responses to you have been curt; I only wish I could help.  Here is comes:

 

Please substitute it for any of the other light-hearted smilies that will allow you to come away from this post in a good mood.  Personally, I normally like a good wink, but that's another thread altogether.
I'm on a horse.