Estoy desarrollando una aplicación de Android. Quiero generar sonido de rangos de frecuencia entre 1KHz a 20KHz. ¿Hay alguna forma de generar sonido a una Frecuencia específica?Cómo generar una frecuencia de sonido particular?
Respuesta
Encontré este código de otra publicación SO. por lo que puedo decir, sigue siendo un poco problemático, pero debería ser el truco.
public class PlaySound extends Activity {
// originally from http://marblemice.blogspot.com/2010/04/generate-and-play-tone-in-android.html
// and modified by Steve Pomeroy <[email protected]>
private final int duration = 3; // seconds
private final int sampleRate = 8000;
private final int numSamples = duration * sampleRate;
private final double sample[] = new double[numSamples];
private final double freqOfTone = 440; // hz
private final byte generatedSnd[] = new byte[2 * numSamples];
Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onResume() {
super.onResume();
// Use a new tread as this can take a while
final Thread thread = new Thread(new Runnable() {
public void run() {
genTone();
handler.post(new Runnable() {
public void run() {
playSound();
}
});
}
});
thread.start();
}
void genTone(){
// fill out the array
for (int i = 0; i < numSamples; ++i) {
sample[i] = Math.sin(2 * Math.PI * i/(sampleRate/freqOfTone));
}
// convert to 16 bit pcm sound array
// assumes the sample buffer is normalised.
int idx = 0;
for (final double dVal : sample) {
// scale to maximum amplitude
final short val = (short) ((dVal * 32767));
// in 16 bit wav PCM, first byte is the low order byte
generatedSnd[idx++] = (byte) (val & 0x00ff);
generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
}
}
void playSound(){
final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, numSamples,
AudioTrack.MODE_STATIC);
audioTrack.write(generatedSnd, 0, generatedSnd.length);
audioTrack.play();
}
}
Heh. Acabo de encontrar lo mismo [aquí] (http://marblemice.blogspot.com/2010/04/generate-and-play-tone-in-android.html). Supuestamente, el código se actualiza en ese enlace para corregir los errores. –
Sí, pero de acuerdo con los comentarios todavía tiene algunos ... De cualquier manera, es una gran base. – Reid
Existe un problema con este código, ya que no reproduce nada más de 17000Hz, incluso si establece sampleRate = 44100. Estos mismos algoritmos funcionan en Flash, por ejemplo, y el teléfono que estoy usando puede reproducir estas frecuencias cuando provienen del archivo. ¿Alguien sabe cómo arreglar esto? – PSIXO
- 1. Generando sonido de una frecuencia particular usando gcc en ubuntu?
- 2. Android: ¿Cómo generar una frecuencia?
- 3. ¿Cómo generar sonidos por frecuencia en Java?
- 4. ¿Cómo generar efectos de sonido en Java?
- 5. Obtener frecuencia de sonido en iPhone
- 6. ¿Cómo detectar la frecuencia/tono de sonido en un iPhone?
- 7. Cómo generar una tabla de frecuencias en R con frecuencia acumulada y frecuencia relativa
- 8. Detección de frecuencia de un archivo de sonido
- 9. cómo generar efecto de sonido envolvente en HTML5
- 10. cómo dejar de generar código en un botón en particular?
- 11. Audio de Pygame simple a una frecuencia
- 12. ¿Cómo encontrar la frecuencia fundamental de un sonido de cuerda de guitarra?
- 13. Cómo generar una nota de guitarra
- 14. Generar un archivo de sonido con un tono de 15Khz
- 15. Sonido de una bola rodante
- 16. Contar con qué frecuencia aparece un valor particular en una matriz
- 17. Detección de frecuencia de Python
- 18. ¿Buenas bibliotecas de sonido?
- 19. Cómo enviar sonido a un altavoz
- 20. Generador simple de ondas de sonido con SDL en C++
- 21. ¿Manera simple de jugar una sola frecuencia en Java?
- 22. ¿Qué rango de frecuencia de sonido puede medirse desde el micrófono del iPhone?
- 23. ¿Cómo especificar una implementación particular de JAXB?
- 24. Reproducir sonido de pitido en iphone relacionado con la frecuencia y decibelios
- 25. ¿Cómo deshabilitar una regla de estilo de control particular para una línea de código particular?
- 26. ¿Cómo deshabilitar una regla de estilo de control particular para una línea de código en particular?
- 27. Cómo generar una matriz de combinaciones
- 28. ¿Cómo puedo generar una URL para un artículo en particular en el sitio de administración de Django desde una vista?
- 29. Haz una tabla de frecuencia de cadena
- 30. ¿Cómo generar una permutación?
El rango que describe no es ultrasónico. Es decir. todavía se puede escuchar. – Sjoerd
Sólo nitpicking: ultrasonic _starts_ at 20KHz. Las frecuencias en el rango que desea son acústicas. –
@alextsc, si está en BlackBerry o en Java-ME, también la respuesta es bienvenida. – Android