📄 sound.c
字号:
#include "AEEModGen.h"
#include "AEEAppGen.h"
#include "AEEMenu.h"
#include "AEEStdLib.h"
#include "AEEUsageAppIDs.h"
#include "AEESound.h"
#include "AEESoundPlayer.h"
#include "AEEFile.h"
#define USAGE_PLAY 103
#define USAGE_STOP 104
#define USAGE_REWIND 105
#define USAGE_FASTFORWARD 106
#define USAGE_PAUSE 107
#define USAGE_RESUME 108
#define MIDI_MAX_FILES 10
#define TIME_INMILLISECONDS 5000 // 5000 ms
#define TEMPFACTOR 300
#ifndef DIRECTORY_CHAR
#ifdef AEE_SIMULATOR
#define DIRECTORY_CHAR '\\'
#define DIRECTORY_STR "\\"
#else
#define DIRECTORY_CHAR '/'
#define DIRECTORY_STR "/"
#endif
#endif
typedef struct _CISoundPlayerApp
{
AEEApplet a; // Mandatory first AEEApplet data member
IMenuCtl * m_pIMenu;
// SoundPlayer members
ISoundPlayer * m_pISoundPlayer;
char * m_szFileName;
boolean m_bSPActive;
uint32 m_nPlayTime;
// Device parameters
int m_nLineHeight;
AEEDeviceInfo m_deviceInfo;
}CISoundPlayerApp;
static boolean SoundPlayerApp_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam);
static boolean ISoundPlayer_InitAppData(IApplet* pMe);
static void ISoundPlayer_FreeAppData(IApplet* pMe);
static void ISoundPlayerUsage (CISoundPlayerApp * pMe, uint16 wParam);
static void BuildPlayerMenu(CISoundPlayerApp *pMe);
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
*ppObj = NULL;
if(ClsId == AEECLSID_SOUNDPLAYER_APP){
if(AEEApplet_New(sizeof(CISoundPlayerApp), ClsId, pIShell,po,(IApplet**)ppObj,
(AEEHANDLER)SoundPlayerApp_HandleEvent,(PFNFREEAPPDATA)ISoundPlayer_FreeAppData)
== TRUE)
{
if (ISoundPlayer_InitAppData((IApplet*)*ppObj) == TRUE)
{
return(AEE_SUCCESS);
}
}
}
return (EFAILED);
}
static boolean SoundPlayerApp_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
CISoundPlayerApp * pMe = (CISoundPlayerApp*)pi;
if (pMe == NULL || pMe->a.m_pIShell == NULL || pMe->a.m_pIDisplay == NULL)
return FALSE;
switch (eCode)
{
case EVT_APP_START:
if(ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_MENUCTL, (void **)&pMe->m_pIMenu)
!= SUCCESS)
{
return FALSE;
}
BuildPlayerMenu (pMe);
return(TRUE);
case EVT_APP_STOP:
return(TRUE);
case EVT_KEY:
if(pMe->m_pIMenu != NULL && IMENUCTL_HandleEvent(pMe->m_pIMenu, EVT_KEY, wParam, 0))
return TRUE;
else
return FALSE;
case EVT_COMMAND:
switch(wParam)
{
case USAGE_PLAY:
case USAGE_STOP:
case USAGE_REWIND:
case USAGE_FASTFORWARD:
case USAGE_PAUSE:
case USAGE_RESUME:
ISoundPlayerUsage (pMe, wParam);
return TRUE;
default:
return FALSE;
}
default:
break;
}
return FALSE;
}
static boolean ISoundPlayer_InitAppData(IApplet* pi)
{
IFileMgr * pIFileMgr = NULL;
FileInfo fi;
int pnAscent = 0; // Stores the ascent in number of pixels
int pnDescent = 0; // Stores the descent in number of pixels
char * szStart;
CISoundPlayerApp * pMe = (CISoundPlayerApp*)pi;
if (!pMe)
return FALSE;
pMe->m_pIMenu = NULL;
pMe->m_pISoundPlayer = NULL;
pMe->m_nPlayTime = 0;
pMe->m_bSPActive = FALSE;
pMe->m_szFileName = NULL;
pMe->m_nLineHeight = IDISPLAY_GetFontMetrics (pMe->a.m_pIDisplay, AEE_FONT_NORMAL,
&pnAscent, &pnDescent);
ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->m_deviceInfo);
if ( ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_FILEMGR, (void **)&pIFileMgr) )
return FALSE;
IFILEMGR_EnumInit(pIFileMgr, "Music", FALSE);
IFILEMGR_EnumNext(pIFileMgr, &fi);
szStart = fi.szName;
if ( szStart )
{
pMe->m_szFileName = MALLOC(STRLEN(szStart) + 1);
STRCPY(pMe->m_szFileName, szStart);
}
IFILEMGR_Release(pIFileMgr);
return TRUE;
}
static void ISoundPlayer_FreeAppData(IApplet* pi)
{
CISoundPlayerApp * pMe = (CISoundPlayerApp*)pi;
if (pMe->m_pIMenu != NULL)
{
IMENUCTL_Release (pMe->m_pIMenu);
pMe->m_pIMenu = NULL;
}
if (pMe->m_szFileName)
FREE (pMe->m_szFileName);
}
static void ISoundPlayerUsage (CISoundPlayerApp * pMe, uint16 wParam)
{
AEEDeviceInfo *di = NULL;
if (pMe == NULL || pMe->a.m_pIShell == NULL || pMe->a.m_pIDisplay == NULL)
return;
di = &pMe->m_deviceInfo;
IDISPLAY_ClearScreen (pMe->a.m_pIDisplay);
switch (wParam)
{
case USAGE_PLAY:
{
if (pMe->m_pISoundPlayer == NULL)
{
ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_SOUNDPLAYER, (void **)&pMe->m_pISoundPlayer);
}
ISOUNDPLAYER_Set(pMe->m_pISoundPlayer, SDT_FILE, pMe->m_szFileName);
ISOUNDPLAYER_Play (pMe->m_pISoundPlayer);
}
return;
case USAGE_STOP:
{
{
ISOUNDPLAYER_Stop (pMe->m_pISoundPlayer);
}
}
return;
case USAGE_REWIND:
{
uint32 dwTime;
{
dwTime = TIME_INMILLISECONDS; // in milliseconds
ISOUNDPLAYER_Rewind (pMe->m_pISoundPlayer, dwTime);
}
}
return;
case USAGE_FASTFORWARD:
{
uint32 dwTime;
{
dwTime = TIME_INMILLISECONDS; // in milliseconds
ISOUNDPLAYER_FastForward (pMe->m_pISoundPlayer, dwTime);
}
}
return;
case USAGE_PAUSE:
{
{
ISOUNDPLAYER_Pause (pMe->m_pISoundPlayer);
}
}
return;
case USAGE_RESUME:
{
{
ISOUNDPLAYER_Resume (pMe->m_pISoundPlayer);
}
}
return;
default:
return;
}
return;
}
static void BuildPlayerMenu(CISoundPlayerApp *pMe)
{
AEERect qrc;
AEEDeviceInfo di;
AECHAR szBuf[50];
int charHeight = 0; // Stores the char height in pixels for given font
int pnAscent = 0; // Stores the ascent in number of pixels
int pnDescent = 0; // Stores the descent in number of pixels
if (pMe == NULL || pMe->m_pIMenu == NULL || pMe->a.m_pIShell == NULL)
return;
ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&di);
SETAEERECT (&qrc, 0, 0, di.cxScreen, di.cyScreen);
IMENUCTL_SetRect(pMe->m_pIMenu, &qrc);
STR_TO_WSTR("SoundPlayer Menu:", szBuf, sizeof(szBuf));
IMENUCTL_SetTitle(pMe->m_pIMenu, NULL, 0, szBuf);
STR_TO_WSTR("Play", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, USAGE_PLAY, szBuf, 0);
STR_TO_WSTR("Stop", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, USAGE_STOP, szBuf, 0);
STR_TO_WSTR("Rewind (5 secs)", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, USAGE_REWIND, szBuf, 0);
STR_TO_WSTR("FastForward (5 secs)", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, USAGE_FASTFORWARD, szBuf, 0);
STR_TO_WSTR("Pause", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, USAGE_PAUSE, szBuf, 0);
STR_TO_WSTR("Resume", szBuf, sizeof(szBuf));
IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, USAGE_RESUME, szBuf, 0);
IMENUCTL_SetActive(pMe->m_pIMenu,TRUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -