wavelib.c
来自「深圳市微逻辑电子有限公司 巨果• Kingmos® 系统核心」· C语言 代码 · 共 2,138 行 · 第 1/5 页
C
2,138 行
#endif
}
// ********************************************************************
// 声明:UINT WINAPI aud_midiOutGetErrorText(MMRESULT mmrError,LPSTR lpText,UINT cchText)
// 参数:
// IN wError -- 错误代码
// IN lpText -- 一个存放错误文本的指针
// IN cchText -- 文本缓存的大小
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:得到错误代码的文本
// 引用: MIDI API函数接口
// ********************************************************************
typedef UINT (WINAPI *PMIDIOUTGETERRORTEXT)(MMRESULT mmrError,LPSTR lpText,UINT cchText);
UINT WINAPI aud_midiOutGetErrorText(MMRESULT mmrError,LPSTR lpText,UINT cchText)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTGETERRORTEXT, 3 );
cs.arg0 = (DWORD)mmrError;
return (DWORD)CALL_SERVER( &cs, lpText,cchText);
// return ( (PMIDIOUTGETERRORTEXT)CALL_API( API_AUDIO, AUDIO_MIDIOUTGETERRORTEXT, 3 ) )(mmrError,lpText,cchText);
#else
PMIDIOUTGETERRORTEXT pmidioutgeterrortext;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTGETERRORTEXT, &pmidioutgeterrortext, &cs ) )
{
lpText = MapProcessPtr( lpText, (LPPROCESS)cs.lpvData );
retv = pmidioutgeterrortext(mmrError,lpText,cchText);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutGetID(HMIDIOUT hmo,LPUINT puDeviceID)
// 参数:
// IN hmo -- MIDI输出设备句柄
// IN puDeviceID -- 一个用来填充设备ID的指针
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:得到MIDI输出设备的ID
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTGETID)(HMIDIOUT hmo,LPUINT puDeviceID);
MMRESULT WINAPI aud_midiOutGetID(HMIDIOUT hmo,LPUINT puDeviceID)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTGETID, 2 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs, puDeviceID);
// return ( (PMIDIOUTGETID)CALL_API( API_AUDIO, AUDIO_MIDIOUTGETID, 2 ) )(hmo,puDeviceID);
#else
PMIDIOUTGETID pmidioutgetid;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTGETID, &pmidioutgetid, &cs ) )
{
puDeviceID = MapProcessPtr( puDeviceID, (LPPROCESS)cs.lpvData );
retv = pmidioutgetid(hmo,puDeviceID);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:UINT WINAPI aud_midiOutGetNumDevs(VOID)
// 参数:
// 无
// 返回值:
// 成功返回当前MIDI输出设备的个数。
// 功能描述:得到当前MIDI输出设备的个数
// 引用: MIDI API函数接口
// ********************************************************************
typedef UINT (WINAPI *PMIDIOUTGETNUMDEVS)(VOID);
UINT WINAPI aud_midiOutGetNumDevs(VOID)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTGETNUMDEVS, 0 );
cs.arg0 = (DWORD)0;
return (DWORD)CALL_SERVER( &cs);
// return ( (PMIDIOUTGETNUMDEVS)CALL_API( API_AUDIO, AUDIO_MIDIOUTGETNUMDEVS, 0 ) )();
#else
PMIDIOUTGETNUMDEVS pmidioutgetnumdevs;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTGETNUMDEVS, &pmidioutgetnumdevs, &cs ) )
{
retv = pmidioutgetnumdevs();
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutGetVolume(HMIDIOUT hmo,LPDWORD lpdwVolume)
// 参数:
// IN hmo -- MIDI输出设备句柄
// OUT lpdwVolume -- 存放当前音量的指针
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:得到当前MIDI输出设备的音量
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTGETVOLUME)(HMIDIOUT hmo,LPDWORD lpdwVolume);
MMRESULT WINAPI aud_midiOutGetVolume(HMIDIOUT hmo,LPDWORD lpdwVolume)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTGETVOLUME, 2 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs, lpdwVolume);
// return ( (PMIDIOUTGETVOLUME)CALL_API( API_AUDIO, AUDIO_MIDIOUTGETVOLUME, 2 ) )(hmo,lpdwVolume);
#else
PMIDIOUTGETVOLUME pmidioutgetvolume;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTGETVOLUME, &pmidioutgetvolume, &cs ) )
{
lpdwVolume = MapProcessPtr( lpdwVolume, (LPPROCESS)cs.lpvData );
retv = pmidioutgetvolume(hmo,lpdwVolume);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutLongMsg(HMIDIOUT hmo,LPMIDIHDR lpMidiOutHdr,UINT cbMidiOutHdr)
// 参数:
// IN hmo -- MIDI输出设备句柄
// IN lpMidiOutHdr -- 一个指向MIDIHDR结构的指针
// IN cbMidiOutHdr -- 结构MIDIHDR的尺寸
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:发送一个数据流到一个MIDI输出设备
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTLONGMSG)(HMIDIOUT hmo,LPMIDIHDR lpMidiOutHdr,UINT cbMidiOutHdr);
MMRESULT WINAPI aud_midiOutLongMsg(HMIDIOUT hmo,LPMIDIHDR lpMidiOutHdr,UINT cbMidiOutHdr)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTLONGMSG, 3 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs, lpMidiOutHdr,cbMidiOutHdr);
// return ( (PMIDIOUTLONGMSG)CALL_API( API_AUDIO, AUDIO_MIDIOUTLONGMSG, 3 ) )(hmo,lpMidiOutHdr,cbMidiOutHdr);
#else
PMIDIOUTLONGMSG pmidioutlongmsg;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTLONGMSG, &pmidioutlongmsg, &cs ) )
{
lpMidiOutHdr = MapProcessPtr( lpMidiOutHdr, (LPPROCESS)cs.lpvData );
retv = pmidioutlongmsg(hmo,lpMidiOutHdr,cbMidiOutHdr);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:DWORD WINAPI aud_midiOutMessage(HMIDIOUT hmo,UINT msg,DWORD dw1,DWORD dw2)
// 参数:
// IN hmo -- MIDI输出设备句柄
// IN msg -- 要发送的消息
// IN dw1 -- 消息参数1
// IN dw2 -- 消息参数2
// 返回值:
// 返回设备返回的值。
// 功能描述:给一个MIDI输出设备发送一个消息
// 引用: MIDI API函数接口
// ********************************************************************
typedef DWORD (WINAPI *PMIDIOUTMESSAGE)(HMIDIOUT hmo,UINT msg,DWORD dw1,DWORD dw2);
DWORD WINAPI aud_midiOutMessage(HMIDIOUT hmo,UINT msg,DWORD dw1,DWORD dw2)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTMESSAGE, 4 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs, msg,dw1,dw2);
// return ( (PMIDIOUTMESSAGE)CALL_API( API_AUDIO, AUDIO_MIDIOUTMESSAGE, 4 ) )(hmo,msg,dw1,dw2);
#else
PMIDIOUTMESSAGE pmidioutmessage;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTMESSAGE, &pmidioutmessage, &cs ) )
{
retv = pmidioutmessage(hmo,msg,dw1,dw2);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:UINT WINAPI aud_midiOutOpen(LPHMIDIOUT lphmo,UINT uDeviceID,DWORD dwCallback,DWORD dwCallbackInstance,DWORD dwFlags)
// 参数:
// OUT lphmo -- 一个指向MIDI输出设备句柄的指针
// IN uDeviceID -- 设备ID
// IN dwCallback -- 一个指向回调函数,窗口句柄。。。的值,具体有dwFlags指定
// IN dwCallbackInstance -- 回调者的实例句柄
// IN dwFlags -- 回调类型
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:打开一个指定ID的MIDI输出设备
// 引用: MIDI API函数接口
// ********************************************************************
typedef UINT (WINAPI *PMIDIOUTOPEN)(LPHMIDIOUT lphmo,UINT uDeviceID,DWORD dwCallback,DWORD dwCallbackInstance,DWORD dwFlags);
UINT WINAPI aud_midiOutOpen(LPHMIDIOUT lphmo,UINT uDeviceID,DWORD dwCallback,DWORD dwCallbackInstance,DWORD dwFlags)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTOPEN, 5 );
cs.arg0 = (DWORD)lphmo;
return (DWORD)CALL_SERVER( &cs, uDeviceID,dwCallback,dwCallbackInstance,dwFlags);
// return ( (PMIDIOUTOPEN)CALL_API( API_AUDIO, AUDIO_MIDIOUTOPEN, 5 ) )(lphmo,uDeviceID,dwCallback,dwCallbackInstance,dwFlags);
#else
PMIDIOUTOPEN pmidioutopen;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTOPEN, &pmidioutopen, &cs ) )
{
lphmo = MapProcessPtr( lphmo, (LPPROCESS)cs.lpvData );
retv = pmidioutopen(lphmo,uDeviceID,dwCallback,dwCallbackInstance,dwFlags);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutPrepareHeader(HMIDIOUT hmo,LPMIDIHDR lpMidiOutHdr,UINT cbMidiOutHdr)
// 参数:
// IN hmo -- MIDI输出设备句柄
// IN lpMidiOutHdr -- 一个指向MIDIHDR结构的指针
// IN cbMidiOutHdr -- 结构MIDIHDR的尺寸
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:准备一个输出缓存。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTPREPAREHEADER)(HMIDIOUT hmo,LPMIDIHDR lpMidiOutHdr,UINT cbMidiOutHdr);
MMRESULT WINAPI aud_midiOutPrepareHeader(HMIDIOUT hmo,LPMIDIHDR lpMidiOutHdr,UINT cbMidiOutHdr)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTPREPAREHEADER, 3 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs, lpMidiOutHdr,cbMidiOutHdr);
// return ( (PMIDIOUTPREPAREHEADER)CALL_API( API_AUDIO, AUDIO_MIDIOUTPREPAREHEADER, 3 ) )(hmo,lpMidiOutHdr,cbMidiOutHdr);
#else
PMIDIOUTPREPAREHEADER pmidioutprepareheader;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTPREPAREHEADER, &pmidioutprepareheader, &cs ) )
{
lpMidiOutHdr = MapProcessPtr( lpMidiOutHdr, (LPPROCESS)cs.lpvData );
retv = pmidioutprepareheader(hmo,lpMidiOutHdr,cbMidiOutHdr);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutReset(HMIDIOUT hmo)
// 参数:
// IN hmo -- MIDI输出设备句柄
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:停止一个输出设备输出数据。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTRESET)(HMIDIOUT hmo);
MMRESULT WINAPI aud_midiOutReset(HMIDIOUT hmo)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTRESET, 1 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs);
// return ( (PMIDIOUTRESET)CALL_API( API_AUDIO, AUDIO_MIDIOUTRESET, 1 ) )(hmo);
#else
PMIDIOUTRESET pmidioutreset;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTRESET, &pmidioutreset, &cs ) )
{
retv = pmidioutreset(hmo);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutSetVolume(HMIDIOUT hmo,DWORD dwVolume)
// 参数:
// IN hmo -- MIDI输出设备句柄
// IN dwVolume -- 当前要设置的音量
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:设置当前MIDI输出设备的音量
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTSETVOLUME)(HMIDIOUT hmo,DWORD dwVolume);
MMRESULT WINAPI aud_midiOutSetVolume(HMIDIOUT hmo,DWORD dwVolume)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTSETVOLUME, 2 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs, dwVolume);
// return ( (PMIDIOUTSETVOLUME)CALL_API( API_AUDIO, AUDIO_MIDIOUTSETVOLUME, 2 ) )(hmo,dwVolume);
#else
PMIDIOUTSETVOLUME pmidioutsetvolume;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTSETVOLUME, &pmidioutsetvolume, &cs ) )
{
retv = pmidioutsetvolume(hmo,dwVolume);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutShortMsg(HMIDIOUT hmo, DWORD dwMsg)
// 参数:
// IN hmo -- MIDI输出设备句柄
// IN dwMsg -- 当前要发送的消息
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:给当前MIDI输出设备发送一个断的MIDI消息。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTSHORTMSG)(HMIDIOUT hmo, DWORD dwMsg);
MMRESULT WINAPI aud_midiOutShortMsg(HMIDIOUT hmo, DWORD dwMsg)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTSHORTMSG, 2 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs, dwMsg);
// return ( (PMIDIOUTSHORTMSG)CALL_API( API_AUDIO, AUDIO_MIDIOUTSHORTMSG, 2 ) )(hmo, dwMsg);
#else
PMIDIOUTSHORTMSG pmidioutshortmsg;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIOUTSHORTMSG, &pmidioutshortmsg, &cs ) )
{
retv = pmidioutshortmsg(hmo, dwMsg);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutUnprepareHeader(HMIDIOUT hmo,LPMIDIHDR lpMidiOutHdr,UINT cbMidiOutHdr)
// 参数:
// IN hmo -- MIDI输出设备句柄
// IN lpMidiOutHdr -- 一个指向MIDIHDR结构的指针
// IN cbMidiOutHdr -- 结构MIDIHDR的尺寸
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:解除一个已经准备好输出缓存。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTUNPREPAREHEADER)(HMIDIOUT hmo,LPMIDIHDR lpMidiOutHdr,UINT cbMidiOutHdr);
MMRESULT WINAPI aud_midiOutUnprepareHeader(HMIDIOUT hmo,LPMIDIHDR lpMidiOutHdr,UINT cbMidiOutHdr)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTUNPREPAREHEADER, 3 );
cs.arg0 = (DWORD)hmo;
return (DWORD)CALL_SERVER( &cs, lpMidiOutHdr,cbMidiOutHdr);
// return ( (PMIDIOUTUNPREPAREHE
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?