2015-10-08 1 views
0

У меня есть приложение tvOS который пытается воспроизвести звуковой файл, как это:tvOS приложение не играет звуковой файл

#import "NameViewController.h" 
#import <AVFoundation/AVFoundation.h> 

@interface NameViewController() 

@end 

@implementation NameViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"intro" ofType:@"mp3"]; 
    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 
    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL fileTypeHint:AVFileTypeMPEGLayer3 error:nil]; 
    player.numberOfLoops = -1; //infinite 

    [player play]; 


} 

Если я ставлю точку останова после [ИГРОКА]; он начинает играть в течение нескольких секунд. Если у меня нет точки останова, звук не воспроизводится.

Что я делаю неправильно?

ответ

0

Это сработало, вызвав игру в viewWillAppear:

#import "NameViewController.h" 
#import <AVFoundation/AVFoundation.h> 

@interface NameViewController() 
@property (strong, nonatomic) AVAudioPlayer *player; 
@end 

@implementation NameViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self createAndStartAudioPlayer]; 


} 

- (void) viewWillAppear:(BOOL)animated{ 

    [self.player play]; 
} 

- (void) createAndStartAudioPlayer { 
    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"intro" ofType:@"mp3"]; 
    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL fileTypeHint:AVFileTypeMPEGLayer3 error:nil]; 
    self.player.numberOfLoops = -1; //infinite 


} 
0

Я не совсем уверен, в чем проблема, но поскольку вы сказали, что поставили точку останова после того, как [player play]; вызовет воспроизведение звука, это звучит так, как если бы система пыталась создать и воспроизвести аудиоплеер слишком быстро. . Вы используете это на симуляторе или в комплекте телевизора?

Возможно, попробуйте добавить отдельный метод для создания и воспроизведения плеера, так как система даст достаточно времени для создания вида и , а затем создать и воспроизвести аудиоплеер?

- (void) createAndStartAudioPlayer { 
    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"intro" ofType:@"mp3"]; 
    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 
    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL fileTypeHint:AVFileTypeMPEGLayer3 error:nil]; 
    player.numberOfLoops = -1; //infinite 

    [player play]; 
} 

А затем вызвать, что из viewDidLoad:

[self createAndStartAudioPlayer]; 
0

Ваш AVAudioPlayer должна быть определена как свойство в вашем ViewController, вы затем может называть его там, где вы хотите.

0

AVAudioPlayer освобождается до того, как звук завершит воспроизведение. Когда вы устанавливаете точку останова после вызова воспроизведения, аудиоплеер не освобождается, пока вы не продолжите, чтобы звук продолжал играть. Если вы сделаете аудиоплеер таким свойством, как: @property (strong, nonatomic) AVAudioPlayer *player;, он не будет освобожден до тех пор, пока ваш контроллер просмотра не будет удален.