Buscar..


Generar tono de una frecuencia específica.

Para reproducir un sonido con un tono específico, primero tenemos que crear un sonido de onda sinusoidal. Esto se hace de la siguiente manera.

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
}

Ahora tenemos que configurar AudioTrack para reproducir de acuerdo con el búfer generado. Se realiza de la siguiente manera.

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

Escribe el búfer generado y reproduce la pista.

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

Espero que esto ayude :)



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow