iPhone允许其他应用程序来播放音频在录制音频/快变(iPhone Allow Other App

2019-09-17 03:55发布

展望几乎做什么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究竟是如何工作的,在设置有差别,但在当我的应用程序得到麦克风所有情况下,停止从其他应用程序的音频。

如果我不得不牺牲在苹果的方向鸡站立,这是好的,只是让我知道什么类型的鸡:-)

Answer 1:

一些来回之后,它看起来像使用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
        {}
}


文章来源: iPhone Allow Other App to Play Audio While Recording Audio / Shazam