2010-12-13 4 views
0

j'ai écrit le code suivant Mais encore la partie audio ne répond pascomment lire le fichier audio en fonction de la position de UIImageView qui se déplace par accéléromètre

#import "AccelerometerViewController.h" 

@implementation AccelerometerViewController 

@synthesize imageView; 
@synthesize player; 
- (void)viewDidLoad { 


UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer]; 
    accel.delegate = self; 
    accel.updateInterval = 1.0f/60.0f; 

carRadius = imageView.frame.size.width/2; 
    delta = CGPointMake(12.0,4.0); 
    translation = CGPointMake(0.0,0.0);  

    [super viewDidLoad]; 
} 

- (void)accelerometer:(UIAccelerometer *)accelerometer 
     didAccelerate:(UIAcceleration *)acceleration { 


    if (acceleration.x>0) delta.x = 2; else delta.x = -2; 
    if (acceleration.y>0) delta.y = -2; else delta.y = 2; 

    [UIView beginAnimations:@"translate" context:nil]; 

imageView.transform = 
CGAffineTransformMakeTranslation(translation.x, translation.y); 
translation.x = translation.x + delta.x; 
translation.y = translation.y + delta.y; 

    [UIView commitAnimations]; 

    if (imageView.center.x + translation.x > 320 - carRadius || 
     imageView.center.x + translation.x < carRadius) { 
     translation.x -= delta.x; 
    } 


    if (imageView.center.y + translation.y > 460 - carRadius || 
     imageView.center.y + translation.y < carRadius) { 
     translation.y -= delta.y; 
    } 

//playing Audio file to show warning if my car moved on to another lane 


if (imageView.center.x + translation.x > 160) 


{ 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"tone" ofType:@"m4r"]; 
    NSURL *file = [[NSURL alloc] initFileURLWithPath:path]; 

    AVAudioPlayer *p =[[AVAudioPlayer alloc] 
     initWithContentsOfURL:file error:nil]; 
    [file release]; 

    self.player = p; 
    [p release]; 

    [player prepareToPlay]; 
    [player setDelegate:self]; 
    [self.player play]; 


} 
} 

Peut-on s'il vous plaît me aider

+0

Est-ce l'instruction if if (imageView.center.x + translation.x> 160) appelé correctement? Ajouter NSLog (@ "lecture audio d'avertissement"); ou quelque chose à tester. Quelles erreurs, le cas échéant, obtenez-vous? Aussi, pourquoi testez-vous le centre + traduction? Si je comprends bien, vous allez déplacer la voiture, alors pourquoi ne pas simplement tester la position centrale après avoir déplacé la voiture? –

+0

oui son fonctionnement correctement lorsque je teste avec la messagerie NSLog, mais quand j'essaye de jouer de l'audio, il est frappé. – sony

+0

Par "frappé" je suppose que vous vouliez taper "coincé". Voulez-vous dire que l'audio s'arrête à mi-chemin de la lecture, que cela ne joue rien du tout, que votre application se bloque ou que vous obtenez une erreur? S'il vous plaît fournir des messages d'erreur. –

Répondre

2

Voici quelques points à vérifier: Assurez-vous d'avoir importé le framework AVFoundation dans votre projet et que vous avez #import <AVFoundation/AVAudioPlayer.h> dans votre fichier d'en-tête. Déplacez toutes vos méthodes de [libération d'objet] au bas du bloc. Cela ne devrait pas faire de différence, mais ça vaut le coup d'essayer.

Utilisez-vous la dernière version d'iOS? 4.2.1 est le plus récent.

Assurez-vous que votre fichier audio s'appelle justement tone.m4r - il est sensible à la casse.

Dans la barre latérale de gauche, développez "Cibles", puis le nom de votre application, puis "Copier les ressources de l'ensemble". Est-ce que le fichier tone.m4r est là? Sinon, faites-le glisser.

Enfin, pourquoi créez-vous AVAudioPlayer * p et définissez-le comme égal à self.player (ce que je suppose que vous avez défini dans votre fichier d'en-tête)? Au lieu de cela, dans votre fichier d'en-tête dans @interface, déclarez AVAudioPlayer *player; si vous ne l'avez pas déjà fait. Après le bloc @interface mais avant le @end, ajoutez @property (nonatomic, retain) AVAudioPlayer *player; si vous ne l'avez pas déjà fait.

Remplacer

AVAudioPlayer *p =[[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil]; 
[file release]; 

self.player = p; 
[p release]; 

avec

self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil]; 
[file release]; 

Edits:

• Vous n'avez pas besoin [player setDelegate:self]; • Assurez-vous que vous avez self.player, pas seulement player (ne devrait pas faire différence mais c'est plus descriptif). • J'ai créé un tout nouveau projet vierge pour tester votre/mon code. Voir ci-dessous.

AudioTesterViewController.h:

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVAudioPlayer.h> 

@interface AudioTesterViewController : UIViewController { 
    AVAudioPlayer *player; 

} 

@property (nonatomic, retain) AVAudioPlayer *player; 

- (IBAction)playAudio; 

@end 

AudioTesterViewController.m:

#import "AudioTesterViewController.h" 

@implementation AudioTesterViewController 

@synthesize player; 


- (void)viewDidLoad { 
    [super viewDidLoad]; 

} 

- (IBAction)playAudio { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"tone" ofType:@"m4r"]; 

    NSURL *file = [[NSURL alloc] initFileURLWithPath:path]; 

    [path release]; 

    self.player =[[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil]; 

    [file release]; 

    [self.player prepareToPlay]; 
    [self.player play]; 

} 


- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
    [super dealloc]; 
} 

@end 

Notes: - (IBAction) playAudio est appelé par un bouton j'ai fait dans Interface Builder, mais vous pouvez, Bien sûr, faites-en une fonction vide ou copiez le code dans une autre fonction à la place. Si ce code ne fonctionne pas, essayez de cliquer dans la barre de menu Build-> Clean puis d'exécuter le projet.

Voici ma structure de fichier: alt text

+0

J'ai importé le travail de cadre et l'ai ajouté. J'ai déclaré * joueur, j'utilise à la fois 3.2.1 et 4.2.1 dans deux ordinateurs différents et j'ai également essayé de remplacer le code ... Encore le thig audio ne répond pas ... – sony

+0

Voir mes modifications ci-dessus. –

+0

Même j'ai testé le code du testeur audio normal. Mais lors de l'utilisation avec Accelerometer positionnement de l'image UI, il ne répond pas. il manque quelque chose que nous ne pouvons pas trouver. – sony

Questions connexes