2012-06-21 4 views
6

Alors j'essaye de jouer un fichier son à un rythme différent dans iOS 5.1.1, et je n'ai absolument aucune chance. Jusqu'à présent, j'ai essayé de fixer le taux de la AVAudioPlayer:AVAudioPlayer rate

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

avec pas de chance, les pièces sonores, mais ne tient pas seulement le taux que je lui donne. J'ai également essayé AVPlayer:

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

Encore une fois, il joue mais ignore simplement la vitesse que j'ai définie. J'ai essayé un certain nombre de fichiers audio différents, mais pour ce thread j'ai choisi Rooster-mono.wav de ce catalogue: http://sig.sapp.org/sounds/wave/

Quelqu'un at-il réussi à changer le taux de lecture sur iOS 5.1.1? Ou est-ce que quelqu'un sait ce qui me manque ici? Je fais ceci pour changer légèrement la hauteur de certains de mes samples, je réalise que je pourrais le faire en utilisant RemoteIO ou quelque chose de similaire mais cela semble totalement exagéré pour ce que j'essaye de réaliser (un simple ajustement de la vitesse de lecture) .

+0

cette erreur que vous avez fait ici est que plauer.rate = 1.5f. Vous devez mettre "f" à la fin de celui-ci, sinon cela ne fonctionnera pas –

Répondre

8

Voici un code que je connais qui fonctionne, juste re-testé dans une application sur laquelle j'ai travaillé. Comme vous le mentionnez, l'utilisation de setEnableRate: et de setRate: ne fonctionnera qu'avec iOS 5.0 et les versions ultérieures. donc je l'utilise respondsToSelector: pour tester sur l'appareil ou non l'appareil acceptera la demande:

_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; 

en cours d'exécution sur un appareil iOS 5, il effectue avec succès le double taux. fonctionnant sur iOS 4.3, il le joue à vitesse normale. Ainsi, la seule façon d'obtenir le bon taux est si votre appareil a iOS 5 dessus.

+0

Bon travail .. Merci – sohil

8

Modifier le code:

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

[avPlayer play]; //call play first 

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

c'est faux. Vous devez d'abord définir le taux, puis utiliser le jeu –

+0

Cela fonctionne réellement pour moi, je ne sais pas exactement pourquoi. –

+0

Vous avez tous tort. Le réglage du taux le joue au taux. La lecture commence à lire la vidéo à la vitesse 1.0 par défaut. – simplexity

3

Voici comment vous le faites.

valeur de taux

est 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