как воспроизвести аудиофайл в зависимости от положения UIimageview, движущегося акселерометром - PullRequest
0 голосов
/ 13 декабря 2010

Я написал следующий код, но аудио часть по-прежнему не отвечает

#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];


 }
 } 

Может кто-нибудь, пожалуйста, помогите мне

1 Ответ

2 голосов
/ 14 декабря 2010

Вот несколько вещей, которые нужно проверить: Убедитесь, что вы импортировали инфраструктуру AVFoundation в свой проект и что у вас есть #import <AVFoundation/AVAudioPlayer.h> в заголовочном файле.

Переместите все ваши методы [освобождения объекта] в конец блока. Это не должно иметь значения, но стоит попробовать.

Используете ли вы последнюю версию iOS? 4.2.1 является самым новым.

Убедитесь, что ваш аудиофайл назван точно tone.m4r - он чувствителен к регистру.

На левой боковой панели разверните «Цели», затем имя вашего приложения, затем «Копировать ресурсы комплекта». Есть ли файл tone.m4r? Если нет, перетащите его внутрь.

Наконец, почему вы создаете AVAudioPlayer * p, а затем устанавливаете его равным self.player (который, я полагаю, вы определили в своем заголовочном файле)? Вместо этого в вашем заголовочном файле в @interface объявите AVAudioPlayer *player;, если вы этого еще не сделали. После блока @interface, но перед @end, добавьте @property (nonatomic, retain) AVAudioPlayer *player;, если вы еще этого не сделали.

Заменить

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

self.player = p;
[p release];

с

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

редактирует:

• Вам не нужно [player setDelegate:self]; • Убедитесь, что у вас есть self.player, а не просто player (не должно иметь значения, но это более наглядно). • Я создал совершенно новый, пустой проект для проверки вашего / моего кода. Смотри ниже.

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

Примечания: - (IBAction) playAudio вызывается кнопкой, которую я сделал в Интерфейсном Разработчике, но вы, конечно, можете просто сделать ее функцией void или вместо этого скопировать код в другую функцию. Если этот код не работает, попробуйте нажать в строке меню Build-> Clean и запустить проект.

Вот моя файловая структура: alt text

...