随笔 - 2146  文章 - 19 评论 - 11846 阅读 - 1267万

随笔分类 -  API MIDI 专栏

1 2 下一页
捕捉 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) 推荐(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) 评论(7) 推荐(0) 编辑
WinAPI: midiOutOpen - 打开 MIDI 输出设备
摘要:提示: 因为其中的回调函数是在中断时间内访问的, 必须在 DLL 中; 要访问的数据都必须是在固定的数据段中; 除了 PostMessage timeGetSystemTime timeGetTime timeSetEvent timeKillEvent midiOutShortMsg midiOutLongMsg OutputDebugString 外, 也不能有其他系统调用. //声明:... 阅读全文
posted @ 2008-02-23 23:19 万一 阅读(5695) 评论(17) 推荐(0) 编辑
WinAPI: midiInOpen - 打开 MIDI 输入设备
摘要:提示: 因为其中的回调函数是在中断时间内访问的, 必须在 DLL 中; 要访问的数据都必须是在固定的数据段中; 除了 PostMessage timeGetSystemTime timeGetTime timeSetEvent timeKillEvent midiOutShortMsg midiOutLongMsg OutputDebugString 外, 也不能有其他系统调用. //声明:... 阅读全文
posted @ 2008-02-23 22:54 万一 阅读(4240) 评论(0) 推荐(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) 推荐(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) 推荐(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) 推荐(0) 编辑
WinAPI: midiOutGetVolume - 获取 MIDI 输出设备的音量
摘要://声明: midiOutGetVolume( hmo: HMIDIOUT; {设备句柄} lpdwVolume: PDWORD {返回音量的地址; 低两位是左声道音量, 高两位是右声道音量; $FFFF是最大, $0000是最小} ): MMRESULT; {成功返回 0; 可能的错误值如下:} MMSYSERR_INVALHANDLE = 5; ... 阅读全文
posted @ 2008-02-23 21:01 万一 阅读(1755) 评论(0) 推荐(0) 编辑
WinAPI: midiInAddBuffer - 向 MIDI 输入设备发送一个输入缓冲区
摘要:提示: 缓冲区写满后送回应用程序; 输入缓冲区只用于系统互斥的消息; 在缓冲区传给 midiInAddBuffer 之前, 先要调用 midiInPrepareHeader 准备; 还要调用 GlobalAlloc 给 TMidiHdr 和其中 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定. //声明: ... 阅读全文
posted @ 2008-02-22 22:47 万一 阅读(1783) 评论(0) 推荐(0) 编辑
WinAPI: midiOutGetErrorText - 根据错误号得到错误描述
摘要:提示: 错误文本的长度一般不超过 MAXERRORLENGTH = 128; 如果缓冲区太小, 文本会被截断. //声明: midiOutGetErrorText( mmrError: MMRESULT; {错误号} lpText: PChar; {缓冲区} uSize: UINT {缓冲区大小} ): MMRESULT; {成功返回 0... 阅读全文
posted @ 2008-02-22 22:30 万一 阅读(1254) 评论(0) 推荐(0) 编辑
WinAPI: midiInGetErrorText - 根据错误号得到错误描述
摘要:提示: 错误文本的长度一般不超过 MAXERRORLENGTH = 128; 如果缓冲区太小, 文本会被截断. //声明: midiInGetErrorText( mmrError: MMRESULT; {错误号} lpText: PChar; {缓冲区} uSize: UINT {缓冲区大小} ): MMRESULT; {成功返回 0;... 阅读全文
posted @ 2008-02-22 22:29 万一 阅读(1160) 评论(0) 推荐(0) 编辑
WinAPI: midiInMessage - 向 MIDI 输入设备发送一条消息
摘要://声明: midiInMessage( hMidiIn: HMIDIIN; {设备句柄} uMessage: UINT; {消息} dw1: DWORD {消息参数} dw2: DWORD {消息参数} ): MMRESULT; {函数成功返回发送的消息} //举例: 阅读全文
posted @ 2008-02-22 22:24 万一 阅读(1615) 评论(0) 推荐(0) 编辑
WinAPI: midiOutMessage - 向 MIDI 输出设备发送一条消息
摘要://声明: midiOutMessage( hMidiOut: HMIDIOUT; {设备句柄} uMessage: UINT; {消息} dw1: DWORD {消息参数} dw2: DWORD {消息参数} ): MMRESULT; {函数成功返回发送的消息} //举例: 阅读全文
posted @ 2008-02-22 22:23 万一 阅读(1796) 评论(0) 推荐(0) 编辑
WinAPI: midiOutLongMsg - 向输出设备发送一条系统专用的 MIDI 消息
摘要:提示: 在缓冲区给 midiOutLongMsg 之前, 先要调用 midiOutPrepareHeader 准备; 还要调用 GlobalAlloc 给 TMidiHdr 和其中 lpData 指向的缓冲区分配内存(使用 GMEM_MOVEABLE、GMEM_SHARE), 并用 GlobalLock 锁定. //声明: midiOutLongMsg( hMidiOut: HMIDIO... 阅读全文
posted @ 2008-02-22 22:18 万一 阅读(2109) 评论(2) 推荐(0) 编辑
WinAPI: midiOutShortMsg - 向输出设备发送 MIDI 短消息
摘要:提示: 此函数可以发送系统专用消息以外的任何 MIDI 消息; 直到已经发送给输出设备才返回. //声明: midiOutShortMsg( hMidiOut: HMIDIOUT; {设备句柄} dwMsg: DWORD {MIDI 消息; 消息是 2 字节, 第一字节在低位} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSY... 阅读全文
posted @ 2008-02-22 22:07 万一 阅读(2274) 评论(0) 推荐(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) 推荐(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) 推荐(0) 编辑
WinAPI: midiOutReset - 重置输出设备
摘要:提示: 函数将关闭通道上的所有标记, 放弃未处理的缓冲区并返回给程序; //声明: midiOutReset( hMidiOut: HMIDIOUT {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE = 5; {设备句柄无效} //举例: 阅读全文
posted @ 2008-02-22 21:41 万一 阅读(1353) 评论(0) 推荐(0) 编辑
WinAPI: midiOutClose - 关闭输出设备
摘要:提示: 函数成功后, 句柄不再有效; 如果已经发送给 midiOutLongMsg 函数的缓冲区没有返回给程序, 函数会失败; 调用 midiOutReset 可将所有挂起的缓冲区标记为已执行. //声明: midiOutClose( hMidiOut: HMIDIOUT {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INV... 阅读全文
posted @ 2008-02-22 21:35 万一 阅读(1334) 评论(0) 推荐(0) 编辑
WinAPI: midiInClose - 关闭输入设备
摘要:提示: 函数成功后, 句柄不再有效; 如果 midiInAddBuffer 发送的缓冲区没有返回到程序, 函数会失败; 调用 midiInReset 可将所有挂起的缓冲区标记为已执行. //声明: midiInClose( hMidiIn: HMIDIIN {设备句柄} ): MMRESULT; {成功返回 0; 可能的错误值见下:} MMSYSERR_INVALHANDLE... 阅读全文
posted @ 2008-02-22 21:31 万一 阅读(1319) 评论(0) 推荐(0) 编辑

1 2 下一页


点击右上角即可分享
微信分享提示