本文译自 orx tutorials 的 声音和音乐(sound&music)
,~麽黛誌~ 译。最新版本见Orx 官方中文Wiki
。 (因为这里格式不好看,推荐去官方WIKI查看)本文转自~麽黛誌~的博客
。原文链接在:http://blog.csdn.net/v_023/archive/2010/07/06/5717261.aspx
。
参看前面的教程基础
, 对象创建
, 时钟
,
框架层次结构
,
动画
, 视口与摄像机
。
本教程则演示如何播放声音(样本)和音乐(流)。和先前其他功能一样,在大部分时候,只需要一行代码,一切都是数据驱动。
本教程还演示了如何通过士兵的图像作为视觉反馈,展现实时改变的声音设置。
当你按上/下箭头,声音将做出相应的改变。士兵也会因此发生变化。
通过点击左右键,音乐的音调(音频)会相应地改变。士兵将会向收音机的旋钮一样旋转。
左控制键将会在音乐停顿的时候播放音乐(同时激活士兵),并会在音乐播放的情况下暂停音乐(并停止士兵的活动)最后,回车和空格会在士兵上播放出声音效
果。
用空格触发声音效果跟用回车是一样的,唯一的区别在于空格键控制的音量和音调是随机定义在默认配置文件中的。
这种配置控制的频率随机性允许简单步骤或没有多余的代码稍有不同击中的声音。我们随意改变士兵的颜色来说明这一点。声音效果,只会增加和表现在有效士兵角
色。
如果你想表现一个声音效果不用对象来支持,你可以像本教程中创建音乐方法一样。但是,在对象上表现一个声音将需要空间声音定位(本教程不做介绍)。
许多声音效果可以同时表现在一个单一的对象上。
声音的配置属性KeepDataInCache允许保留在内存中,而不是每次都从文件中读取声音样本。这只针对非流数据(即不是音乐类型)。
如果它被设置为false,样本将从文件中重新加载,除非有另一个相同类型的声音效果正在播放。
我们也注册声音事件去得到什么时候开始或停止播放声音。这些事件仅仅在实际播放时才触发。
通常,我们先载入config
file(配置文件),创建一个viewport,创建一个clock(时钟)并且注册Update(更新)函数,最后创建一个主对象。请从之前的教程中
获得更多的信息。
接下来我们来创建一个音乐对象并且播放它。
orxSOUND *
pstMusic;
pstMusic =
orxSound_CreateFromConfig(
"Music"
)
;
orxSound_Play(
pstMusic)
;
正如我们看到的,音乐和声音都属于orxSOUND类型。主要区别在于音乐是流,而声音是完全加载在内存中。
接下来,让我来看它们在设置配置文件上的差异。
初始化函数最后一步:我们添加音频事件响应。
orxEvent_AddHandler(orxEVENT_TYPE_SOUND, EventHandler);
我们只在音频开始/停止记录日志,相应代码如下:
E:/MyProgram/ClipboardHighlighterVersion0.2/Untitled.html
E:/MyProgram/ClipboardHighlighterVersion0.2/Untitled.html
orxSOUND_EVENT_PAYLOAD *pstPayload;
pstPayload = (orxSOUND_EVENT_PAYLOAD *)_pstEvent->pstPayload;
switch
(_pstEvent->eID)
{
case
orxSOUND_EVENT_START:
orxLOG("Sound <
%s
>@<
%s
> has started!"
, pstPayload->zSoundName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
break
;
case
orxSOUND_EVENT_STOP:
orxLOG("Sound <
%s
>@<
%s
> has stoped!"
, pstPayload->zSoundName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
break
;
}
return
orxSTATUS_SUCCESS;
正如你所看见的,没有什么是新东西的。
现在我们来看怎样去添加一个音频到士兵角色上。
E:/MyProgram/ClipboardHighlighterVersion0.2/Untitled.html
if(orxInput_IsActive("RandomSFX") && orxInput_HasNewStatus("RandomSFX"))
{
orxObject_AddSound(pstSoldier, "RandomBip");
orxObject_SetColor(pstSoldier, orxColor_Set(&stColor, orxConfig_GetVector("RandomColor", &v), orxFLOAT_1));
}
if(orxInput_IsActive("DefaultSFX") && orxInput_HasNewStatus("DefaultSFX"))
{
orxObject_AddSound(pstSoldier, "DefaultBip");
orxObject_SetColor(pstSoldier, orxColor_Set(&stColor, &orxVECTOR_WHITE, orxFLOAT_1));
}
我们看到的是,添加一个音频到一个士兵角色上只需要一行代码,并且更为重要是随机和固定音频也是这样做的。后面我们会介绍它们在配置文件上的不同。
当我们添加一个RandomBip音频,通过配置文件中定义的key-RandomColor随机改变士兵颜色.当播放DefaultBip时,我们可以
简单地将颜色改回白色。
注意:一个声音将会在每次有对应输入的时候被播放。
到目前为止,我们只关心一个输入是否处于激活状态,现在,我们需要在输入被激活的一瞬间做一些操作。
为此,我们使用orxInput_HasNewStatus()
函数,它将在输入状态变化的时候返回orxTRUE
。(比
如从未激活到激活状态,从激活到未激活状态)
再结合 orxInput_IsActive()可以确保当我们只播放声音时,获取的输入是从非激活到激活的。
现在,让我们一起演示一下。
E:/MyProgram/ClipboardHighlighterVersion0.2/Untitled.html
E:/MyProgram/ClipboardHighlighterVersion0.2/Untitled.html
if
(orxInput_IsActive("ToggleMusic"
) && orxInput_HasNewStatus("ToggleMusic"
))
{
if
(orxSound_GetStatus(pstMusic) != orxSOUND_STATUS_PLAY)
{
orxSound_Play(pstMusic);
orxObject_Enable(pstSoldier, orxTRUE);
}
else
{
orxSound_Pause(pstMusic);
orxObject_Enable(pstSoldier, orxFALSE);
}
}
通过这个简单的代码可以看到,当我们ToggleMusic的输入激活时,在非播放状态下将开始音乐播放且激活士兵。播放状态下则停止音乐播放且不激活士
兵。
现在,让我们来改变音高。
E:/MyProgram/ClipboardHighlighterVersion0.2/Untitled.html
if(orxInput_IsActive("PitchUp"))
{
orxSound_SetPitch(pstMusic, orxSound_GetPitch(pstMusic) + orx2F(0.01f));
orxObject_SetRotation(pstSoldier, orxObject_GetRotation(pstSoldier) + orx2F(4.0f) * _pstClockInfo->fDT);
}
没有特别的,降低音高也是如此就是参数换成了PitchDown.
最后,我们来改变音量。
E:/MyProgram/ClipboardHighlighterVersion0.2/Untitled.html
if(orxInput_IsActive("VolumeDown"))
{
orxSound_SetVolume(pstMusic, orxSound_GetVolume(pstMusic) - orx2F(0.05f));
orxObject_SetScale(pstSoldier, orxVector_Mulf(&v, orxObject_GetScale(pstSoldier, &v), orx2F(0.98f)));
}
具体做法和改变Pitch一样,没有什么特别的。
注意:我们可以看到,只有将我们的对象的旋转时间一致(参见时钟教程
(clock tutorial)
)。
音乐的音高和声量,包括对象的缩放都将是帧相关的(framerate-dependent),这是一个不好的事情。
为了解决这个问题,我们只需要使用the clock's DT 1)
去确定参数即可。2)
我们已经了解代码部分,现在来看下数据部分。
首先,定义下音乐。
E:/MyProgram/ClipboardHighlighterVersion0.2/Untitled.html
[Music]
Music =
../../data/sound/gbloop.ogg
Loop=
true
很容易!如果我们没有明确地定义Loop=true,音乐就不会循环播放。
现在让我们来看看DefaultBip。
E:/MyProgram/ClipboardHighlighterVersion0.2/Untitled.html
[DefaultBip]
Sound =
../../data/sound/bip.wav
KeepInCache =
true;
Pitch =
1.0
Volume=
1.0
和以前一样,KeepInCache属性将确保这音频将永远不会被自动从内存中卸载。
音高和音量明确地定义为不是实际需要的默认值。
最后,让我们来看看我们的RandomBip。
E:/MyProgram/ClipboardHighlighterVersion0.2/Untitled.html
[RandomBip@DefaultBip]
Pitch =
0.1 ~ 3.0
Volume=
0.5 ~ 3.0
我们可以看到,RandomBip从DefaultBip继承。这意味着,如果我们改变了DefaultBip样本,它也可能改变RandomBip。
我们只需改变节距(即频率)和音量随机值。这意味着,每次播放
RandomBip,它就会有不同的频率和数量,而且,所有的这些都不需要改变代码,只需要改变配置即可!
1)
译者注:作者应该是表示clock结构的DT字段,在Orx中此结构的此字段表示时间值
<!-- wikipage stop -->
分享到:
相关推荐
6. **编译与构建**:`bin` 目录下的文件和子目录可能包含了不同平台的可执行文件和库,这些是Orx在不同平台上运行所需的,反映了Orx的跨平台能力。 7. **授权协议**:`COPYRIGHT` 和 `LICENSE` 文件分别指明了Orx的...
4. **音频系统**:支持音效和音乐播放,为游戏添加声音元素。 5. **时间线系统**:允许开发者创建复杂的事件序列,用于游戏的剧情推进或者动画控制。 6. **插件系统**:Orx 允许通过插件扩展其功能,开发者可以...
Orx是一款强大的便携式游戏引擎,专注于2D游戏开发,以其轻量级、灵活性和易用性而受到开发者们的欢迎。作为一个开源项目,Orx提供了完全透明的源代码,鼓励社区参与,促进了代码的持续改进和创新。 Orx的核心设计...
支持的设备和配置请注意,Raspberry Pi v1是目前唯一受支持的版本。 v2具有不支持的ARM v7处理器。 此存储库中的脚本支持以下发行版: (Raspberry Pi v1,ARM v6) (Raspberry Pi v1,ARM v6) 以下DVB-S / S2调谐...
标题"Suz-OrX-archive-refs-heads-master.zip"似乎是一个Git仓库的归档文件,通常包含了一个Git仓库在特定提交点的所有文件和目录。这种类型的文件经常用于代码备份、版本控制或者分享代码库。"refs-heads-master...
6. **界面设计**:如何在界面上布局图片和放大镜视图,确保用户体验良好。 7. **源码结构**:介绍关键的类和方法,如放大控件类、事件处理逻辑等。 8. **测试与调试**:提供测试用例和调试建议,帮助理解代码并...
总的来说,IIS URL重写组件是IIS服务器不可或缺的一个工具,它极大地增强了服务器对URL的管理和优化能力,对于提升网站性能和SEO效果具有显著作用。通过深入理解和熟练运用,可以有效地改善网站的用户体验和搜索引擎...
ORX配置对崇高文本的支持 ... Orx为游戏开发提供了完整的框架,目前可在Windows(mingw和使用Visual Studio的本机),Linux(x86 / x86_64),MacOS X(ppc / x86),iPhone / iPod Touch / iPad和Android上运行。
而"dyEY6oRX.e"可能是源码文件,但由于无法直接查看,具体实现需要打开文件查看源码。 总的来说,这个项目展示了易语言在处理编码转换问题上的简洁性和实用性,对于学习易语言的初学者来说,这是一个很好的实践案例...
PELCON万用解码器是一款专为硬盘录像机和其他监控主机设计的前端控制设备,其主要功能在于实现对室内外云台、电动变焦镜头、摄像机电源、灯光、雨刷等辅助设备的精确控制。该解码器采用RS-485通讯方式,并能兼容多种...
EPORNER 2.COM%20-%20[bpM0orx6f9R]%20
ocaml-orx-OCaml与Orx游戏库的绑定 是“一个开源,可移植,轻便,基于插件,数据驱动且非常易于使用的2D导向游戏引擎。” Orx本身是用C编写的。 该存储库提供绑定以使用OCaml中的Orx。 声音,图形,物理,输入处理...
**标题解析:** "rewrite_x32orx64_zh-CN" 这个标题表明这是一个针对中文用户(zh-CN)的关于“rewrite”技术的软件包,它同时提供了32位(x32)和64位(x64)版本的解决方案。"rewrite"通常指的是URL重写技术,用于管理...
在Windows操作系统中,richtx32.ocx是一个重要的ActiveX控件,主要用于处理Rich Text Format (RTF) 文档和文本编辑。这个控件在一些应用程序中是必需的,特别是那些依赖于旧版Microsoft RichEdit功能的软件。然而,...
- **LDBx/ABx/OBx/LDWx/AWx/OWx/LDDx/ADx/ODx/LDRx/ARx/ORx**: 用于比较两个数值,并根据比较结果设置输出。 - **NOT**: 对栈顶值取反。 - **EU/ED**: 用于检测上升沿和下降沿。 3. **逻辑控制指令**: - **=**...
matlab中拟合中心线的代码关于OrX程序的注意事项: 最初由SR Kiihne撰写,2004年2月24日 定向的MAS nmr光谱 我最初是在来自Bruker实验的光谱上对此进行测试的:jr0203#22-26这些是31P MAS光谱,其自旋速率为500-...
Run-time error '339': Component 'MSCOMCTL.OCX' or one of its dependencies not correctly registered:a file is missing or invalid. win8操作步骤 ①解压压缩包 ②将解压出来的文件,剪切至 ...
- RINEX文件(ORX/OUT):标准GPS观测数据文件格式,包含观测和导航信息。 - 站点文件(STA):包括站点位置、接收机类型和天线高度等信息。 5. 终端会话的目标和过程 每天的终端会话都有其明确的目标和步骤,例如...
ORX是用C99,高性能和跨平台编写的。 包装器包括两个部分: 低层包装器,每个ORX C标头基本上具有一个Nim模块,其中将近80个。 所有这些都被命名为o-xxx,例如oinput或oobject 。 每个低级包装器具有一个Nim模块的...
协议选择方面,PELCON万用解码器支持多种品牌和系列的协议,如PELCO-D、PELCO-P、SAMSUNG、PHILIPS、RM110、CCR-20G、HY9600、KALATEL、KODICOM、VICON、ORX-10、PANASONIC、PIH717、EASTERN和IDRS等。用户可以根据...