2012-01-03 39 views
0

我想通過圖形顯示UIView上實時聲音的振幅。每毫秒使用performSelectorOnMainThread的問題

我將聲音採樣率設置爲1000秒。

而且,爲了更新圖表,我確實喜歡這樣。這在每毫秒中被調用。

[Audio performSelectorOnMainThread:@selector(updateGraph) withObject:nil waitUntilDone:NO]; 

和updateGraph裏面是這樣的。

- (void) updateGraph{ 
    [graphview setNeedsDisplay]; 
} 

但它繪製角度圖。

http://achievstar.tistory.com/234 (我在這個網站新的,所以我不能上傳圖片)

(我猜),這是因爲的「waitUntilDone:NO」。

iphone 4S和iPad2的也無法趕上1000

我也試過「YES」爲「waitUntilDone」的速度。它汲取正確,​​

http://achievstar.tistory.com/234 (參見下圖)

而且,這些設備不能與1000的速度追趕,

所以以這種方式,繪圖速度是緩慢的。

有沒有辦法更好地修復圖形?

我真的在這裏存貨,我甚至無法找到更好的解決方案。

回答

0

我剛剛得到了一個答案我自己!

我越來越聲音輸入每毫秒,

,並在它我也更新每毫秒圖了。

這意味着我在一毫秒內更新了480的每個固定點。

我想我應該立即更新圖時,我得到聲音輸入,

順利顯示圖形。

但我錯了。這是沒有必要更新每一個fixel。

因爲它確實需要很多過程。

所以我改變了代碼來更新UI而不是每毫秒。它運作得非常好。

+0

和更好的答案我認爲,只使用OpenGL而沒有像'performSelectorOnMainThread'這樣的其他類。 – 2012-01-05 07:51:23

0

performSelectorOnMainThread函數主要用於當你在後臺線程上,並且你想要回到主線程或者你想在主線程上執行一個函數。

如果您不使用任何線程或後臺線程,則不需要使用performSelectorOnMainThread函數。你可以直接調用該函數。

嘗試使用簡單的自我調用updateGraph

即[self updateGraph];然後看到結果..

+0

其實performSelectorOnMainThread的代碼是在後臺線程,所以我使用的performSelectorOnMainThread更新UI – 2012-01-03 13:47:51

+0

功能,其中performSelectorOnMainThread是,是「靜態OSStatus playbackCallback」功能(使用「RemoteIO」/AudioUnits框架) – 2012-01-03 13:57:09