wavelib.c
来自「深圳市微逻辑电子有限公司 巨果• Kingmos® 系统核心」· C语言 代码 · 共 2,138 行 · 第 1/5 页
C
2,138 行
UINT WINAPI aud_midiInGetNumDevs(VOID)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINGETNUMDEVS, 0 );
cs.arg0 = (DWORD)0;
return (DWORD)CALL_SERVER( &cs);
// return ( (PMIDIINGETNUMDEVS)CALL_API( API_AUDIO, AUDIO_MIDIINGETNUMDEVS, 0 ) )();
#else
PMIDIINGETNUMDEVS pmidiingetnumdevs;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINGETNUMDEVS, &pmidiingetnumdevs, &cs ) )
{
retv = pmidiingetnumdevs();
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:DWORD WINAPI aud_midiInMessage(HMIDIIN hMidiIn,UINT msg,DWORD dw1,DWORD dw2)
// 参数:
// IN hMidiIn -- MIDI输入设备句柄
// IN msg -- 要发送的消息
// IN dw1 -- 消息参数1
// IN dw2 -- 消息参数2
// 返回值:
// 返回设备返回的值。
// 功能描述:给一个MIDI输入设备发送一个消息
// 引用: MIDI API函数接口
// ********************************************************************
typedef DWORD (WINAPI *PMIDIINMESSAGE)(HMIDIIN hMidiIn,UINT msg,DWORD dw1,DWORD dw2);
DWORD WINAPI aud_midiInMessage(HMIDIIN hMidiIn,UINT msg,DWORD dw1,DWORD dw2)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINMESSAGE, 4 );
cs.arg0 = (DWORD)hMidiIn;
return (DWORD)CALL_SERVER( &cs, msg,dw1,dw2);
// return ( (PMIDIINMESSAGE)CALL_API( API_AUDIO, AUDIO_MIDIINMESSAGE, 4 ) )(hMidiIn,msg,dw1,dw2);
#else
PMIDIINMESSAGE pmidiinmessage;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINMESSAGE, &pmidiinmessage, &cs ) )
{
retv = pmidiinmessage(hMidiIn,msg,dw1,dw2);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInOpen(LPHMIDIIN lphMidiIn,UINT uDeviceID,DWORD dwCallback,DWORD dwCallbackInstance,DWORD dwFlags)
// 参数:
// OUT lphMidiIn -- 一个指向MIDI输入设备句柄的指针
// IN uDeviceID -- 设备ID
// IN dwCallback -- 一个指向回调函数,窗口句柄。。。的值,具体有dwFlags指定
// IN dwCallbackInstance -- 回调者的实例句柄
// IN dwFlags -- 回调类型
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:打开一个指定ID的MIDI输入设备
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINOPEN)(LPHMIDIIN lphMidiIn,UINT uDeviceID,DWORD dwCallback,DWORD dwCallbackInstance,DWORD dwFlags);
MMRESULT WINAPI aud_midiInOpen(LPHMIDIIN lphMidiIn,UINT uDeviceID,DWORD dwCallback,DWORD dwCallbackInstance,DWORD dwFlags)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINOPEN, 5 );
cs.arg0 = (DWORD)lphMidiIn;
return (DWORD)CALL_SERVER( &cs, uDeviceID,dwCallback,dwCallbackInstance,dwFlags);
// return ( (PMIDIINOPEN)CALL_API( API_AUDIO, AUDIO_MIDIINOPEN, 5 ) )(lphMidiIn,uDeviceID,dwCallback,dwCallbackInstance,dwFlags);
#else
PMIDIINOPEN pmidiinopen;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINOPEN, &pmidiinopen, &cs ) )
{
lphMidiIn = MapProcessPtr( lphMidiIn, (LPPROCESS)cs.lpvData );
retv = pmidiinopen(lphMidiIn,uDeviceID,dwCallback,dwCallbackInstance,dwFlags);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInPrepareHeader(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr)
// 参数:
// IN hMidiIn -- MIDI输入设备句柄
// IN lpMidiInHdr -- 一个指向MIDIHDR结构的指针
// IN cbMidiInHdr -- 结构MIDIHDR的尺寸
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:准备一个输入缓存。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINPREPAREHEADER)(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr);
MMRESULT WINAPI aud_midiInPrepareHeader(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINPREPAREHEADER, 3 );
cs.arg0 = (DWORD)hMidiIn;
return (DWORD)CALL_SERVER( &cs, lpMidiInHdr,cbMidiInHdr);
// return ( (PMIDIINPREPAREHEADER)CALL_API( API_AUDIO, AUDIO_MIDIINPREPAREHEADER, 3 ) )(hMidiIn,lpMidiInHdr,cbMidiInHdr);
#else
PMIDIINPREPAREHEADER pmidiinprepareheader;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINPREPAREHEADER, &pmidiinprepareheader, &cs ) )
{
lpMidiInHdr = MapProcessPtr( lpMidiInHdr, (LPPROCESS)cs.lpvData );
retv = pmidiinprepareheader(hMidiIn,lpMidiInHdr,cbMidiInHdr);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInReset(HMIDIIN hMidiIn)
// 参数:
// IN hMidiIn -- MIDI输入设备句柄
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:停止一个输入设备输入数据。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINRESET)(HMIDIIN hMidiIn);
MMRESULT WINAPI aud_midiInReset(HMIDIIN hMidiIn)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINRESET, 1 );
cs.arg0 = (DWORD)hMidiIn;
return (DWORD)CALL_SERVER( &cs);
// return ( (PMIDIINRESET)CALL_API( API_AUDIO, AUDIO_MIDIINRESET, 1 ) )(hMidiIn);
#else
PMIDIINRESET pmidiinreset;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINRESET, &pmidiinreset, &cs ) )
{
retv = pmidiinreset(hMidiIn);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInStart(HMIDIIN hMidiIn)
// 参数:
// IN hMidiIn -- MIDI输入设备句柄
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:用一个指定输入设备开始输入数据。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINSTART)(HMIDIIN hMidiIn);
MMRESULT WINAPI aud_midiInStart(HMIDIIN hMidiIn)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINSTART, 1 );
cs.arg0 = (DWORD)hMidiIn;
return (DWORD)CALL_SERVER( &cs);
// return ( (PMIDIINSTART)CALL_API( API_AUDIO, AUDIO_MIDIINSTART, 1 ) )(hMidiIn);
#else
PMIDIINSTART pmidiinstart;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINSTART, &pmidiinstart, &cs ) )
{
retv = pmidiinstart(hMidiIn);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInStop(HMIDIIN hMidiIn)
// 参数:
// IN hMidiIn -- MIDI输入设备句柄
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:停止一个输入设备输入数据。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINSTOP)(HMIDIIN hMidiIn);
MMRESULT WINAPI aud_midiInStop(HMIDIIN hMidiIn)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINSTOP, 1 );
cs.arg0 = (DWORD)hMidiIn;
return (DWORD)CALL_SERVER( &cs);
// return ( (PMIDIINSTOP)CALL_API( API_AUDIO, AUDIO_MIDIINSTOP, 1 ) )(hMidiIn);
#else
PMIDIINSTOP pmidiinstop;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINSTOP, &pmidiinstop, &cs ) )
{
retv = pmidiinstop(hMidiIn);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInUnprepareHeader(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr)
// 参数:
// IN hMidiIn -- MIDI输入设备句柄
// IN lpMidiInHdr -- 一个指向MIDIHDR结构的指针
// IN cbMidiInHdr -- 结构MIDIHDR的尺寸
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:解除一个已经准备好输入缓存。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINUNPREPAREHEADER)(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr);
MMRESULT WINAPI aud_midiInUnprepareHeader(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINUNPREPAREHEADER, 3 );
cs.arg0 = (DWORD)hMidiIn;
return (DWORD)CALL_SERVER( &cs, lpMidiInHdr,cbMidiInHdr);
// return ( (PMIDIINUNPREPAREHEADER)CALL_API( API_AUDIO, AUDIO_MIDIINUNPREPAREHEADER, 5 ) )(hMidiIn,lpMidiInHdr,cbMidiInHdr);
#else
PMIDIINUNPREPAREHEADER pmidiinunprepareheader;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINUNPREPAREHEADER, &pmidiinunprepareheader, &cs ) )
{
lpMidiInHdr = MapProcessPtr( lpMidiInHdr, (LPPROCESS)cs.lpvData );
retv = pmidiinunprepareheader(hMidiIn,lpMidiInHdr,cbMidiInHdr);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutCacheDrumPatches(HMIDIOUT hmo,UINT wPatch,WORD * lpKeyArray,UINT wFlags)
// 参数:
// IN hmo -- MIDI输出设备句柄
// IN wPatch -- 鼓声的修补数量
// IN lpKeyArray -- 一个指向KEYARRAY数组的指针,指向打击乐的修补
// IN wFlags -- 处理选项
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:请求对一个内在的MIDI混合设备的输出缓存的打击乐进行修补处理。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTCACHEDRUMPATCHES)(HMIDIOUT hmo,UINT wPatch,WORD * lpKeyArray,UINT wFlags);
MMRESULT WINAPI aud_midiOutCacheDrumPatches(HMIDIOUT hmo,UINT wPatch,WORD * lpKeyArray,UINT wFlags)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTCACHEDRUMPATCHES, 4 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs, wPatch,lpKeyArray,wFlags);
// return ( (PMIDIOUTCACHEDRUMPATCHES)CALL_API( API_AUDIO, AUDIO_MIDIOUTCACHEDRUMPATCHES, 4 ) )(hmo,wPatch,lpKeyArray,wFlags);
#else
PMIDIOUTCACHEDRUMPATCHES pmidioutcachedrumpatches;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTCACHEDRUMPATCHES, &pmidioutcachedrumpatches, &cs ) )
{
lpKeyArray = MapProcessPtr( lpKeyArray, (LPPROCESS)cs.lpvData );
retv = pmidioutcachedrumpatches(hmo,wPatch,lpKeyArray,wFlags);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutCachePatches(HMIDIOUT hmo,UINT wBank,WORD * lpPatchArray,UINT wFlags)
// 参数:
// IN hmo -- MIDI输出设备句柄
// IN wBank -- 修补数量
// IN lpPatchArray -- 一个指向PATCHARRAY 数组的指针
// IN wFlags -- 处理选项
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:请求对一个内在的MIDI混合设备的输出缓存的指定装置进行修补处理。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTCACHEPATCHES)(HMIDIOUT hmo,UINT wBank,WORD * lpPatchArray,UINT wFlags);
MMRESULT WINAPI aud_midiOutCachePatches(HMIDIOUT hmo,UINT wBank,WORD * lpPatchArray,UINT wFlags)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTCACHEPATCHES, 4 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs, wBank,lpPatchArray,wFlags);
// return ( (PMIDIOUTCACHEPATCHES)CALL_API( API_AUDIO, AUDIO_MIDIOUTCACHEPATCHES, 4 ) )(hmo,wBank,lpPatchArray,wFlags);
#else
PMIDIOUTCACHEPATCHES pmidioutcachepatches;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTCACHEPATCHES, &pmidioutcachepatches, &cs ) )
{
lpPatchArray = MapProcessPtr( lpPatchArray, (LPPROCESS)cs.lpvData );
retv = pmidioutcachepatches(hmo,wBank,lpPatchArray,wFlags);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MRESULT WINAPI aud_midiOutClose(HMIDIOUT hmo)
// 参数:
// IN hmo -- MIDI输出设备句柄
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:关闭一个MIDI输出设备
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTCLOSE)(HMIDIOUT hmo);
MMRESULT WINAPI aud_midiOutClose(HMIDIOUT hmo)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTCLOSE, 1 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs);
// return ( (PMIDIOUTCLOSE)CALL_API( API_AUDIO, AUDIO_MIDIOUTCLOSE, 1 ) )(hmo);
#else
PMIDIOUTCLOSE pmidioutclose;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTCLOSE, &pmidioutclose, &cs ) )
{
retv = pmidioutclose(hmo);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutGetDevCaps(UINT uDeviceID,LPMIDIOUTCAPS lpMidiOutCaps,UINT cbMidiOutCaps)
// 参数:
// IN uDeviceID -- MIDI输出设备的ID
// IN lpMidiOutCaps -- 一个指向MIDIOUTCAPS 结构的指针
// IN cbMidiOutCaps -- 结构MIDIOUTCAPS 的尺寸
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:得到MIDI输出设备的能力
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTGETDEVCAPS)(UINT uDeviceID,LPMIDIOUTCAPS lpMidiOutCaps,UINT cbMidiOutCaps);
MMRESULT WINAPI aud_midiOutGetDevCaps(UINT uDeviceID,LPMIDIOUTCAPS lpMidiOutCaps,UINT cbMidiOutCaps)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTGETDEVCAPS, 3 );
cs.arg0 = (DWORD)uDeviceID;
return (DWORD)CALL_SERVER( &cs, lpMidiOutCaps,cbMidiOutCaps);
// return ( (PMIDIOUTGETDEVCAPS)CALL_API( API_AUDIO, AUDIO_MIDIOUTGETDEVCAPS, 3) )(uDeviceID,lpMidiOutCaps,cbMidiOutCaps);
#else
PMIDIOUTGETDEVCAPS pmidioutgetdevcaps;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTGETDEVCAPS, &pmidioutgetdevcaps, &cs ) )
{
lpMidiOutCaps = MapProcessPtr( lpMidiOutCaps, (LPPROCESS)cs.lpvData );
retv = pmidioutgetdevcaps(uDeviceID,lpMidiOutCaps,cbMidiOutCaps);
API_Leave( );
}
return retv;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?