iPhone应用程序拾取声音

时间:2011-03-25 18:26:24

标签: iphone objective-c ios4 iphone-sdk-3.0

我正在尝试根据用户是否发出响亮的声音来执行某项操作。我不是想做任何语音识别或任何事情。只需根据iPhone是否发出响亮的声音来做一个动作。

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

2 个答案:

答案 0 :(得分:7)

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

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

    Status = AudioQueueNewInput(&_Description,
                                Audio_Input_Buffer_Ready,
                                self,
                                NULL,
                                NULL,
                                0,
                                &self->Queue);

完成后,您可以使用以下内容启用声级计量:

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

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

//
//  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];
}

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

答案 1 :(得分:1)

Apple有一些例子Speak Here,它们看起来有与分贝相关的代码。我会检查一些仪表类的例子。我没有音频编程经验,但希望这会让你开始,而有人为你提供更好的答案。