Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2341848
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:04:23

typedef struct
{
  unsigned char Clocks;
  unsigned char Status; //Note=0x9n, n=Chn:1-16, ProgChg=0xCn, n=Chn
  unsigned char Note;
  unsigned char Velocity;
} TMidiNote;

unsigned char Phrase[] =
{
  0, 0xc0,  0,   0,
  0, 0x90, 60, 127,
 50, 0x90, 60,   0,
  0, 0x90, 60, 127,
 50, 0x90, 60,   0,
  0, 0x90, 67, 127,
 50, 0x90, 67,   0,
  0, 0x90, 67, 127,
 50, 0x90, 67,   0,
  0, 0x90, 69, 127,
 50, 0x90, 69,   0,
  0, 0x90, 69, 127,
 50, 0x90, 69,   0,
  0, 0x90, 67, 127,
 90, 0x90, 67,   0,
 10, 0x90, 65, 127,
 50, 0x90, 65,   0,
  0, 0x90, 65, 127,
 50, 0x90, 65,   0,
  0, 0x90, 64, 127,
 50, 0x90, 64,   0,
  0, 0x90, 64, 127,
 50, 0x90, 64,   0,
  0, 0x90, 62, 127,
 50, 0x90, 62,   0,
  0, 0x90, 62, 127,
 50, 0x90, 62,   0,
  0, 0x90, 60, 127,
100, 0x90, 60,   0,
  0, 0x00,  0,   0
};

#define PPQN_TEMPO_FACTOR 10
int test(void)
{
  HMIDIOUT        handle;
  unsigned char * ptr;
  unsigned long   err;

  union
   {
    DWORD dwData;
    UCHAR bData[4];
   } u;

  if(!(err = midiOutOpen(&handle, (UINT)-1, 0, 0, CALLBACK_NULL)))
   {
     ptr = &Phrase[0];
     do
      {
        if (*ptr) Sleep(*ptr * PPQN_TEMPO_FACTOR);
        ptr++;
        u.bData[0] = (UCHAR)*(ptr)++;
        u.bData[1] = (UCHAR)*(ptr)++;
        u.bData[2] = (UCHAR)*(ptr)++;
        u.bData[3] = 0;

        if ((err = midiOutShortMsg(handle, u.dwData)))
         {
           //PrintMidiOutErrorMsg(err);
         }
      } while (*(ptr + 1));
     midiOutClose(handle);
   }
  else
   {
     //PrintMidiOutErrorMsg(err);
   }
  return(0);
}

--------------------next---------------------

阅读(1133) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~