johndg:
Movement is good! I think the speed control should be a (slow) sine wave (11/3 second period for 45rpm). The PWM output must be smoothed - the arrangement in the picture below should do it - sorry about the (lack of) clarity, it's a 100 ohm resistor an a 1 microfarad capacitor, but it's not at all critical.
Here's a bit of code to try:
float A; // A holds the angle (radians). Don't like using
// single-character variable names, but this sketch
// is so tiny, I'll excuse myself!
int pin = 3; // speed control output pin (must be PWM capable)
void setup() {
pinMode(pin, OUTPUT);
A = 0;
}
void loop() {
int S, M;
S = (int) (sin(A) * 100.0); // sin() goes from -1 to 1, so S will go from -100 to +100
M = map(S, -100, 100, 0, 255); // PWM goes from 0 to 255
analogWrite(pin, M);
A += 0.024; // The increment (0.024) and the 10ms delay are guesses to
delay(10); // get an output at about 0.75 Hz (45 per minute, 1.3 second period)
}
Good luck!

Ok. So, what happens with this code is that it does change the speed, but because the speed is constantly changing, the motor oscillates (which won't really work for playing a record).
I suspect this motor might just want a single, constant integer to run smoothly. I know that, based on what you've told me, I should be able to calculate this to give me 45 rpm, but...math isn't really my strong point, I'm afraid.
I did try giving it various speed values via a simple analog write command. Using the resistor+capacitor circuit you gave me I was able to get different speeds, although the range seems limited. 9 was the absolute lowest value that would spin the motor. For anything above 100 I wasn't really able to detect much of a difference, speed-wise.