2011-11-28 55 views
-1

我有一個計時器來計算我的音頻時間。浮點比較和顯示消息

- (void)updateTime:(NSTimer *)timer 
{ 

    currentLocation = audio.currentTime; 
    [lblCurrentLocation setText:[NSString stringWithFormat:@"%.4f Sec",currentLocation]]; 

    if (currentLocation == 4.7404) 
    { 
     [lblMsg setText:@"Sound p 1"]; 
    } 

} 

這IF與4.7404比較CurrentLocation不工作: 當你得到一個時間我會在屏幕上放置一個標籤文本。有人有什麼主意嗎?

謝謝

+0

也許currentTime的是4.7404000000000001而不是4.7404 ... – Macmade

+2

嚴重的是,你有一個計時器,所以它的設置爲以一個(不準確)的時間間隔刷新......你如何期望獲得一個精確的時刻爲4.7404?!? – Macmade

+0

我需要在我的聲音中顯示4.7404秒的精確時間,並在標籤中顯示消息。我怎樣才能做到這一點? – user722056

回答

1

在4.7404秒後,您無法可靠地讓計時器撥打updateTime:方法。 iPhone不保證定時器具有任何特定級別的準確性。

此外,iOS需要時間將您的「聲音p 1」字符串轉換爲位圖並將其放入幀緩衝區。所以,即使你剛好在4.7404秒鐘被調用,它也會在更新幀緩衝區之前。

此外,iPhone的LCD顯示屏的響應時間非零。所以在iOS更新framebuffer之後,屏幕上的像素需要花費一些時間來改變。

此外,人類無法檢測到.0001第二級準確度的變化。因此,即使像素完全在4.7404秒完全變化,用戶也不能說它在4.739秒或4.741秒沒有發生。

所以你要求的是愚蠢的。

你應該只盡快之後至少4.7404秒已經過去了顯示您的留言:

- (void)updateTime:(NSTimer *)timer 
{ 
    // Give your object a BOOL didSeeImportantTime property. 
    if (!self.didSeeImportantTime) { 
     currentLocation = audio.currentTime; 
     if (currentLocation < 4.7404) { 
      [lblCurrentLocation setText:[NSString stringWithFormat:@"%.4f Sec",currentLocation]]; 
     } else { 
      self.didSeeImportantTime = YES; 
      [lblMsg setText:@"Sound p 1"]; 
     } 
    } 
} 
0

您應該比較不同的浮點數。這裏是a post on how to do it in C++。您可以在Objective C中使用它。

此外,使用計時器嘗試從音頻文件中獲取如此精確的點並不十分準確。