Corona中文站

强大、易学的跨平台(iOS/Android)开发框架。QQ群1:74390406(满) 群2:221929599

导航

Corona SDK未公开的私密音频API
几个月之前,来自Yobonja的开发者(开发了游戏Blast Monkeys)发现了corona sdk中隐藏的一个音频API模块。随着8月2号发布版本的临近,看来这是公开这些音频api的最佳时间。在我继续之前,我需要重申一下免责声明。

免责声明

我讲的这篇文章是关于该功能未经测试,不支持的,我们保留权利随时删除这些API。您自己承担使用的风险。我们不提供对这些功能的技术支持,所以希望不要把使用这些功能和代码中的错误报告发送给我们。我们也不想看到有关这些功能的投诉和抱怨。有意的讨论和建设性的批评意见,欢迎提供,很明显,我们只是希望在解决问题时,可以轻松的过滤我们需要回答的问题,把重点放在我们的官方支持的地方。最后,不要让我们遗憾公开谈论有关这些秘密功能。如果这是对我们的负面影响,我们决不会再做这样的事情。论坛用户尤其注意。

Corona audio, ALmixer, and OpenAL简介
正如你们许多人都知道,在Corona中我们的新音频引擎采用OpenAL的。然而corona提供的API看起来似乎不像OpenAL,因为我们希望它看起来更好用做了一些封装。

隐藏的API
我们写了一个Lua和OpenAL的部分直接接口。这可以让你在lua中直接调用OpenAL的函数,包括设置源,事件listener等。如下:
alSourcef(ALuint source_id, ALenum param, ALfloat value);
您可以使用此设置在球场上源:
alSourcef(source_id, AL_PITCH, 2.0);
值2.0表示为源移动一个八度音高。
另一个例子是利用alSource3f函数设置源的位置:
alSource3f(source_id, AL_POSITION, 5.0, 0.0, 0.0);
这将设置该源的位置在世界坐标<5,0,0>。

同样,也有函数来控制监听器,在现实世界上中就是你的头/耳朵。类似的消息人士透露,listener也有其自身的属性,如位置,速度等,一旦你定义了你的源和listener的属性,OpenAL会自动计算如何应该是最后的音频输出的声音和播放输出到您的扬声器。
alListener3f(AL_POSITION, 0.0, 0.0, 0.0);
这将设置监听器(在游戏中你的耳朵)位置在世界坐标<0,0,0>(<0,0,0>,也恰好是OpenAL的默认)。所以,如果你play<5,0,0>(源)以上的声音,声音会在扬声器右边。
与lua绑定,你也可以像下面一样调用:
al.Source(source_id, al.PITCH, 2.0)
al.Source(source_id, al.POSITION, 5.0, 0.0, 0.0)
al.Listener(al.POSITION, 0.0, 0.0, 0.0)

但现在的问题是,“如何得到一个源ID”?那么,这是corona秘密音频API的另一半。好了,正如我刚才所说,每corona“channel”到OpenAL的“source”的映射,你只需要转换源和通道的一种方式罢了,好吧,我们有两个未公开的映射函数。
local mysource = audio.getSourceFromChannel(1)
local mychannel = audio.getChannelFromSource(mysource)
这是一件好事,但我们可以更好。瞒着大家,我们做了一件聪明的事情,利用了Lua的多个返回参数功能。所以每一个公共返回一个通道的音频功能,在corona,还偷偷返回源ID作为第二个参数。
local mychannel, mysource = audio.play( mySound )
同样,每一个使用corona音频的用户,需要一个“channel=}'表的参数,还需要另一种”source='表的参数:
audio.setVolume(0.5, {source= mysource})

完整例子:


下面是我们暴露的一些其他功能:
al.Enable
al.Disable
al.IsEnabled
al.Get
al.GetError
al.GetEnumValue
al.Listener
al.GetListener
al.Source
al.GetSource
al.DopplerFactor
al.DopplerVelocity
al.SpeedOfSound
al.DistanceModel

下面是一些我们暴露的常量的映射。lua在左边,c在右边。在corona中,你需要输入前缀,例如PITCH 应该是 al.PITCH.

<< Corona编程需要注意的一些细节Corona精彩samples赏析之《Samurai Fruit》 >>

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

Powered By Z-Blog 1.8 Walle Build 100427 Copyright 2011-2015 BuildApp.Net. All Rights Reserved.