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

Posted

技术标签:

【中文标题】在 AudioQueue 录制时播放警报声音(振动)【英文标题】:Play Alert Sound (Vibrate) While AudioQueue is Recording 【发布时间】:2009-07-25 23:43:30 【问题描述】:

好像不能播放提示音

AudioservicesPlayAlertSound(kSystemSoundID_Vibrate);

在使用 AudioQueue 录制音频时。那是对的吗?也许我做错了什么。除了暂停录制,还有其他方法吗?

TIA。

【问题讨论】:

我很好奇振动是否会在录音中显示为声音。 【参考方案1】:

通过阅读 Apple 的开发者论坛,一些开发者声称这是一个已提交的错误。如果您将会话类型设置为 kAudioSessionCategory_PlayAndRecord 它应该可以工作.. 但没有。

【讨论】:

如果您引用您所指的论坛帖子,我会将这个奖励给您。【参考方案2】:

我尝试了 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】:

试试这个:

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 操作系统中的新调用。这些使我能够在录制过程中播放声音和振动。

【讨论】:

【参考方案4】:

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

【讨论】:

好的。所以我在AudioQueue初始化代码中添加了这个: UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory);但我仍然有同样的问题,例如playalertsound 不会导致设备在录制时振动。还有其他想法吗?谢谢。 我只需要振动。不是声音【参考方案5】:

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

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

【讨论】:

以上是关于在 AudioQueue 录制时播放警报声音(振动)的主要内容,如果未能解决你的问题,请参考以下文章

如何防止iphone麦克风录制播放的声音?

在 iPhone 上使用 AudioQueue 录制/播放

在 iPhone 关闭时继续发出本地通知的声音/振动警报,就像在时钟应用程序中所做的那样

在 iPhone 上振动时播放自定义声音

iPhone 推送通知声音的限制?

在 UILocalNotification 中播放录制的音频