我正在尝试根据用户是否发出响亮的声音来执行某项操作。我不是想做任何语音识别或任何事情。只需根据iPhone是否发出响亮的声音来做一个动作。
任何建议,教程,我在苹果开发者网站上找不到任何东西。我假设我不正确或正确搜索。
答案 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,它们看起来有与分贝相关的代码。我会检查一些仪表类的例子。我没有音频编程经验,但希望这会让你开始,而有人为你提供更好的答案。