如何将AVAudioPlayer输出到扬声器,并验证我在iphone模拟器上是否正确?
我有一些关于通过扬声器播放音乐的问题。 我在下面的链接中找到了一个例子 但问题是如何确保我成功实现了通过“扬声器”播放音乐? 我写的代码作为链接,但它似乎没有什么不同之前和之后,我激活了 iphone模拟器上的“扬声器”(在macbook上) 更新: 下面是我激活扬声器的方式如何将AVAudioPlayer输出到扬声器,并验证我在iphone模拟器上是否正确?,iphone,ios-simulator,avaudioplayer,speaker,Iphone,Ios Simulator,Avaudioplayer,Speaker,我有一些关于通过扬声器播放音乐的问题。 我在下面的链接中找到了一个例子 但问题是如何确保我成功实现了通过“扬声器”播放音乐? 我写的代码作为链接,但它似乎没有什么不同之前和之后,我激活了 iphone模拟器上的“扬声器”(在macbook上) 更新: 下面是我激活扬声器的方式 UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord ; // 1 AudioSessionSetProperty ( k
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord ; // 1
AudioSessionSetProperty (
kAudioSessionProperty_AudioCategory, // 2
sizeof (sessionCategory), // 3
&sessionCategory // 4
);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; // 1
AudioSessionSetProperty (
kAudioSessionProperty_OverrideAudioRoute, // 2
sizeof (audioRouteOverride), // 3
&audioRouteOverride // 4
);
下面是我关闭扬声器的方式
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None; // 1
AudioSessionSetProperty (
kAudioSessionProperty_OverrideAudioRoute, // 2
sizeof (audioRouteOverride), // 3
&audioRouteOverride // 4
);
当我试图检查kAudioSessionProperty_AudioRoute的内容时
NSLog(@“%@”,kAudioSessionProperty_AudioRoute);
,模拟器崩溃了
我查阅了文档,CFStringRef与NSString类型几乎相同。
因此,使用NSLog打印kAudioSessionProperty_AudioRoute的值是合理的
正如你所说,KaudioSession\u AudioRoute应该是“耳机”或“扬声器”
我仍然无法确定我粘贴的代码是否正确,以及我激活扬声器的方式是否正确。
你能帮我吗?你的macbook只有一套扬声器,所以你只能从那里听到。手机底部有听筒和扬声器(您想使用) 只需检查
kAudioSessionProperty\u AudioRoute
设置为什么
kAudioSessionProperty_AudioRoute。。。
当前音频路由的名称(如“耳机”、“扬声器”等)。只读CFStringRef值
有关“替代到扬声器”属性的详细信息:
此属性只能用于kAudioSessionCategory_PlayAndRecord(或等效的AVAudioSessionCategoryRecord)类别。(…)默认情况下,此类别的输出音频将发送到接收器,即您在通话时挂在耳朵上的扬声器。kAudioSessionOverrideAudioRoute_扬声器常数允许您将输出音频定向到位于手机底部的扬声器
kAudioSessionProperty_重写类别DefaultToSpeaker。。指定在未连接其他音频路由(如耳机)时,是否将音频路由到扬声器(而不是接收器)。默认情况下,此属性的值为FALSE(0)。读/写UInt32值
此属性通过音频路由更改(如插入或拔出耳机)和中断时保留其价值;它仅在音频会话类别更改时恢复为默认值。此属性只能用于kAudioSessionCategory_PlayAndRecord(或等效的AVAudioSessionCategoryRecord)类别
另请参见kAudioSessionProperty_OverrideAudioRoute
你的macbook只有一套扬声器,所以你只能从中听到。手机底部有听筒和扬声器(您想使用) 只需检查
kAudioSessionProperty\u AudioRoute
设置为什么
kAudioSessionProperty_AudioRoute。。。
当前音频路由的名称(如“耳机”、“扬声器”等)。只读CFStringRef值
有关“替代到扬声器”属性的详细信息:
此属性只能用于kAudioSessionCategory_PlayAndRecord(或等效的AVAudioSessionCategoryRecord)类别。(…)默认情况下,此类别的输出音频将发送到接收器,即您在通话时挂在耳朵上的扬声器。kAudioSessionOverrideAudioRoute_扬声器常数允许您将输出音频定向到位于手机底部的扬声器
kAudioSessionProperty_重写类别DefaultToSpeaker。。指定在未连接其他音频路由(如耳机)时,是否将音频路由到扬声器(而不是接收器)。默认情况下,此属性的值为FALSE(0)。读/写UInt32值
此属性通过音频路由更改(如插入或拔出耳机)和中断时保留其价值;它仅在音频会话类别更改时恢复为默认值。此属性只能用于kAudioSessionCategory_PlayAndRecord(或等效的AVAudioSessionCategoryRecord)类别
另请参见kAudioSessionProperty_OverrideAudioRoute
我也有同样的问题 但最终通过这种方式进行了修正
void EnableSpeakerPhone ()
{
UInt32 dataSize = sizeof(CFStringRef);
CFStringRef currentRoute = NULL;
OSStatus result = noErr;
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &dataSize, ¤tRoute);
// Set the category to use the speakers and microphone.
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
result = AudioSessionSetProperty (
kAudioSessionProperty_AudioCategory,
sizeof (sessionCategory),
&sessionCategory
);
assert(result == kAudioSessionNoError);
Float64 sampleRate = 44100.0;
dataSize = sizeof(sampleRate);
result = AudioSessionSetProperty (
kAudioSessionProperty_PreferredHardwareSampleRate,
dataSize,
&sampleRate
);
assert(result == kAudioSessionNoError);
// Default to speakerphone if a headset isn't plugged in.
UInt32 route = kAudioSessionOverrideAudioRoute_Speaker;
dataSize = sizeof(route);
result = AudioSessionSetProperty (
// This requires iPhone OS 3.1
kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
dataSize,
&route
);
assert(result == kAudioSessionNoError);
AudioSessionSetActive(YES);
}
然后。。我创建了一个名为(void DisableSpeakerPhone();)的新方法来反转(EnableSpeakerPhone)方法
现在,让切换器或任何btn直接调用这些方法…我也有同样的问题 但最终通过这种方式进行了修正
void EnableSpeakerPhone ()
{
UInt32 dataSize = sizeof(CFStringRef);
CFStringRef currentRoute = NULL;
OSStatus result = noErr;
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &dataSize, ¤tRoute);
// Set the category to use the speakers and microphone.
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
result = AudioSessionSetProperty (
kAudioSessionProperty_AudioCategory,
sizeof (sessionCategory),
&sessionCategory
);
assert(result == kAudioSessionNoError);
Float64 sampleRate = 44100.0;
dataSize = sizeof(sampleRate);
result = AudioSessionSetProperty (
kAudioSessionProperty_PreferredHardwareSampleRate,
dataSize,
&sampleRate
);
assert(result == kAudioSessionNoError);
// Default to speakerphone if a headset isn't plugged in.
UInt32 route = kAudioSessionOverrideAudioRoute_Speaker;
dataSize = sizeof(route);
result = AudioSessionSetProperty (
// This requires iPhone OS 3.1
kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
dataSize,
&route
);
assert(result == kAudioSessionNoError);
AudioSessionSetActive(YES);
}
然后。。我创建了一个名为(void DisableSpeakerPhone();)的新方法来反转(EnableSpeakerPhone)方法
现在,让切换器或任何btn直接调用这些方法