Android Genera tono di una frequenza specifica

Esempio

Per riprodurre un suono con un tono specifico, dobbiamo prima creare un suono sinusoidale. Questo viene fatto nel modo seguente.

final int duration = 10; // duration of sound
final int sampleRate = 22050; // Hz (maximum frequency is 7902.13Hz (B8))
final int numSamples = duration * sampleRate;
final double samples[] = new double[numSamples];
final short buffer[] = new short[numSamples];
for (int i = 0; i < numSamples; ++i) 
{
 samples[i] = Math.sin(2 * Math.PI * i / (sampleRate / note[0])); // Sine wave
 buffer[i] = (short) (samples[i] * Short.MAX_VALUE);  // Higher amplitude increases volume
}

Ora dobbiamo configurare AudioTrack per giocare secondo il buffer generato. È fatto nel modo seguente

AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                    sampleRate, AudioFormat.CHANNEL_OUT_MONO,
                    AudioFormat.ENCODING_PCM_16BIT, buffer.length,
                    AudioTrack.MODE_STATIC);

Scrivi il buffer generato e riproduci la traccia

audioTrack.write(buffer, 0, buffer.length);
audioTrack.play();

Spero che questo ti aiuti :)