【问题标题】:Cocos Denshion: Play sound effect in sync with musicCocos Denshion:与音乐同步播放音效
【发布时间】:2012-02-05 21:46:33
【问题描述】:

我正在制作一个音乐游戏,当用户按下一个音符时,它会发出声音。当用户按下时,声音自然需要立即播放,以便他们可以判断他们是否与音乐合拍。但是,感觉好像声音滞后了,尤其是当按下音符变得更快时。

我的背景 .m4a 音乐文件是用 AVAudioPlayer 播放的。我选择在 Cocos Denshion 上使用它,因为我可以访问 currentTime 属性。我可能错了,但我不认为我可以使用 CocosDenshion 访问它。

我制作了一个非常短(不到一秒)的 .wav 文件。我在 init 上预加载了我的音效:

[[SimpleAudioEngine sharedEngine] preloadEffect:@"Assist.wav"];

然后播放音效,在CCTouchesBegan中我调用:

[[SimpleAudioEngine sharedEngine] playEffect:@"Assist.wav"];

之后,它会调用我的代码来确定用户计时和奖励积分。知道为什么它可能会滞后,或者有更好的方法来与音乐同步播放音效吗?

编辑:我最近尝试了一些事情,但没有结果。首先,我尝试在歌曲中出现适当的时间时自动播放声音。仍然有滞后,所以我不认为这是触摸事件缓慢。我还尝试了 3 个不同的声音库。

但是,当我在模拟器中运行时,它似乎并不卡顿。有人有想法吗?我一无所知,这是我无法真正取出的主要功能......

【问题讨论】:

  • 请提供有关您正在运行的设备的信息,以及有关 cpu 负载和 gpu 负载的 x-code 仪器信息,以及同时播放多少声音以及以什么格式播放的想法是你的背景音乐(估计有一个)。

标签: iphone ios cocos2d-iphone soundeffect simpleaudioengine


【解决方案1】:

您应该避免使用此代码:- [[SimpleAudioEngine sharedEngine] preloadEffect:@"Assist.wav"];

随着应用程序的启动,您应该通过编写以下代码来加载框架 SimpleAudioEngine:-

//SimpleAudioEngine *palySound;在 .h 文件中创建对象。 palySound=[SimpleAudioEngine sharedEngine];

无论何时你想播放声音,你都可以写:[palySound playEffect:@"Assist.wav"];

【讨论】:

  • 感谢您的回复。我试过这个,但它似乎没有任何不同。声音仍然滞后。
  • 您是否在 didFinishLaunchingWithOptions 中的 appdelegate 中加载 SimpleAudioEngine...
  • 是的,似乎没有什么不同。也许触摸事件很慢?
【解决方案2】:

我不确定你在 SoundEngine 中做了什么,但根据我自己的经验,不延迟播放声音的最佳方法是为每个声音文件分配一个 AVAudioPlayer(除非你想要开始搞乱AudioQueues)。

这是一个例子:

假设您的当前视图控制器中有一个AVAudioPlayer *assistPlayer;

在你的viewDidLoad 中用你的声音初始化它:

NSURL *wavURL = [[NSBundle mainBundle] URLForResource:@"Assist" withExtension:@"wav"];
assistPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:wavURL error:nil];

然后,在您要播放文件的IBAction 中,执行以下操作:

[assistPlayer play];

你不应该有任何滞后。

【讨论】:

  • 试过了,但似乎没有什么不同。实际上得到了更少的性能。 Denshion 是一个非常薄的 openAL 包装器。
  • 你的 wav 文件的采样频率和比特深度是多少?您是否尝试过对其重新采样并仅使用 16 位?
【解决方案3】:

你试过Finch吗?它声称以低延迟播放声音,它也只是 OpenAL 的一个包装器。

除此之外,我真的没有使用 OpenAL 的经验,但可以想到两个可能导致您滞后的原因:

  1. 主线程太忙 - 尝试将工作从主线程卸载到其他线程 线程。

  2. 也许 OpenAL 定义的缓冲区太大,因此管道将整个声音加载到缓冲区(或其中的一大块),然后才开始播放。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 2019-05-06
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多