【发布时间】:2017-11-26 00:55:30
【问题描述】:
我对使用后台线程知之甚少,但这似乎以我需要的方式播放我的声音,如下所示:
1) 即使声音重叠,我也需要重复播放这种非常短的音效。 2) 我需要按时完美播放声音。 3) 我需要加载声音以不因口吃而影响屏幕上的图形。
我目前只是用一种声音尝试这种方法,但如果成功,我会将其推广到需要相同处理的其他音效。 我的问题是:我是否正确使用了后台线程?会有任何形式的内存泄漏吗?
代码如下:
-(void) playAudio {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSString *path = [NSString stringWithFormat:@"%@/metronome.mp3", [[NSBundle mainBundle] resourcePath]];
NSURL *metronomeSound = [NSURL fileURLWithPath:path];
_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:metronomeSound error:nil];
[_audioPlayer prepareToPlay];
[_audioPlayer play];
});
}
//handles collision detection
-(void) didBeginContact:(SKPhysicsContact *)contact {
uint32_t categoryA = contact.bodyA.categoryBitMask;
uint32_t categoryB = contact.bodyB.categoryBitMask;
if (categoryA == kLineCategory || categoryB == kLineCategory) {
NSLog(@"line contact");
[self playAudio];
}
}
【问题讨论】:
-
您找到解决此问题的方法了吗?我在我的应用中遇到了完全相同的情况。
标签: objective-c multithreading macos audio sprite-kit