2010-04-11 66 views
5

我发现这个tutorial,它很好,但对我不起作用!检测麦克风一击并做点什么

这里是代码:

- (void)listenForBlow:(NSTimer *)timer { 
    [recorder updateMeters]; 

    const double ALPHA = 0.05; 
    double peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0])); 
    lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults; 

    if (lowPassResults > 0.95) 
     NSLog(@"Mic blow detected"); 
//change the background color e.g ! 
} 
控制台

告诉我的NSLog reseult像这样(没有任何保龄球!):

2010-04-11 23:32:27.935 MicBlow[2358:207] Mic blow detected 
2010-04-11 23:32:27.965 MicBlow[2358:207] Mic blow detected 
2010-04-11 23:32:27.995 MicBlow[2358:207] Mic blow detected 
2010-04-11 23:32:28.026 MicBlow[2358:207] Mic blow detected 
2010-04-11 23:32:28.055 MicBlow[2358:207] Mic blow detected 
2010-04-11 23:32:28.086 MicBlow[2358:207] Mic blow detected 
2010-04-11 23:32:28.115 MicBlow[2358:207] Mic blow detected 
2010-04-11 23:32:28.145 MicBlow[2358:207] Mic blow detected 
2010-04-11 23:32:28.175 MicBlow[2358:207] Mic blow detected 
2010-04-11 23:32:28.205 MicBlow[2358:207] Mic blow detected 
2010-04-11 23:32:28.236 MicBlow[2358:207] Mic blow detected 

我改变这个值:

if (lowPassResults < 0.95) 

if (lowPassResults > 0.95) 

所以它似乎工作!但不改变任何东西,再次如果我把背景更改代码,我的代码更改背景,但没有任何保龄球! 有什么问题?

+2

“再次如果我把背景更改代码,我的代码更改背景,但没有任何保龄球”这没有任何意义。 – Timmmm 2010-04-11 20:04:09

+0

它在模拟器中工作,但不在电话工作?有没有任何设置要做? – slaveCoder 2014-01-28 08:52:02

+0

@zoul Momi任何想法 – slaveCoder 2014-01-28 09:00:07

回答

3

我也在使用它,它适用于我。您只需使用该值与lowPassResults进行比较即可。这是我的代码:

 
- (void)levelTimerCallback:(NSTimer *)timer { 
    [recorder updateMeters]; 

    const double ALPHA = 0.05; 
    double peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0])); 
    lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults; 
    //NSLog(@"%f", lowPassResults); 
    if (lowPassResults > 0.55) 
     NSLog(@"Mic blow detected"); 
} 
+0

没有它的不工作@版。请你指导我。同样的问题即将到来。不吹它改变bg颜色 – 2014-05-15 07:58:28