wavelib.c

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