亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲精品中文在线影院| 伊人婷婷欧美激情| 麻豆高清免费国产一区| 欧美日韩免费在线视频| 亚洲成av人**亚洲成av**| 91福利在线播放| 婷婷六月综合亚洲| 日韩午夜电影在线观看| 久久精品久久精品| 国产女人18毛片水真多成人如厕| 国产精品一级黄| 国产精品久久久久影院老司 | 国产精品99久久久久久久vr| 久久久久久**毛片大全| 成人深夜在线观看| 一区二区三区中文字幕在线观看| 欧美亚洲一区二区三区四区| 日韩激情视频网站| 26uuu国产日韩综合| 成人免费高清视频在线观看| 亚洲欧美激情在线| 欧美色视频一区| 久久成人精品无人区| 国产精品午夜在线观看| 91国偷自产一区二区使用方法| 亚洲国产成人porn| 精品久久久久久久人人人人传媒| 成人福利在线看| 亚洲国产精品一区二区久久恐怖片 | 久久精品免费观看| 国产精品欧美精品| 欧美三级视频在线观看| 国模一区二区三区白浆| 自拍偷拍国产亚洲| 欧美一二三区在线| 99视频在线精品| 美女视频网站久久| 亚洲乱码国产乱码精品精可以看 | 久久99久久久久| 中文无字幕一区二区三区| 在线观看日韩高清av| 久久精品国产亚洲5555| 亚洲精选一二三| 精品国精品国产尤物美女| 不卡在线观看av| 久久99久久精品| 亚洲成人午夜电影| 成人免费在线视频观看| 欧美成人a在线| 色av一区二区| 成人在线视频首页| 美女脱光内衣内裤视频久久网站 | 国产电影一区二区三区| 日本亚洲免费观看| 亚洲欧美色图小说| 国产亚洲自拍一区| 日韩一级大片在线| 91.麻豆视频| 欧美无乱码久久久免费午夜一区| 粉嫩aⅴ一区二区三区四区五区| 午夜视频一区二区三区| 国产精品剧情在线亚洲| 高清国产午夜精品久久久久久| 午夜视频在线观看一区二区三区| 久久综合久久综合九色| 欧洲在线/亚洲| 国产一区视频网站| 午夜激情综合网| 国产精品久久毛片av大全日韩| 色悠久久久久综合欧美99| 免费一级片91| 亚洲综合激情小说| 中文字幕精品一区二区三区精品| 欧美一区日韩一区| 色天天综合久久久久综合片| 日本特黄久久久高潮| 亚洲精品乱码久久久久久 | jvid福利写真一区二区三区| 日本中文一区二区三区| 一区二区三区在线看| 中文在线一区二区| 久久综合五月天婷婷伊人| 欧美日产在线观看| 日本高清免费不卡视频| 国产一区在线观看视频| 国产成人无遮挡在线视频| 丝袜亚洲另类欧美综合| 亚洲精品美腿丝袜| 中文字幕制服丝袜一区二区三区| 日韩一区二区精品葵司在线| 欧美日韩精品综合在线| 91麻豆精东视频| 成人黄色a**站在线观看| 国产呦精品一区二区三区网站| 另类综合日韩欧美亚洲| 免费看欧美女人艹b| 日本欧美一区二区三区乱码| 国产精品毛片高清在线完整版| 日本一区二区三级电影在线观看| 久久综合九色综合97婷婷| 精品日韩欧美在线| 精品日韩在线一区| 精品国产成人系列| 久久色.com| 国产欧美一区二区精品仙草咪| 久久精品人人爽人人爽| 日韩欧美中文字幕公布| 国产欧美精品在线观看| 国产日韩av一区| 亚洲国产成人私人影院tom| 国产欧美精品日韩区二区麻豆天美| 久久久亚洲高清| 国产蜜臀av在线一区二区三区| 国产精品午夜春色av| 中文字幕一区二区在线播放| 最新国产精品久久精品| 亚洲乱码国产乱码精品精可以看 | 在线国产亚洲欧美| 欧美色区777第一页| 91精彩视频在线观看| 99riav一区二区三区| 日本电影欧美片| 3d成人h动漫网站入口| hitomi一区二区三区精品| 亚洲国产欧美在线| 日韩va亚洲va欧美va久久| 激情综合色播激情啊| 成人一区二区三区视频| 色婷婷亚洲综合| 91精品国产免费久久综合| 日韩一区二区在线观看视频播放| 国产精品美女久久久久久久久 | 国产综合久久久久久鬼色| 黄色日韩三级电影| 不卡av在线免费观看| 欧洲日韩一区二区三区| 欧美sm美女调教| 中文字幕人成不卡一区| 午夜av区久久| 国产精品99久| av电影一区二区| 久久蜜桃一区二区| 亚洲六月丁香色婷婷综合久久| 婷婷中文字幕一区三区| 国产精品一二三区| 欧美日韩你懂得| 国产精品视频你懂的| 丝袜美腿亚洲综合| 处破女av一区二区| 精品国产91久久久久久久妲己| 亚洲欧美韩国综合色| 六月丁香婷婷久久| 日本久久一区二区| 久久精品综合网| 亚州成人在线电影| eeuss影院一区二区三区| 欧美久久高跟鞋激| 亚洲人123区| 国产一区中文字幕| 91精品视频网| 一区二区理论电影在线观看| 国产精华液一区二区三区| 欧美乱熟臀69xxxxxx| 亚洲日韩欧美一区二区在线| 国产乱子轮精品视频| 欧美老女人第四色| 亚洲另类春色国产| 高清视频一区二区| 2020日本不卡一区二区视频| 极品少妇xxxx精品少妇偷拍| 欧美性受极品xxxx喷水| 国产精品麻豆欧美日韩ww| 免费成人美女在线观看.| 欧美自拍偷拍午夜视频| 国产精品久久久久影院| 成人激情免费视频| 欧美一区二区女人| 另类综合日韩欧美亚洲| 欧美一区二区精品| 日一区二区三区| 欧美精品久久天天躁| 亚洲欧洲av在线| 欧洲一区二区三区免费视频| 国产精品国产馆在线真实露脸| 欧美一区二区三区啪啪| 亚洲人成7777| 91丨国产丨九色丨pron| 国产精品久久久久国产精品日日 | 欧美三级在线视频| 国产婷婷色一区二区三区四区| 毛片基地黄久久久久久天堂| 91麻豆精品国产91久久久资源速度| 亚洲一区影音先锋| 欧美日韩在线不卡| 三级一区在线视频先锋 | 国产一区二区三区最好精华液| 日本一区二区视频在线观看| 国产xxx精品视频大全| 中日韩av电影| 91在线视频免费91|