[MetaHook] Quake FMOD player demo
CFMOD.h
#ifndef CFMOD_H
#define CFMOD_H #include "qfmod.h" struct Sound_t
{
char *pszName;
FMOD_SOUND *pSound;
FMOD_CHANNEL *pChannel;
Sound_t *pNext;
}; #ifdef PlaySound
#undef PlaySound
#endif class CFmod
{
public:
CFmod();
~CFmod();
public:
void Init(void);
void PlaySound(char *pszFileName);
void StopSound(char *pszFileName);
void Shutdown(void);
private:
Sound_t* FindSound(char *pszFileName);
bool CacheSound(char *pszFileName);
private:
FMOD_SYSTEM *m_pSystem;
Sound_t *m_pBaseSound;
}; #endif
CFMOD.cpp
#include <metahook.h> #include "qfmod.h" #include "cfmod.h" extern IFileSystem *g_pFileSystem; CFmod::CFmod()
{
m_pSystem = NULL;
m_pBaseSound = NULL;
} CFmod::~CFmod()
{
m_pSystem = NULL;
m_pBaseSound = NULL;
} void CFmod::Init(void)
{
CFmod(); qFMOD_System_Create(&m_pSystem);
qFMOD_System_Init(m_pSystem, , FMOD_INIT_NORMAL, NULL);
} void CFmod::PlaySound(char *pszFileName)
{
if (!m_pSystem)
return; Sound_t *pSound = FindSound(pszFileName); if (!pSound)
{
if (!CacheSound(pszFileName))
return;
} pSound = FindSound(pszFileName); if (!pSound)
return; qFMOD_System_PlaySound(m_pSystem, FMOD_CHANNEL_FREE, pSound->pSound, NULL, &pSound->pChannel);
} void CFmod::StopSound(char *pszFileName)
{
if (!m_pSystem)
return; if (pszFileName != NULL)
{
Sound_t *pSound = FindSound(pszFileName); if (!pSound)
return; if (pSound->pChannel)
qFMOD_Channel_Stop(pSound->pChannel);
}
else
{
for (Sound_t *p = m_pBaseSound; p; p = p->pNext)
{
if (p->pChannel)
qFMOD_Channel_Stop(p->pChannel);
}
}
} void CFmod::Shutdown(void)
{
if (!m_pSystem)
return; Sound_t *p = m_pBaseSound;
Sound_t *t; while (p)
{
t = p->pNext; free(p->pszName);
qFMOD_Sound_Release(p->pSound);
delete p; p = t;
} qFMOD_System_Close(m_pSystem);
qFMOD_System_Release(m_pSystem);
} Sound_t* CFmod::FindSound(char *pszFileName)
{
if (!m_pSystem)
return NULL; for (Sound_t *p = m_pBaseSound; p; p = p->pNext)
{
if (p->pszName && !strcmp(p->pszName, pszFileName))
return p;
} return NULL;
} bool CFmod::CacheSound(char *pszFileName)
{
if (!m_pSystem)
return false; FileHandle_t pFile;
uint32 iFileLen;
BYTE *pBuffer;
FMOD_CREATESOUNDEXINFO ExInfo;
FMOD_SOUND *pSound;
Sound_t *pCache; pFile = g_pFileSystem->Open(pszFileName, "rb"); if (!pFile)
{
return false;
} g_pFileSystem->Seek(pFile, , FILESYSTEM_SEEK_TAIL);
iFileLen = g_pFileSystem->Tell(pFile);
g_pFileSystem->Seek(pFile, , FILESYSTEM_SEEK_HEAD); pBuffer = (BYTE *)malloc(iFileLen);
g_pFileSystem->Read(pBuffer, iFileLen, pFile); g_pFileSystem->Close(pFile); memset(&ExInfo, , sizeof(ExInfo));
ExInfo.cbsize = sizeof(ExInfo);
ExInfo.length = iFileLen; if (qFMOD_System_CreateSound(m_pSystem, (const char *)pBuffer, FMOD_HARDWARE | FMOD_OPENMEMORY, &ExInfo, &pSound) != FMOD_OK)
{
free(pBuffer);
return false;
} free(pBuffer); pCache = new Sound_t;
pCache->pszName = (char *)malloc(strlen(pszFileName) * sizeof(char) + );
strcpy(pCache->pszName, pszFileName);
pCache->pSound = pSound;
pCache->pChannel = NULL;
pCache->pNext = m_pBaseSound;
m_pBaseSound = pCache; return true;
}
[MetaHook] Quake FMOD player demo的更多相关文章
- [MetaHook] Quake FMOD function
QFMOD.h #ifndef QFMOD_H #define QFMOD_H #include "fmod.h" extern FMOD_RESULT (F_API *qFMOD ...
- [MetaHook] Quake OpenGL function
Quake OpenGL function for MetaHook plugin. Thank hzqst :D QGL.h #ifndef QGL_H #define QGL_H #include ...
- [MetaHook] Quake Bink function
If you want to play Bink video in game, maybe you need this code. QBink.h #ifndef QBINK_H #define QB ...
- 20款jQuery 的音频和视频插件
分享 20 款jQuery的音频和视频插件 Blueimp Gallery: DEMO || DOWNLOAD Blueimp gallery 主要为移动设备而设计,同时也支持桌面浏览器.可定制视频和 ...
- 23+ Useful HTML5 Open Source Online Video Players & Libraries,
Akamai’s Open Video Player for HTML5 <video> Akamai has released a new Open Video Player for H ...
- Ubuntu启动自动登录并启动程序
最近在研究Ubuntu,需要在系统启动之后自动登录,并且启动某个程序. 手上拿到的系统只有一个空桌面,其他嘛也没有,鼠标右键也不管用.于是借助自己的虚拟机研究发现,自动启动程序配置文件在: /home ...
- Qt5官方demo解析集35——Music Player(使用winextras模块)
本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集34——Concentr ...
- Composer Player 属性设置
/// <summary> /// 设置选中名称 /// </summary> /// <param name="name"></para ...
- HTML5打造的炫酷本地音乐播放器-喵喵Player
将之前捣腾的音乐频谱效果加上一个播放列表就成了现在的喵喵播放器(Meow meow Player,额知道这名字很二很装萌~),全HTML5打造的网页程序,可本地运行也可以挂服务器上用. 在线Demo及 ...
随机推荐
- centos7 ssh 设置key认证
vi /etc/ssh/sshd_config 查找RSAAuthentication.StrictModes.PubkeyAuthentication.AuthorizedKeysFile把所在行修 ...
- JavaScript Patterns 5.2 Declaring Dependencies
It’s a good idea to declare the modules your code relies on at the top of your function or module. T ...
- Sql Server之旅——第三站 解惑那些背了多年聚集索引的人
说到聚集索引,我想每个码农都明白,但是也有很多像我这样的猥程序员,只能用死记硬背来解决这个问题,什么表中只能建一个聚集索引, 然后又扯到了目录查找来帮助读者记忆....问题就在这里,我们不是学文科,, ...
- JBOSS目录结构详细说明
一.下载与安装. 如何下载以及安装配置,请参考:Windows下JBOSS安装配置图文教程 二.现在主要了解一下JBOSS目录结构. 1. 主目录: E:\jboos\jboss-6.1.0.Fina ...
- cat,tac,more
cat VS tac cat是查看文本文件的内容,tac是cat反过来,反向查看文件 $cat 1.txt ls: cannot access ee: No such file or director ...
- Linux开机启动(bootstrap)
计算机开机是一个神秘的过程.我们只是按了开机键,就看到屏幕上的进度条或者一行行的输出,直到我们到达登录界面.然而,计算机开机又是个异常脆弱的过程,我们满心期望的登录界面可能并不会出现,而是一个命令行或 ...
- Docker+OpenvSwitch搭建VxLAN实验环境
一.概述 1.环境:我这里是2台linux机器(host1和host2),发行版是kali2.0, ...
- STM32之USART-RS485
转载自:http://www.cnblogs.com/itloverhpu/p/3278014.html 1.今天调试HDMI8X8背板和板卡的通信,一直有问题:背板可以和PC正常通信,背板可以发命令 ...
- linux 通过scp 复制备份恢复mysql数据表
最近客户有个需求,小弟对于运维的东西也是半瓶醋,所以就果断的摸索了下.折磨了一个晚上终于算是搞定了.因为是两个不同的服务器,本来想用ftp,无奈小弟不是很熟悉,所以就用了scp,但是scp有个问题就是 ...
- Google Cloud Platform
一个离我们很遥远,很遥远的公司.作为全球三大公有云厂商之一,在国内根本听不到他的声音.其实吧,听到了也没用,因为在国内没法用!AWS还在纠结的落地过程中挣扎,GCP基本上就当不存在吧. 抛开这些乌烟瘴 ...