开发游戏音频程序——播放MIDI文件

本文介绍了一个C风格的MIDI播放程序,利用DirectMusic API实现MIDI文件的加载和播放,包括设置音量、播放速度等功能。通过示例代码展示了如何初始化DirectMusic、载入MIDI、控制播放速度和检查播放状态。
摘要由CSDN通过智能技术生成

 

开发游戏音频程序——播放MIDI文件

       在沉寂了一段时间之后。我开始开发游戏的音频程序了。今天我要为大家展示的是我写的播放MIDI的程序,其实不要以为MIDI的载入和播放很复杂,其实它是相当的简单、只需要选用合适的解码器就行了。现在又几种解码器可以选择。MCI和DirectMusic。其中MCI是windows特别对多媒体应用程序提供的API集合,它可以播放很多流行的格式。但是对MIDI的控制性比较低。而DirectMusic则对MIDI有着较丰富的支持,最典型的就是可以控制节奏(tempo)。

       我的代码没有对DirectMusic进行封装,使用C的风格制作的。所以大家看起来很好理解。下面我就来展示我写的代码吧。

 

Main.h

/*---------------------------------------------------------------------------

蒋轶民制作E-mail:jiangcaiyang123@163.com

最后编辑:年月日:42:29

文件名:main.h

作用:头文件的定义

----------------------------------------------------------------------------*/

/*-----------------------------头文件---------------------------------------*/

#include <dmusici.h>

#include <dmusicf.h>

#include "CWaveFile.h"

 

// 库文件

#pragma comment( lib, "dxguid.lib" )

/*-----------------------------全局变量-------------------------------------*/

IDirectMusicLoader8* g_pLoader                          = NULL;

IDirectMusicSegment8* g_pSegment                   = NULL;

IDirectMusicPerformance8* g_pPerformance           = NULL;

IDirectMusicSegmentState* g_pSegmentState          = NULL;

IDirectMusicAudioPath8* g_pAudioPath               = NULL;

/*------------------------获取控制台窗口句柄----------------------------*/

HWND GetConsoleWindowHandle( void )

{

     TCHAR title[512];

     HWND hWnd;

 

     GetConsoleTitle( title, sizeof( title ) );

     hWnd = FindWindow( NULL, title );

     return( hWnd );

}

/*------------------------初始化----------------------------------------*/

void Initialize( void )

{

     HWND hConsoleWnd = GetConsoleWindowHandle();

     HRESULT hr;// 结果的句柄

 

     // 1、初始化COM组件

     hr = CoInitialize( NULL );

     ThrowIfFailed( hr, "1、初始化COM组件错误。" );

 

     // 2、创建装载器

     hr = CoCreateInstance( CLSID_DirectMusicLoader, NULL,

         CLSCTX_INPROC, IID_IDirectMusicLoader8, (void**)&g_pLoader );

     ThrowIfFailed( hr, "2、创建装载器错误" );

 

     // 3、创建演艺对象

     hr = CoCreateInstance( CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC,

         IID_IDirectMusicPerformance8, (void**)&g_pPerformance );

     ThrowIfFailed( hr, "3、创建演艺对象错误" );

 

     // 4、初始化音频</

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值