我正在尝试使用Novocaine播放一些高性能的音频,但我找到的示例代码只在耳机中播放音频,但我希望它在扬声器上播放。这有可能吗?
谢谢
发布于 2012-12-10 13:07:38
几乎也有同样的问题。快速和肮脏的修复,添加以下内容:
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);到您的Novocaine.m中-( iOS )setupAudio中的void部分的末尾
请注意,即使插入耳机,这也会通过扬声器播放音频!
在我看来,路由更改还没有实现,因为-(空)selectAudioDevice是空的。
发布于 2012-12-28 09:32:43
我已经实现了这样的路由更改,它似乎起作用了。只需用下面的代码替换sessionPropertyListener并添加updateAudioRoute即可。
void sessionPropertyListener(void * inClientData,
AudioSessionPropertyID inID,
UInt32 inDataSize,
const void * inData){
if (inID == kAudioSessionProperty_AudioRouteChange)
{
Novocaine *sm = (Novocaine *)inClientData;
[sm checkSessionProperties];
[sm updateAudioRoute];
}
}
//Quick and dirty way to override the audioRoute whenever the audioRoute is changed.
- (void)updateAudioRoute {
CFStringRef newRoute;
UInt32 size = sizeof(CFStringRef);
CheckError(AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &newRoute),
"couldn't get new audio route");
if (newRoute)
{
CFShow(newRoute);
if (CFStringCompare(newRoute, CFSTR("ReceiverAndMicrophone"), (UInt32)NULL)== kCFCompareEqualTo)
{
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
}
else if (CFStringCompare(newRoute, CFSTR("HeadsetInOut"), (UInt32)NULL) == kCFCompareEqualTo)
{
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
}
}
}https://stackoverflow.com/questions/13785215
复制相似问题