2012-01-23 4 views
2

Как я могу сыграть случайный звук в iOS 5 в xcode? Я продолжаю получать ошибку «выброса исключения».Воспроизвести случайный звук

Я попытался это:

int randomNumber = arc4random() % 24 + 1; 

NSString *tmpFileNameRandom = [[NSString alloc] initWithFormat:@"Sound%d", randomNumber]; 

NSString *fileName = [[NSBundle mainBundle] pathForResource:tmpFileNameRandom ofType:@"mp3"]; 

AVAudioPlayer * soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:fileName] error:nil]; 

[soundPlayer prepareToPlay]; 
[soundPlayer play]; 

Спасибо!

+1

Вы пробовали протоколировать пути/имена файлов, являются ли они правильными и т. Д., И какое исключение выбрасывается и тем что. –

+0

попробуйте изменить% d на% i – Shubhank

+2

% d должно быть в порядке - они эквивалентны (% d не является «двойным», если вам интересно). –

ответ

3

Во-первых, измените свой ViewController.h на

#import <UIKit/UIKit.h> 

@class AVAudioPlayer; 

@interface ViewController : UIViewController 

-(IBAction)PlayRandomSound; 
@property (nonatomic, retain) AVAudioPlayer *soundPlayer; 


@end 

и первые строки ViewController.m к

#import "ViewController.h" 

#import <AVFoundation/AVAudioPlayer.h> 


@implementation ViewController 

@synthesize soundPlayer = _soundPlayer; 


-(IBAction)PlayRandomSound{ 

    int randomNumber = arc4random() % 8 + 1; 

    NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"Sound%02d", randomNumber] ofType:@"mp3"]]; 


    _soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil]; 

    [_soundPlayer prepareToPlay]; 
    [_soundPlayer play]; 


    NSLog(@"randomNumber is %d", randomNumber); 
    NSLog(@"tmpFilename is %@", soundURL); 
} 

Edit: я только потом заметил, что вы не используете ARC так что этот код имеет небольшую утечку. Но это будет сделано для начала. Возможно, вы должны установить _soundPlayer в nil при создании ViewController, а затем проверить: если это не nil: отпустите его и создайте новый, иначе просто создайте новый. Или вы можете рассмотреть возможность перехода на ARC, если это новый проект.

+0

Вау, вот и все. Большое спасибо.Я звукорежиссер, если я когда-нибудь смогу вернуть вам звукозапись, дайте мне знать! – Giel

0

Вы добавили структуру AVFoundation в свой проект? AVAudioPlayer - это класс этой структуры.

Чтобы добавить этот фреймворк (в Xcode 4), выберите файл проекта, перейдите на вкладку «Сводка» и добавьте его, щелкнув значок «+» под таблицей «Связанные рамки и библиотеки».

1

Для ваших имен файлов вы должны использовать

NSString *tmpFileNameRandom = [[NSString alloc] initWithFormat:@"Sound%02d", randomNumber]; 

это даст вам ведущие нули с номерами < 10 ...

или еще лучше, попробуйте следующее:

int randomNumber = arc4random() % 24 + 1; 

NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"Sound%02d", randomNumber] ofType:@"mp3"]]; 

AVAudioPlayer * soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil]; 

[soundPlayer prepareToPlay]; 
[soundPlayer play]; 
+1

Это правильный ответ - вы должны принять его, если хотите, чтобы люди продолжали помогать вам. –

+0

Привет, имена файлов теперь подтверждены правильно, но он по-прежнему не воспроизводит фактический звук. NSLog of soundURL возвращает, например, Sound02.mp3, который является допустимым файлом в проекте xcode. У меня нет ошибок, звук iphone включен, звук Mac включен, но ничего ... – Giel

+0

Хм, ваш код выглядит правильно - он должен играть. Убедитесь, что ваши имена файлов соответствуют символу (столица S) и что формат правильный (mp3?). Файлы также должны быть включены в проект (щелкните правой кнопкой мыши по проектору -> добавьте файлы в проект). –

Смежные вопросы