• OpenAL同时处理大量声音

    (注:这是我在编写MozartBrain时,参考过的一篇文章,虽然年代久远,但对于学习OpenAL编程还是具有指导意义。)


    今天要讨论的话题是OpenAL同时处理大量的音效。当你使用OpenAL进行声音播放时,能够同时播放的声音有一个上限(换而言之,最大的source数目)。在iPhone上能够通过下面代码获得的最大source数目大约为32:


    1
    alGenSources(1, &sourceID);


    当你要求超过最大数目的source时,上面的语句将失败,但它并不产生错误。因此,不要要求超过32个source(注:这是iPhone OS 2.2上的数目,其他版本的OS可能会有些差别)


    所以,这意味着什么?它意味着任何时候不管什么原因都不要同时播放超过32个音效。这确实是一个问题,如果你的目标是通过分别播放各种乐器来模拟整个交响乐团的演奏,那么你最好不要在iPhone上尝试这样做。

    我以前的文章中提到建议为每个音效(音效缓存)分配一个source并在需要播放时都调用此source。这在大部分情形下都可以正常工作。但是,如果在你的应用程序中有超过32个音效时,你应该怎么做?我记得曾经提到过:你应该将未用的source移交给将要被播放的buffer。


    读文章 »

     
  • OpenAL系列之二 – 为什么要避免使用alBuferDataStatic

    我收到Ken一封Email,这位仁兄浏览了我博客的中有关OpenAL的文章,遇到一些问题请求我的帮助。他在加载缓存后重复使用时遇到了一些OpenAL神秘的错误。

     

    所以我阅读了他寄给我的代码片段,我注意到:

     

    1
    2
    3
    // use the static buffer data API

    alBufferDataStaticProc(buffer, format, data, size, freq);

     

    啊哈! 这可能就是你问题的根源!除非你真正需要,alBufferDataStatic应该完全被避免。你怎样才知道你需要使用它?有一条金桂玉律:如果你不知道这个问题的答案,那么你就不需要它。

     

    读文章 »

     
  • OpenAL系列之一 – iPhone上的OpenAL音频

    译者注:这是我最喜欢的iPhone OpenAL教程之一,总共有好几篇文章,我会逐步翻译。

     

    随着保密协议的解除,我们可以开始公开讨论iPhone的代码了。我觉得讨论一下我“入侵”iPhone世界以来遇到的问题以及我是如何修复它们的可能是一个不错的话题。

     

    我目前正在编写一个iPhone游戏,它完全是以openGLES为基础并采用OpenAL音频。今天我想谈谈OpenAL

     

    读文章 »

     
  • 检测用户向麦克吹气

     

    如果几年前你告诉我人们可以通过晃动手机或向麦克吹气使手机有所动作,我一定会大笑不止。但现在这已经是事实了。

     

    检查晃动动作是很直接的,所有这些在3.0“motion event”(动作事件)中都有介绍。

     

    检测向麦克吹气困难一点。本教程将建立一个简单的单视图程序,它将在用户向麦克吹气时向控制台写入记录信息。

     

    读文章 »

     
  • iPhone游戏编程教程之四-游戏简单音频

    本教程系列的最后一讲将介绍怎样为你的游戏加上声音。由于这是针对初学者的教程,所以我不会讨论复杂的音频技术,如OpenGL和Audio Queue。今天的主题是播放一段短的声音(少于30秒)。如果你不要求任何背景音乐,这将是最容易的播放音频的方式了。这种方式的缺点是一次只能播放一个音频文件。好,我们开始吧……先从上次教程的代码开始。我们今天将使用两种声音,一个是击打球的声音,另一个是得分的声音。

     

    读文章 »

     
  • 使用AVAudioPlayer轻松搞定音频播放

    reel.jpg

    iPhone SDK中的AVFoundation框架包括的AVAudioPlayer是一个容易使用而且功能强大,基于object-c的播放音频文件播放器。

     

    本教程展示了怎样使用AVAudioPlayer。本教程将建立一个简单的程序,它能够循环播放一段mp3音频文件。
    读文章 »