One of the very first Basic programs I wrote for my Atari 8 bit was a program that did the following:
1 Create a string array as long as possible in the memory of the machine with Basic running (this took a bit of trial and error to found what the limit was)
2 open the tape channel for reading
3 start and keep reading bytes into the string array until EOF headers were read
4 close the tape channel
4 prompt the user to put in a blank tape and press record
5 open the tape channel for writing
6 write out all the bytes that were in the string array to the tape channel
7 close the tape channel when the end of the array was reached
To my complete amazement this actually worked right away and allowed you to copy every bootable cassette game as long as it was not TOO big...
This also produced an extremely high quality copy, in fact it was tailored to YOUR cassette recorder because it was written on it and thus it was BETTER quality than any factory made tapes for _your_ recorder

Following I almost never used the audio recorder method and never had any real tape problems (apart from it being so slooooooooooow )

Because it was such an extremely simple program I might even have been able to write a Machine Language version of it some years later (so it could use much more memory space while Basic was not loaded) but by then I already owned a floppy drive and there were other great tools for backing up floppies (for safety reasons only of course).