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

📄 複製 -musicplayerapi.c

📁 C 代码C 代码C 代码C 代码C 代码C 代码C 代码C 代码C 代码C 代码
💻 C
字号:
//********************************************************************
// Name:     MusicAPI.c
// 
// Copyright (C) Sitronix TECHNOLOGY INC.
// All rights reserved by Sitronix TECHNOLOGY INC.
//
// Project:    ST3110
// Author:      Terry Wu
// Begin Date:  2008/01/01
// Last update: 2008/04/01
// $Header: $
// Description:
//   music function
//   
//   
//********************************************************************

#include <intr6502.h>
#include "sys.h"
#include "MusicPlayer.h"
#include "img_position.h"
#include "ST3110_img_define.h"
#include "multilanguage.h"


#pragma codeseg(APP)


uint8 mp3_state;
uint8 volume; // 0~16
uint8 repeat; //0~3
uint8 hr,min,sec;
uint16 current_song_no;
uint16 Folders,Files;
uint8 sfnPtr[13],lfnPtr[256];
uint32 music_format;
uint8 music_percentage_s;
uint8 root_order,language;
uint8 result;
uint8 counter_2hz;
uint8 slide_bat_lv_idx,cur_bat_lv_icon_idx;

void _music_player_init(void);
void _music_main_show(uint8 volume);
void _music_show_state(uint8 mp3_state);
uint8 _music_play(uint8 volume);
void show_play_time(uint8 min, uint8 sec);
void _show_cur_song_info(void);
void _show_volume_icon(uint8 volume);
void _show_percentage(void);
void _show_error_message_box(void);
void _show_battery(void);
uint8 _get_battery_icon_index(void);


//***************************************************************************
// Func:        void _music_player_init(void)
// Input:       none
// Output:      none
//
// Description: init variable, If music is not played in background, play selected song 
//                             If music is played in background, recover player surface 
//
//***************************************************************************
void _music_player_init(void)
{
 //init varible
 volume = API_SysReadValue(RAM_SETTING_ADR,SET_VOLUME);
 repeat = API_SysReadValue(RAM_SETTING_ADR,SET_REPEAT);
 root_order = API_SysReadValue(RAM_SHARING_ADR,ROOT_ORDER);
 language = API_SysReadValue(RAM_SETTING_ADR,SET_LANGUAGE);
 music_format = FF_MUSIC_FORM;
 music_percentage_s = 0;
 mp3_state = STOP_STATE;
 counter_2hz = 0;
 
 if(language == 2)
  API_LcmSetLanguage(CS_GBK);
 else
  API_LcmSetLanguage(CS_BIG5);
 API_LcmSetCharForm(CHFS_16x16);
 API_LcmSetCharColor(COLOR_WHITE,COLOR_DPF_BG);
 API_LcmDisableKeepBackGround();

 
 current_song_no = API_SysReadValue2B(RAM_SHARING_ADR,CUR_FILE_L); 
 API_FATGetItemAmountInFolder(&Folders,&Files,music_format); //API_FATGetItemAmountInFolder will modify fileIdx
 // load parameter from file_ap and music_setting_ap 
 // TRUE :change song  
 // FALSE:remain current song
 _music_main_show(volume);
 if(API_SysReadValue(RAM_SHARING_ADR,CHANGE_SONG))
 {
  min=0;
  sec=0;
  API_MusicSetFile(music_format,current_song_no,FF_ID_AUTO);
  API_MusicSetFrame(0);
  switch(repeat)
  {
   case 0: //play one 
        API_MusicSetRepeatMode(RM_REP_1);
        break;
   case 1: //play all
        API_MusicSetRepeatMode(RM_REP_ALL);
        break;
   case 2: //play random
        API_MusicSetRepeatMode(RM_RAND);
        break;
  }

  if(API_MusicGetThreadState() == TS_STOP || API_MusicGetThreadState() == TS_FILEEND || API_MusicGetThreadState() == TS_PLAY_ER)
  {
   _music_play(volume);
  }
  else //change song
   API_MusicStop();
 }
 else
 {
  if(API_MusicGetThreadState() == TS_PAUSE)
   mp3_state = PAUSE_STATE; 
  else if(API_MusicGetThreadState() == TS_PLAY)
   mp3_state = PLAY_STATE;
  _music_show_state(mp3_state);
  _show_cur_song_info();
  _show_percentage();
 }
}

//***************************************************************************
// Func:        _music_main_show(uint8 volume)
// Input:       volume
// Output:      none
//
// Description: paint player surface
//
//***************************************************************************
void _music_main_show(uint8 volume)
{
 //API_LcmShowNumber(current_song_no,0,32,1);
 // show music BG
 API_LcmPutSysImage(IMG_BACKGD,0,0);
 //show ear phone logo
 API_LcmPutSysImage(IMG_EARPHONE,POS_MUSPLY_LOG_X,POS_MUSPLY_LOG_Y);
 // show state icon
 _music_show_state(mp3_state);
 // show percertage bar
 API_LcmPutSysImage(IMG_PROCESS_BAR,POS_MUSPLY_PROBAR_X,POS_MUSPLY_PROBAR_Y);
 
 // show volume icon
 API_LcmPutSysImage(IMG_VOLUME_0+(volume/2),POS_MUSBRO_VOL_X,POS_MUSBRO_VOL_Y);
 // show repeat icon
 API_LcmPutSysImage(IMG_REPEAT_0+repeat,POS_MUSBRO_REPEAT_X,POS_MUSBRO_REPEAT_Y);
 //show battery icon
 _show_battery();
 slide_bat_lv_idx = _get_battery_icon_index();
 cur_bat_lv_icon_idx =  _get_battery_icon_index();
 
}

//***************************************************************************
// Func:        void _music_show_state(uint8 mp3_state)
// Input:       mp3_state
// Output:      none
//
// Description: paint play state icon
//
//***************************************************************************
void _music_show_state(uint8 mp3_state)
{
 switch(mp3_state)
 {
  case PLAY_STATE:
        API_LcmPutSysImage(IMG_BUTTON_PLAY,POS_MUSPLY_STATE_X,POS_MUSPLY_STATE_Y);
        break;
  case STOP_STATE:
        API_LcmPutSysImage(IMG_BUTTON_STOP,POS_MUSPLY_STATE_X,POS_MUSPLY_STATE_Y);
        break;
  case PAUSE_STATE:
        API_LcmPutSysImage(IMG_BUTTON_PAUSE,POS_MUSPLY_STATE_X,POS_MUSPLY_STATE_Y);
        break;
  default:
        break;
 } 
}

//***************************************************************************
// Func:        void _show_cur_song_info(void)
// Input:       none
// Output:      none
//
// Description: show amount and song title
//
//***************************************************************************
void _show_cur_song_info(void)
{
 //uint8 result;
 //API_LcmSetLanguage(CS_BIG5);
 //show song amount
 API_LcmSetCharColor(COLOR_WHITE,COLOR_DPF_BG);
 API_MusicGetCurrentSongIndex(&current_song_no);
 API_SysWriteValue2B(RAM_MUS_PATH_ADR,root_order*2,current_song_no); 
 
 API_LcmShowNumber2B(current_song_no,POS_MUSPLY_NUM_X,POS_MUSPLY_NUM_Y);
 API_LcmShowString("/",POS_MUSPLY_NUM_X+32,POS_MUSPLY_NUM_Y);
 API_LcmShowNumber2B(Files,POS_MUSPLY_NUM_X+40,POS_MUSPLY_NUM_Y);
 
 //show song title
 API_LcmPutSysImage(IMG_MUSIC_FN_BG,POS_MUSPLY_FN_X,POS_MUSPLY_FN_Y);
 API_LcmSetStringLenth((POS_MUSPLY_NUM_X-POS_MUSPLY_FN_X)/8);
 result = API_FATGetFileName(music_format, current_song_no, sfnPtr, lfnPtr);
 //result = API_MusicGetSongNameType();
 if(result ==1)
 {
  API_LcmShowString(sfnPtr,POS_MUSPLY_FN_X,POS_MUSPLY_FN_Y);
 }
 else if(result == 2)
 {
  API_LcmSetLanguage(CS_UNICODE);
  API_LcmShowString(lfnPtr,POS_MUSPLY_FN_X,POS_MUSPLY_FN_Y);
  if(language == 2)
   API_LcmSetLanguage(CS_GBK);
  else
   API_LcmSetLanguage(CS_BIG5);
 }
 
 //clear bit rate area
 API_LcmPutSysImage(IMG_NUMBER_BG,POS_MUSPLY_S_RATE_X+48,POS_MUSPLY_S_RATE_Y);
 
 //show sample rate
 API_LcmShowNumber((API_MusicGetSampleRate()/1000),POS_MUSPLY_S_RATE_X,POS_MUSPLY_S_RATE_Y,1);
 
 //show bit rate
 if(API_MusicGetFormID() != FF_ID_WAV)
 {
  if(API_MusicGetBitRate() >= 100)
   API_LcmShowNumber2B(API_MusicGetBitRate(),POS_MUSPLY_S_RATE_X+48,POS_MUSPLY_S_RATE_Y);
  else
   API_LcmShowNumber(API_MusicGetBitRate(),POS_MUSPLY_S_RATE_X+64,POS_MUSPLY_S_RATE_Y,1);
   
  API_LcmShowString("kbps",POS_MUSPLY_S_RATE_X+80,POS_MUSPLY_S_RATE_Y);
 }
  
 API_LcmShowString("KHz  ",POS_MUSPLY_S_RATE_X+16,POS_MUSPLY_S_RATE_Y);
}

//***************************************************************************
// Func:        uint8 _music_play(uint8 volume)
// Input:       volume
// Output:      none
//
// Description: play song operation
//
//***************************************************************************
uint8 _music_play(uint8 volume)
{
   uint8 result = TRUE,lrc_result;

   if(!API_MusicPlay(&lrc_result))
   {
    //if(API_MusicGetFormID() == FF_ID_MP3)
    //{
     API_MusicSetFile(music_format,current_song_no,FF_ID_WMA);
     if(!API_MusicPlay(&lrc_result))
     {
      //API_LcmShowNumber(1,0,16,0);
      API_MusicSetFile(music_format,current_song_no,FF_ID_MP2);
      if(!API_MusicPlay(&lrc_result))
      { 
       //reload MPL lib
       API_SysLoadMediaLib();
       // set hardware volume
       API_SysSetHardwareVolume(0,0); // DAC set 0
       API_SysSetHardwareVolume(4,10); // Mixer set 10
       //set mixer output
       API_SysMixerOutputSelection(MIXER_DAC); 
       
       _show_error_message_box();
       mp3_state = ERROR_STATE;
       counter_2hz = 0;
       result = FALSE;
      }
     }
    //}
    else
    {
       //reload MPL lib
       API_SysLoadMediaLib();
       // set hardware volume
       API_SysSetHardwareVolume(0,0); // DAC set 0
       API_SysSetHardwareVolume(4,10); // Mixer set 10
       //set mixer output
       API_SysMixerOutputSelection(MIXER_DAC); 

       _show_error_message_box();
       mp3_state = ERROR_STATE;
       counter_2hz = 0;
       result = FALSE;
    }
   }
   
   if(result)
   {
    if(volume == 16)
     API_MusicVolumeAdjust(255);
    else
     API_MusicVolumeAdjust(volume*15);
   }

   return result;
}

//***************************************************************************
// Func:        void show_play_time(uint8 min, uint8 sec)
// Input:       min
//              sec
// Output:      none
//
// Description: show play time
//
//***************************************************************************
void show_play_time(uint8 min, uint8 sec)
{
 //API_LcmSetLanguage(CS_BIG5);
 //API_LcmSetCharForm(CHFS_6x8);
 //API_LcmSetCharColor(COLOR_WHITE,COLOR_BLACK);
 
 //API_LcmSetStringLenth(uint8 str_len); 
 API_LcmShowNumber(min,POS_MUSPLY_TIME_X,POS_MUSPLY_TIME_Y,1);
 API_LcmShowString(":",(POS_MUSPLY_TIME_X+16),POS_MUSPLY_TIME_Y);
 API_LcmShowNumber(sec,(POS_MUSPLY_TIME_X+24),POS_MUSPLY_TIME_Y,1);
}


//***************************************************************************
// Func:        void _show_volume_icon(uint8 volume)
// Input:       volume
// Output:      none
//
// Description: show vlume icon
//
//***************************************************************************
void _show_volume_icon(uint8 volume)
{
 if(volume == 16)
  API_MusicVolumeAdjust(255);
 else
  API_MusicVolumeAdjust(volume*15);

 API_SysWriteValue(RAM_SETTING_ADR,SET_VOLUME,volume);
 API_LcmPutSysImage(IMG_VOLUME_0+(volume/2),POS_MUSBRO_VOL_X,POS_MUSBRO_VOL_Y);
}

void _show_percentage(void)
{
 uint8 i,j;
 // show percentage bar
 j = (uint8)(API_MusicGetPercentage()*(MUSIC_PERCENTAGE_LENGTH/64));
 for(i = music_percentage_s;i <= j;i++)
 {
  if(i == 0)
   API_LcmPutSysImage(IMG_BAR_START,(POS_MUSPLY_SPRO_X+i),POS_MUSPLY_SPRO_Y);
  else if(i == 192)
   API_LcmPutSysImage(IMG_BAR_END,(POS_MUSPLY_SPRO_X+i),POS_MUSPLY_SPRO_Y);
  else
   API_LcmPutSysImage(IMG_BAR_AMONG,(POS_MUSPLY_SPRO_X+i),POS_MUSPLY_SPRO_Y);
 }
 music_percentage_s = j;
}

//***************************************************************************
// Func:        void _show_error_message_box(void)
// Input:       none
// Output:      none
//
// Description: show error massage box
//
//***************************************************************************
void _show_error_message_box(void)
{
 uint16 string_ptr;
 uint8 language;
 
 string_ptr = (uint16)lfnPtr;
 language = API_SysReadValue(RAM_SETTING_ADR,SET_LANGUAGE);
 
 //show del box BG
 API_LcmPutSysImage(IMG_PHOTO_DIALOG_BACKGD,POS_PHOMENU_DELBOX_X,POS_PHOMENU_DELBOX_Y);

 API_SysLoadValue(NAND_TEXT_ADR+(language*TIDX_AMOUNT_OF_ONE_LANGUAGE)+TIDX_ERR_MSG,string_ptr,64);
 API_LcmSetLanguage(CS_UNICODE);
 API_LcmShowString(lfnPtr,POS_PHOMENU_ITEM_X+100,POS_PHOMENU_ITEM_Y+(2*POS_PHOMENU_ITEM_GAP));
 if(language == 2)
  API_LcmSetLanguage(CS_GBK);
 else
  API_LcmSetLanguage(CS_BIG5);
}

void _show_battery(void)
{
           API_LcmPutSysImage(IMG_BATTERY_0+_get_battery_icon_index(),POS_MUSBRO_BATTERY_X,POS_MUSBRO_BATTERY_Y);  
}

uint8 _get_battery_icon_index(void)
{
           uint8 bat_lv_icon_index;
           uint8 bat_lv;
         
           bat_lv = API_SysGetVolLv();
           if(BATTERY_LV4 <= bat_lv)                                // > LV4
            bat_lv_icon_index = 4; 
           else if( BATTERY_LV3 <= bat_lv && bat_lv < BATTERY_LV4)  //  LV3<=  <LV4
            bat_lv_icon_index = 3;         
           else if( BATTERY_LV2 <= bat_lv && bat_lv < BATTERY_LV3)  //  LV2<=  <LV3
            bat_lv_icon_index = 2;         
           else if( BATTERY_LV1 <= bat_lv && bat_lv < BATTERY_LV2)  //  LV1<=  <LV2
            bat_lv_icon_index = 1;         
           else if( BATTERY_LV0 <= bat_lv && bat_lv < BATTERY_LV1)  //  LV0<=  <LV1
            bat_lv_icon_index = 0;
           
           return bat_lv_icon_index;
}

⌨️ 快捷键说明

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