亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sound.c

?? brew開發與入門的第八章原代碼,均可運行,請放心使用
?? C
?? 第 1 頁 / 共 2 頁
字號:

/*!
 *	Example program.
 *  Copyright (c) 2004 by BREW Development Team, Zhejiang University.
 *  All Rights Reserved.
 */

/*!-----------------------------------

	@file		sound.c
	@author		TYB
	@brief		程序主文件

  -----------------------------------*/

#include "AEEModGen.h"
#include "AEEAppGen.h"
#include "AEEShell.h"
#include "AEESound.h"
#include "AEEMenu.h"
#include "AEEStdLib.h"
#include "AEEMedia.h"


typedef struct _CSound{

	AEEApplet		a;

	ISound			*pISound;
	ISoundPlayer	*pISoundPlayer;
	IMedia			*pIMedia;
	IMenuCtl		*pIMenu;
	AEESoundToneData*pToneData;
	uint16          nTones;

	uint16			wVolume;		//標記音量大小
	uint32			nPlayTime;
	
}CSound;


#define USAGE_GET				103
#define USAGE_SETDEVICE			104
#define USAGE_PLAYTONE			105
#define USAGE_PLAYTONELIST		106
#define USAGE_PLAYFREQTONE		107
#define USAGE_VIBRATE			109
#define USAGE_SETVOLUMEUP		110
#define USAGE_SETVOLUMEDOWN		111
#define USAGE_GETVOLUME			112
#define USAGE_BEEP				113
#define USAGE_PLAYMP3			114
#define USAGE_PAUSE				115
#define USAGE_RESUME			116
#define USAGE_STOP				117
#define USAGE_FORWARD			118
#define USAGE_REWIND			119
#define USAGE_PLAYQCP			120
#define USAGE_PLAYMIDI			121
#define USAGE_MEDIAPLAY			122
#define USAGE_MEDIASTOP			123
#define USAGE_MEDIAPAUSE		124
#define USAGE_MEDIARESUME		125

#define HIGHFREQ				600
#define LOWFREQ					200

#define PLAY_DURATION1			3000   // In milliseconds
#define PLAY_DURATION2			4000
#define PLAY_DURATION3			5000
#define PLAY_DURATION4			6000

/*!
	Function Prototypes
 */
static boolean	sound_HandleEvent(IApplet * pi,AEEEvent eCode,uint16 wParam,uint32 dwParam);
static boolean	InitData(IApplet* pMe);
static void		FreeAppData(IApplet* pme);

static void		SoundCBFun(void * pUser, AEESoundCmd eCBType, AEESoundStatus eStatus, uint32 dwParam);
static void		MediaCBFun(void * pUser, AEEMediaCmdNotify *pCmdNotify);
static void		SoundPlayerCBFn(void *pUser, AEESoundPlayerCmd eCBType, AEESoundPlayerStatus eStatus, uint32 dwParam);
static void		BuildMainMenu(CSound *pMe);
static void		DisplayOutput(CSound * pMe, char *pszStr);

boolean			SoundPlay(CSound *pme , int16 mark);
void			ExecuteCommand(CSound *pme , int16 wParam);

/*!
	Function Defintions
 */

//--------------------------------------------------------------------------------------

/*!
 *		@brief:		小程序初始化函數
 *		@para:		ClsId小程序的ClassID
 *		@para:		pIShell底層傳遞來的指向IShell接口的指針
 *		@para:		po指向IModule接口的指針
 *		@para:		ppObj用于初始化以后返回AEEApplet結構的指針
 *		@return:	AEE_SUCCESS表示成功,EFAILED表示失敗
 */
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
	*ppObj = NULL;
	
	if(AEEApplet_New(sizeof(CSound), 
						ClsId, 
						pIShell,
						po,
						(IApplet**)ppObj,
						(AEEHANDLER)sound_HandleEvent,
						(PFNFREEAPPDATA)FreeAppData)){
		if (InitData((IApplet*)*ppObj) == TRUE){
            return(AEE_SUCCESS);
		}
	}
	
	return (EFAILED);
}


/*!
 *		@brief:		消息處理函數
 *		@para:		pi指向IApplet接口的指針
 *		@para:		eCode消息代碼
 *		@para:		wParam是16位的參數
 *		@para:		dwParam是32位的參數
 *		@return:	TRUE表示處理過,FALSE沒有處理
 */
static boolean sound_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	CSound *pme = (CSound*)pi;
	
	switch (eCode) 
	{
	case EVT_APP_START:  
		if(SUCCESS == ISHELL_CreateInstance(pme->a.m_pIShell, AEECLSID_MENUCTL, (void **)&pme->pIMenu))
		{
			ISHELL_CreateInstance(pme->a.m_pIShell, AEECLSID_SOUND, (void **)&pme->pISound);
			ISHELL_CreateInstance(pme->a.m_pIShell, AEECLSID_SOUNDPLAYER, (void **)&pme->pISoundPlayer);
			ISHELL_CreateInstance(pme->a.m_pIShell, AEECLSID_MEDIAMP3, (void**)&pme->pIMedia);
			BuildMainMenu(pme);
		}
      	return TRUE;

	case EVT_APP_STOP:
		return TRUE;

	case EVT_KEY:
		if(pme->pIMenu != NULL && (IMENUCTL_IsActive(pme->pIMenu) == TRUE))
		{
			return IMENUCTL_HandleEvent(pme->pIMenu, EVT_KEY, wParam, 0);
		}
		else if(pme->pIMenu != NULL && (IMENUCTL_IsActive(pme->pIMenu) == FALSE))
		{
			if(wParam == AVK_CLR)
			{
				// 清除回調函數
				ISOUND_RegisterNotify(pme->pISound, NULL, NULL);
				ISOUNDPLAYER_RegisterNotify(pme->pISoundPlayer, NULL, NULL);
				ISOUND_StopTone (pme->pISound);
				ISOUND_StopVibrate (pme->pISound);
				// 重新回到菜單界面
				IMENUCTL_SetActive(pme->pIMenu, TRUE);
				return TRUE;
			}
		}
		break;

	case EVT_COMMAND:
		ExecuteCommand(pme , wParam);
		return TRUE;
		
	default:
		break;
	}
	return FALSE;
}

/*!
 *		@brief:		初始化函數
 *		@para:		pMe指向IApplet接口的指針
 *		@return:	TRUE表示成功,FALSE表示失敗
 */

static boolean InitData(IApplet* pMe)
{
	if(pMe != NULL){
		CSound *pme	= (CSound*)pMe;
		pme->pIMenu = NULL;
		pme->pISound= NULL;
		pme->pIMedia= NULL;
		pme->pISoundPlayer = NULL;
		pme->pToneData = NULL;
		pme->nTones = 0;
		pme->wVolume= 100;
		return TRUE;
	}
	else
		return FALSE;
}

/*!
 *		@brief:		資源釋放函數
 *		@para:		pMe指向IApplet接口的指針
 */ 

static void FreeAppData(IApplet* pme)
{
	CSound *pMe = (CSound*)pme;
	if(pMe->pIMenu){
		IMENUCTL_Release(pMe->pIMenu);
		pMe->pIMenu = NULL;
	}
	if(pMe->pISound){
		ISOUND_RegisterNotify(pMe->pISound, NULL, NULL);
		ISOUND_StopTone (pMe->pISound);

		if(pMe->pToneData){
			FREE(pMe->pToneData);
			pMe->pToneData = NULL;
			pMe->nTones = 0;
		}
		ISOUND_StopVibrate (pMe->pISound);
		ISOUND_Release(pMe->pISound);
		pMe->pISound = NULL;
	}
	if(pMe->pIMedia) {
		IMEDIA_RegisterNotify(pMe->pIMedia, NULL, NULL);
		IMEDIA_Stop(pMe->pIMedia);
		IMEDIA_Release(pMe->pIMedia);
		pMe->pIMedia = NULL;
	}
	if(pMe->pISoundPlayer) {
		ISOUNDPLAYER_RegisterNotify(pMe->pISoundPlayer, NULL, NULL);
		ISOUNDPLAYER_Stop(pMe->pISoundPlayer);
		ISOUNDPLAYER_Release (pMe->pISoundPlayer);
		pMe->pISoundPlayer = NULL;
	}

}

/*!
 *		@brief:		程序的主要功能模塊
 *		@para:		pme指向CSound結構的指針
 *		@para:		mark標記當前菜單命令編號
 *		@return:	TRUE表示成功,FALSE表示失敗
 */

boolean SoundPlay(CSound *pme , int16 mark)
{
	AEESoundToneData toneData;
	AEESoundInfo sndInfo= {0};
	uint16 wHiFreq		= HIGHFREQ;
	uint16 wLoFreq		= LOWFREQ;
	uint16 wDuration	= PLAY_DURATION3;	
	uint16 w16Duration	= PLAY_DURATION3;
	AEEMediaData mediadata;
	AEESoundPlayerInfo Info;

	Info.pData  = "midi.mid";
	Info.dwSize = 0;
	Info.eInput = SDT_FILE;
	
	mediadata.pData   = "midi.mid";
	mediadata.dwSize  = 0;
	mediadata.clsData = MMD_FILE_NAME;

	if(!pme->pISound || !pme->pIMedia || !pme->pISoundPlayer)
		return FALSE;
	
	//注冊回調函數,以便于和小程序通信
	ISOUND_RegisterNotify(pme->pISound, &SoundCBFun, (void *)pme);
	IMEDIA_RegisterNotify(pme->pIMedia, &MediaCBFun, (void *)pme);
	ISOUNDPLAYER_RegisterNotify(pme->pISoundPlayer, &SoundPlayerCBFn, (void *)pme);

	switch(mark) {

		//播放一個固定聲調
		case USAGE_PLAYTONE:
			toneData.eTone = AEE_TONE_RING_A;
			toneData.wDuration = PLAY_DURATION1;
			ISOUND_PlayTone (pme->pISound, toneData);
			return TRUE;

		//取得當前設備信息
		case USAGE_GET:
			ISOUND_Get (pme->pISound, &sndInfo);
			return TRUE;

		//設置設備的參數
		case USAGE_SETDEVICE:
			sndInfo.eDevice = AEE_SOUND_DEVICE_CURRENT;
			sndInfo.eMethod = AEE_SOUND_METHOD_RING;
			sndInfo.eAPath = AEE_SOUND_APATH_LOCAL;
			sndInfo.eEarMuteCtl = AEE_SOUND_MUTECTL_UNMUTED;
			sndInfo.eMicMuteCtl = AEE_SOUND_MUTECTL_UNMUTED;
			ISOUND_Set(pme->pISound, &sndInfo);
			ISOUND_SetDevice(pme->pISound);
			return TRUE;

		//播放音調列表
		case USAGE_PLAYTONELIST:
			pme->nTones = 4;
			pme->pToneData = MALLOC(sizeof(AEESoundToneData)*pme->nTones);

			pme->pToneData[0].eTone = AEE_TONE_RING_B;
			pme->pToneData[0].wDuration = PLAY_DURATION2;
			
			pme->pToneData[1].eTone = AEE_TONE_RING_A;
			pme->pToneData[1].wDuration = PLAY_DURATION1;
			
			pme->pToneData[2].eTone = AEE_TONE_0;
			pme->pToneData[2].wDuration = PLAY_DURATION2;
			
			pme->pToneData[3].eTone = AEE_TONE_1;
			pme->pToneData[3].wDuration = PLAY_DURATION3;
			
			ISOUND_PlayToneList (pme->pISound, pme->pToneData, pme->nTones);
			return TRUE;

		//播放一個給定高低頻率的音調
		case USAGE_PLAYFREQTONE:
			ISOUND_PlayFreqTone (pme->pISound, wHiFreq, wLoFreq, wDuration);
			return TRUE;

		//產生振動
		case USAGE_VIBRATE:
			ISOUND_Vibrate(pme->pISound, w16Duration);
			return TRUE;

		//取得當前的聲音大小參數
		case USAGE_GETVOLUME:
			ISOUND_GetVolume (pme->pISound);
			return TRUE;

		//加大音量
		case USAGE_SETVOLUMEUP:
			if(pme->wVolume <= AEE_MAX_VOLUME) {
				pme->wVolume += 10;
				pme->wVolume = pme->wVolume > AEE_MAX_VOLUME ? AEE_MAX_VOLUME : pme->wVolume;
			}
			ISOUND_SetVolume(pme->pISound,pme->wVolume);
			return TRUE;

		//減少音量
		case USAGE_SETVOLUMEDOWN:
			if(pme->wVolume >= 10) {
				pme->wVolume -= 10;
				pme->wVolume = pme->wVolume < 10 ? 11 : pme->wVolume;
			}
			ISOUND_SetVolume(pme->pISound,pme->wVolume);
			return TRUE;

		//利用IShell接口的ISHELL_Beep函數來播放系統蜂鳴聲或振動
		//該函數是直到播放完畢才返回一個值標記是否播放成功,與回調機制不同
		case USAGE_BEEP:
			ISHELL_Beep(pme->a.m_pIShell, BEEP_OFF, FALSE);
		
			ISHELL_Beep(pme->a.m_pIShell, BEEP_ALERT, FALSE);
			ISHELL_Beep(pme->a.m_pIShell, BEEP_ALERT, TRUE);
			
			ISHELL_Beep(pme->a.m_pIShell, BEEP_REMINDER, FALSE);
			ISHELL_Beep(pme->a.m_pIShell, BEEP_REMINDER, TRUE);

			ISHELL_Beep(pme->a.m_pIShell, BEEP_MSG, FALSE);
			ISHELL_Beep(pme->a.m_pIShell, BEEP_MSG, TRUE);

			ISHELL_Beep(pme->a.m_pIShell, BEEP_ERROR, FALSE);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品最新网址| 韩国在线一区二区| 亚洲第一久久影院| 日韩免费看的电影| 成人一二三区视频| 一区二区久久久久久| 欧美大片在线观看| 91免费看视频| 国产在线不卡视频| 一区二区三区四区蜜桃| 亚洲精品在线免费播放| 欧美做爰猛烈大尺度电影无法无天| 欧美aaaaa成人免费观看视频| 中文字幕日韩一区二区| 欧美一区二区三区的| 色美美综合视频| 国产91在线观看| 久久成人av少妇免费| 亚洲激情中文1区| 国产精品区一区二区三| 制服丝袜av成人在线看| 91蝌蚪porny| 国产1区2区3区精品美女| 丝袜美腿亚洲色图| 一区二区三区中文字幕在线观看| 国产欧美日韩中文久久| 制服丝袜激情欧洲亚洲| 欧美网站一区二区| 99vv1com这只有精品| 国产麻豆精品在线观看| 美国三级日本三级久久99| 一区二区三区日本| 欧美国产一区二区| 久久人人超碰精品| 久久婷婷综合激情| 久久97超碰色| 九一九一国产精品| 琪琪久久久久日韩精品| 亚洲影院理伦片| 亚洲码国产岛国毛片在线| 国产欧美综合在线| 2014亚洲片线观看视频免费| 日韩一区二区三区视频在线 | 国产精品99久久久久久久女警| 天天综合色天天| 午夜精品在线视频一区| 性做久久久久久久久| 午夜欧美视频在线观看 | 亚洲欧美日韩国产一区二区三区 | 亚洲自拍另类综合| 亚洲乱码中文字幕| 亚洲欧洲精品天堂一级| 中文字幕中文字幕一区二区 | 亚洲另类在线一区| 亚洲精品五月天| 亚洲在线视频一区| 亚洲欧美国产三级| 亚洲综合色视频| 日日摸夜夜添夜夜添精品视频 | 成人精品一区二区三区四区 | 亚洲视频综合在线| 亚洲国产精品激情在线观看| 国产午夜精品一区二区| 欧美国产一区二区在线观看| 亚洲色图都市小说| 一区二区免费视频| 麻豆免费精品视频| 国产成人精品一区二区三区四区 | 欧美婷婷六月丁香综合色| 欧美主播一区二区三区| 欧美久久婷婷综合色| 日韩一区二区精品在线观看| 久久久国产午夜精品| 国产欧美日韩中文久久| 亚洲精品亚洲人成人网在线播放| 日韩精彩视频在线观看| 久久成人综合网| 99精品视频在线观看| 欧美三区在线观看| 91精品久久久久久蜜臀| 国产午夜亚洲精品午夜鲁丝片 | 亚洲国产精品麻豆| 青青草97国产精品免费观看| 国产成人亚洲综合a∨婷婷图片| 91亚洲男人天堂| 欧美日韩一区视频| 日韩免费高清电影| 国产精品美女视频| 偷拍亚洲欧洲综合| 久久se精品一区二区| 91在线无精精品入口| 欧美一卡2卡三卡4卡5免费| 亚洲国产成人私人影院tom| 捆绑紧缚一区二区三区视频| 国产精品久久久久桃色tv| 一区二区三区在线视频播放| 狠狠色丁香婷综合久久| 91在线视频观看| 精品国产麻豆免费人成网站| 亚洲精品久久嫩草网站秘色| 紧缚捆绑精品一区二区| 91麻豆免费看| 久久精品欧美一区二区三区麻豆| 亚洲国产精品一区二区尤物区| 激情国产一区二区| 色爱区综合激月婷婷| 国产日产欧美一区| 天天综合天天综合色| 91亚洲国产成人精品一区二区三 | 欧美日韩激情一区二区三区| 国产日韩欧美精品综合| 亚洲va天堂va国产va久| 成a人片亚洲日本久久| 日韩精品一区国产麻豆| 亚洲国产精品一区二区尤物区| 国产suv精品一区二区883| 欧美一区二区三区免费观看视频 | 日日摸夜夜添夜夜添国产精品| 99久久er热在这里只有精品15 | 精品免费国产二区三区| 亚洲老妇xxxxxx| 99国产一区二区三精品乱码| 亚洲精品一区二区三区影院 | 国产91高潮流白浆在线麻豆 | 国产成人精品免费在线| 7777精品伊人久久久大香线蕉经典版下载| 国产精品家庭影院| 国产一区二区在线看| 91精品国产免费| 亚洲超碰精品一区二区| 日本道色综合久久| 亚洲三级免费电影| 波多野结衣中文一区| 国产欧美日韩另类一区| 国产一区啦啦啦在线观看| 欧美mv和日韩mv的网站| 男女男精品视频| 91精品综合久久久久久| 亚洲成av人片观看| 欧美区一区二区三区| 亚洲午夜电影网| 欧美日韩精品免费观看视频| 午夜精品国产更新| 欧美日韩精品欧美日韩精品一| 五月天亚洲婷婷| 91精品国产一区二区三区| 日韩精品成人一区二区三区| 欧美精品粉嫩高潮一区二区| 亚洲国产成人精品视频| 欧美日韩一区二区欧美激情| 亚洲大片免费看| 欧美精选在线播放| 香蕉影视欧美成人| 欧美日韩高清影院| 日韩影视精彩在线| 日韩欧美国产精品一区| 黄色成人免费在线| 欧美激情在线一区二区| 国产a视频精品免费观看| 亚洲欧洲三级电影| 久久综合综合久久综合| 精品久久免费看| 国产盗摄女厕一区二区三区| 国产精品久久看| 在线观看一区日韩| 日韩高清不卡一区二区| 精品99一区二区| a美女胸又www黄视频久久| 国产精品国产三级国产| 色94色欧美sute亚洲13| 日韩精品成人一区二区三区 | 欧美精品久久久久久久多人混战 | 久久精品国产精品青草| 日韩亚洲国产中文字幕欧美| 国产一区二区三区四区五区入口 | 国产成人免费xxxxxxxx| 国产精品美女视频| 色8久久人人97超碰香蕉987| 夜夜嗨av一区二区三区网页| 日韩欧美卡一卡二| 成人毛片视频在线观看| 亚洲乱码国产乱码精品精98午夜| 911国产精品| 成人一级视频在线观看| 亚洲h在线观看| 国产欧美一区二区三区网站| 色综合久久中文综合久久97| 蜜桃免费网站一区二区三区| 国产精品免费久久| 欧美精选午夜久久久乱码6080| 成人免费毛片嘿嘿连载视频| 亚洲成人精品一区二区| 久久久久久毛片| 欧美日韩在线播| 成人免费观看男女羞羞视频| 久久久久久久免费视频了| 色琪琪一区二区三区亚洲区| 久久成人av少妇免费| 一区二区三区美女视频| 久久蜜桃一区二区|