iPhone 4,录音后的音频电平问题
Posted
技术标签:
【中文标题】iPhone 4,录音后的音频电平问题【英文标题】:iPhone 4, audio level issue after recording 【发布时间】:2013-09-07 07:13:14 【问题描述】:我正在开发一个需要录制和播放音频的 ios 应用程序。我注意到在 iPhone 4 上录制后音频电平要低得多。 当我使用我在这里找到的代码时,这个问题得到了修复:iOS - iPhone sound level low after recording sound using AVFoundation
if(!IS_IPHONE_5)
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
这很好用,但这会导致问题,如果用户将他的手机静音,仍然会播放音频(以及应用程序中的其他声音)
是否可以通过某种方式检测音频是否静音?如果是这样,那我们就不要执行上面的代码了。
【问题讨论】:
【参考方案1】:也许你可以这样检查
CFStringRef state = nil;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
if (status == kAudioSessionNoError)
return (CFStringGetLength(state) == 0); // YES = silent
return NO;
修改后的方法是
-(BOOL)silenced
#if TARGET_IPHONE_SIMULATOR
// return NO in simulator. Code causes crashes for some reason.
return NO;
#endif
CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
if(CFStringGetLength(state) > 0)
return NO;
else
return YES;
【讨论】:
谢谢。我现在唯一的问题是,如果用户播放音频(收音机或 iTunes),然后他打开应用程序,那么音频就会停止。 @WouterDeRuyck:- 这是因为这是系统功能,所以音频控制器在启动时会滚动到它们。以上是关于iPhone 4,录音后的音频电平问题的主要内容,如果未能解决你的问题,请参考以下文章
iphone avTouch 示例代码 - 模拟器不显示音频电平表