首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone允许其他应用程序在录制音频时播放音频/ Shazam

iPhone允许其他应用程序在录制音频时播放音频/ Shazam
EN

Stack Overflow用户
提问于 2012-05-12 00:15:18
回答 1查看 16K关注 0票数 4

希望做一些Shazam正在做的事情,即在另一个应用程序播放音频的同时录制音频。

1)录音很好,这里没问题

2)当应用程序启动并开始录制时,来自另一个应用程序的音乐会停止(itunes等)。

3)我已经使用了AV音频设置的所有咒语,但没有幸运地让音频继续/恢复。

4)当Shazam启动时,音频会暂停一段时间,然后恢复播放。我假设Shazam正在做一些事情来重新启动音乐播放器的音频?我搜索了一下,找不到有没有办法这样做。

因此,如果任何人有适当的设置来使其工作,将不胜感激。

此外,说,请阅读AV文档,不是一个答案,我已经看过这些没有运气。

我试过在这里找到

http://developer.apple.com/library/ios/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategories/AudioSessionCategories.html

我已经尝试过AV和K类型的设置。就麦克风的工作方式而言,我确实看到了设置的不同,但在所有情况下,当我的应用程序获得麦克风时,它都会停止来自其他应用程序的音频。

如果我必须牺牲一只站在苹果方向的鸡,这很好,只要让我知道是哪种鸡就行了:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-05 03:12:44

经过一番反复,看起来使用MixWithOthers才是关键。您还必须确保将音频路由设置为上一条/当前音频路由...

仅供参考这是AudioQueue接口

所以我们..。

/用iPod启动音乐/启动我们的应用程序

  • AudioQueueNewInput
  • AudioQueueAddPropertyListener
  • AudioQueueAllocateBuffer(s)
  • AudioQueueEnqueueBuffer(s)
  • setupCat
  • setupDuck
  • setupAudioRoute
  • setupMixing
  • AudioSessionSetActive (true)
  • AudioQueueStart

代码语言:javascript
复制
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);
}

代码语言:javascript
复制
/// 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
        {}
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10555038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档