【问题标题】:SimpleAudioEngine takes time to play soundSimpleAudioEngine 需要时间来播放声音
【发布时间】:2013-03-17 03:11:19
【问题描述】:

我正在使用 SimpleAudioEngine 在我的 cocos2D 应用程序中播放声音。我有一种情况是在点击按钮时继续射击子弹,并在子弹被击中时播放声音。 当我有时连续点击拍摄按钮时,游戏场景会抽搐。当我整合声音时,这开始发生。

这是我在点击按钮时使用的代码:

-(void)rocketButtonTapped:(id)sender
{
  [[SimpleAudioEngine sharedEngine] playEffect:@"rocket_fired.wav"];
  NSLog(@"Pencil Rocket");
  if(int_pencilRocketTagCount>=220)
  {
    int_pencilRocketTagCount=215;
  }
  [self performSelector:@selector(shootPencilRocket)];  
}

请给我一个出路...提前谢谢..

【问题讨论】:

    标签: iphone ios cocos2d-iphone simpleaudioengine


    【解决方案1】:

    在游戏开始之前,请执行以下操作:

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

    这会将效果加载到内存中。 如果这不能解决问题,那么问题可能出在其他地方。例如,如果火箭发射声音长达几秒钟,则同时播放的音效过多,这可能是个问题。通过 NSLog 或 CCLOG 连续记录到调试控制台也很慢,很容易导致帧率下降。

    这也可能有助于降低音质。 22 甚至 11 kHz 的采样率足以产生(短)音效,44 kHz 是浪费的,因为它分别增加了 2 或 4 倍的内存使用量。如果效果文件使用立体声通道,请将其转换为单声道以将大小减半。效果使用的内存越少,播放它的硬件压力就越小。

    【讨论】:

    • 这是真的,无论您使用什么声音库:从“磁盘”(在本例中为闪存,但不是 RAM)读取文件需要很多周期。如果您从一开始就需要它们(例如,按钮敲击声),则在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 期间预加载您的效果,或者如果仅在玩游戏期间需要它们,则在游戏的“加载”屏幕期间预加载。
    • 谢谢。就我而言,NSLog 是个问题。我遇到的另一个问题是,我可以播放“A”wav 声音,但如果我用“B”wav 声音替换“A”wav 声音,它不会播放。艾米这样做的原因是什么??
    • B wav 是否使用与其他文件完全相同的格式(采样率、比特率等)?有时,您下载的 .wav 使用较旧的格式或嵌入了 iOS 无法处理的元数据。有时,使用 Audacity 之类的音频程序打开 wav 并再次保存以使其正常工作会有所帮助。与大多数音频程序相比,iOS 对 WAV 格式的挑剔多了。
    猜你喜欢
    • 2013-02-05
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多