wavelib.c

来自「深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心」· 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 + -
显示快捷键?