【转】【翻译】Orx官方教程:6.声音和音乐(sound&music)
- 博客分类:
- 技术杂绘
【转】【翻译】Orx官方教程:6.声音和音乐(sound&music)
2010年07月08日
本文译自 orx tutorials 的 声音和音乐(sound&music) ,~麽黛志~ 译。最新版本见Orx 官方中文Wiki 。 (因为这里格式不好看,推荐去官方WIKI查看)本文转自~麽黛志~的博客 。原文链接在:http://blog.csdn.net/v_023/archive/2010/07/06/5717 261.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\Untitl ed.html
E:\MyProgram\ClipboardHighlighterVersion0.2\Untitl ed.html
orxSOUND_EVENT_PAYLOAD *pstPayload;
pstPayload = (orxSOUND_EVENT_PAYLOAD *)_pstEvent->pstPayload;
switch (_pstEvent->eID)
{
case orxSOUND_EVENT_START:
orxLOG("Sound @ has started!" , pstPayload->zSoundName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)) );
break ;
case orxSOUND_EVENT_STOP:
orxLOG("Sound @ has stoped!" , pstPayload->zSoundName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)) );
break ;
}
return orxSTATUS_SUCCESS;
正如你所看见的,没有什么是新东西的。
现在我们来看怎样去添加一个音频到士兵角色上。
E:\MyProgram\ClipboardHighlighterVersion0.2\Untitl ed.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\Untitl ed.html E:\MyProgram\ClipboardHighlighterVersion0.2\Untitl ed.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\Untitl ed.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\Untitl ed.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\Untitl ed.html
[Music]
Music = ../../data/sound/gbloop.ogg
Loop = true
很容易!如果我们没有明确地定义Loop=true,音乐就不会循环播放。
现在让我们来看看DefaultBip。
E:\MyProgram\ClipboardHighlighterVersion0.2\Untitl ed.html
[DefaultBip]
Sound = ../../data/sound/bip.wav
KeepInCache = true;
Pitch = 1.0
Volume = 1.0
和以前一样,KeepInCache属性将确保这音频将永远不会被自动从内存中卸载。
音高和音量明确地定义为不是实际需要的默认值。
最后,让我们来看看我们的RandomBip。
发表评论
-
(转载)DLL基础
2012-01-20 08:48 639(转载)DLL基础 2011年02月 ... -
设计模式总结
2012-01-20 08:48 661设计模式总结 2010年07 ... -
Windows 编程基础
2012-01-20 08:48 476Windows 编程基础 2011年04月29日 对于程 ... -
DLL基础
2012-01-20 08:48 719DLL基础 2010年06月29日 自从Microsof ... -
12星座超级独家!通过星座完美你自己!不断加新中……
2012-01-19 13:54 79712星座超级独家!通过星座完美你自己!不断加新中…… 201 ... -
星座密语,12星座,年终大奖颁发名单??????
2012-01-19 13:53 778星座密语,12星座,年终大 ... -
星座之最
2012-01-19 13:53 644星座之最 2010年06月18日 值得你一生相爱的星座 ... -
关于星座之最
2012-01-19 13:53 1669关于星座之最 2011年05 ... -
我在等懂我的那个人
2012-01-19 13:53 1466我在等懂我的那个人 2011年07月12日 ... -
配置“远程驱动器",让N8/c7无线访问电脑硬盘尤如访问自己的内存卡
2012-01-17 03:43 1258配置“远程驱动器",让N8/c7无线访问电脑硬盘尤如 ... -
你知道C盘里哪些文件可以删除,哪些不能删吗?(转载)
2012-01-17 03:43 750你知道C盘里哪些文件可以删除,哪些不能删吗?(转载) 201 ... -
将虚拟内存使用的页面文件设置到非系统分区可以提升系统性能
2012-01-17 03:43 1223将虚拟内存使用的页面文件设置到非系统分区可以提升系统性能 2 ... -
Exchange 2003中优化内存使用
2012-01-17 03:43 710Exchange 2003中优化内存使 ... -
小学生作文训练
2012-01-16 02:20 643小学生作文训练 2011年0 ... -
关于小学作文教学之我见
2012-01-16 02:20 499关于小学作文教学之我 ... -
小学生作文能力的培养
2012-01-16 02:20 551小学生作文能力的培养 ... -
小学生作文评语
2012-01-16 02:20 517小学生作文评语 2009年0 ... -
小学生评语荟萃3
2012-01-16 02:20 698小学生评语荟萃3 2010年05月22日 0 推荐 ...
相关推荐
支持的设备和配置请注意,Raspberry Pi v1是目前唯一受支持的版本。 v2具有不支持的ARM v7处理器。 此存储库中的脚本支持以下发行版: (Raspberry Pi v1,ARM v6) (Raspberry Pi v1,ARM v6) 以下DVB-S / S2调谐...
Orx是一款轻便,轻巧,基于插件,数据驱动且非常易于使用的面向2D的游戏引擎。 由于orx是数据驱动的,因此它允许用户使用少量的代码行来创建游戏,并大大减少了开发时间。
ORX源码,这是学习2D游戏引擎必不可少的一道大餐
ORX配置对崇高文本的支持 ... Orx为游戏开发提供了完整的框架,目前可在Windows(mingw和使用Visual Studio的本机),Linux(x86 / x86_64),MacOS X(ppc / x86),iPhone / iPod Touch / iPad和Android上运行。
Run-time error '339': Component 'MSCOMCTL.OCX' or one of its dependencies not correctly registered:a file is missing or invalid. win8操作步骤 ①解压压缩包 ②将解压出来的文件,剪切至 ...
ocaml-orx-OCaml与Orx游戏库的绑定 是“一个开源,可移植,轻便,基于插件,数据驱动且非常易于使用的2D导向游戏引擎。” Orx本身是用C编写的。 该存储库提供绑定以使用OCaml中的Orx。 声音,图形,物理,输入处理...
Suz-OrX-archive-refs-heads-master.zip
win2008以上的服务器IIS设置URL规则组件,伪静态规则设置
matlab中拟合中心线的代码关于OrX程序的注意事项: 最初由SR Kiihne撰写,2004年2月24日 定向的MAS nmr光谱 我最初是在来自Bruker实验的光谱上对此进行测试的:jr0203#22-26这些是31P MAS光谱,其自旋速率为500-...
非典型2D游戏引擎 Orx 源码 收集完整的 源码包
ORX是用C99,高性能和跨平台编写的。 包装器包括两个部分: 低层包装器,每个ORX C标头基本上具有一个Nim模块,其中将近80个。 所有这些都被命名为o-xxx,例如oinput或oobject 。 每个低级包装器具有一个Nim模块的...
欧罗调色板用于HTML颜色的定义。... 包含之后,您可以通过@Colors.MediumOrchid直接引用颜色名称。... 当您的编辑器支持颜色的可视化并且您可以原型化而无需使用颜色选择器工具切换到绘画程序时,这是很好的。
TexturePacker 4.3.1 x64、X86完美破解,破解步骤简单,已经验证完美破解可用
ORX Build 2.0 Beta ORX是一个简单,可移植但功能有限的订购系统。 Jentzen Paolo Ancheta Javier版权所有(C)2017 ORX绝对不提供保修。 这是一个免费软件,出于教育目的而受到启发。 该软件包括解决方案和源代码。...
C#实现类似淘宝图片局部放大功能源码,测试能用
rewrite 2.0 32位 64位,方便大家安装IIS的URL重写环境
20-向脚本传递参数.pdf shell编程
实验三 移植U-Boot-1.3.1 实验 【实验目的】 了解 U-Boot-1.3.1 的代码结构,掌握其移植方法。 【实验环境】 1、Ubuntu 7.0.4发行版 2、u-boot-1.3.1 3、FS2410平台 4、交叉编译器 arm-softfloat-linux-gnu-...
基于springboot的一个小demo实现了登录,session功能,数据库表放在下面:链接:https://pan.baidu.com/s/1Orx58gY_ZAAQeo3879s-kQ 密码:ulpb 有问题留言
双通道差分发射器(Tx) 双通道差分接收器(Tx) 具有2个输入的观测接收器(ORx) 具有3个输入的嗅探器接收器(SnRx) 可调范围:300 MHz至...完全集成的独立小数N分频射频(RF),用于Tx、Rx、ORx和时钟生成 JESD204B数字接口