2012-06-21 26 views
6

Así que estoy tratando de reproducir un archivo de sonido a un ritmo diferente en iOS 5.1.1, y estoy teniendo absolutamente nada de suerte. Hasta ahora he intentado fijar la tasa de la AVAudioPlayer:AVAudioPlayer tasa

player = [[AVAudioPlayer alloc] initWithContentsOfURL:referenceURL error:&error]; 
player.enableRate = YES; 
player.rate = 1.5; 
player.numberOfLoops = 0; 
player.delegate = self; 
[player prepareToPlay]; 
[player play]; 

sin suerte en absoluto, se reproduce el sonido, pero sólo hace caso omiso de la tasa se lo doy. También probé AVPlayer:

avPlayer = [[AVPlayer alloc] initWithURL:referenceURL]; 
avPlayer.rate = 0.5; 
[avPlayer play]; 

Nuevamente, reproduce pero simplemente ignora la velocidad que establecí. He intentado varios archivos de audio diferentes, pero por el bien de este hilo he seleccionado Rooster-mono.wav de este catálogo: http://sig.sapp.org/sounds/wave/

¿Alguien ha tenido éxito al cambiar la velocidad de reproducción en iOS 5.1.1? ¿O alguien sabe lo que me falta aquí?

Estoy haciendo esto para cambiar un poco el tono de algunas de mis muestras, me doy cuenta de que podría hacer esto utilizando RemoteIO o algo similar, pero parece una exageración total para lo que estoy tratando de lograr (un ajuste de velocidad de reproducción simple) .

+0

este error que hizo aquí es que plauer.rate = 1.5f. Tiene que poner "f" al final de la misma, de lo contrario no funcionará –

Respuesta

8

aquí hay un código que sé que funciona, simplemente lo volvieron a probar en una aplicación en la que he estado trabajando. como mencionas, usar setEnableRate: y setRate: solo funcionará con iOS 5.0 y superior. Así que uso respondsToSelector: para probar en el dispositivo si el dispositivo aceptará la solicitud:

_noticeAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Rooster-mono" ofType:@"wav"]] 
                 error:nil];; 
if ([_noticeAudio respondsToSelector:@selector(setEnableRate:)]) 
    _noticeAudio.enableRate = YES; 
if ([_noticeAudio respondsToSelector:@selector(setRate:)]) 
    _noticeAudio.rate = 2.0; 

se ejecuta en un dispositivo iOS 5, que lleva a cabo la doble tasa de éxito. corriendo en iOS 4.3, lo reproduce a velocidad normal.

por lo que la única forma de obtener la tasa adecuada es si su dispositivo tiene iOS 5.

+0

Funcionando bien. Gracias – sohil

8

modificar el código para:

avPlayer = [[AVPlayer alloc] initWithURL:referenceURL]; 

[avPlayer play]; //call play first 

avPlayer.rate = 0.5; //then set rate 
+0

esto es incorrecto. Primero debe establecer la velocidad y luego usar play –

+0

Esto realmente funciona para mí, no puedo decir exactamente por qué. –

+0

Estás equivocado. Establecer la tasa lo juega a la velocidad. Play comienza a reproducir el video a la velocidad predeterminada 1.0. – simplexity

3

Ésta es la forma de hacerlo.

valor de la tasa es de entre 0.1f - 2.0f

player = [[AVAudioPlayer alloc] 
      initWithContentsOfURL:[NSURL fileURLWithPath:path] 
      error:&err]; 
player.volume = 0.4f; 
player.enableRate=YES; 
[player prepareToPlay]; 
[player setNumberOfLoops:0]; 
player.rate=2.0f; 
[player play]; 
1

Swift 2,0

let player = AVPlayer(URL: url) 
player.play() 
player.rate = 0.9