捕捉 midi 输入消息的基本程序
摘要:uses MMSystem;var hMidiIn: Integer;procedure midiCallBack(hdrvr: HDRVR; uMsg: UINT; dwUser: DWORD; dw1, dw2: DWORD) stdcall;begin case uMsg of MIM_OPEN: ; MIM_CLOSE: ; MIM_DATA: Form1.Memo1.Lines.Add(IntToStr(dw1)); MIM_LONGDATA: ; MIM_ERROR: ; MIM_LONGERROR: ; end;end;procedure ...
阅读全文
posted @
2011-10-31 16:40
万一
阅读(2992)
推荐(0) 编辑
绘制一个钢琴键盘
摘要:刚帮朋友解决了一个小问题, 这是其中的小片段: 本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) ...
阅读全文
posted @
2009-01-09 00:26
万一
阅读(7244)
推荐(0) 编辑
WinAPI: midiOutOpen - 打开 MIDI 输出设备
摘要:提示: 因为其中的回调函数是在中断时间内访问的, 必须在 DLL 中; 要访问的数据都必须是在固定的数据段中; 除了 PostMessage timeGetSystemTime timeGetTime timeSetEvent timeKillEvent midiOutShortMsg midiOutLongMsg OutputDebugString 外, 也不能有其他系统调用. //声明:...
阅读全文
posted @
2008-02-23 23:19
万一
阅读(5695)
推荐(0) 编辑
WinAPI: midiInOpen - 打开 MIDI 输入设备
摘要:提示: 因为其中的回调函数是在中断时间内访问的, 必须在 DLL 中; 要访问的数据都必须是在固定的数据段中; 除了 PostMessage timeGetSystemTime timeGetTime timeSetEvent timeKillEvent midiOutShortMsg midiOutLongMsg OutputDebugString 外, 也不能有其他系统调用. //声明:...
阅读全文
posted @
2008-02-23 22:54
万一
阅读(4240)
推荐(0) 编辑
WinAPI: midiOutCacheDrumPatches - 预装鼓音色
摘要:提示: 参数三数组中的每一个元素代表 128 种鼓音色中的一种; MIDI 通道用 0-15 表示, 譬如通道 9 和 15 使用了 60 号键上的音色, 数组的第 60 个元素就是 $8200. //声明: midiOutCacheDrumPatches( hMidiOut: HMIDIOUT; {设备句柄; 这个设备应该是内部合成器} uPatch: UINT; {指定鼓...
阅读全文
posted @
2008-02-23 22:24
万一
阅读(1729)
推荐(0) 编辑
WinAPI: midiOutCachePatches - 预装音色
摘要:提示: 参数三数组中的每一个元素代表 128 种音色中的一种; MIDI 通道用 0..15 表示, 譬如通道 0 和 8 使用了 0 号音色, 数组的第 0 个元素就是 $0101. //声明: midiOutCachePatches( hMidiOut: HMIDIOUT; {设备句柄; 这个设备应该是内部合成器} uBank: UINT; {指定音色组; 缺...
阅读全文
posted @
2008-02-23 21:52
万一
阅读(1519)
推荐(0) 编辑
WinAPI: midiOutSetVolume - 设置 MIDI 输出设备的音量
摘要://声明: midiOutSetVolume( hmo: HMIDIOUT; {设备句柄} dwVolume: DWORD {新的音量值; 低两位是左声道音量, 高两位是右声道音量; $FFFF是最大, $0000是最小} ): MMRESULT; {成功返回 0; 可能的错误值如下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} MMSYSE...
阅读全文
posted @
2008-02-23 21:05
万一
阅读(2029)
推荐(0) 编辑
WinAPI: midiOutGetVolume - 获取 MIDI 输出设备的音量
摘要://声明: midiOutGetVolume( hmo: HMIDIOUT; {设备句柄} lpdwVolume: PDWORD {返回音量的地址; 低两位是左声道音量, 高两位是右声道音量; $FFFF是最大, $0000是最小} ): MMRESULT; {成功返回 0; 可能的错误值如下:} MMSYSERR_INVALHANDLE = 5; ...
阅读全文
posted @
2008-02-23 21:01
万一
阅读(1755)
推荐(0) 编辑
WinAPI: midiInAddBuffer - 向 MIDI 输入设备发送一个输入缓冲区
摘要:提示: 缓冲区写满后送回应用程序; 输入缓冲区只用于系统互斥的消息; 在缓冲区传给 midiInAddBuffer 之前, 先要调用 midiInPrepareHeader 准备; 还要调用 GlobalAlloc 给 TMidiHdr 和其中 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定. //声明: ...
阅读全文
posted @
2008-02-22 22:47
万一
阅读(1783)
推荐(0) 编辑
WinAPI: midiOutGetErrorText - 根据错误号得到错误描述
摘要:提示: 错误文本的长度一般不超过 MAXERRORLENGTH = 128; 如果缓冲区太小, 文本会被截断. //声明: midiOutGetErrorText( mmrError: MMRESULT; {错误号} lpText: PChar; {缓冲区} uSize: UINT {缓冲区大小} ): MMRESULT; {成功返回 0...
阅读全文
posted @
2008-02-22 22:30
万一
阅读(1254)
推荐(0) 编辑
WinAPI: midiInGetErrorText - 根据错误号得到错误描述
摘要:提示: 错误文本的长度一般不超过 MAXERRORLENGTH = 128; 如果缓冲区太小, 文本会被截断. //声明: midiInGetErrorText( mmrError: MMRESULT; {错误号} lpText: PChar; {缓冲区} uSize: UINT {缓冲区大小} ): MMRESULT; {成功返回 0;...
阅读全文
posted @
2008-02-22 22:29
万一
阅读(1160)
推荐(0) 编辑
WinAPI: midiInMessage - 向 MIDI 输入设备发送一条消息
摘要://声明: midiInMessage( hMidiIn: HMIDIIN; {设备句柄} uMessage: UINT; {消息} dw1: DWORD {消息参数} dw2: DWORD {消息参数} ): MMRESULT; {函数成功返回发送的消息} //举例:
阅读全文
posted @
2008-02-22 22:24
万一
阅读(1615)
推荐(0) 编辑
WinAPI: midiOutMessage - 向 MIDI 输出设备发送一条消息
摘要://声明: midiOutMessage( hMidiOut: HMIDIOUT; {设备句柄} uMessage: UINT; {消息} dw1: DWORD {消息参数} dw2: DWORD {消息参数} ): MMRESULT; {函数成功返回发送的消息} //举例:
阅读全文
posted @
2008-02-22 22:23
万一
阅读(1796)
推荐(0) 编辑
WinAPI: midiOutLongMsg - 向输出设备发送一条系统专用的 MIDI 消息
摘要:提示: 在缓冲区给 midiOutLongMsg 之前, 先要调用 midiOutPrepareHeader 准备; 还要调用 GlobalAlloc 给 TMidiHdr 和其中 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定. //声明: midiOutLongMsg( hMidiOut: HMIDIO...
阅读全文
posted @
2008-02-22 22:18
万一
阅读(2109)
推荐(0) 编辑
WinAPI: midiOutShortMsg - 向输出设备发送 MIDI 短消息
摘要:提示: 此函数可以发送系统专用消息以外的任何 MIDI 消息; 直到已经发送给输出设备才返回. //声明: midiOutShortMsg( hMidiOut: HMIDIOUT; {设备句柄} dwMsg: DWORD {MIDI 消息; 消息是 2 字节, 第一字节在低位} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSY...
阅读全文
posted @
2008-02-22 22:07
万一
阅读(2274)
推荐(0) 编辑
WinAPI: midiOutGetDevCaps - 查询输出设备性能
摘要://声明: midiOutGetDevCaps( uDeviceID: UINT; {设备 ID} lpCaps: PMidiOutCaps; {TMidiOutCaps 结构的指针} uSize: UINT {TMidiOutCaps 结构的大小} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_BAD...
阅读全文
posted @
2008-02-22 21:56
万一
阅读(1748)
推荐(0) 编辑
WinAPI: midiInGetDevCaps - 查询输入设备性能
摘要://声明: midiInGetDevCaps( DeviceID: UINT; {设备 ID} lpCaps: PMidiInCaps; {TMidiInCaps 结构的指针} uSize: UINT {TMidiInCaps 结构的大小} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_BADDEVICE...
阅读全文
posted @
2008-02-22 21:53
万一
阅读(1766)
推荐(0) 编辑
WinAPI: midiOutReset - 重置输出设备
摘要:提示: 函数将关闭通道上的所有标记, 放弃未处理的缓冲区并返回给程序; //声明: midiOutReset( hMidiOut: HMIDIOUT {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} //举例:
阅读全文
posted @
2008-02-22 21:41
万一
阅读(1353)
推荐(0) 编辑
WinAPI: midiOutClose - 关闭输出设备
摘要:提示: 函数成功后, 句柄不再有效; 如果已经发送给 midiOutLongMsg 函数的缓冲区没有返回给程序, 函数会失败; 调用 midiOutReset 可将所有挂起的缓冲区标记为已执行. //声明: midiOutClose( hMidiOut: HMIDIOUT {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INV...
阅读全文
posted @
2008-02-22 21:35
万一
阅读(1334)
推荐(0) 编辑
WinAPI: midiInClose - 关闭输入设备
摘要:提示: 函数成功后, 句柄不再有效; 如果 midiInAddBuffer 发送的缓冲区没有返回到程序, 函数会失败; 调用 midiInReset 可将所有挂起的缓冲区标记为已执行. //声明: midiInClose( hMidiIn: HMIDIIN {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE...
阅读全文
posted @
2008-02-22 21:31
万一
阅读(1319)
推荐(0) 编辑