uses
MMSystem;const
MAX_LEN = 255;
MSG_LEN = 1024;
DATABLOCK_SIZE = 1024;
HEAP_ZERO_MEMORY = $00000008;
EXCL_LEN = 8;
SONG_LEN = 3;
cMidi = 1;var
HMS: PHMIDISTRM;
PHM: PMIDIHDR;
uDeviceID: UINT;
MIDIEVENT: array[0..SONG_LEN] of TMIDIEVENT;procedure SetMidiEvent;
//これはとりあえずのデータです。
begin
MIDIEVENT[0].dwDeltaTime:= 0;
MIDIEVENT[0].dwStreamID:= 0;
MIDIEVENT[0].dwEvent:= MEVT_F_SHORT or MEVT_SHORTMSG or $7F3E90;
MIDIEVENT[0].dwParms[0]:= 0; MIDIEVENT[1].dwDeltaTime:= 100;
MIDIEVENT[1].dwStreamID:= 0;
MIDIEVENT[1].dwEvent:= MEVT_F_SHORT or MEVT_SHORTMSG or $003E90;
MIDIEVENT[1].dwParms[0]:= 0; MIDIEVENT[2].dwDeltaTime:= 100;
MIDIEVENT[2].dwStreamID:= 0;
MIDIEVENT[2].dwEvent:= MEVT_F_SHORT or MEVT_SHORTMSG or $7F3A90;
MIDIEVENT[2].dwParms[0]:= 0; MIDIEVENT[3].dwDeltaTime:= 100;
MIDIEVENT[3].dwStreamID:= 0;
MIDIEVENT[3].dwEvent:= MEVT_F_SHORT or MEVT_SHORTMSG or $003A90;
MIDIEVENT[3].dwParms[0]:= 0;
end;
procedure START;
var
mmr: MMResult;
begin
//ヒープの取得
PHM := HeapAlloc(GetProcessHeap,HEAP_ZERO_MEMORY,SizeOf(TMIDIHDR));
PHM.lpData:= HeapAlloc(GetProcessHeap,HEAP_ZERO_MEMORY,DATABLOCK_SIZE);
PHM.dwBufferLength:= DATABLOCK_SIZE; //Midi Deviceの取得
uDeviceID:= GetDeviceID; //Streamのオープン
New(HMS);
mmr:= midiStreamOpen(HMS,@uDeviceID,cMidi,0,0,0); //再生の中断
midiStreamPause(HMS^); //データの設定
PHM.dwBytesRecorded:=12;
//この数値の意味がよくわからない。12の倍数でないとパラメータが適切でないと
エラーが出る。 COPYMEMORY(PHM.lpData,MIDIEVENT,PHM.dwBufferLength);
//MIDIEVENTはアドレスです。なんかわかりませんが私のメールソフトでは@マーク
をここで使うと、メールアドレスになっちゃうので省きました。
PHM.dwFlags:=0; mmr:= midiOutPrepareHeader(HMIDIOUT(HMS^),PHM,SizeOf(TMIDIHDR));
mmr:= midiStreamRestart(HMS^);
mmr:= midiStreamOut(HMS^,PHM,SizeOf(TMIDIHDR));
end;
这是我从网上找到的,不明白为什么 PHM.dwBytesRecorded:=12
请高手指教。 我试了一下,如果不等于12什么也播不了,等于12也只能播出一个音符。
?????????
MMSystem;const
MAX_LEN = 255;
MSG_LEN = 1024;
DATABLOCK_SIZE = 1024;
HEAP_ZERO_MEMORY = $00000008;
EXCL_LEN = 8;
SONG_LEN = 3;
cMidi = 1;var
HMS: PHMIDISTRM;
PHM: PMIDIHDR;
uDeviceID: UINT;
MIDIEVENT: array[0..SONG_LEN] of TMIDIEVENT;procedure SetMidiEvent;
//これはとりあえずのデータです。
begin
MIDIEVENT[0].dwDeltaTime:= 0;
MIDIEVENT[0].dwStreamID:= 0;
MIDIEVENT[0].dwEvent:= MEVT_F_SHORT or MEVT_SHORTMSG or $7F3E90;
MIDIEVENT[0].dwParms[0]:= 0; MIDIEVENT[1].dwDeltaTime:= 100;
MIDIEVENT[1].dwStreamID:= 0;
MIDIEVENT[1].dwEvent:= MEVT_F_SHORT or MEVT_SHORTMSG or $003E90;
MIDIEVENT[1].dwParms[0]:= 0; MIDIEVENT[2].dwDeltaTime:= 100;
MIDIEVENT[2].dwStreamID:= 0;
MIDIEVENT[2].dwEvent:= MEVT_F_SHORT or MEVT_SHORTMSG or $7F3A90;
MIDIEVENT[2].dwParms[0]:= 0; MIDIEVENT[3].dwDeltaTime:= 100;
MIDIEVENT[3].dwStreamID:= 0;
MIDIEVENT[3].dwEvent:= MEVT_F_SHORT or MEVT_SHORTMSG or $003A90;
MIDIEVENT[3].dwParms[0]:= 0;
end;
procedure START;
var
mmr: MMResult;
begin
//ヒープの取得
PHM := HeapAlloc(GetProcessHeap,HEAP_ZERO_MEMORY,SizeOf(TMIDIHDR));
PHM.lpData:= HeapAlloc(GetProcessHeap,HEAP_ZERO_MEMORY,DATABLOCK_SIZE);
PHM.dwBufferLength:= DATABLOCK_SIZE; //Midi Deviceの取得
uDeviceID:= GetDeviceID; //Streamのオープン
New(HMS);
mmr:= midiStreamOpen(HMS,@uDeviceID,cMidi,0,0,0); //再生の中断
midiStreamPause(HMS^); //データの設定
PHM.dwBytesRecorded:=12;
//この数値の意味がよくわからない。12の倍数でないとパラメータが適切でないと
エラーが出る。 COPYMEMORY(PHM.lpData,MIDIEVENT,PHM.dwBufferLength);
//MIDIEVENTはアドレスです。なんかわかりませんが私のメールソフトでは@マーク
をここで使うと、メールアドレスになっちゃうので省きました。
PHM.dwFlags:=0; mmr:= midiOutPrepareHeader(HMIDIOUT(HMS^),PHM,SizeOf(TMIDIHDR));
mmr:= midiStreamRestart(HMS^);
mmr:= midiStreamOut(HMS^,PHM,SizeOf(TMIDIHDR));
end;
这是我从网上找到的,不明白为什么 PHM.dwBytesRecorded:=12
请高手指教。 我试了一下,如果不等于12什么也播不了,等于12也只能播出一个音符。
?????????
解决方案 »
- 数据库查询数量的命令是什么?
- 怎么改变treeview树形控件的某个节点颜色?请各路大侠帮忙?
- 只定义了一个KEY=13,怎么什么都响应了??
- 界面问题!
- 谁 能帮我编一个简单的计算器呀!!!
- TWebBrowser控件的安全级别问题
- 请问这行的意思!!!
- 请教高手们一个问题
- buff: array[0..64 * 1024 - 1] of Char; edit1.lines.add[buff] 在win2000下报错误
- 我用的2000server现在每次开机时出现如下错误提示,导致函数RegisterServerProcess不能使用.
- 奇怪的问题,有点搞笑
- 如何将TDataset转换为TADODataset?
如: 525 指'若一首乐曲放完,则放下一首
至于12我记不清楚了!