SKScene 中的 AVAudio 播放器出错

Posted

技术标签:

【中文标题】SKScene 中的 AVAudio 播放器出错【英文标题】:Error with AVAudio Player in an SKScene 【发布时间】:2014-04-30 23:11:54 【问题描述】:

我正在尝试使用AVAudioPlayer 在我的游戏中制作背景音乐,所以我将此代码设置为SKSceneinitWithSize 方法:

//SETTING BACKGROUND MUSIC//
NSError * err = nil;
NSURL * musicFile = [[NSBundle mainBundle] URLForResource:@"Cosmic Rush" withExtension:@"m4a"];
music = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:&err];
if(err)

    NSLog(@"%@", [err userInfo]);
    return;

[music prepareToPlay];
music.numberOfLoops = -1;
[music setVolume:0.5];
//SETTING BACKGROUND MUSIC//

然后,用另一种方法:[music play]; 但是,声音永远不会播放,我尝试了各种扩展:.mp3.caf.mp4 等。我还检查了有相同的人问题,但没有一个解决他们问题的解决方案适用于我的。

【问题讨论】:

您是否使用 NSLog 记录了任何错误?你试过设置断点吗? 几个问题:您的音频文件的确切名称是什么(在您的项目中出现)?您是否尝试过在音频文件名中没有空格?你试过 URLForResource:@"SongName.mp3" withExtension:nil];而不是您当前拥有的(将 mp3 修改为实际格式)?您是否设置了 AVAudioPlayer 委托?你能播放其他音频文件还是不能播放这个? 好的,我试过文件名中没有空格,扩展名为 mp3,现在 NSLog 框中出现错误,但里面什么都没有。但我还没有设置 AVAudioPlayer 委托。我该怎么做? 考虑将代码中名为 music 的 ivar 设置为具有强引用的属性。有关更多信息,请参阅此 SO 帖子 ->link 尝试记录这个:NSLog(@"Error occurred: %@", [err localDescription]); 【参考方案1】:

有一种更简单的方法可以将背景音乐添加到您的场景中。我使用以下步骤,效果与任何其他方法一样好,而且更容易。

在场景顶部导入@import AVFoundation;

将其作为属性添加到您的 @implementation 之后。

AVAudioPlayer *_backgroundMusicPlayer;

然后为音乐声明一个方法

- (void)playBackgroundMusic:(NSString *)filename

    NSError *error;
    NSURL *backgroundMusicURL =
    [[NSBundle mainBundle] URLForResource:filename
                            withExtension:nil];
    _backgroundMusicPlayer =
    [[AVAudioPlayer alloc]
     initWithContentsOfURL:backgroundMusicURL error:&error];
    _backgroundMusicPlayer.numberOfLoops = -1;
    [_backgroundMusicPlayer prepareToPlay];
    [_backgroundMusicPlayer play];

之后,在您的 -(id)initWithSize:(CGSize)size 中创建对该方法的引用,如下所示

[self playBackgroundMusic:@"bgMusic.mp3"];

它应该为你处理背景音乐。

【讨论】:

感谢您的回答,但我发现问题与引用我的音频文件有关。它位于错误的位置。

以上是关于SKScene 中的 AVAudio 播放器出错的主要内容,如果未能解决你的问题,请参考以下文章

iPhone App:不恢复 AVAudio Player 中的音频会话

使其他音频安静的音效 iOS AVAudio

在 ViewController 中播放时从 SKScene 静音 AVAudioPlayer

SKScene 在 presentViewController 之后重复

在隐式展开可选值 AVAUDIO Player SWIFT 时意外发现 nil

自定义 TableViewController 声音在 Swift 3 中播放和崩溃