Cassette tape speed control
Speed controlling a casette player sounded like potentially nothing more than a potmeter and done.
It turns out that cassette tape motorsare designed to keep constant speed under varying load and varying supply voltage. Which makes a lot of sense, particularly in portable designs.
The player pictured here has the electromechanical variant of fixed-speed motor, which are basically weights on the commutator contacts that lift off at the intended speed. See also cassette tape motors.
Modulating the power wins in the end, because you're starving it off speed before that liftoff.
As such, the electronics consists of little more of a transistor, and the code nothing more than reading the dial value (and CV input to allow control directly from a sequencer), mapping to useful range of voltage/speed, and writing that to PWM registers.
The range in which the speed is usefully modulated between full and probably-too-slow is relatively narrow (0.8V of the ~5V range, iirc), but this is one-time calibration for a specific motor.
I'm setting the PWM registers directly, because Arduino analogWrite() is 8-bit, and when only ~15% of the total range does something, 8-bit is a bit granular.
I (arbitrarily) settled on 10-bit PWM is a little more precise and its lower output speed is valid enough for this case due to the motor's momentum. I should experiment with higher-bit to see if there is any noticeable difference.