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

📄 mp3.c

📁 国家ASIC工程中心使用的嵌入式操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************
*
* 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 + -