我創建了一個音樂應用程序,當對象與網格邊緣碰撞時播放9種聲音之一。這在模擬器上絕對完美無瑕,但在第四代設備上並不完全同步,並且在iPhone 3g上完全不同步。在不同iOS設備上同步聲音的問題
由於不同步,我的意思是混響每隔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不準確的信息,不應該用於這個,但我找不到任何其他的選擇。
只是好奇,但爲什麼設置NSTimer爲0.01,然後在checkTime檢查0.2? NSTimer不是比你需要的更頻繁地發射? – onnoweb 2011-04-22 19:30:13
本來我試過它開火0.2秒,但我有同樣的問題,我讀了一些地方,我應該更頻繁地開火,並檢查是否0.2秒過去了。無論哪種方式,問題似乎都是一樣的 – treeba 2011-04-22 19:59:00