2009-07-25 78 views
2

看來,這是不可能的發揮警報聲播放警報聲音(振動)雖然AudioQueue被記錄

AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

而AudioQueue正用於錄製音頻。那是對的嗎?也許我做錯了什麼。有沒有辦法做到這一點,而不是暫停錄音?

TIA。

+0

我很好奇振動是否會在錄音中顯示爲聲音。 – 2009-08-14 18:49:42

回答

4

從閱讀蘋果的開發者論壇,幾位開發者聲稱這是一個已經提交的bug。如果你將會話類型設置爲kAudioSessionCategory_PlayAndRecord,它應該可以工作,但不會。

+0

如果您要引用您指的論壇帖子,我會將此獎勵給您。 – 2009-08-15 03:55:50

+0

具體的帖子是: https://devforums.apple.com/message/79080 – justinb 2009-09-04 08:11:16

0

只是一個瘋狂的猜測,但你的音頻會話設置爲kAudioSessionCategory_PlayAndRecord

+0

好的。所以我將此添加到AudioQueue初始化代碼中: UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(audioCategory),&audioCategory); 但我仍然有同樣的問題,例如playalertsound不會導致設備在錄製時震動。任何其他想法? 謝謝。 – 2009-07-27 15:04:03

1

試試這個:

UInt32 category = kAudioSessionCategory_PlayAndRecord; 
status |= AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category); 
UInt32 allowMixing = true; 
status |= AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, // 1 
            sizeof(allowMixing),         // 2 
            &allowMixing);           // 3 
status |= AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, // 1 
            sizeof(allowMixing),         // 2 
            &allowMixing);          // 3 

最後兩個AudioSessionSetProperty電話是在3.0 OS新。這些使我能夠在錄製過程中播放聲音以及震動。

1

我試過什麼sehugg建議,但沒有運氣?你像這樣活躍嗎?

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; 
UInt32 doSetProperty = 1; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty); 
AudioSessionSetProperty (kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(doSetProperty), &doSetProperty); 
[[AVAudioSession sharedInstance] setActive: YES error: nil]; 
0

聲音非常安靜,因爲當您激活VAudioSessionCategoryPlayAndRecord時,SDK通過聽筒揚聲器發出聲音。這大概是爲了防止錄音中的反饋。在PlayAndRecord模式下,您必須手動覆蓋音頻路線才能將輸出再次發送到揚聲器。就像這樣:

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, 
            sizeof(UInt32), &audioRouteOverride);