2013-09-26 5 views
4

Я пробовал все различные параметры, найденные здесь, даже используя NSData для загрузки аудиофайлов. Я пробовал файлы mp3, m4a, caf, но ничего не работает.AVAudioPlayer не работает на iOS7

Нет сообщений об ошибках, ничего.

Это новое приложение, использующее XCODE 5, iOS7.

Это то, что я использую

- (void)playOnce:(NSString *)aSound 
{ 


    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil]; 
    [audioSession setActive:YES error:nil]; 

    // Gets the file system path to the sound to play. 
    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:aSound ofType:@"m4a"]; 

    // Converts the sound's file path to an NSURL object 
    NSURL *soundURL = [[NSURL alloc] initFileURLWithPath: soundFilePath]; 
    AVAudioPlayer * newAudio=[[AVAudioPlayer alloc] initWithContentsOfURL: soundURL error:nil]; 


    [newAudio prepareToPlay]; 

    // set it up and play 
    [newAudio setNumberOfLoops:0]; 
    [newAudio setVolume: 1]; 
    [newAudio setDelegate: self]; 
    [newAudio play]; 

} 

Любая помощь очень ценится. Я слишком долго застрял с ними.

Заранее благодарю вас.

+0

Что именно не работает? Вы говорите, что ошибок нет, так в чем проблема? Вы не слышите звук? Используете ли вы симулятор или устройство? –

+0

На самом деле ничего не происходит. Нет звука, ничего. И на тренажере, и на устройстве. Я использовал кнопку для запуска игры, и кнопка отключается на несколько секунд, а затем снова включается, но ничего не происходит. Нет звука. – Elkucho

+0

Я также добавил следующий код и все еще ничего ... AVAudioSession * audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; [audioSession setActive: YES error: nil]; – Elkucho

ответ

17

Вы должны объявить AVAudioPlayer как сильный ссылочного @property в вид контроллера, как показано ниже

@property (strong, nonatomic) AVAudioPlayer * newAudio; 

Если объявить AVAudioPlayer в методе, он будет выпущен сразу же после того, как метод был выполнен, не существует достаточно времени, чтобы сделать звук.

+0

Да, вы поняли. Большое спасибо. – Elkucho

+0

Это супер круто! –

2

Я попытался, как это, и я был в состоянии воспроизводить аудио файлы в прошивкой 7

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSURL* url = [[NSBundle mainBundle] URLForResource:@"DR" withExtension:@"mp3"]; 
    NSAssert(url, @"URL is valid."); 
    NSError* error = nil; 
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
    if(!self.player) { 
    NSLog(@"Error creating player: %@", error); 
    } 
    self.player.delegate = self; 
    [self.player prepareToPlay]; 
} 

- (IBAction)playAction:(id)sender { 
    [self.player play]; 
} 
+0

self.player - это то же самое, что и объявление его как сильного свойства. ARC требует, чтобы область действия простиралась за пределы этого метода, иначе она будет дезактивирована –

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