我有一个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 :(得分: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];
答案 1 :(得分:0)
这可以通过在viewWillAppear中调用play来实现:
questions
答案 2 :(得分:0)
您的AVAudioPlayer需要在ViewController中定义为属性,然后您可以从您想要的地方调用它。
答案 3 :(得分:0)
AVAudioPlayer在声音播放完毕之前被解除分配。在调用播放后设置断点时,音频播放器不会被释放,直到您继续播放声音为止。如果您将音频播放器设置为@property (strong, nonatomic) AVAudioPlayer *player;
之类的属性,则在取消视图控制器之前,它将无法取消分配。