当AudioQueue正在录制时播放警报声音(振动)

时间:2009-07-25 23:43:30

标签: iphone objective-c cocoa-touch audio

似乎无法发出警报声

AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

当AudioQueue用于录制音频时。那是对的吗?也许我做错了什么。除了暂停录音之外,有没有办法做到这一点?

TIA。

5 个答案:

答案 0 :(得分:5)

从阅读Apple的开发者论坛,一对开发者声称这是一个已经提交的错误。如果你将会话类型设置为kAudioSessionCategory_PlayAndRecord它应该工作..但不是。

答案 1 :(得分: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中的新调用。这使我能够在录音期间播放声音和振动。

答案 2 :(得分: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];

答案 3 :(得分:0)

只是一个疯狂的猜测,但你的音频会话是否设置为kAudioSessionCategory_PlayAndRecord

答案 4 :(得分:0)

声音非常安静,因为当您激活VAudioSessionCategoryPlayAndRecord时,SDK会通过听筒扬声器传送声音。这可能是为了防止录音中的反馈。在PlayAndRecord模式下,您必须手动覆盖音频路径,以便再次将输出发送到扬声器。像这样:

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