wavelib.c

来自「深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心」· C语言 代码 · 共 2,138 行 · 第 1/5 页

C
2,138
字号
UINT WINAPI aud_midiInGetNumDevs(VOID)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINGETNUMDEVS, 0 );
    cs.arg0 = (DWORD)0;
    return (DWORD)CALL_SERVER( &cs);
//	return ( (PMIDIINGETNUMDEVS)CALL_API( API_AUDIO, AUDIO_MIDIINGETNUMDEVS, 0 ) )();
#else
	PMIDIINGETNUMDEVS pmidiingetnumdevs;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIINGETNUMDEVS, &pmidiingetnumdevs, &cs ) )
	{
		retv = pmidiingetnumdevs();
		API_Leave(  );
	}
	return retv;
#endif
}


// ********************************************************************
// 声明:DWORD WINAPI aud_midiInMessage(HMIDIIN hMidiIn,UINT msg,DWORD dw1,DWORD dw2)
// 参数:
//	IN hMidiIn -- MIDI输入设备句柄
//	IN msg  -- 要发送的消息
//	IN dw1	-- 消息参数1
//	IN dw2  -- 消息参数2
// 返回值:
//	返回设备返回的值。
// 功能描述:给一个MIDI输入设备发送一个消息
// 引用: MIDI API函数接口
// ********************************************************************
typedef DWORD (WINAPI *PMIDIINMESSAGE)(HMIDIIN hMidiIn,UINT msg,DWORD dw1,DWORD dw2);
DWORD WINAPI aud_midiInMessage(HMIDIIN hMidiIn,UINT msg,DWORD dw1,DWORD dw2)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINMESSAGE, 4 );
    cs.arg0 = (DWORD)hMidiIn;
    return (DWORD)CALL_SERVER( &cs, msg,dw1,dw2);
//	return ( (PMIDIINMESSAGE)CALL_API( API_AUDIO, AUDIO_MIDIINMESSAGE, 4 ) )(hMidiIn,msg,dw1,dw2);
#else
	PMIDIINMESSAGE pmidiinmessage;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIINMESSAGE, &pmidiinmessage, &cs ) )
	{
		retv = pmidiinmessage(hMidiIn,msg,dw1,dw2);
		API_Leave(  );
	}
	return retv;
#endif
}



// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInOpen(LPHMIDIIN lphMidiIn,UINT uDeviceID,DWORD dwCallback,DWORD dwCallbackInstance,DWORD dwFlags)
// 参数:
//	OUT lphMidiIn -- 一个指向MIDI输入设备句柄的指针
//	IN uDeviceID  -- 设备ID
//	IN dwCallback	-- 一个指向回调函数,窗口句柄。。。的值,具体有dwFlags指定
//	IN dwCallbackInstance  -- 回调者的实例句柄
//	IN dwFlags -- 回调类型
// 返回值:
//	成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:打开一个指定ID的MIDI输入设备
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINOPEN)(LPHMIDIIN lphMidiIn,UINT uDeviceID,DWORD dwCallback,DWORD dwCallbackInstance,DWORD dwFlags);
MMRESULT WINAPI aud_midiInOpen(LPHMIDIIN lphMidiIn,UINT uDeviceID,DWORD dwCallback,DWORD dwCallbackInstance,DWORD dwFlags)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINOPEN, 5 );
    cs.arg0 = (DWORD)lphMidiIn;
    return (DWORD)CALL_SERVER( &cs, uDeviceID,dwCallback,dwCallbackInstance,dwFlags);
//	return ( (PMIDIINOPEN)CALL_API( API_AUDIO, AUDIO_MIDIINOPEN, 5 ) )(lphMidiIn,uDeviceID,dwCallback,dwCallbackInstance,dwFlags);
#else
	PMIDIINOPEN pmidiinopen;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIINOPEN, &pmidiinopen, &cs ) )
	{
		lphMidiIn = MapProcessPtr( lphMidiIn, (LPPROCESS)cs.lpvData );

		retv = pmidiinopen(lphMidiIn,uDeviceID,dwCallback,dwCallbackInstance,dwFlags);
		API_Leave(  );
	}
	return retv;
#endif
}


// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInPrepareHeader(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr)
// 参数:
//	IN hMidiIn -- MIDI输入设备句柄
//	IN lpMidiInHdr  -- 一个指向MIDIHDR结构的指针
//	IN cbMidiInHdr -- 结构MIDIHDR的尺寸
// 返回值:
//	成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:准备一个输入缓存。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINPREPAREHEADER)(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr);
MMRESULT WINAPI aud_midiInPrepareHeader(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINPREPAREHEADER, 3 );
    cs.arg0 = (DWORD)hMidiIn;
    return (DWORD)CALL_SERVER( &cs, lpMidiInHdr,cbMidiInHdr);
//	return ( (PMIDIINPREPAREHEADER)CALL_API( API_AUDIO, AUDIO_MIDIINPREPAREHEADER, 3 ) )(hMidiIn,lpMidiInHdr,cbMidiInHdr);
#else
	PMIDIINPREPAREHEADER pmidiinprepareheader;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIINPREPAREHEADER, &pmidiinprepareheader, &cs ) )
	{
		lpMidiInHdr = MapProcessPtr( lpMidiInHdr, (LPPROCESS)cs.lpvData );

		retv = pmidiinprepareheader(hMidiIn,lpMidiInHdr,cbMidiInHdr);
		API_Leave(  );
	}
	return retv;
#endif
}


// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInReset(HMIDIIN hMidiIn)
// 参数:
//	IN hMidiIn -- MIDI输入设备句柄
// 返回值:
//	成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:停止一个输入设备输入数据。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINRESET)(HMIDIIN hMidiIn);
MMRESULT WINAPI aud_midiInReset(HMIDIIN hMidiIn)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINRESET, 1 );
    cs.arg0 = (DWORD)hMidiIn;
    return (DWORD)CALL_SERVER( &cs);
//	return ( (PMIDIINRESET)CALL_API( API_AUDIO, AUDIO_MIDIINRESET, 1 ) )(hMidiIn);
#else
	PMIDIINRESET pmidiinreset;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIINRESET, &pmidiinreset, &cs ) )
	{
		retv = pmidiinreset(hMidiIn);
		API_Leave(  );
	}
	return retv;
#endif
}


// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInStart(HMIDIIN hMidiIn)
// 参数:
//	IN hMidiIn -- MIDI输入设备句柄
// 返回值:
//	成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:用一个指定输入设备开始输入数据。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINSTART)(HMIDIIN hMidiIn);
MMRESULT WINAPI aud_midiInStart(HMIDIIN hMidiIn)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINSTART, 1 );
    cs.arg0 = (DWORD)hMidiIn;
    return (DWORD)CALL_SERVER( &cs);
//	return ( (PMIDIINSTART)CALL_API( API_AUDIO, AUDIO_MIDIINSTART, 1 ) )(hMidiIn);
#else
	PMIDIINSTART pmidiinstart;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIINSTART, &pmidiinstart, &cs ) )
	{
		retv = pmidiinstart(hMidiIn);
		API_Leave(  );
	}
	return retv;
#endif
}


// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInStop(HMIDIIN hMidiIn)
// 参数:
//	IN hMidiIn -- MIDI输入设备句柄
// 返回值:
//	成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:停止一个输入设备输入数据。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINSTOP)(HMIDIIN hMidiIn);
MMRESULT WINAPI aud_midiInStop(HMIDIIN hMidiIn)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINSTOP, 1 );
    cs.arg0 = (DWORD)hMidiIn;
    return (DWORD)CALL_SERVER( &cs);
//	return ( (PMIDIINSTOP)CALL_API( API_AUDIO, AUDIO_MIDIINSTOP, 1 ) )(hMidiIn);
#else
	PMIDIINSTOP pmidiinstop;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIINSTOP, &pmidiinstop, &cs ) )
	{
		retv = pmidiinstop(hMidiIn);
		API_Leave(  );
	}
	return retv;
#endif
}


// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiInUnprepareHeader(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr)
// 参数:
//	IN hMidiIn -- MIDI输入设备句柄
//	IN lpMidiInHdr  -- 一个指向MIDIHDR结构的指针
//	IN cbMidiInHdr -- 结构MIDIHDR的尺寸
// 返回值:
//	成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:解除一个已经准备好输入缓存。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIINUNPREPAREHEADER)(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr);
MMRESULT WINAPI aud_midiInUnprepareHeader(HMIDIIN hMidiIn,LPMIDIHDR lpMidiInHdr,UINT cbMidiInHdr)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIINUNPREPAREHEADER, 3 );
    cs.arg0 = (DWORD)hMidiIn;
    return (DWORD)CALL_SERVER( &cs, lpMidiInHdr,cbMidiInHdr);
//	return ( (PMIDIINUNPREPAREHEADER)CALL_API( API_AUDIO, AUDIO_MIDIINUNPREPAREHEADER, 5 ) )(hMidiIn,lpMidiInHdr,cbMidiInHdr);
#else
	PMIDIINUNPREPAREHEADER pmidiinunprepareheader;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIINUNPREPAREHEADER, &pmidiinunprepareheader, &cs ) )
	{
		lpMidiInHdr = MapProcessPtr( lpMidiInHdr, (LPPROCESS)cs.lpvData );

		retv = pmidiinunprepareheader(hMidiIn,lpMidiInHdr,cbMidiInHdr);
		API_Leave(  );
	}
	return retv;
#endif
}




// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutCacheDrumPatches(HMIDIOUT hmo,UINT wPatch,WORD * lpKeyArray,UINT wFlags)
// 参数:
//	IN hmo -- MIDI输出设备句柄
//	IN wPatch  -- 鼓声的修补数量
//	IN lpKeyArray -- 一个指向KEYARRAY数组的指针,指向打击乐的修补
//	IN wFlags	-- 处理选项
// 返回值:
//	成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:请求对一个内在的MIDI混合设备的输出缓存的打击乐进行修补处理。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTCACHEDRUMPATCHES)(HMIDIOUT hmo,UINT wPatch,WORD * lpKeyArray,UINT wFlags);
MMRESULT WINAPI aud_midiOutCacheDrumPatches(HMIDIOUT hmo,UINT wPatch,WORD * lpKeyArray,UINT wFlags)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTCACHEDRUMPATCHES, 4 );
    cs.arg0 = (DWORD)hmo;
    return (DWORD)CALL_SERVER( &cs, wPatch,lpKeyArray,wFlags);
//	return ( (PMIDIOUTCACHEDRUMPATCHES)CALL_API( API_AUDIO, AUDIO_MIDIOUTCACHEDRUMPATCHES, 4 ) )(hmo,wPatch,lpKeyArray,wFlags);
#else
	PMIDIOUTCACHEDRUMPATCHES pmidioutcachedrumpatches;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIOUTCACHEDRUMPATCHES, &pmidioutcachedrumpatches, &cs ) )
	{
		lpKeyArray = MapProcessPtr( lpKeyArray, (LPPROCESS)cs.lpvData );

		retv = pmidioutcachedrumpatches(hmo,wPatch,lpKeyArray,wFlags);
		API_Leave(  );
	}
	return retv;
#endif
}


// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutCachePatches(HMIDIOUT hmo,UINT wBank,WORD * lpPatchArray,UINT wFlags)
// 参数:
//	IN hmo -- MIDI输出设备句柄
//	IN wBank  -- 修补数量
//	IN lpPatchArray -- 一个指向PATCHARRAY 数组的指针
//	IN wFlags	-- 处理选项
// 返回值:
//	成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:请求对一个内在的MIDI混合设备的输出缓存的指定装置进行修补处理。
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTCACHEPATCHES)(HMIDIOUT hmo,UINT wBank,WORD * lpPatchArray,UINT wFlags);
MMRESULT WINAPI aud_midiOutCachePatches(HMIDIOUT hmo,UINT wBank,WORD * lpPatchArray,UINT wFlags)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTCACHEPATCHES, 4 );
    cs.arg0 = (DWORD)hmo;
    return (DWORD)CALL_SERVER( &cs, wBank,lpPatchArray,wFlags);
//	return ( (PMIDIOUTCACHEPATCHES)CALL_API( API_AUDIO, AUDIO_MIDIOUTCACHEPATCHES, 4 ) )(hmo,wBank,lpPatchArray,wFlags);
#else
	PMIDIOUTCACHEPATCHES pmidioutcachepatches;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIOUTCACHEPATCHES, &pmidioutcachepatches, &cs ) )
	{
		lpPatchArray = MapProcessPtr( lpPatchArray, (LPPROCESS)cs.lpvData );

		retv = pmidioutcachepatches(hmo,wBank,lpPatchArray,wFlags);
		API_Leave(  );
	}
	return retv;
#endif
}


// ********************************************************************
// 声明:MRESULT WINAPI aud_midiOutClose(HMIDIOUT hmo)
// 参数:
//	IN hmo -- MIDI输出设备句柄
// 返回值:
//	成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:关闭一个MIDI输出设备
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTCLOSE)(HMIDIOUT hmo);
MMRESULT WINAPI aud_midiOutClose(HMIDIOUT hmo)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTCLOSE, 1 );
    cs.arg0 = (DWORD)hmo;
    return (DWORD)CALL_SERVER( &cs);
//	return ( (PMIDIOUTCLOSE)CALL_API( API_AUDIO, AUDIO_MIDIOUTCLOSE, 1 ) )(hmo);
#else
	PMIDIOUTCLOSE pmidioutclose;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIOUTCLOSE, &pmidioutclose, &cs ) )
	{
		retv = pmidioutclose(hmo);
		API_Leave(  );
	}
	return retv;
#endif
}


// ********************************************************************
// 声明:MMRESULT WINAPI aud_midiOutGetDevCaps(UINT uDeviceID,LPMIDIOUTCAPS lpMidiOutCaps,UINT cbMidiOutCaps)
// 参数:
//	IN uDeviceID -- MIDI输出设备的ID
//	IN lpMidiOutCaps  -- 一个指向MIDIOUTCAPS 结构的指针
//	IN cbMidiOutCaps -- 结构MIDIOUTCAPS 的尺寸
// 返回值:
//	成功返回MMSYSERR_NOERROR,否则返回其他。
// 功能描述:得到MIDI输出设备的能力
// 引用: MIDI API函数接口
// ********************************************************************
typedef MMRESULT (WINAPI *PMIDIOUTGETDEVCAPS)(UINT uDeviceID,LPMIDIOUTCAPS lpMidiOutCaps,UINT cbMidiOutCaps);
MMRESULT WINAPI aud_midiOutGetDevCaps(UINT uDeviceID,LPMIDIOUTCAPS lpMidiOutCaps,UINT cbMidiOutCaps)
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_AUDIO, AUDIO_MIDIOUTGETDEVCAPS, 3 );
    cs.arg0 = (DWORD)uDeviceID;
    return (DWORD)CALL_SERVER( &cs, lpMidiOutCaps,cbMidiOutCaps);
//	return ( (PMIDIOUTGETDEVCAPS)CALL_API( API_AUDIO, AUDIO_MIDIOUTGETDEVCAPS, 3) )(uDeviceID,lpMidiOutCaps,cbMidiOutCaps);
#else
	PMIDIOUTGETDEVCAPS pmidioutgetdevcaps;

	CALLSTACK cs;
	MMRESULT  retv = MMSYSERR_ERROR;

	if( API_Enter( API_AUDIO, AUDIO_MIDIOUTGETDEVCAPS, &pmidioutgetdevcaps, &cs ) )
	{
		lpMidiOutCaps = MapProcessPtr( lpMidiOutCaps, (LPPROCESS)cs.lpvData );

		retv = pmidioutgetdevcaps(uDeviceID,lpMidiOutCaps,cbMidiOutCaps);
		API_Leave(  );
	}
	return retv;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?