2012-01-03 3 views
0

그래프로 실시간 사운드의 진폭을 UIView에 표시하고 싶습니다.매 밀리 초마다 performSelectorOnMainThread를 사용할 때의 문제점

1 초에 소리 샘플 속도를 1000으로 설정했습니다.

그래프를 업데이트하려면이 방법을 사용했습니다. 이것은 매 밀리 초마다 호출됩니다.

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

이고 updateGraph 내부는 다음과 같습니다.

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

그러나 그래프를 각도로 그립니다. "NO waitUntilDone"

은 (내 생각) 그것 때문에이다

http://achievstar.tistory.com/234 은 (내가 사진을 업로드 할 수 있도록이 사이트의 새로운 해요).

아이폰 4S도 아이 패드 2는 나는 또한 "YES" "waitUntilDone"를 시도 1000

의 속도를 따라 잡을 수 없었다. 그것은

http://achievstar.tistory.com/234

그래서 이런 식으로, 그래프 속도가 느렸다

뿐만 아니라, 장치 1000의 속도로 따라 잡을 수없는을 (아래 그림 참조), 바르게립니다.

그래프를 더 잘 고칠 수있는 방법이 있습니까?

나는 이제 더 이상 좋은 해결책을 찾을 수 없다는 사실을 알고 있습니다.

답변

0

나는 스스로 답변을 얻었다.

나는 모든 밀리 초에

을 사운드 입력을 얻고 있었다와 '내에서 나 또한 너무 밀리 초마다의 그래프를 업데이트했습니다.

즉, 480 픽셀의 모든 fixel을 밀리 초 단위로 업데이트했습니다.

나는

이 원활 그래프를 보여, 나는 사운드 입력을받을 때 즉시 그래프를 업데이트해야합니다 생각했다.

하지만 잘못되었습니다. 모든 fixel을 업데이트 할 필요는 없습니다.

정말 많은 과정이 필요합니다.

그래서 코드를 매 밀리 초가 아닌 UI로 업데이트하도록 변경했습니다. 그리고 그것은 정말로 잘 작동합니다.

+0

나은 답변 나는 'performSelectorOnMainThread'와 같은 다른 클래스없이 OpenGL 만 사용한다고 생각합니다. –

0

performSelectorOnMainThread 기능은 주로 백그라운드 스레드에 있고 메인 스레드로 돌아가거나 메인 스레드에서 기능을 수행하려는 경우에 사용됩니다.

스레드 또는 백그라운드 스레드를 사용하지 않는 경우 performSelectorOnMainThread 기능을 사용할 필요가 없습니다. 그 기능을 직접 호출 할 수 있습니다.

간단한 자기를 사용하여 updateGraph으로 전화 해보세요.

즉 [self updateGraph]; 결과를 확인하십시오.

+0

사실 performSelectorOnMainThread의 코드 나 UI –

+0

performSelectorOnMainThread 됨되는 기능을 갱신하기 performSelectorOnMainThread을 사용하므로, 배경 스레드이다 '정적 OSStatus playbackCallback'기능 ("RemoteIO"/ 오디오 유닛 프레임 워크를 사용하여) –

관련 문제