在另一个应用播放音频的同时,Shazam正在做的事情就像录制音频一样。
1)录制音频很好,这里没问题
2)当应用程序启动并开始录制时,来自其他应用程序的音乐会停止(itunes等)。
3)我已经播放了所有AV音频设置的咒语,但没有运气继续/恢复音频。
4)当Shazam启动时,音频会停止一段时间,然后重新开始。我认为Shazam正在做一些事情来重启音乐播放器的音频?我搜索过,无法找到是否有办法做到这一点。
因此,如果有人有适当的设置来实现这一点,我们将不胜感激。
另外,Saying,请阅读AV文档,不是答案,我看过这些没有运气。
我试过这里找到了
尝试了AV和K类型的设置。我确实看到MIC的工作方式有所不同,但在所有情况下,当我的应用程序获得麦克风时,它会停止来自其他应用程序的音频。
如果我不得不牺牲一只鸡站在苹果的方向,这很好,请告诉我什么类型的鸡肉: - )
答案 0 :(得分:1)
经过一番来回,看起来使用MixWithOthers是关键。您还必须确保音频路由设置为最后/当前音频路由...
FYI这是使用AudioQueue界面
所以我们......
/用iPod启动音乐 /使用
启动我们的应用程序typedef union
{
OSStatus propertyResult;
char a[4];
} unionstatus;
unionstatus u2;
typedef union
{
UInt32 UI32sessionCat;
char a[4];
} unionuint32;
unionuint32 usc2;
bool setAudioUInt32 ( UInt32 property, UInt32 value )
{
bool result = true;
UInt32 UI32 = value;
UInt32 UI32size = sizeof(UI32);
u2.propertyResult = AudioSessionSetProperty (property, UI32size , &UI32 );
if ( u2.propertyResult )
{
printf("Error Set %ld %lx %c%c%c%c\n",u2.propertyResult,u2.propertyResult,u2.a[3],u2.a[2],u2.a[1],u2.a[0]);
result = false;
}
return result;
}
UInt32 getAudioSettingInt ( UInt32 value )
{
UInt32 I32;
UInt32 I32size = sizeof(I32);
u2.propertyResult = AudioSessionGetProperty ( value , &I32size, &I32 );
if ( u2.propertyResult )
printf("Error Get %ld %lx %c%c%c%c\n",u2.propertyResult,u2.propertyResult,u2.a[3],u2.a[2],u2.a[1],u2.a[0]);
return (I32);
}
/// checking taken out
bool otherPlaying = getAudioSettingInt ( kAudioSessionProperty_OtherAudioIsPlaying );
if ( otherPlaying )
{
setAudioUInt32 (kAudioSessionProperty_OtherMixableAudioShouldDuck, false);
// this returns a string, arg, have to look for string values, etc.
UInt32 audioRoute = getAudioSettingInt ( kAudioSessionProperty_AudioRoute );
CFStringRef ar = (CFStringRef) audioRoute;
CFStringEncoding encodingMethod = CFStringGetSystemEncoding();
const char *car = CFStringGetCStringPtr(ar,encodingMethod);
CFRange range = CFStringFind(ar,CFSTR("Headphones"),kCFCompareCaseInsensitive);
if ( range.length == 0 ) // we have speakers
result = setAudioUInt32 (kAudioSessionProperty_OverrideAudioRoute, kAudioSessionOverrideAudioRoute_Speaker);
else // we have headphones
{}
}