Después de probar todo, decidí usar SoundPool para cambiar el tono, una velocidad de reproducción de 2.0 hace que el sonido se reproduzca a una frecuencia doble al original, y una velocidad de reproducción de 0.5 hace que se reproduzca a la mitad frecuencia original. El rango de velocidad de reproducción es de 0.5 a 2.0. Pero funcionó con frecuencia más baja y más alta que 0.5 y 2.0.
Estoy publicar mi código de trabajo,
pero como es sólo para fines de demostración, aquí tienes que cambiar manualmente la "tasa de reproducción", cada vez que se instala la aplicación para, por ejemplo: "sp.play (explosión, 1,1,0,0,1.5f) "here" 1.5f "es la velocidad de reproducción. Uno puede crear fácilmente un EditView, o algo similar para establecer el valor de la velocidad de reproducción en tiempo de ejecución.
En esta aplicación, solo necesita tocar en la pantalla de la aplicación para reproducir la música a la velocidad de reproducción establecida.
import java.io.IOException;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class SoundPoolActivity extends Activity implements OnClickListener {
SoundPool sp;
int explosion = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View v = new View(this);
v.setOnClickListener(this);
setContentView(v);
sp = new SoundPool(1,AudioManager.STREAM_MUSIC,0);
//explosion = sp.load(this, R.raw.hh,0);
explosion = sp.load("/sdcard/hh.m4a",0);
}
public void onClick(View v){
if (explosion!=0){
sp.play(explosion, 1,1,0,0,2.3f);
}
}
}
cambio '1 + x' a' 1.0f + x' y (también cambiar '' 0.005' a 0.005f' –
Esto no hace ninguna diferencia. – Patrick
¿Cómo estás probando su código. Si está utilizando una dispositivo real, es posible que su dispositivo sea demasiado lento para cambiar dinámicamente la velocidad de reproducción. Si está utilizando el simulador, tal vez el problema sea la tarjeta de sonido de su anfitrión. Cambiar la velocidad de reproducción no es una tarea trivial y puede requerir una interpolación compleja especialmente cuando se ejecuta con tasas de conversión no estándar. – MBober