展望几乎做什么Shazam的是尽可能做的记录音频,而另一个应用播放音频。
1)录制音频精细,在这里没问题
2)当应用程序启动并开始记录,从另一个应用音乐停止(iTunes的,等等)。
3)我曾经在具有音频与所有的,没有运气的AV音频设置咒语的发挥继续/恢复。
4)当启动沙札姆,音频停止比特,然后重新开始。 我认为Shazam的是做一些重新启动与音乐播放机的音频? 我搜索,但没有找到,如果有一种方法可以做到这一点。
因此,如果任何人有正确的设置得到这个工作,我们将不胜感激。
此外,他说,请阅读AV文档,是不是一个答案,我已经看过这些了,没有运气。
我试图在这里找到
http://developer.apple.com/library/ios/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategories/AudioSessionCategories.html
已经试用过AV和K型的设置。 我看到尽可能的MIC究竟是如何工作的,在设置有差别,但在当我的应用程序得到麦克风所有情况下,停止从其他应用程序的音频。
如果我不得不牺牲在苹果的方向鸡站立,这是好的,只是让我知道什么类型的鸡:-)
一些来回之后,它看起来像使用MixWithOthers是关键。 你也必须确保音频路由设置为最后/当前音频路由...
FYI这与AudioQueue接口
因此,我们...
/启动音乐带iPod /启动我们的应用程序与
- AudioQueueNewInput
- AudioQueueAddPropertyListener
- AudioQueueAllocateBuffer(S)
- 音频队列队列缓冲液(S)
- setupCat
- 建立鸭
- 设置音频路径
- setupMixing
- AudioSessionSetActive(真)
- AudioQueue启动
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
{}
}