⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sound.c

📁 该源码是在VC++环境中利用BREW SDK开发的mp3播放程序 由于是在BREW SDK开发的,可以很好地移植到嵌入式设备中去
💻 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 + -