Cómo agregar efecto de eco a archivo wav en android?

He estado luchando por un tiempo ahora en cómo modificar un archivo wav mediante la adición de efecto de eco en él; Mi aplicación no tamizaje, velocidad y volumen, pero no puedo añadir efectos. Soy un principiante en la ingeniería de audio o algo así.

Mi principal objetivo es encontrar un algoritmo y hacer una función que toma el byte [] muestras y lo modifica.

I'm using this current code right now: sonic = new Sonic(44100, 1); byte samples[] = new byte[4096]; byte modifiedSamples[] = new byte[2048]; int bytesRead; if (soundFile != null) { sonic.setSpeed(params[0]); sonic.setVolume(params[1]); sonic.setPitch(params[2]); do { try { bytesRead = soundFile.read(samples, 0, samples.length); } catch (IOException e) { e.printStackTrace(); return null; } if (bytesRead > 0) { sonic.putBytes(samples, bytesRead); } else { sonic.flush(); } int available = sonic.availableBytes(); if (available > 0) { if (modifiedSamples.length < available) { modifiedSamples = new byte[available * 2]; } sonic.receiveBytes(modifiedSamples, available); if (thread.getTrack() != null && thread.getTrack().getState() != AudioTrack.STATE_UNINITIALIZED) thread.WriteTrack(modifiedSamples, available); } } while (bytesRead > 0); 

Como puedes ver, utilizo sonic ndk para alterar la velocidad y el volumen de tono pasando otro array byte [] allí "modifiedSamples" y necesito saber si hay una forma de modificar este "modifiedSamples" para obtener el efecto de eco. Sé que esto suena como que estoy pidiendo la función, pero no lo hago. Simplemente no sé nada acerca de las cosas de procesamiento de audio y me gustaría apreciar un punto de partida o incluso si lo que estoy tratando de hacer es posible con mi matriz de bytes.

Continuando con los comentarios, aquí hay una implementación que post-procesa el archivo wav para agregar eco.

 //Clone original Bytes byte[] temp = bytesTemp.clone(); RandomAccessFile randomAccessFile = new RandomAccessFile(fileRecording, "rw"); //seek to skip 44 bytes randomAccessFile.seek(44); //Echo int N = sampleRate / 8; for (int n = N + 1; n < bytesTemp.length; n++) { bytesTemp[n] = (byte) (temp[n] + .5 * temp[n - N]); } randomAccessFile.write(bytesTemp); 

El mismo proceso funcionará en tiempo real también, con algunos cambios.

  • Usar AudioTrack de Android para combinar bytes de muestras de sonido produce ruido
  • Guardar la entrada de audio del motor de reconocimiento de voz de Android Stock
  • Cómo simular la entrada de audio a micrófono utilizando el archivo .wav
  • Utilizar AudioTrack en Android para reproducir un archivo WAV
  • Cómo codificar un WAV a un mp3 en un dispositivo Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.