wavelib.c
来自「深圳市微逻辑电子有限公司 巨果• Kingmos® 系统核心」· C语言 代码 · 共 2,138 行 · 第 1/5 页
C
2,138 行
#include <eframe.h>
#include <eapisrv.h>
//#include <ewavedev.h>
//#include <ewaveapi.h>
#include <emmsys.h>
#include <epcore.h>
enum{
AUDIO_WAVEOUTGETNUMDEVS = 1,
AUDIO_WAVEOUTGETDEVCAPS,
AUDIO_WAVEOUTGETVOLUME,
AUDIO_WAVEOUTSETVOLUME,
AUDIO_WAVEOUTGETERRORTEXT,
AUDIO_WAVEOUTCLOSE,
AUDIO_WAVEOUTPREPAREHEADER,
AUDIO_WAVEOUTUNPREPAREHEADER,
AUDIO_WAVEOUTWRITE,
AUDIO_WAVEOUTPAUSE,
AUDIO_WAVEOUTRESTART,
AUDIO_WAVEOUTRESET,
AUDIO_WAVEOUTBREAKLOOP,
AUDIO_WAVEOUTGETPOSITION,
AUDIO_WAVEOUTGETPITCH,
AUDIO_WAVEOUTSETPITCH,
AUDIO_WAVEOUTGETPLAYBACKRATE,
AUDIO_WAVEOUTSETPLAYBACKRATE,
AUDIO_WAVEOUTGETID,
AUDIO_WAVEOUTMESSAGE,
AUDIO_WAVEOUTOPEN,
AUDIO_WAVEINGETNUMDEVS,
AUDIO_WAVEINGETDEVCAPS,
AUDIO_WAVEINGETERRORTEXT,
AUDIO_WAVEINCLOSE,
AUDIO_WAVEINPREPAREHEADER,
AUDIO_WAVEINUNPREPAREHEADER,
AUDIO_WAVEINADDBUFFER,
AUDIO_WAVEINSTART,
AUDIO_WAVEINSTOP,
AUDIO_WAVEINRESET,
AUDIO_WAVEINGETPOSITION,
AUDIO_WAVEINGETID,
AUDIO_WAVEINMESSAGE,
AUDIO_WAVEINOPEN,
AUDIO_MIDICONNECT,
AUDIO_MIDIDISCONNECT,
AUDIO_MIDIINADDBUFFER,
AUDIO_MIDIINCLOSE,
AUDIO_MIDIINGETDEVCAPS,
AUDIO_MIDIINGETERRORTEXT,
AUDIO_MIDIINGETID,
AUDIO_MIDIINGETNUMDEVS,
AUDIO_MIDIINMESSAGE,
AUDIO_MIDIINOPEN,
AUDIO_MIDIINPREPAREHEADER,
AUDIO_MIDIINRESET,
AUDIO_MIDIINSTART,
AUDIO_MIDIINSTOP,
AUDIO_MIDIINUNPREPAREHEADER,
AUDIO_MIDIOUTCACHEDRUMPATCHES,
AUDIO_MIDIOUTCACHEPATCHES,
AUDIO_MIDIOUTCLOSE,
AUDIO_MIDIOUTGETDEVCAPS,
AUDIO_MIDIOUTGETERRORTEXT,
AUDIO_MIDIOUTGETID,
AUDIO_MIDIOUTGETNUMDEVS,
AUDIO_MIDIOUTGETVOLUME,
AUDIO_MIDIOUTLONGMSG,
AUDIO_MIDIOUTMESSAGE,
AUDIO_MIDIOUTOPEN,
AUDIO_MIDIOUTPREPAREHEADER,
AUDIO_MIDIOUTRESET,
AUDIO_MIDIOUTSETVOLUME,
AUDIO_MIDIOUTSHORTMSG,
AUDIO_MIDIOUTUNPREPAREHEADER,
AUDIO_MIDISTREAMCLOSE,
AUDIO_MIDISTREAMOPEN,
AUDIO_MIDISTREAMOUT,
AUDIO_MIDISTREAMPAUSE,
AUDIO_MIDISTREAMPOSITION,
AUDIO_MIDISTREAMPROPERTY,
AUDIO_MIDISTREAMRESTART,
AUDIO_MIDISTREAMSTOP,
};
typedef BOOL ( WINAPI * PWAVEOUTGETNUMDEVS)( void);
UINT WINAPI aud_waveOutGetNumDevs(void)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTGETNUMDEVS, 0 );
cs.arg0 = 0;
return (DWORD)CALL_SERVER( &cs );
#else
PWAVEOUTGETNUMDEVS pwaveOutGetNumDevs;
CALLSTACK cs;
UINT retv = 0;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTGETNUMDEVS, &pwaveOutGetNumDevs, &cs ) )
{
retv = pwaveOutGetNumDevs();
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI * PWAVEOUTGETDEVCAPS)(UINT uDeviceID, LPWAVEOUTCAPS pwoc, UINT cbwoc);
MMRESULT WINAPI aud_waveOutGetDevCaps(UINT uDeviceID, LPWAVEOUTCAPS pwoc, UINT cbwoc)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTGETDEVCAPS, 3 );
cs.arg0 = (DWORD)uDeviceID;
return (DWORD)CALL_SERVER( &cs, pwoc, cbwoc);
#else
PWAVEOUTGETDEVCAPS pwaveOutGetDevCaps;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTGETDEVCAPS, &pwaveOutGetDevCaps, &cs ) )
{
pwoc = MapProcessPtr( pwoc, (LPPROCESS)cs.lpvData );
retv = pwaveOutGetDevCaps(uDeviceID, pwoc, cbwoc);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI * PWAVEOUTGETVOLUME)(HWAVEOUT hwo, LPDWORD pdwVolume);
MMRESULT WINAPI aud_waveOutGetVolume(HWAVEOUT hwo, LPDWORD pdwVolume)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTGETVOLUME, 2 );
cs.arg0 = (DWORD)hwo;
return (DWORD)CALL_SERVER( &cs, pdwVolume);
#else
PWAVEOUTGETVOLUME pwaveOutGetVolume;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTGETVOLUME, &pwaveOutGetVolume, &cs ) )
{
pdwVolume = MapProcessPtr( pdwVolume, (LPPROCESS)cs.lpvData );
retv = pwaveOutGetVolume(hwo, pdwVolume);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI * PWAVEOUTSETVOLUME)(HWAVEOUT hwo, DWORD dwVolume);
MMRESULT WINAPI aud_waveOutSetVolume(HWAVEOUT hwo, DWORD dwVolume)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTSETVOLUME, 2 );
cs.arg0 = (DWORD)hwo;
return (DWORD)CALL_SERVER( &cs, dwVolume);
#else
PWAVEOUTSETVOLUME pwaveOutSetVolume;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTSETVOLUME, &pwaveOutSetVolume, &cs ) )
{
retv = pwaveOutSetVolume(hwo, dwVolume);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEOUTGETERRORTEXT)(MMRESULT mmrError, LPTSTR pszText, UINT cchText);
MMRESULT WINAPI aud_waveOutGetErrorText(MMRESULT mmrError, LPTSTR pszText, UINT cchText)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTGETERRORTEXT, 3 );
cs.arg0 = (DWORD)mmrError;
return (DWORD)CALL_SERVER( &cs, pszText, cchText);
#else
PWAVEOUTGETERRORTEXT pwaveOutGetErrorText;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTGETERRORTEXT, &pwaveOutGetErrorText, &cs ) )
{
pszText = MapProcessPtr( pszText, (LPPROCESS)cs.lpvData );
retv = pwaveOutGetErrorText(mmrError, pszText, cchText);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEOUTCLOSE)(HWAVEOUT hwo);
MMRESULT WINAPI aud_waveOutClose(HWAVEOUT hwo)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTCLOSE, 1 );
cs.arg0 = (DWORD)hwo;
return (DWORD)CALL_SERVER( &cs );
#else
PWAVEOUTCLOSE pwaveOutClose;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTCLOSE, &pwaveOutClose, &cs ) )
{
retv = pwaveOutClose(hwo);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEOUTPREPAREHEADER)(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh);
MMRESULT WINAPI aud_waveOutPrepareHeader(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTPREPAREHEADER, 3 );
cs.arg0 = (DWORD)hwo;
return (DWORD)CALL_SERVER( &cs, pwh, cbwh);
#else
PWAVEOUTPREPAREHEADER pwaveOutPrepareHeader;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTPREPAREHEADER, &pwaveOutPrepareHeader, &cs ) )
{
pwh = MapProcessPtr( pwh, (LPPROCESS)cs.lpvData );
pwh->lpData = MapProcessPtr( pwh->lpData , (LPPROCESS)cs.lpvData );
retv = pwaveOutPrepareHeader(hwo, pwh, cbwh);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEOUTUNPREPAREHEADER)(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh);
MMRESULT WINAPI aud_waveOutUnprepareHeader(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTUNPREPAREHEADER, 3 );
cs.arg0 = (DWORD)hwo;
return (DWORD)CALL_SERVER( &cs, pwh, cbwh);
#else
PWAVEOUTUNPREPAREHEADER pwaveOutUnprepareHeader;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTUNPREPAREHEADER, &pwaveOutUnprepareHeader, &cs ) )
{
pwh = MapProcessPtr( pwh, (LPPROCESS)cs.lpvData );
pwh->lpData = MapProcessPtr( pwh->lpData , (LPPROCESS)cs.lpvData );
retv = pwaveOutUnprepareHeader(hwo, pwh, cbwh);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEOUTWRITE)(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh);
MMRESULT WINAPI aud_waveOutWrite(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTWRITE, 3 );
cs.arg0 = (DWORD)hwo;
return (DWORD)CALL_SERVER( &cs, pwh, cbwh);
#else
PWAVEOUTWRITE pwaveOutWrite;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTWRITE, &pwaveOutWrite, &cs ) )
{
pwh = MapProcessPtr( pwh, (LPPROCESS)cs.lpvData );
pwh->lpData = MapProcessPtr( pwh->lpData , (LPPROCESS)cs.lpvData );
retv = pwaveOutWrite(hwo, pwh, cbwh);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEOUTPAUSE)(HWAVEOUT hwo);
MMRESULT WINAPI aud_waveOutPause(HWAVEOUT hwo)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTPAUSE, 1 );
cs.arg0 = (DWORD)hwo;
return (DWORD)CALL_SERVER( &cs );
#else
PWAVEOUTPAUSE pwaveOutPause;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTPAUSE, &pwaveOutPause, &cs ) )
{
retv = pwaveOutPause(hwo);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEOUTRESTART)(HWAVEOUT hwo);
MMRESULT WINAPI aud_waveOutRestart(HWAVEOUT hwo)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTRESTART, 1 );
cs.arg0 = (DWORD)hwo;
return (DWORD)CALL_SERVER( &cs );
#else
PWAVEOUTRESTART pwaveOutRestart;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTRESTART, &pwaveOutRestart, &cs ) )
{
retv = pwaveOutRestart(hwo);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEOUTRESET)(HWAVEOUT hwo);
MMRESULT WINAPI aud_waveOutReset(HWAVEOUT hwo)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTRESET, 1 );
cs.arg0 = (DWORD)hwo;
return (DWORD)CALL_SERVER( &cs );
#else
PWAVEOUTRESET pwaveOutReset;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTRESET, &pwaveOutReset, &cs ) )
{
retv = pwaveOutReset(hwo);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEOUTBREAKLOOP)(HWAVEOUT hwo);
MMRESULT WINAPI aud_waveOutBreakLoop(HWAVEOUT hwo)
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_AUDIO, AUDIO_WAVEOUTBREAKLOOP, 1 );
cs.arg0 = (DWORD)hwo;
return (DWORD)CALL_SERVER( &cs );
#else
PWAVEOUTBREAKLOOP pwaveOutBreakLoop;
CALLSTACK cs;
MMRESULT retv = MMSYSERR_ERROR;
if( API_Enter( API_AUDIO, AUDIO_WAVEOUTBREAKLOOP, &pwaveOutBreakLoop, &cs ) )
{
retv = pwaveOutBreakLoop(hwo);
API_Leave( );
}
return retv;
#endif
}
typedef MMRESULT (WINAPI *PWAVEOUTGETPOSITION)(HWAVEOUT hwo, LPMMTIME pmmt, UINT cbmmt);
MMRESULT WINAPI aud_waveOutGetPosition(HWAVEOUT hwo, LPMMTIME pmmt, UINT cbmmt)
{
#ifdef CALL_TRAP
CALLTRAP cs;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?