iPhone应用程序拾取声音

Vik*_*ngs 2 iphone objective-c iphone-sdk-3.0 ios4

我试图根据用户是否发出响亮的声音来做某个动作.我不是想做任何语音识别或任何事情.只需根据iPhone是否发出响亮的声音来做一个动作.

任何建议,教程,我在苹果开发者网站上找不到任何东西.我假设我不正确或正确搜索.

Vag*_*ant 7

最简单的方法是使用AudioQueue服务.这是手册: Apple AQ手册

基本上,查找使用AudioQueueNewInput()初始化事物的任何示例代码.像这样的东西:

    Status = AudioQueueNewInput(&_Description,
                                Audio_Input_Buffer_Ready,
                                self,
                                NULL,
                                NULL,
                                0,
                                &self->Queue);
Run Code Online (Sandbox Code Playgroud)

完成后,您可以启用声级计量,如下所示:

// Turn on level metering (iOS 2.0 and later)
UInt32 on = 1;
AudioQueueSetProperty(self->Queue,kAudioQueueProperty_EnableLevelMetering,&on,sizeof(on));
Run Code Online (Sandbox Code Playgroud)

您将拥有一个为每个音频数据块调用的回调例程.在其中,您可以使用以下内容检查当前的仪表级别:

//
//  Check metering levels and detect silence
//
AudioQueueLevelMeterState meters[1];
UInt32 dlen = sizeof(meters);
Status = AudioQueueGetProperty(_Queue,kAudioQueueProperty_CurrentLevelMeterDB,meters,&dlen);
if (Status == 0) {
    if (meters[0].mPeakPower > _threshold) {
        silence = 0.0;     // reset silence timer
    } else {
        silence += time;                
    }
}

//
//  Notify observers of incoming data.
//
if (delegate) {
    [delegate audioMeter:meters[0].mPeakPower duration:time];
    [delegate audioData:Buffer->mAudioData size:Buffer->mAudioDataByteSize];
}
Run Code Online (Sandbox Code Playgroud)

或者,在您的情况下,您可以检测分贝水平是否超过某个值足够长的时间而不是沉默.请注意,您将看到的分贝值范围从大约-70.0(对于死静音)到高达0.0db(非常响亮的事物).在指数范围内.您必须使用它来查看哪些值适用于您的特定应用程序.