2012-08-17 120 views
0

我目前正在使用Scripthook C++为Grand Theft Auto IV编写一个脚本mod。 我一直在使用此模板播放音频文件:Simple C++ MP3 Player Class从资源文件中使用directshow播放音频

我的问题始于试图使用资源中的文件。 我不知道如何加载它们。

每当我尝试使用我的代码从资源加载声音时,游戏就会崩溃。 已经花费数小时浏览谷歌关于如何从资源播放DirectShow音频没有任何结果。

内部资源文件:从硬盘

(resource.h) #define WAV_Sound   106 
(resource.rc) WAV_Sound     RCDATA     "MySound.wav" 

加载文件工作正常

Load(TEXT("MySound.wav")); 

但是游戏崩溃当我尝试这一个:

// Load from resource #1 
    LPCWSTR file = MAKEINTRESOURCE(WAV_Sound); 
    Load(file); 

// Load from resource #2 
    Load((LPCWSTR) WAV_Sound); 

希望有人能够帮助我出去了,谢谢!

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms648046(v=vs.85).aspx – Cubic 2012-08-17 17:07:49

+0

对不起,但我仍然没有管理如何得到它工作。这就是我设法写的,但当我运行我的脚本时听不到任何音频... 'hExe = LoadLibrary(TEXT(“EMS MOD.asi”)); \t hRes = FindResource(hExe,MAKEINTRESOURCE(WAV_MV_ReportingForDuty),RT_RCDATA); \t hResLoad = LoadResource(hExe,hRes); \t Audio_Load((LPCWSTR)hResLoad); \t Audio_Play();' – Mordecki 2012-08-17 18:16:48

+0

'DirectShow'从资源播放是可能的,但会是一个戏剧性的矫枉过正。如果文件很小,最好的做法是使用LoadResource API并通过传统的'waveOutOpen'和朋友播放(直接:转换while文件,然后将其添加为单个大缓冲区进行播放)。应该有一些压缩音频的教程,以及初学者http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=4422&lngWId=3 – 2012-08-17 19:12:13

回答

0

微软推荐使用DirectX Audio为开发游戏提供多层接口,即XAudio2,X3DAudio,XACT等等,它们在2D/3D游戏环境中处理声音效果非常强大。这里是链接http://msdn.microsoft.com/en-us/library/ee415737%28v=vs.85%29

请下载并安装DirectX软件开发工具包,找到“XAudio2BasicSound”为例,从文件或资源或DLL和播放IXAudio2界面中打开波形文件,这是非常简单的例子,但下一步你可以为你的游戏添加声音效果。