Clean up old computer audio cassette

Hi - I’m running Audacity 2.3.2 on Windows 10.

I have an audio file from an old BBC Micro computer cassette.
The data in the audio file is split into tracks and each track into a number of blocks with a carrier tone in between.
However, in some places the audio is dirty and I want to know how to fix it.
As you can see from the screenshot, the first 4 blocks in this section are very spikey - I assume the frequency modulation is OK in these sections and it’s the spikiness that is causing the issues. So, is it possible to reshape the wave to retain the frequency modulation whilst removing the spiky nature of the amplitude?

These are the original files - they are unsigned mono 8-bt pcm WAV files (the software which converts these into tape images for emulators requires this format) -

Thank you for your help - it’s really important that I find some fix for this because these cassettes are getting rarer and we’re trying to preserve them.


I don’t think that is “audio”. It appears to be “data”.
If I recall correctly, the BBC micro could store data on floppy disk or cassette tape. These “recordings” appear to be such data.

I think you would need a working BBC micro to be able to decode the data.

A limiter, (with no make-up gain), will knock back the spikes,
but I suspect that could corrupt the data, (assuming the spikes are not already corruption).

Thanks for the reply Steve - yes, it is data - Frequency Shift Key’d apparently. However, I’m treating it as audio because it’s analogue and needs to be demodulated through software into binary but, the software fails on the corrupted blocks. The only way I can think of fixing it is using Audacity to somehow repair the damage but I don’t know how. I’ve tried applying notch filters and high and low pass filters but they completely destroy the rest of the waveform. I could try to do this just on the areas of damage but, for some older cassettes, this would be most of the file. The frustration is that I can see the data in the waveform (one 1200Hz cycle is a binary 0 and one 2400Hz cycle is a binary 1) but I can’t get the demodulator to read it.

You could try filtering out frequencies below 300 Hz using the “Filter Curve EQ” effect with settings like this (No guarantee it will help, but there does appear to be “noise” at around 200 Hz that should probably not be present):


Hmmm - unless I’m being daft, I don’t have ‘Filter Curve EQ’, only ‘Equaliser’…

My fault - needed to upgrade to 2.4.2…

Old thread I know, but it is the latest I could find that relates to filter curves. I am trying to add microphone calibration to a recording and I am having trouble with the filter curve format. I think it relates to the filter length and maybe some other formatting. The curve I am trying to convert has 4000 points and the level values has a lot of decimals. Is there a guide somewhere for making custom filter curves?

Not that I know of, but the format is simple.
I’m assuming that you are using the current Audacity 2.4.2.

Read this first about managing presets:

This is the “Bass Boost” factory preset:

Observe that there are just two control points,
one at frequency = 100 Hz, gain = +9 dB
the other at frequency = 500 Hz, gain = 0 dB.

This is the Bass Boost filter curve exported as text file:

FilterCurve:f0="100" f1="500" FilterLength="8191" InterpolateLin="0" InterpolationMethod="B-spline" v0="9" v1="0"

Breaking that down into sections:

  • FilterCurve: says that it is a preset for the Filter Curve EQ effect.
  • f0=“100” f1=“500” is a list of frequency values.
  • FilterLength=“8191” InterpolateLin=“0” InterpolationMethod=“B-spline” don’t worry about this part, just ensure that it is present exactly like this.
  • InterpolateLin=“0” InterpolationMethod=“B-spline” is a list of the gain values.

Obviously the number of frequency “f” values must be the same as the number of gain “v” values.

Thank you Steve. I am almost there. It is imported, but stops at exactly 1000 Hz for no particular reason. Could this be related to the length?

What stops at exactly 1000 Hz? I don’t know what you are referring to.

Ah ok. It is a complete curve from 20 to 20k, but somehow when I import it only loads up until around 1000 Hz. Definitely progress, but it is the top end that needs the most equalization. I don’t see any breaks in the pattern in the file, so that is why I was wondering if I hit some upper limit of data points.

If I zoom, it seems to be just above 1000 Hz. Maybe 1024?

Got it. I reduced the number of points to something more reasonable. Now it loads fully. Thank you.

So there’s a limit to the maximum number of points? (I’ve not tested that)
Do you know (approximately) what that limit is?

I don’t know. The first curve was indexed linearly and had 4000 points. It stopped around 1000 Hz, so I figured that around 200 points would be fine to reach the full range. The next curve was around 150-200 points and indexed logarithmic. It looks fine and will probably work just as well.

The limit is 200 points (“f0 v0” to “f199 v199”).

There really should be a warning or error message when attempting to import more than 200 points, so I’ll log that as a bug.

It will be noted in the manual for the next Audacity release that Filter Curve EQ supports a maximum of 200 control points.