多次播放声音的问题

Posted

技术标签:

【中文标题】多次播放声音的问题【英文标题】:Issues Playing A Sound Multiple Times 【发布时间】:2017-06-21 21:11:55 【问题描述】:

我将 SpriteKit 用于我的带有 Objective C 的 Mac OS 项目,并且当两个节点之间发生接触时,我试图一遍又一遍地播放某种声音。我不希望播放器在再次播放之前等待声音完成。声音只有大约 1 秒长,但它每 0.5 秒重复一次。我尝试了两种不同的方法,它们都有问题。我可能没有正确设置一些东西。

方法 #1 - SKAction

我尝试使用以下代码让其中一个精灵播放声音:

[playBarNode runAction:[SKAction playSoundFileNamed:@"metronome" waitForCompletion:NO]];

声音按时完美播放,但声音被修改了。听起来像是应用了混响(回声),它也失去了很多音量。

方法 #2 - AVAudioPlayer

这是我用来设置的代码:

-(void) initAudio 
    NSString *path = [NSString stringWithFormat:@"%@/metronome.mp3", [[NSBundle mainBundle] resourcePath]];
    NSURL *metronomeSound = [NSURL fileURLWithPath:path];
    _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:metronomeSound error:nil];
    [_audioPlayer prepareToPlay];

稍后在代码中它是这样调用的:

[_audioPlayer play];

这个问题是,它似乎要等到第一次播放完成后才能再次播放声音。基本上玩了很多次都失败了。

我是否设置不正确?我怎样才能解决这个问题?提前致谢。

【问题讨论】:

【参考方案1】:

重试方法1,但不是让精灵播放声音,而是让场景通过

播放声音
[self runAction:[SKAction playSoundFileNamed:@"metronome" waitForCompletion:NO]];

在游戏 SKScene 类中

【讨论】:

感谢您的回答。不幸的是,结果完全相同。 有趣,希望你能明白。我在我的游戏中使用了这种精确的方法,并且效果很好。您是否尝试过使用另一个随机声音文件来查看是否发生相同的问题以确保它不是一个特定的文件?也可以尝试将文件类型更改为 .WAV 或其他扩展名。 我有一种感觉是因为声音很短。和你一样,我以前从未遇到过这样的问题,而且我已经使用 SpriteKit 有一段时间了。这次的问题是我需要声音完全准时,因为这是一个节奏应用程序,它适用于节拍器的声音。使用 SpriteKit 方法的另一个问题是你无法控制音量,我认为这可以对这样的声音很重要。我只是尝试异步加载和播放声音,效果很好,但我对使用后台线程知之甚少,希望内存不受影响。 应该可以,只要你一次玩的人不超过 10 个(这似乎不太可能)

以上是关于多次播放声音的问题的主要内容,如果未能解决你的问题,请参考以下文章

HTML5 JS同时多次播放相同的声音

在单独的线程中播放短声音

AVAudioPlayer 声音在经过这么多 IBAction 后停止播放

在一个 Jupyter Notebook 单元中播放多种声音

Swift,如何通过按下按钮一次又一次地播放声音

在 Java 中混合声音?