【发布时间】:2009-07-25 23:43:30
【问题描述】:
好像不能播放提示音
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
在使用 AudioQueue 录制音频时。那是对的吗?也许我做错了什么。除了暂停录制,还有其他方法吗?
TIA。
【问题讨论】:
-
我很好奇振动是否会在录音中显示为声音。
标签: iphone objective-c cocoa-touch audio
好像不能播放提示音
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
在使用 AudioQueue 录制音频时。那是对的吗?也许我做错了什么。除了暂停录制,还有其他方法吗?
TIA。
【问题讨论】:
标签: iphone objective-c cocoa-touch audio
通过阅读 Apple 的开发者论坛,一些开发者声称这是一个已提交的错误。如果您将会话类型设置为 kAudioSessionCategory_PlayAndRecord 它应该可以工作.. 但没有。
【讨论】:
我尝试了 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];
【讨论】:
试试这个:
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 操作系统中的新调用。这些使我能够在录制过程中播放声音和振动。
【讨论】:
只是一个疯狂的猜测,但您的音频会话是否设置为 kAudioSessionCategory_PlayAndRecord?
【讨论】:
声音真的很安静,因为当您激活 VAudioSessionCategoryPlayAndRecord 时,SDK 会通过听筒扬声器传送声音。这大概是为了防止录音中的反馈。在 PlayAndRecord 模式下,您必须手动覆盖音频路由才能再次将输出发送到扬声器。像这样的:
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,
sizeof(UInt32), &audioRouteOverride);
【讨论】: