Great thanks.
I just had a look at the link - looks perfect for the oscillator thanks so much Grumpy Mike.
So now I need to take my processing code and use it in arduino and include the code from the link above to make this all work without a PC..
I have to admit the code in the link is way over my head. Could you offer some advice on how I should best go about converting my processing patch code to an arduino patch and replace the minim oscillator with the on board arduino osc?
Any help again much appreciated!
Here's my processing code (apologies if its poorly formed. I tend to hack things together as and when I need things to work... I do learn along the way though, as I am doing today...) 
// This program takes ASCII-encoded strings
// from the serial port at 9600 baud and graphs them. It expects values in the
// range 0 to 1023, followed by a newline, or newline and carriage return
// Created 20 Apr 2005
// Updated 18 Jan 2008
// by Tom Igoe
// This example code is in the public domain.
import ddf.minim.*;
import ddf.minim.signals.*;
Minim minim;
AudioOutput out;
SineWave sine;
import processing.serial.*;
float easing = 0.05;
float easedVal;
Serial myPort; // The serial port
int xPos = 1; // horizontal position of the graph
void setup () {
// set the window size:
size(400, 600);
minim = new Minim(this);
// get a line out from Minim, default bufferSize is 1024, default sample rate is 44100, bit depth is 16
out = minim.getLineOut(Minim.STEREO);
// create a sine wave Oscillator, set to 67 Hz, at 0.5 amplitude, sample rate from line out
sine = new SineWave(67, 1, out.sampleRate());
// set the portamento speed on the oscillator to 200 milliseconds
sine.portamento(200);
// add the oscillator to the line out
out.addSignal(sine);
// List all the available serial ports
println(Serial.list());
// I know that the first port in the serial list on my mac
// is always my Arduino, so I open Serial.list()[0].
// Open whatever port is the one you're using.
myPort = new Serial(this, Serial.list()[1], 9600);
// don't generate a serialEvent() unless you get a newline character:
myPort.bufferUntil('\n');
// set inital background:
background(0);
}
void draw () {
// everything happens in the serialEvent()
}
void serialEvent (Serial myPort) {
// get the ASCII string:
String inString = myPort.readStringUntil('\n');
if (inString != null) {
// trim off any whitespace:
inString = trim(inString);
// convert to an int and map to the screen height:
float inByte = float(inString);
//*** new bit atempt at Averaging
// inByte = map(inByte, 0, 1023, 0, height);
// float targetVal = inByte;
// easedVal += (targetVal - eased val) *easing;
// draw the line:
stroke(127,34,255);
line(xPos, height, xPos, height - inByte*3);
// at the edge of the screen, go back to the beginning:
if (xPos >= width) {
xPos = 0;
background(0);
}
else {
// increment the horizontal position:
xPos++;
float amp = map(inByte,20,300,1,0);
sine.setAmp(amp); }
}
}