2011-03-25 145 views
2

我試圖根據用戶是否發出響亮的聲音來執行某個操作。我不想做任何語音識別或任何事情。只需簡單地根據iPhone是否拾取響亮的聲音來執行操作即可。iPhone應用拾取聲音

任何建議,教程,我找不到蘋果開發者網站上的任何東西。我假設我不在尋找或搜索的權利。

回答

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。在指數級上。你必須使用它來看看你的特定應用程序有什麼價值。

+0

謝謝,這會幫助我很多。 – Vikings 2011-03-26 04:05:25

1

蘋果有一些例子,如Speak Here它看起來有分貝的代碼。我會檢查一些米類的例子。我沒有音頻編程的經驗,但希望這會讓你開始,而有人爲你提供更好的答案。

+0

Hi @Joe。我可以在我的項目中使用Speak Here嗎? – 2015-06-03 12:43:50