📄 mp3.c
字号:
/*************************************************************************
*
* Copyright 2004 National ASIC Center, All rights Reserved
*
* FILE NAME: mp3.c
* PROGRAMMER: zhangbing
* Date of Creation: 2004/09/11
*
* DESCRIPTION: This file is for mp3 application,mainly creating windows of
* mp3 player.All of low-level decoding and other processing
* functions have been formed in other files.
* NOTE:
*
* FUNCTIONS LIST:
* -------------------------------------------------------------------------
* Mp3LstDisplay
* Mp3Bar
*
**************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cdevice.h"
#include "asixwin.h"
#include "asixapp.h"
#include "asix_mn.h"
#include "select.h"
#include "asix_sb.h"
#include "asix_lb.h"
#include "disp.h"
#include "asix_ed.h"
#include "asix_key.h"
#include "bitmap.h"
#include "picture.h"
#include "select.h"
#include "mp3.h"
//******************FILE SYSTEM
#include "FAL.h"
#include "plus/nucleus.h"
#include "pcdisk.h"
#define ENABLE 0
#define DISABLE 1
CHAR path1[] = "b:\\*.mp3";
CHAR path2[] = "c:\\*.mp3";
int mp3_music_mum;
int startp_before;
char v_volume_level ;
//**************************
STATUS Mp3LstDsp(unsigned char *name,
U16 len,S16 startpos,S16 endpos,
U32 bt[DISP_NUM]);
STATUS Mp3Bar(void);
STATUS Mp3LstDsp(unsigned char *name, //name是曲目名称数组
U16 len, //是此记录的长度,
S16 startpos, //曲目表起始显示位置
S16 endpos, //曲目表终止显示位置
U32 bt[DISP_NUM]) //显示记录button的ID
{
U16 count;
if(len <= 0)
{
SetWindowText(*bt, " 此记录为空", NULL);
EnableWindow(*bt,FALSE);
endpos = 1;
bt++;
for(count = endpos; count < DISP_NUM; count++)
{
SetWindowText(*bt, NULL, NULL);
EnableWindow(*bt,FALSE);
bt++;
}
return ASIX_OK;
}
for(count = startpos; count < endpos; count++)
{
EnableWindow(*bt, TRUE);
//SetWindowText(*bt, name[count], NULL);
SetWindowText(*bt, (name+count*MP3_NAME_LEN), NULL);
bt++;
}
for(count = endpos; count < DISP_NUM; count++)
{
SetWindowText(*bt, NULL, NULL);
EnableWindow(*bt,FALSE);
bt++;
}
return ASIX_OK;
}
STATUS Rrfreshname(char * mp3name)
{
U32 hGC;
hGC = GetGC();
ClearRec(hGC, WHITE, //清除历史显示
INF_X_POS+8, INF_Y_POS+6,
150, 12,
REPLACE_STYLE);
SysDrawText(hGC, GPC_BLACK, //刷新显示新名称
INF_X_POS+8, INF_Y_POS+6,
INF_X_POS+162, 115,
mp3name,
GPC_REPLACE_STYLE);
}
STATUS Refreshtime(char * timestr)
{
U32 hGC;
hGC = GetGC();
ClearRec(hGC, WHITE, //清除历史显示
INF_X_POS+166, INF_Y_POS+6,
52, 12,
REPLACE_STYLE);
SysDrawText(hGC, GPC_BLACK, //刷新显示新名称
174, INF_Y_POS+6,
228, 115,
timestr,
GPC_REPLACE_STYLE);
}
STATUS Rec_Refreshvolum(U32 volum_level)
{
U32 i,show_level,hGC;
show_level = 30*volum_level/30;
hGC = GetGC();
GroupOn( hGC );
for(i=0;i<4;i++)
ClearRec(hGC, WHITE,
SUBV_X_POS+18, SUBV_Y_POS+7+i,
22, 4,
REPLACE_STYLE);
for(i=0;i<4;i++)
DrawLine(hGC, GPC_BLACK,
SUBV_X_POS+18,SUBV_Y_POS+7+i,
SUBV_X_POS+18+show_level, SUBV_Y_POS+7+i,
GPC_DOT_LINE,
REPLACE_STYLE);
GroupOff( hGC, 1, 1, LCD_WIDTH-1,LCD_HEIGHT-1);
return ASIX_OK;
}
TASKDESCRIPTION Mp3TskDesp =
{"播放器", ASIX_APP, 0, zi_mp3, 4096, 1, LCD_WIDTH, LCD_HEIGHT, Mp3Bar, APP_PRI};
STATUS Mp3Bar(void)
{
MSG msg;
U16 RecordLen,i;
U8 select_mp3;
U8 quit=0,topdir=FALSE,enddir=FALSE;
S16 startp,endp,high,low;
U32 bt[DISP_NUM],hmenu,check1,check2,check3,check4;
U32 mainwin,playwin,tskbar,addv,subv,infofram1,infofram2,curname,palytime;
U32 stop,pause,start,prev,next,scroll,hGC;
//char v_volume_level = 10;
U32 timer; // 刷新定时器
ASIX_TIME cur_tim = {0,0,0};
char time_str[10];
UINT flgptn; // flag pattern
DSTAT statobj;
FAL_FILE fd;
int lenth;
int *mpp = 0x31500000;
int music_num1 = 0;
int music_num2 = 0;
int switch_enable = ENABLE;
char *p_name;
char music_dir1[MP3_NAME_LEN]="b:\\";
char music_dir2[MP3_NAME_LEN]="c:\\";
/* int pcmsize;
int stereo;
struct frame fr;
int nframe;
int lenenc, lendec, incenc, incdec;
unsigned long penc, pdec;
char * px;
int i;*/
SL_ITEM style_item1[]=
{
SL_UNCHECKED, "POP",
0, NULL,
};
SL_ITEM style_item2[]=
{
SL_UNCHECKED, "ROCK",
0, NULL,
};
SL_ITEM style_item3[]=
{
SL_UNCHECKED, "JAZZ",
0, NULL,
};
SL_ITEM style_item4[]=
{
SL_UNCHECKED, "CLASSIC",
0, NULL,
};
v_volume_level = 10;
hGC = GetGC();
GroupOn(hGC);
/* 创建主窗口 */
mainwin = CreateWindow( WNDCLASS_WIN, //窗口类型(主窗口)
"音乐吧", //窗口标题
WS_OVERLAPPEDWINDOW, //窗口风格(主窗口风格的宏定义参见头文件asixwin.h)
0,0, //窗口左上角在逻辑屏幕中的坐标
PHY_LCD_W,PHY_LCD_H, //窗口的宽度和高度
0, //窗口的父窗口(主窗口没有父窗口)
0, //窗口的附加参数(主窗口没有附加参数)
NULL);
tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
playwin = CreateWindow(WNDCLASS_STATIC,
NULL,
WS_CHILD|SS_ICON,
0,21,
PLAWIN_WIDTH,PLAWIN_WIDTH,
mainwin,
0,
(char *)mp3_playwin);
check1 = CreateWindow(WNDCLASS_SELECT, NULL, WS_CHILD|SLS_RADIOBOX|SLS_ENABLE, SELE_X_POS,SELE_Y_POS,SELE_WIDTH,SELE_HEIGH,mainwin,0, style_item1);//|SLS_FRAME
check2 = CreateWindow(WNDCLASS_SELECT, NULL, WS_CHILD|SLS_RADIOBOX|SLS_ENABLE, SELE_X_POS+50,SELE_Y_POS,SELE_WIDTH,SELE_HEIGH,mainwin,0, style_item2);//|SLS_FRAME
check3 = CreateWindow(WNDCLASS_SELECT, NULL, WS_CHILD|SLS_RADIOBOX|SLS_ENABLE, SELE_X_POS+50*2,SELE_Y_POS,SELE_WIDTH,SELE_HEIGH,mainwin,0, style_item3);//|SLS_FRAME
check4 = CreateWindow(WNDCLASS_SELECT, NULL, WS_CHILD|SLS_RADIOBOX|SLS_ENABLE, SELE_X_POS+50*3,SELE_Y_POS,SELE_WIDTH+20,SELE_HEIGH,mainwin,0, style_item4);//|SLS_FRAME
prev = CreateWindow( WNDCLASS_BUTTON,
"后退",
WS_CHILD | BS_REGULAR,
BUTS_X_POS,BUTS_Y_POS,
BUTS_LEN,BUTS_HIG,//42,20,
mainwin,
0,
NULL);
start = CreateWindow( WNDCLASS_BUTTON,
"播放",
WS_CHILD | BS_REGULAR,
BUTS_X_POS+BUTS_LEN,BUTS_Y_POS,
BUTS_LEN,BUTS_HIG,//42,20,
mainwin,
0,
NULL);
stop = CreateWindow( WNDCLASS_BUTTON,
"停止",
WS_CHILD | BS_REGULAR,
BUTS_X_POS+BUTS_LEN*2,BUTS_Y_POS,
BUTS_LEN,BUTS_HIG,//42,20,
mainwin,
0,
NULL);
pause = CreateWindow( WNDCLASS_BUTTON,
"暂停",
WS_CHILD | BS_REGULAR,
BUTS_X_POS+BUTS_LEN*3,BUTS_Y_POS,
BUTS_LEN,BUTS_HIG,//42,20,
mainwin,
0,
NULL);
next = CreateWindow( WNDCLASS_BUTTON,
"快进",
WS_CHILD | BS_REGULAR,
BUTS_X_POS+BUTS_LEN*4,BUTS_Y_POS,
BUTS_LEN,BUTS_HIG,//42,20,
mainwin,
0,
NULL);//(char *)mp3_next);
subv = CreateWindow( WNDCLASS_BUTTON,
"\\减小音量",
WS_CHILD|BS_ICON|BS_FLAT,//WS_CHILD | BS_REGULAR,
SUBV_X_POS,SUBV_Y_POS+2,
16,16,//42,20,
mainwin,
0,
(char *)sub_volum);
addv = CreateWindow( WNDCLASS_BUTTON,
"\\增加音量",
WS_CHILD|BS_ICON|BS_FLAT,//WS_CHILD | BS_REGULAR,
ADDV_X_POS,ADDV_Y_POS,
16,16,//42,20,
mainwin,
0,
(char *)add_volum);
DrawLine(hGC, GPC_BLACK,
SUBV_X_POS+18, SUBV_Y_POS+7,
ADDV_X_POS-2, SUBV_Y_POS+7,
GPC_DOT_LINE,
REPLACE_STYLE);
DrawLine(hGC, GPC_BLACK,
SUBV_X_POS+18, SUBV_Y_POS+8,
ADDV_X_POS-2, SUBV_Y_POS+8,
GPC_DOT_LINE,
REPLACE_STYLE);
DrawLine(hGC, GPC_BLACK,
SUBV_X_POS+18, SUBV_Y_POS+9,
ADDV_X_POS-2, SUBV_Y_POS+9,
GPC_DOT_LINE,
REPLACE_STYLE);
DrawLine(hGC, GPC_BLACK,
SUBV_X_POS+18, SUBV_Y_POS+10,
ADDV_X_POS-2, SUBV_Y_POS+10,
GPC_DOT_LINE,
REPLACE_STYLE);
infofram1 = CreateWindow(WNDCLASS_STATIC,
NULL,
WS_CHILD|SS_TEXT|SS_BOARD,
INF_X_POS,INF_Y_POS,
160,20,
mainwin,
0,
NULL);
infofram2 = CreateWindow(WNDCLASS_STATIC,
NULL,
WS_CHILD|SS_TEXT|SS_BOARD,
170,INF_Y_POS,
60,20,
mainwin,
0,
NULL);
Rrfreshname("mp3name");
//Refreshtime("12:34:56");
Refreshtime("00:00:00");
Rec_Refreshvolum(v_volume_level);
{
int ret;
//****************************************************************
#if 1
#ifndef GE01
if ((ret = NU_Get_First(&statobj, path1)) == NU_SUCCESS)//NU_Get_First
{
while(1)
{
//int length = 0;
//mp3_name[num][lenth] = statobj.lfname[];
//strcpy(mp3_name[music_num],statobj.lfname);
music_num1++;
if (NU_Get_Next(&statobj) != NU_SUCCESS) //NU_Get_Next
{
NU_Done(&statobj);
break;
}
}
}
#endif
if ((ret = NU_Get_First(&statobj, path2)) == NU_SUCCESS)//NU_Get_First
{
while(1)
{
//int length = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -