• 游戏中的声音播放FMod


    FMod  http://www.fmod.org/


    现代游戏已经不能没有声音,所以音频引擎成为游戏引擎中不可缺少的一部分.这是一篇介绍现代音频引擎的文章(http://hard.zol.com.cn/labs/2003/0520/60986.shtml ).FMOD音频引擎(http://www.fmod.org )是一个非常不错的音频引擎,其使用也比较简单,下面做一些简单介绍:
    一.基本准备
    它是免费的,你可以从它们的主站上下载API等文件.之后,你需要添加头文件和库文件,如下(C/C++):

  • fmodvc.lib 用于 Microsoft Visual C++ 和 Codewarrior
  • fmodbc.lib 用于 Borland
  • fmodwc.lib 用于 Watcom
  • fmodcc.lib 用于 LCC-Win32
  • libfmod.a 用于 MingW and CygWin
  • fmod-3-7.lib 用于 GCC
    (参考:http://www.gamedev.net/reference/articles/article2098.asp
    之后,只要添加fmod.h头文件后就可以使用了.
    二.开始使用
    1.初始化
    开始播放声音前,需要进行初始化,很简单:
    FSOUND_Init (44100, 32, 0);
    第一个参数是输出HZ,第二是最大软件信道数可以不管也不会增加CPU负担,第三个参数可以设置一些标志可以不设置则赋值为0.
    2.基本常识
    FMOD将音频分为声音(sound)和音乐(music)两种.前者如:.MOD, .S3M, .XM, .IT, .MID, .RMI, .SGT or .FSB
    等,后者如: .WAV, .MP2, .MP3, .OGG or .RAW等.二者使用不同的函数处理.都可以通过采样后流的方式来处理.不过小文件一般通过采样方式,它可以多次播放但占用内存.大文件通过流方式,减少内存消耗.
    3.播放音乐
    首先定义一个FMUSIC_MODULE类型变量来作为文件句柄.然后就可以通过FMUSIC API来实现,如:
    装入文件:
    handle=FMUSIC_LoadSong("YourFileName");
    FMUSIC_PlaySong(handle);
    音量控制:FMUSIC_SetMasterVolume (handle, 255);后面的参数在0~255之间,值越大声音越大.
    暂停播放:FMUSIC_SetPaused (handle, true);
    重开始:FMUSIC_SetPaused (handle, false);
    循环播放:FMUSIC_SetLooping (handle, true);
    停止播放:FMUSIC_StopSong (handle);
    释放音频内存:FMUSIC_FreeSong (handle);
    下面是一个命令模式下的例子:
    #include <conio.h>
    #include "inc/fmod.h"
    FMUSIC_MODULE* handle;
    int main ()
    {
       // 初始化
       FSOUND_Init (44100, 32, 0);
       // 装如
       handle=FMUSIC_LoadSong ("canyon.mid");
       // 只播放一次
       // 播放midi文件时请关闭循环播放
        FMUSIC_SetLooping (handle, false);
       //播放
       FMUSIC_PlaySong (handle);
      // 按任一键结束
       while (!_kbhit())
       {
       }
       //释放
       FMUSIC_FreeSong (handle);
       FSOUND_Close();
    }
    4.播放声音
    4.1 采样(Sample)方式
    先定义FSOUND_SAMPLE类型变量,然后就可以使用FSOUND系列函数来实现,如:
    装如文件:
    handle=FSOUND_Sample_Load (0,"YourFileName",0,0,0);  //除文件名外的参数用于多采样或其它等
    FSOUND_PlaySound (0,handle);
    设置音量:FSOUND_SetVolume (handle, 255);
    暂听:FSOUND_SetPaused (handle, true);
    重新开始:FSOUND_SetPaused (handle, false);
    停止:FSOUND_StopSound (handle);
    释放:FSOUND_Sample_Free (handle);
    下面是一个简单的例子:
    #include <conio.h>
    #include "inc/fmod.h"
    FSOUND_SAMPLE* handle;
    int main ()
    {
       // 初始化
       FSOUND_Init (44100, 32, 0);
       // 装载和播放
       handle=FSOUND_Sample_Load (0,"sample.mp3",0, 0, 0);
       FSOUND_PlaySound (0,handle);
       // 按任一键结束
       while (!_kbhit())
       {
       }
       // 释放
       FSOUND_Sample_Free (handle);
       FSOUND_Close();
    }
    4.2 流(stream)方式
    先定义一个FSOUND_STREAM 类型变量,然后:
    装入文件:
    handle=FSOUND_Stream_Open("YourFileName",0, 0, 0);
    FSOUND_Stream_Play (0,handle);
       提示:3.7版本之前的方式是不一样的.
    停止:FSOUND_Stream_Stop (handle);
    释放:FSOUND_Stream_Close(handle);
    其它和前面是一样的.下面是一个简单的例子:
    #include <conio.h>
    #include "inc/fmod.h"
    FSOUND_STREAM* handle;
    void main ()
    {
       //init FMOD sound system
       FSOUND_Init (44100, 32, 0);
       //load and play sample
       handle=FSOUND_Stream_Open("sample.mp3",0, 0, 0);
       FSOUND_Stream_Play (0,handle);
       //wait until the users hits a key to end the app
       while (!_kbhit())
       {
       }
       //clean up
       FSOUND_Stream_Close(handle);
       FSOUND_Close();
    }
    5.关闭
    FSOUND_Close ();
    参考:
    A Quick Guide to FMOD by Joachim Rohdehttp://www.gamedev.net/reference/articles/article2098.asp
    FMOD wiki(http://www.devmaster.net/wiki/FMod
  • 相关阅读:
    Postgresql HStore 插件试用小结
    postgres-xl 安装与部署 【异常处理】ERROR: could not open file (null)/STDIN_***_0 for write, No such file or directory
    GPDB 5.x PSQL Quick Reference
    postgresql 数据库schema 复制
    hive 打印日志
    gp与 pg 查询进程
    jquery table 发送两次请求 解惑
    python 字符串拼接效率打脸帖
    postgresql 日期类型处理实践
    IBM Rational Rose软件下载以及全破解方法
  • 原文地址:https://www.cnblogs.com/kex1n/p/2286463.html
  • Copyright © 2020-2023  润新知