Question

I wanna show the amplitude of real time sound on a UIView by graph.

I set sound sample rate as 1000 in a second.

And, To Update Graph, I did like this. this is called in every millisecond.

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

and inside of updateGraph is like this.

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

But it draws graph angularly.

http://achievstar.tistory.com/234 (I'm new in this site so i couldn't upload pictures)

(I guess) it is because of the "waitUntilDone:NO".

iphone 4S and also iPad2 couldn't catch up the rate of 1000.

I also tried "YES" for "waitUntilDone". It draws rightly,

http://achievstar.tistory.com/234 (see the below figure)

but also, the devices couldn't catch up with the rate of 1000,

so in this way, graphing speed was slow.

is there a way to fix the graph better?

I'm really stock here that i couldn't even find good solution any more.

Was it helpful?

Solution 2

I Just Got a Answer on my own!

I was getting sound input in every millisecond,

and within' it I also updated graph in every millisecond too.

that means I updated every fixel of 480 in a millisecond.

I thought i should update graph immediately when i get sound input,

to show graph smoothly.

But I was wrong. That was not necessary to update every fixel.

Because It really takes a lot of process.

So I changed the code to update UI not in every millisecond. and it works really well.

OTHER TIPS

performSelectorOnMainThread function is mainly used when you are on the background thread and you want to get back on the main thread or you want to perform a function on main thread.

if you are not using any thread or background thread then there is no need to use the performSelectorOnMainThread function. you can directly call that function.

try calling the updateGraph by using simple self.

i.e [self updateGraph]; and then see the result..

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top