2011-12-12 14 views
5

Los temas similares sobre esta cuestión incluyen solo tocar el tono en mono, donde las frecuencias izquierda y derecha son las mismas.Reproducir tono estéreo en android

Mi pregunta es: ¿cómo generar un tono estéreo de modo que el canal izquierdo tenga una frecuencia diferente a la del canal derecho?

Pensé en grabar previamente archivos .wav, pero grabar muchos archivos .wav y ponerlos en la carpeta res no es una buena idea.

me encuentro con la clase SoundPool y AudioTrack pero necesito un fragmento que muestre las diferentes frecuencias del canal izquierdo y derecho almacenadas como buffer antes de reproducir el tono.

¿O hay otras formas? Proporcione el fragmento deseado.

Respuesta

4

nunca he probado esto:

  1. inicializar frecuencias izquierda y derecha
    //playback rate (1.0 = normal playback, range 0.5 to 2.0)
    float lFrequency = 1.0;
    float rFrequency = 1.0;

  2. inicializar un objeto SoundPool
    SoundPool sp = SoundPool(2, AudioManager.STREAM_MUSIC, 0);

  3. Cargar la pista dos veces (load function)
    int sLeft = sp.load(mContext, R.raw.yourAudioFileId, 1);
    int sRight = sp.load(mContext, R.raw.yourAudioFileId, 1);

  4. Juega a los 2 sonidos (uno a la izquierda y otro a la derecha) utilizando diferentes tasas (play function)
    sp.play (sLeft, 1.0, 0.0, 0, 0, lFrequency);
    sp.play (sRight, 0.0, 1.0, 0, 0, rFrequency);

+0

En el paso 4, creo que las frecuencias izquierda y derecha no se reproducirán juntas. Necesito tocar la frecuencia izquierda y la derecha juntas. –

+0

@ NeigylR.Noval ¿Lo intentó? Mientras construyamos SoundPool usando 2 como máximo, ambos jugarán juntos. –

3

Según tengo entendido, si usa SoundPoo l se reproducirá en estéreo sin ninguna configuración especial. De la documentación: "La biblioteca SoundPool usa el servicio MediaPlayer para decodificar el audio en una secuencia PCM mono o estéreo de 16 bits en bruto" , por lo que siempre y cuando el archivo que reproduzca esté en estéreo, debería reproducirse de esa manera.

1

En lugar de pregrabar archivos WAV e incrustarlos en su aplicación, puede generar el audio WAV de canal dividido en la memoria del código, y luego guardarlo como un archivo WAV que podría reproducir con SoundPool o reproducir el audio directamente usando AudioTrack (recomendaría este último).

El audio en sí es simplemente una matriz de enteros (generalmente) de 2 bytes. Con estéreo, las muestras izquierda y derecha se intercalan en toda la matriz (por lo que la muestra [0] es la primera muestra L, la muestra [1] es la primera muestra R, la muestra [2] es la segunda muestra L, etc.). Así que cuando la aplicación se inicie, creará una matriz por el tiempo que necesite (con audio con calidad de CD, su matriz necesitará 88200 elementos por cada segundo de audio) y luego completará las muestras con valores calculados para su tono, luego pasará la matriz a AudioTrack para jugar.

O podría guardar el audio como un archivo WAV y reproducirlo con SoundPool (que en realidad podría ser mejor desde el punto de vista de la huella de memoria).El formato WAV es muy simple de escribir (la lectura es más complicada): solo un encabezado de 44 bytes con varias propiedades, y luego los datos de audio en sí.

Creo que he respondido una pregunta de Android similar antes, así que voy a ver si tengo algún código básico para hacer esto.

No

mí, pero un buen código para leer y escribir archivos WAV en Java:

http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java

0

me gustaría utilizar otro software para generar un archivo estéreo .ogg (no utilice archivos WAV, se pesa demasiado), que es un formato de audio muy liviano que funciona bien en Android. Uso el Reaper gratis, Audacity es más fácil, cualquiera lo haría. Simplemente cree dos pistas de audio mono, configure su panorámica a la derecha y a la izquierda. Cargue sus muestras y aplique un complemento de cambio de tono para modificar la frecuencia de una de las pistas. También puede generarlos con un sintesizador. A continuación, renderice todo en un archivo tone.ogg. Tone

Cuestiones relacionadas