wavelib.c
来自「深圳市微逻辑电子有限公司 巨果• Kingmos® 系统核心」· C语言 代码 · 共 2,138 行 · 第 1/5 页
C
2,138 行
typedef MMRESULT (WINAPI *PWAVEINSTOP)(HWAVEIN hwi);
MMRESULT WINAPI aud_waveInStop(HWAVEIN hwi)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEINSTOP, 1 );
cs.arg0 = (DWORD)hwi;
return (DWORD)CALL_SERVER( &cs );
#else
PWAVEINSTOP pwaveInStop;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEINSTOP, &pwaveInStop, &cs ) )
{
retv = pwaveInStop(hwi);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEINRESET)(HWAVEIN hwi);
MMRESULT WINAPI aud_waveInReset(HWAVEIN hwi)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEINRESET, 1 );
cs.arg0 = (DWORD)hwi;
return (DWORD)CALL_SERVER( &cs );
#else
PWAVEINRESET pwaveInReset;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEINRESET, &pwaveInReset, &cs ) )
{
retv = pwaveInReset(hwi);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEINGETPOSITION)(HWAVEIN hwi, LPMMTIME pmmt, UINT cbmmt);
MMRESULT WINAPI aud_waveInGetPosition(HWAVEIN hwi, LPMMTIME pmmt, UINT cbmmt)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEINGETPOSITION, 3 );
cs.arg0 = (DWORD)hwi;
return (DWORD)CALL_SERVER( &cs, pmmt, cbmmt);
#else
PWAVEINGETPOSITION pwaveInGetPosition;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEINGETPOSITION, &pwaveInGetPosition, &cs ) )
{
pmmt = MapProcessPtr( pmmt, (LPPROCESS)cs.lpvData );
retv = pwaveInGetPosition(hwi, pmmt, cbmmt);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEINGETID)(HWAVEIN hwi, LPUINT puDeviceID);
MMRESULT WINAPI aud_waveInGetID(HWAVEIN hwi, LPUINT puDeviceID)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEINGETID, 2 );
cs.arg0 = (DWORD)hwi;
return (DWORD)CALL_SERVER( &cs, puDeviceID);
#else
PWAVEINGETID pwaveInGetID;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEINGETID, &pwaveInGetID, &cs ) )
{
puDeviceID = MapProcessPtr( puDeviceID, (LPPROCESS)cs.lpvData );
retv = pwaveInGetID(hwi, puDeviceID);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEINMESSAGE)(HWAVEIN hwi, UINT uMsg, DWORD dw1, DWORD dw2);
MMRESULT WINAPI aud_waveInMessage(HWAVEIN hwi, UINT uMsg, DWORD dw1, DWORD dw2)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEINMESSAGE, 4 );
cs.arg0 = (DWORD)hwi;
return (DWORD)CALL_SERVER( &cs, uMsg, dw1, dw2);
#else
PWAVEINMESSAGE pwaveInMessage;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEINMESSAGE, &pwaveInMessage, &cs ) )
{
retv = pwaveInMessage(hwi, uMsg, dw1, dw2);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEINOPEN)(LPHWAVEIN phwi, UINT uDeviceID,
LPCWAVEFORMATEX pwfx, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen);
MMRESULT WINAPI aud_waveInOpen(LPHWAVEIN phwi, UINT uDeviceID,
LPCWAVEFORMATEX pwfx, DWORD dwCallback, DWORD dwInstance, DWORD fdwOpen)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEINOPEN, 6 );
cs.arg0 = (DWORD)phwi;
return (DWORD)CALL_SERVER( &cs, uDeviceID, pwfx, dwCallback, dwInstance, fdwOpen);
#else
PWAVEINOPEN pwaveInOpen;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEINOPEN, &pwaveInOpen, &cs ) )
{
pwfx = MapProcessPtr( pwfx, (LPPROCESS)cs.lpvData );
retv = pwaveInOpen(phwi, uDeviceID, pwfx, dwCallback, dwInstance, fdwOpen);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiConnect( HMIDI hMidi,HMIDIOUT hmo,LPVOID pReserved)
// 参数:
// IN hMidi -- MIDI输入设备句柄
// IN hmo -- MIDI输出设备句柄
// IN pReserved -- 保留,必须为NULL
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:连接一个MIDI输入设备到一个MIDI输出设备
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDICONNECT)(HMIDI hMidi,HMIDIOUT hmo,LPVOID pReserved);
MMRESULT WINAPI aud_midiConnect( HMIDI hMidi,HMIDIOUT hmo,LPVOID pReserved)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDICONNECT, 3 );
cs.arg0 = (DWORD)hMidi;
return (DWORD)CALL_SERVER( &cs, hmo,pReserved);
// return ( (PMIDICONNECT)CALL_API( API_AUDIO, AUDIO_MIDICONNECT, 3 ) )(hMidi,hmo,pReserved);
#else
PMIDICONNECT pmidiconnect;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDICONNECT, &pmidiconnect, &cs ) )
{
pReserved = MapProcessPtr( pReserved, (LPPROCESS)cs.lpvData );
retv = pmidiconnect(hMidi,hmo,pReserved);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiDisconnect( HMIDI hMidi,HMIDIOUT hmo,LPVOID pReserved)
// 参数:
// IN hMidi -- MIDI输入设备句柄
// IN hmo -- MIDI输出设备句柄
// IN pReserved -- 保留,必须为NULL
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:断开一个MIDI输入设备到一个MIDI输出设备
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIDISCONNECT)( HMIDI hMidi,HMIDIOUT hmo,LPVOID pReserved);
MMRESULT WINAPI aud_midiDisconnect( HMIDI hMidi,HMIDIOUT hmo,LPVOID pReserved)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIDISCONNECT, 3 );
cs.arg0 = (DWORD)hMidi;
return (DWORD)CALL_SERVER( &cs, hmo,pReserved);
// return ( (PMIDIDISCONNECT)CALL_API( API_AUDIO, AUDIO_MIDIDISCONNECT, 3 ) )(hMidi,hmo,pReserved);
#else
PMIDIDISCONNECT pmididisconnect;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIDISCONNECT, &pmididisconnect, &cs ) )
{
pReserved = MapProcessPtr( pReserved, (LPPROCESS)cs.lpvData );
retv = pmididisconnect(hMidi,hmo,pReserved);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInAddBuffer(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr)
// 参数:
// IN hMidiIn -- MIDI输入设备句柄
// IN lpMidiInHdr -- 一个指向MIDIHDR结构的指针
// IN cbMidiInHdr -- 结构MIDIHDR的尺寸
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:发送一个输入缓存到一个MIDI输入设备
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINADDBUFFER)(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr);
MMRESULT WINAPI aud_midiInAddBuffer(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINADDBUFFER, 3 );
cs.arg0 = (DWORD)hMidiIn;
return (DWORD)CALL_SERVER( &cs, lpMidiInHdr,cbMidiInHdr);
// return ( (PMIDIINADDBUFFER)CALL_API( API_AUDIO, AUDIO_MIDIINADDBUFFER, 3 ) )(hMidiIn,lpMidiInHdr,cbMidiInHdr);
#else
PMIDIINADDBUFFER pmidiinaddbuffer;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINADDBUFFER, &pmidiinaddbuffer, &cs ) )
{
lpMidiInHdr = MapProcessPtr( lpMidiInHdr, (LPPROCESS)cs.lpvData );
retv = pmidiinaddbuffer(hMidiIn,lpMidiInHdr,cbMidiInHdr);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInClose(HMIDIIN hMidiIn)
// 参数:
// IN hMidiIn -- MIDI输入设备句柄
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:关闭一个MIDI输入设备
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINCLOSE)(HMIDIIN hMidiIn);
MMRESULT WINAPI aud_midiInClose(HMIDIIN hMidiIn)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINCLOSE, 1 );
cs.arg0 = (DWORD)hMidiIn;
return (DWORD)CALL_SERVER( &cs);
// return ( (PMIDIINCLOSE)CALL_API( API_AUDIO, AUDIO_MIDIINCLOSE, 1 ) )(hMidiIn);
#else
PMIDIINCLOSE pmidiinclose;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINCLOSE, &pmidiinclose, &cs ) )
{
retv = pmidiinclose(hMidiIn);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInGetDevCaps(UINT uDeviceID,LPMIDIINCAPS lpMidiInCaps,UINT cbMidiInCaps)
// 参数:
// IN uDeviceID -- MIDI输入设备的ID
// IN lpMidiInCaps -- 一个指向MIDIINCAPS结构的指针
// IN cbMidiInCaps -- 结构MIDIINCAPS的尺寸
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:得到MIDI输入设备的能力
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINGETDEVCAPS)(UINT uDeviceID,LPMIDIINCAPS lpMidiInCaps,UINT cbMidiInCaps);
MMRESULT WINAPI aud_midiInGetDevCaps(UINT uDeviceID,LPMIDIINCAPS lpMidiInCaps,UINT cbMidiInCaps)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINGETDEVCAPS, 3 );
cs.arg0 = (DWORD)uDeviceID;
return (DWORD)CALL_SERVER( &cs, lpMidiInCaps,cbMidiInCaps);
// return ( (PMIDIINGETDEVCAPS)CALL_API( API_AUDIO, AUDIO_MIDIINGETDEVCAPS, 3 ) )(uDeviceID,lpMidiInCaps,cbMidiInCaps);
#else
PMIDIINGETDEVCAPS pmidiingetdevcaps;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINGETDEVCAPS, &pmidiingetdevcaps, &cs ) )
{
lpMidiInCaps = MapProcessPtr( lpMidiInCaps, (LPPROCESS)cs.lpvData );
retv = pmidiingetdevcaps(uDeviceID,lpMidiInCaps,cbMidiInCaps);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInGetErrorText(MMRESULT wError,LPSTR lpText,UINT cchText )
// 参数:
// IN wError -- 错误代码
// IN lpText -- 一个存放错误文本的指针
// IN cchText -- 文本缓存的大小
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:得到错误代码的文本
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINGETERRORTEXT)(MMRESULT wError,LPSTR lpText,UINT cchText );
MMRESULT WINAPI aud_midiInGetErrorText(MMRESULT wError,LPSTR lpText,UINT cchText )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINGETERRORTEXT, 3 );
cs.arg0 = (DWORD)wError;
return (DWORD)CALL_SERVER( &cs,lpText,cchText );
// return ( (PMIDIINGETERRORTEXT)CALL_API( API_AUDIO, AUDIO_MIDIINGETERRORTEXT, 3 ) )(wError,lpText,cchText );
#else
PMIDIINGETERRORTEXT pmidiingeterrortext;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINGETERRORTEXT, &pmidiingeterrortext, &cs ) )
{
lpText = MapProcessPtr( lpText, (LPPROCESS)cs.lpvData );
retv = pmidiingeterrortext(wError,lpText,cchText );
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInGetID(HMIDIIN hmi,LPUINT puDeviceID)
// 参数:
// IN hmi -- MIDI输入设备句柄
// IN puDeviceID -- 一个用来填充设备ID的指针
// 返回值:
// 成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:得到MIDI输入设备的ID
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINGETID)(HMIDIIN hmi,LPUINT puDeviceID);
MMRESULT WINAPI aud_midiInGetID(HMIDIIN hmi,LPUINT puDeviceID)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINGETID, 2 );
cs.arg0 = (DWORD)hmi;
return (DWORD)CALL_SERVER( &cs, puDeviceID);
// return ( (PMIDIINGETID)CALL_API( API_AUDIO, AUDIO_MIDIINGETID, 2 ) )(hmi,puDeviceID);
#else
PMIDIINGETID pmidiingetid;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_MIDIINGETID, &pmidiingetid, &cs ) )
{
puDeviceID = MapProcessPtr( puDeviceID, (LPPROCESS)cs.lpvData );
retv = pmidiingetid(hmi,puDeviceID);
API_Leave( );
}
return retv;
#endif
}
// ********************************************************************
// 声明:UINT WINAPI aud_midiInGetNumDevs(VOID)
// 参数:
// 无
// 返回值:
// 成功返回当前MIDI输入设备的个数。
// 功能描述:得到当前MIDI输入设备的个数
// 引用: MIDI API函数接口
// ********************************************************************
typedef UINT (WINAPI *PMIDIINGETNUMDEVS)(VOID);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?