嘗試過的library:
midi io library
mmsystem.h
midifile
以下是透過 visual c++ 2013 改造過的 midi 程式碼:
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <mmsystem.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int ckey;
int notestate = 0;
int velocity = 100;
int midiport;
int flag;
HMIDIOUT device;
union { unsigned long word; unsigned char data[4]; } message;
message.data[0] = 0x90;
message.data[1] = 60;
message.data[2] = 100;
message.data[3] = 0;
midiport = 0;
flag = midiOutOpen(&device, midiport, 0, 0, CALLBACK_NULL);
if (flag != MMSYSERR_NOERROR) {
printf("MIDI錯誤 \n");
return 1;
}
printf("Press \"q\" to quit.\n");
while (1) {
if (_kbhit()) {
ckey = getchar();
if (notestate == 0) {
message.data[2] = velocity;
notestate = 1;
printf("Note turned ON.\n");
}
else {
message.data[2] = 0;
notestate = 0;
printf("Note turned OFF.\n");
}
flag = midiOutShortMsg(device, message.word);
if (flag != MMSYSERR_NOERROR) {
printf("Warning: MIDI Output is not open.\n");
}
if (ckey == 'q') break;
}
}
midiOutReset(device);
midiOutClose(device);
return 0;
}
最後,記得在 Linker 中加入一個 winmm.lib 這個library 編譯才會通過
參考文件:
http://www.ccarh.org/courses/253/lab/midiprog/keymidi/keymidi.c
http://improv.sapp.org/doc/howto/basicoutput/
https://code.msdn.microsoft.com/windowsapps/MIDI-Windows-Runtime-sample-4fd6dcbc
http://nauful.com/pages/midiprogramming.html
https://social.msdn.microsoft.com/Forums/vstudio/en-US/7f023e53-a917-458b-af72-783d42f506bb/lphmidiout-hmidiout-and-midioutopen-problem-in-vs2005?forum=vclanguage
http://www.43577.com/show/857284.shtml
沒有留言:
張貼留言