I am trying to implement a system where I give a set of frequencies to be played at once, currently can play each frequency individually. Below I have a code, that plays the giv
In this example, Tone
opens a single SourceDataLine
for each Note
, but you can open as many lines as there are notes in your chord. Then simply write()
each Note
of the chord to a separate line. You can create an arpeggio effect by using Note.REST
.
you could use different threads for each frequence :)
here you can find a small example of threads in java
I hope this helps you :)
Simply sum the sample values at each time point, and divide by an appropriate scaling factor to keep your values in range. For example, to play A 440 and C 523.25 at the same time:
double[] a = tone(440,1.0);
double[] b = tone(523.25,1.0);
for( int i=0; i<a.length; ++ i )
a[i] = ( a[i] + b[i] ) / 2;
StdAudio.play(a);