2009-07-25 72 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);