📄 複製 -musicplayerapi.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(¤t_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 + -