Skip to main content


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: Wrote some scripts that partially undo early Exciter type devices (Read 2227 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Wrote some scripts that partially undo early Exciter type devices

I have written some shell & SOX scripts (believe it or not -- quite simple concept) that undoes a lot of the distortion on ABBA recordings (my intelligence tells me that they used an early style Aphex Aural Exciter or similar.)   Did some research on the device, and wrote some scripts that first do an approximate removal of the Exciter distortion, then a normalization phase (several passes) that tends to remove unnatural distortions -- basically removing some of the out-of-phase stuff.
The specific results are really good for ABBA -- some parts of the scripts might work on other 'over Excited' music of the timeframe.  The scripts are not ready yet, but the examples are uploaded onto a distribution site.  I might have over-processed the examples, and probably need to do a bit more tuning to specifically undo the delays/distortions for the original Aural Exciter, but I have approximated them for now.
The so called 'artistic' distortion from yesteryear is just not applicable today, and it has been a bit of a bugaboo for me.  Knowing that bit of intelligence about the device used seems to agree with some of my previous improvements.  This one is actually good enough that I might be able to declare 'success' soon.   I'll make the scripts available soon, once I get them finally tuned up.
At the repo site below, there are examples that usually have the 'distorted'/'loud' sound, but now are much, much better.

I have also attached a 30 second snippet -- amazingly clear for ABBA.



Re: Wrote some scripts that partially undo early Exciter type devices

Reply #1
Regarding the downloads on the repository -- I just re-uploaded them -- I applied a little less EQ to them.  I felt it necessary to do a bit of EQ to make the results to sound more like ABBA normally does (I mean, real HF rather than the distorted stuff.)  Well -- I think that I applied a few dB too much -- so as of right now, the new downloads have just a bit less HF...  About 1dB less betw 1.7kHz and 9kHz, about 2dB less at 9-12kHz and about 3dB less at 12on-up total.   The results are a little less shrill.  it is amazing what 3dB too much at 12kHz can do to the sound quality...

After my processing -- the raw results are clear, but dead sounding.  I can understand why ABBA used the 'Aural Exciter' or something similar, but it is really an ugly device.   Real HF sounds better -- but when your medium is AM radio, no matter what HF you give them, there will be limited bandwidth, and that limited bandwidth will tend to hide true HF material.  Using an Aural Exciter can give the impression of more bandwidth when it isn't available.   When you really do have response beyond 5-7kHz, the results are really ugly.

Some of my previous tests/demos actually did partially help remove the distortion, but the new modifications are much more aggressive for the singular purpose.

Re: Wrote some scripts that partially undo early Exciter type devices

Reply #2
I updated the archive of music using an improved/simplified version of the improver (partially removing the aural exciter distortion.)   Here, I am posting part of the script -- basically, the script needs to be run serially -- under two different names -- mflacBx, then mflacBy.  The result of the first one is used as an input to the other.  Purpose of this serial use is to support a slower transistion of the delays.  The code is a little odd because there are no anti-delays, so I chose a 120usec delay, then made the 'undos' a negative from the 120usec.  For the ABBA stuff, I found that the Exciter distortion is mitigated by the gain proportions of 0.120 for the delayed portion of the signal and 0.880 for the non-delayed portion (again, hard to read because of shell script, and avoiding negative delays -- haven't tried them on SOX.)   I  tried over and over differing proportions until I found minimal audio distortion in the results.  After the un-Exciter pass, then I included a cancellation of non-analytical parts of the signal (not yet included -- lots of ugly stuff,not optimized.)  I have attached the basic script -- this is only for people who want to experiment for themselves (not providing this as a general purpose tool.)  THIS WILL ONLY HELP WITH THE ORIGINAL DESIGN.  Newer 'Exciter' designs were more evil, with more dynamic characteristics.   The proof of the pudding is in the much more 'normal' sound.

The attachment has the example script (not fully complete -- missing the calling script and final hilbert cleanup.)   The music examples at:


Re: Wrote some scripts that partially undo early Exciter type devices

Reply #3
Here is a better version of the decoder script -- produces cleaner (much cleaner) results.   The previous one appears to have an gotten an error when I was making some changes. (My fault.)  I am currently uploading new versions of the music examples with much better results (gonna be uploading at 17:00 today.)


Re: Wrote some scripts that partially undo early Exciter type devices

Reply #4
I have been fine tuning the scripts and also the demos (mostly examples from ABBA GOLD.)  The most difficult part for me is to firstly adjust to my new VERY HOT headphones (Beyer DT770/80ohm), and replace the sound from the lost distortion that was previously fake high-end.  So, during my tests/uploads/etc, I kept undulating between too much and too little HF trying to replace the distortion.  So, I have iterated several times, and even done full upload/playbacks to try to make sure that I got the sound correct.

The examples still have just a little bit too much HF (it is AMAZING as to the difference when just 1dB is changed.)  So, the current demos are about 0.75-1dB too hot, but also I have very hot headphones.  So, normal headphones will probably sound a little more normal.
Too much HF is especially bad because of the residual distortion and also excess HF just sounds bad to me.   The scripts still need some readability improvements, but the main work is done by the previous attachment (and REALLY DOES work.)

So, I am stopping any more updates to the demos.  The demos are from some of the best ABBA songs.  If you think that the sound is a little too intense, actually the results of the cleanup code is way too dead.  It appears that it is losing about 1-3dB or so during the removal of the nasty distortion.   After adding the HF back, the sound is still more pure than the original.


Re: Wrote some scripts that partially undo early Exciter type devices

Reply #5
I actually own an original Aural Exciter. If I can be any help let me know

Re: Wrote some scripts that partially undo early Exciter type devices

Reply #6
Thanks for the offer of help!!!  I have only done the first level of tuning at this point -- and haven't actually gone beyond my first timing parameters for the delay vs. frequency.  My next step will be to tune the parameters with more resolution for frequency ranges where the timing changes vs. freq are faster.  In fact -- I am going to start that right now to see if I can hear further improvement.  If it seems like more and more improvement can be had -- I might take you up on some help.   If you have a schematic for the device, that might really help.  I currently only have a description of the time vs. frequency curves.  THANKS FOR SPURRING ME ON - and I will definitely get in touch soon if I am seeing that more benefit can be had.
The newer exciters are so complicated that I don't know if I want to spend the time, and frankly my focus is on the '60s through the early '80s, with some more limited interest through the 1980s'.  So, I am really most interested in the older type units that you describe!!!  Thanks again, and will make my potential need known when ready!!!


Re: Wrote some scripts that partially undo early Exciter type devices

Reply #7
Here, I am asking for some feedback/help.   I am getting raw results that are very different from the original version of the music.  I have been trying to do appropriate EQ/otherwise to make the sound quality plausible.  I am doing this so that I can prove that the un-Exciter is working properly/etc.  The raw results from the un-Exciter are very, very flat/boring sounding because of all of the removed brightness/distortion.  The un-Exciter does not cause a very biased frequency response, and the result is not biased sounding -- just flat and dead.

So, I have had to re-apply some finishing to the music after cleaning out some of the 'dirt'.  The main thing is I'd like some feedback as to the tonal balance -- the difficult thing for me is that I know the sound of this group, and when I do comparisons, I truly get confused.  I am NOT a recording engineer, but a computer/electronics geek -- so need some opinions.   If you think it has too much/too little LF/HF -- let me know.  I just need a target.  On top of my lack of taste, I had to purchase new headphones, and I am trying to learn to judge sound with these (Beyer DT770Pro/80ohm.)

The source code is close to being ready -- I just found an error, and also adding a few lines of comments (VERY FEW lines of comments.)  Also, probably going to write a line or two of example usage.  The un-Exciter alone only removes perhaps 1/2 of the grit -- maybe more.  But it is the combo of the un-exciter, and the subsequent filter which I am still developing that really cleans up the sound (and makes it very boring.)  NONE of the un-Exciter or final filter are dynamic -- they are just filters and time delays.  As soon as the script isn't ugly, I promise to post the un-Exciter immediately, and I hope that the final filter will progress to release also.

I have re-finished some deadened 'un-excited' copies to have similar tone balance to the originals with all of the distorted sound.  I just need feedback if the finished versions sound okay or what to change (too much/too little of this or that.)   I have NOT applied any compression or expansion -- the finished results just have some carefully chosen EQ (nothing peaky.)  It feels like the results generally sound better than the original -- but too many variables.

Attached are several 'finished' examples -- also, I have provided one example of the un 'finished' examples that is before the finishing.  More complete versions of the examples reside on the repository:

All of the attached examples are 30seconds -- wish they could be longer, but the repository examples are longer and maybe easier to comprehend.

Any help is appreciated, and any info will be re-incorporated back into the project.  I am thinking and hoping that the results are getting better.   If I get reasonably positive feedback, I also plan to create a C++ version that has even higher resolution to better remove the crazy delays from the Exciter.


Re: Wrote some scripts that partially undo early Exciter type devices

Reply #8
For fun -- I have included the EXACT same material, but also 'uncompressed' in addition to a bit of the distortion reduction.  Note that when I describe the Exciter distortion -- it is less of a 'body' type distortion and seems to be more of a sharpness distortion.  So, after pretty much removing the excess 'harshness', then the uncompressor puts back more dynamic range.  I can actually almost totally remove that 'density' in the ABBA sound with the 'uncompressor' (used to call it the restoration processor, but changed my usage out of respect to a friend), but when I remove the density, then the dynamic range becomes way too great.  I have some solutions for that quandary, but I don't have time ot do it yet.

BTW -- I challenge anyone to be able to detect significant expansion artifacts in these examples (on ANOTHER repo site than above.)  The artifacts are NOT easy to detect.  Surging just doesn't really happen with this expander because of some tricks that it employs.  Also the actual distortion caused by the exapander is nil (not much intermod, even less than the psuedo-DolbyA.)

The uncompressor archive:

Re: Wrote some scripts that partially undo early Exciter type devices

Reply #9
Still working on undoing that weird 'distorted' sound on material processed with the 'Exciter' type things.  Apparently, another person doing a description of the 'Exciter' took exception to my word 'distortion', and he was correct.  It is more of an irregular freq response/timing change that causes an unevenness in sound that feels something like distortion.  The original Exciter certainly does not appear to do much 'harmonic' or 'intermodulation' distortion.  Once I do correct the timing, it does sound better.  My previous posts were not quite perfect (by far), and much of the trouble is the difficulty to do an actual measurement on the recordings.  I am making progress more or less, and seem to make improvements and the regress very often.  Instead of posting more stuff that I cannot easily pull back or waste anyones time, I am going to hold back a little bit on demos until I have more significant results.

I'll continue to post information about interesting results, but will pace the postings to as fast as 1/day, and try to normally keep it at one every 3 days.   I hate to waste other peoples time with my mistakes, but suffice to say -- MAKING PROGRESS!!!

If anyone has specific questions/want source code for this or that/ or whatever, just email me or send private message.   Currently, for example, I might distribute binaries for something, but I am not going to simply send out code that isn't adequately tested any more.

Feel free to request things -- I am open and generally willing to try to help, but with the caveat that most of the stuff that I am doing is preliminary.


WOW!!! Was:Re: Wrote some scripts that partially undo early Exciter type devices

Reply #10
I have some new prelimnary results (yea -- I promised slower information -- but this is important), WITHOUT any post processing or any subsequent filtering.  The new version of the un-Exciter is really exciting.  In order to get the accuracy for the delays, I bumped the sample rate up to 480k.  And I have around 15-20 interpolation steps to get the timing just right.

All I can say is -- wow!!!   Sounds better without any 'straightening up' post processing.   Clear, clear clear, and none of the fuzz.

Give me a few days of testing, and I should have a script ready to play with.

unExciter posting and update

Reply #11
Attached is the unExciter.  For Windows-only users, sorry that it is a shell script.  For everyone else, sorry that it is a shell script.   :)  I need to rewrite in C++, but I have a filter infrastructure that needs to be finished before implementing a C++ version.  (My current filter infrastructure requires the filter coefficients be generated before compile time, the new one does the filter generation at runtime -- which will make the real/fast unExciter easier to write.) 

The unExciter has unexciting impact on previous old(original) Exciter encoded material.  The improvement is a more balanced (normal) frequency response, and there is clarity that would be previously scrambled -- almost being a useful but subtle removal of a kind of perceptual distortion.  This isn't perfect, and in order to get acceptable results and significant improvement, I have to run the unExciter at 960ksamples/second.   This script runs slowly, and takes time (listen/parameter change iterations) to choose the correct proportion of the  levels that were processed by the old Exciter.  Part of my tests have been to run the unExciter on the entire ABBA Gold and ABBA Gold 2 recordings.   I have some results on my repository (very pretty), and un enhanced, pretty much vanilla.  The only way that this sounded good & provide improvement was to use reasonably accurate delays.

The script works by inverting the delays on a frequency band basis.  To get adequate (just barely) performance, there needed to be at least 15bands where there is a different delay on each band running at very high sample rate.

The unExciter shell script is an attachment herein, and the examples are on the repository:
The above are prettier than any previous demo -- things keep on getting better and better.  I also used a newer version of the psuedo-DolbyA that corrects for some delays that I had thought to be unnoticeable (the difference was literally 5-10% different decay times!!!)  The change in decay times cause significant improvement and less critical setting of the threshold.

You are free to use/distribute the unExciter as is -- no warantee or anything like that.  Just don't take full credit for it, give me at least an asterisk for attribution if this happens to be useful somewhere.

Good luck, and I intend to produce a true C++ version soon (days, not weeks), which will be more accurate and improve the clarity a bit more.


Reply #12
There was an error in the script (I did a quick cleanup edit, and misspelled a variable name.)  Shell scripts don't give error messages on bad variable names, and I thought that the script was working until I casually ran some more files.

Corrected script attached.

The error was in the "DELAYSAMPLERATE" variable name -- I had misspelled it "DELAYSAMPLRATE".  That was the only bug.


Have some very clear/good .flac file examples (plays online) shwing unExciter

Reply #13
Have some .flac file examples -- incredibly pure.   They are Carpenters, with the psuedo-DolbyA, unExciter and postprocessor (which is NOT an expander or anything like that.)  I tried using different file formats, and mp3 was far from adequate (the very fast echo mushed together even at 320k), Opus was better, but still wasn't perfect.  So, I finally had to use flac for the demo of various levels of processing.  This was being sent to the recording engineer who has been participating/helping.

You might really be amazed as to the sound quality.  I also left a raw copy of the DolbyA original.  This is a different repository from before, because the purpose was originally different.  I do have some good ABBA examples on the other repository.


Re: Wrote some scripts that partially undo early Exciter type devices

Reply #14
Here is the current (functioning) source for the 'unexciter' code.  It does work, and does remove some of the nasal quality of some of the older recordings.  It runs exceptionally slowly and is not algorithmically optimized.  This is more of a sound effect (or undoing the sound effect) rather than a recovery/decoding program.  That is -- there is a slight change in the sound of a recording, and the results are middling at best.  The only places where it seems to be of substantial benefit are for ABBA recordings (pure DolbyA ones -- not the CDs from Polar,etc) and also it seems like the old Herp Alpert/Brasil'66 really benefits.  Otherwise, it is more of a 'tone control.'

Is this worth it?  Probably not, but I had advertised that I was working on this, and trying to be honest/transparent about the semi-bust for this development (the DolbyA decoder and compressor/expander on the other hand are fantastic.)

The program takes standard input/output redirection for .wav files (16 bit, 24 bit or 32bit floating point, any sample rate between 44.1k through 192k or higher -- but 88k through 192k are best.)   Higher sample rates are slower (lots more fine grained calculations.)
The best options for cleaning up/correcting old recordings are the following:
--width=1.414 --hilb=-1.0 --dr=0.156
Since I am not really supporting this, and there is likely very little interest (has to be used on Linux -- didn't do a Windows port) -- the explaination of the args are thus:
--width is the M/S Side expansion before subtracting the hilbert of the signal.
--hilbert is the proportion of the hilbert added/subtracted, -1.0 means subtract 100% of the hilbert of the M/S expanded version.
--dr is the proportion of the weirdly phase shifted signal that is effectively subtracted from the signal.

Bugs:  not necessarily very useful, considering the dreadfully slow runtime, the results might be  inverted (by mistake.)
Benefit: forced me to rewrite the filter infrastructure so that it can adjust to any sample rate -- now the new filter code benefits the psuedo-DolbyA decoder and soon will benefit my super nice expander and useful compressor.  (BTW, an example of the results of my expander is the almost total uncompressing of 'Shake it Off' -- my expander can do incredibly high expansion ratios without jerking...)  The site of the examples is:

The ABBA example on the site (SOS) was un-(Aphex)-Excited.

I try to follow through with implications that I make -- and attached is the current (working and functioning) source code for the unexciter.


SimplePortal 1.0.0 RC1 © 2008-2021