观看功能价值

时间:2009-03-11 05:28:13

标签: iphone objective-c cocoa-touch

我正在尝试制作一个有两个按钮的简单iphone应用程序:Start和Stop。当您点击开始时,它会开始聆听手机的麦克风音量,并使标签显示您在麦克风中说话的声音。当你点击停止时,它就会停止聆听。

我找到了一个名为SCListener的优秀课程,但我不确定如何实现它。现在我有一个连接到以下代码的按钮

-(IBAction)getVolume
{
    SCListener *listener = [SCListener sharedListener];
    [listener listen];
    Float32 peakPower = [listener peakPower];
    NSString *theString = [NSString stringWithFormat:@"Level is: %1.2f", peakPower];
    [volumeLabel setText:theString];
}

这非常有效,但只获得一次音量。我试过做类似的事情:

[listener addObserver:self 
           forKeyPath:@"peakPower"               
              options:NSKeyValueObservingOptionOld 
              context:NULL];

但是因为peakPower是一个方法而不是一个变量,所以我不能把观察者放在它上面。我如何使用像SCListener这样的类来设置一个应用程序,允许用户按下按钮并使标签不断更新?

谢谢, JP

2 个答案:

答案 0 :(得分:0)

KVO不起作用的原因与它“不是变量”的事实无关。 KVO观察,而不是变量。完全可以观察没有底层变量的属性。在这种情况下它不起作用的原因是SCListener不会发出KVO通知。

最简单的解决方案:确定您想要的分辨率,并以该速率对SCListener进行定时器轮询。

答案 1 :(得分:0)

查克说

  

最简单的解决方案:确定您想要的分辨率,并以该速率对SCListener进行定时器轮询

同意。 更复杂的solutoin:在reading Apple's docs之后使SCListener KVO兼容并将结果返回给社区。它将使您的代码更清晰,教您KVO如何工作并解决SCListener的其他人的问题。

Monitor iPhone mic iPhone Mic volume