gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:07:17 27 4
gpt4 key购买 nike

希望实现 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 类型的设置。就麦克风的工作原理而言,我确实看到了设置的差异,但在所有情况下,当我的应用程序获取麦克风时,它都会停止来自其他应用程序的音频。

如果我必须牺牲一只站在苹果方向的鸡,这很好,只要让我知道什么类型的鸡:-)

最佳答案

经过一番反复思考,看来使用 MixWithOthers 是关键。您还必须确保音频路由设置为最后/当前音频路由...

仅供引用,这是 AudioQueue 接口(interface)

所以我们...

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

  • AudioQueueNewInput
  • AudioQueueAddPropertyListener
  • AudioQueueAllocateBuffer
  • AudioQueueEnqueueBuffer
  • 安装猫
  • 设置鸭
  • 设置音频路由
  • 设置混合
  • AudioSessionSetActive(真)
  • 音频队列开始
<小时/>
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 允许其他应用程序在录制音频/Shazam 时播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555038/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com