gpt4 book ai didi

iphone - 在不同的iOS设备上同步声音的问题

转载 作者:行者123 更新时间:2023-12-03 02:25:33 25 4
gpt4 key购买 nike

我创建了一个音乐应用程序,当对象与网格边缘碰撞时可以播放9种声音之一。这在模拟器上可以绝对完美地工作,但在第四代设备上无法完全同步,并且在iPhone 3g上完全不同步。

所谓不同步,是指混响每隔0.2秒发生一次,以匹配网格移动的速度,并且由于混响不在设备上同时出现,因此声音听起来不正确。另外,从查看iPhone 3g可以看出,网格绝对不会每0.2秒重绘一次-速度要慢得多。

这是基本代码:

- (void)startTime {
[musicTimer setFireDate:[NSDate distantFuture]];
musicTimer = [NSTimer scheduledTimerWithTimeInterval: 0.01
target: self
selector: @selector(checkTime)
userInfo: nil
repeats: YES];
}

- (void)checkTime {
float timeSince = [[NSDate date] timeIntervalSinceDate:lastPlayed];
if(timeSince >= 0.2){
[self repositionBlocks];
}
}

- (void)repositionBlocks {
//Check which sounds need to play and call the play function on each of them
//The following line would play the sound if a collision occurred

Sound *sound = [[Sound alloc] init];
[sound play:@"01.wav"];
[sound release];

[self redrawGrid]; //Redraws the grid with the new positions
[lastPlayed release];
lastPlayed = [[NSDate date] retain];
}

这是我的Sound类中的播放功能
- (void)play:(NSString *)soundFile {
NSString *path;
NSString *fileName = [NSString stringWithFormat:@"/%@", soundFile];
path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], fileName];
SystemSoundID soundID;
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
AudioServicesPlaySystemSound(soundID);
[filePath release];
}

如果有人能在这个问题上提供任何帮助,我将非常感谢

谢谢

编辑:我已经做了一些测试,并将其缩小为NSTimer的问题,在模拟器上,它每0.2秒触发一次,但在设备上,它每0.4秒至0.6秒触发一次。我已经在互联网上进行搜索,关于NSTimers的准确性和准确性的信息很多,因此不应该用于此目的,但是我找不到任何替代方法。

最佳答案

使用CADisplayLink设置帧率;它比使用NSTimer更准确。

您也可以尝试使用AVAudioPlayer缓存声音-在加载应用程序或屏幕时,对每个缓存的声音调用prepareToPlay,然后稍后再调用播放时,它应该立即播放而没有延迟。 AVAudioPlayer处理缓存声音或从存储中流式传输声音等。

关于iphone - 在不同的iOS设备上同步声音的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5754820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com