AVAudioPlayer 不播放长音?
AVAudioPlayer not playing long sounds?
我有一系列从0.3s到3.0s的声音文件。
当尝试使用 AVAudioPlayer 播放时,我什么也没得到,除非我在之后添加一个 sleep(4)
调用以确保声音可以播放。真奇怪。
除此之外,传入的错误参数和每次 [player play]
returns YES
都没有错误。但是,奇怪的是,委托方法没有被调用。
这是我的代码。
(.m 文件)
@interface MyClass ()
@property (nonatomic, strong) AVAudioPlayer *soundPlayer;
@end
@implementation SLInspireKit
//view did load here
- (void)playRandomSound {
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
NSError *error;
NSString *musicFileName = [NSString stringWithFormat:@"my-sound-%d.aiff", arc4random_uniform(8)];
NSString *path = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], musicFileName];
NSURL *soundUrl = [NSURL fileURLWithPath:path];
self.soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:&error];
self.soundPlayer.delegate = self;
[self.soundPlayer setVolume:1.0];
[self.soundPlayer prepareToPlay];
if ([self.soundPlayer play]){
NSLog(@"Played fine");
} else {
NSLog(@"Did not play fine");
}
sleep(1); //uncomment this out, and nothing. Set to 1, first second of each sound, 2, 2 seconds and so on.
}
有什么想法吗?我不认为这是 ARC 的事情,但它可能是:/我每次都必须启动,因为声音每次都在变化。
评论的快速总结:
结果是需要 sleep(n) 因为包含 AVAudioPlayer 的整个 class 被释放了。
保留 class 可以解决问题。
干杯!
我有一系列从0.3s到3.0s的声音文件。
当尝试使用 AVAudioPlayer 播放时,我什么也没得到,除非我在之后添加一个 sleep(4)
调用以确保声音可以播放。真奇怪。
除此之外,传入的错误参数和每次 [player play]
returns YES
都没有错误。但是,奇怪的是,委托方法没有被调用。
这是我的代码。
(.m 文件)
@interface MyClass ()
@property (nonatomic, strong) AVAudioPlayer *soundPlayer;
@end
@implementation SLInspireKit
//view did load here
- (void)playRandomSound {
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
NSError *error;
NSString *musicFileName = [NSString stringWithFormat:@"my-sound-%d.aiff", arc4random_uniform(8)];
NSString *path = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], musicFileName];
NSURL *soundUrl = [NSURL fileURLWithPath:path];
self.soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:&error];
self.soundPlayer.delegate = self;
[self.soundPlayer setVolume:1.0];
[self.soundPlayer prepareToPlay];
if ([self.soundPlayer play]){
NSLog(@"Played fine");
} else {
NSLog(@"Did not play fine");
}
sleep(1); //uncomment this out, and nothing. Set to 1, first second of each sound, 2, 2 seconds and so on.
}
有什么想法吗?我不认为这是 ARC 的事情,但它可能是:/我每次都必须启动,因为声音每次都在变化。
评论的快速总结: 结果是需要 sleep(n) 因为包含 AVAudioPlayer 的整个 class 被释放了。
保留 class 可以解决问题。
干杯!