Ios 声音在iPad扬声器上无法播放,但在耳机和iPod Touch/iPhone扬声器上可以正常播放

Ios 声音在iPad扬声器上无法播放,但在耳机和iPod Touch/iPhone扬声器上可以正常播放,ios,ipad,avaudioplayer,Ios,Ipad,Avaudioplayer,我知道这是一个已经被问了很多次的问题,我已经检查了SO中的大部分相关答案,但是我没有运气找到我问题的正确答案 问题是: 当某个事件被触发时,我尝试在游戏中播放mp3文件(最多2秒),我使用AudioPlayer来执行此操作,下面是代码块: NSError *error; AVAudioPlayer *audioPlayer = [[[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:

我知道这是一个已经被问了很多次的问题,我已经检查了SO中的大部分相关答案,但是我没有运气找到我问题的正确答案

问题是:

当某个事件被触发时,我尝试在游戏中播放mp3文件(最多2秒),我使用AudioPlayer来执行此操作,下面是代码块:

NSError *error;
AVAudioPlayer *audioPlayer = [[[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource: @"ding" withExtension: @"mp3"] error:&error] autorelease];
if (error)  {
    NSLog(@"Error creating audio player: %@", [error userInfo]);
}
else {
    BOOL success = [audioPlayer play];
    // This always is "Play sound succeeded"
    NSLog(@"Play sound %@", success ? @"succeeded" : @"failed");
}
当我在iPhone4S、iTouch 3/4上运行此代码时,声音总是很清晰,但在iPad1或iPad2上,扬声器没有声音。但当我插上耳机时,奇怪的事情发生了,耳机里有声音!iPad未处于静音模式,且URL正确

我不明白为什么会这样

PS:我尝试了以下代码(从中获得)来输出音频输出端口类型:

CFDictionaryRef asCFType = nil;
UInt32 dataSize = sizeof(asCFType);
AudioSessionGetProperty(kAudioSessionProperty_AudioRouteDescription, &dataSize, &asCFType);
NSDictionary *easyPeasy = (NSDictionary *)asCFType;
NSDictionary *firstOutput = (NSDictionary *)[[easyPeasy valueForKey:@"RouteDetailedDescription_Outputs"] objectAtIndex:0];
NSString *portType = (NSString *)[firstOutput valueForKey:@"RouteDetailedDescription_PortType"];
NSLog(@"first output port type is: %@!", portType);
当我插入耳机时,输出为“第一个输出端口类型为耳机!”,当我拔下耳机时,输出为“第一个输出端口类型为扬声器!”

如果有人能提供一些帮助或建议,那就太好了。

找到了解决方案! 在我在播放之前添加了这行代码之后,声音最终从扬声器中播放出来

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

我现在仍然不明白为什么,我将深入研究。

有一个代码更改解决方案,但也有一个最终用户解决方案:打开“铃声/静音开关”。具体而言,问题在于,如果手机处于静默模式,则AVAudioSessions的默认设置AVAudioSessionCategorySoloAmbient

如原始海报所述,您可以通过调用:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
建议设置
AVAudioSessionCategoryPlayback
类别:

用于播放录制的音乐或其他对成功使用应用程序至关重要的声音


为了使用Swift 2语法更新上面的@JonBrooks answer,我在viewDidLoad()中添加了以下内容,以覆盖静音开关并播放声音:

do {

    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)

} catch let error as NSError {

    print(error)
}

OriginalWood,你有进一步的发现吗?我有一个类似的问题,通过Podcast应用程序和dropbox应用程序在iPhone上播放mp3文件。有耳机时播放效果很好,但没有耳机(通过扬声器)时会失真。我在很多其他手机上都试过了,这也是同样的问题。在我看来,这就是我导出mp3或其他东西的方式。也许你也应该看看音频文件本身,因为这似乎是我的问题。你有没有试过通过标准的iOS应用程序播放特定的mp3文件?