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

📄 musicmain.c

📁 Actions ucOS-II mp3方案源码,可以做参考
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************
*                        SDK30F_D1
*                     music player main sub
*
*                (c) Copyright 2002, Actions Co,Ld.
*                        All Right Reserved
*
* File: musicmain.c
* By  : wurui
* Version: 1> v1.00     first version     2005-9-19 8:28
*
*    $Id: musicmain.c,v 1.24 2005/12/30 08:02:25 wurui Exp $
*******************************************************************************
*/
#ifndef WIN32
#include "music.h"
#include "FIFO.h"

void Music_GetMusicList(muisc_vars *MusicTaskVars);

void MusicTask()
{
    muisc_vars MusicTaskVars;

    int sel=0;
    INT8U err;
    msg_t msg; 

    char *ListMusicBox[10];
    char music_menu[104];
    
    char music_exts[MUSIC_TOTAL_TYPE * 4];
    char *filesel_exts[MUSIC_TOTAL_TYPE+1];

    char play_mode[22];
    int  fileno[8];
    memset(&MusicTaskVars, 0, sizeof(muisc_vars));
    OSSetTaskOwnPtr((unsigned int *)&MusicTaskVars, MUSIC_FACE_ID); 

    ListMusicBox[0] = &music_menu[0];
    ListMusicBox[1] = &music_menu[13];
    ListMusicBox[2] = &music_menu[26];
    ListMusicBox[3] = &music_menu[39];
    ListMusicBox[4] = &music_menu[52];
    ListMusicBox[5] = &music_menu[65];
    ListMusicBox[6] = &music_menu[78];
    ListMusicBox[7] = &music_menu[91];
    ListMusicBox[8] = NULL;
    ListMusicBox[9] = music_menu;
    
    

    MusicTaskVars.point[0] = ListMusicBox;
    MusicTaskVars.point[1] = play_mode;
    MusicTaskVars.point[2] = fileno;
    
//    filesel_exts[0] = music_exts;
//    MusicTaskVars.g_fselector_vars.fsel_Exts = filesel_exts;
    
    Music_ReadMusicVars(&MusicTaskVars);

    
    MusicTaskVars.PlayWin = 0;

    //MusicTaskVars.music_selectflag = FALSE;
    
    Music_GetMusicList(&MusicTaskVars);
    Music_ShowSelectWindow(&MusicTaskVars);

    while(1)
    {
        MYOSQPend(MP3_Player_Out, &msg, 0);

        switch(msg.type)
        {
        case MSG_KEY:
            Music_DealKeyMessage(&MusicTaskVars,&msg);
            break;
        case MS_PLAYER:
            Music_DealPlayerMessage(&MusicTaskVars,&msg); 
            break;                     
        case MS_Err:
            break;

        case MS_END:
            Music_DeleteAllWindow(&MusicTaskVars);
            MusicTaskDelete();
        break;
        }
    }
}

void Music_DealKeyMessage(muisc_vars *MusicTaskVars,msg_t *msg)
{
    switch(msg->msg.data[0])
    {
    case GUI_KeyEnter_KeyMode | GUI_Key_Long:
        Music_BackToMainTask(MusicTaskVars);
        break;
    case GUI_KeyBackspace_KeyPlay | GUI_Key_Up: 
        Music_PauseSong(MusicTaskVars);
        break;

    case GUI_KeyRight_KeyVolAdd | GUI_Key_Down:  
    case GUI_KeyRight_KeyVolAdd | GUI_Key_Hold: 
        Music_AddVolumn(MusicTaskVars);
        break;
    case GUI_KeyLeft_KeyVolSub | GUI_Key_Down:
    case GUI_KeyLeft_KeyVolSub | GUI_Key_Hold: 
        Music_SubVolumn(MusicTaskVars);
        break;
    case GUI_KeyEnter_KeyMode | GUI_Key_Up:
        Music_SelectKeyResolve(MusicTaskVars);
        break;
    case GUI_KeyDelete_KeyLoop | GUI_Key_Up:
        Music_SetABPoint(MusicTaskVars);
        break;

    case GUI_KeyDown_KeyNext | GUI_Key_Up:
        if(Music_FastStepStop(MusicTaskVars))
            break;
        if( LISTBOX_GetSel(MusicTaskVars->ListWin) == 7 )
            Music_GetNextFile(MusicTaskVars);
        else
            LISTBOX_IncSel(MusicTaskVars->ListWin);
        Music_BackToListWindow(MusicTaskVars);
        break;
    case GUI_KeyUp_KeyPrev | GUI_Key_Up:
        if(Music_FastStepStop(MusicTaskVars))
            break;
        if( LISTBOX_GetSel(MusicTaskVars->ListWin) == 0 )
            Music_GetPrevFile(MusicTaskVars);
        else
            LISTBOX_DecSel(MusicTaskVars->ListWin);
        Music_BackToListWindow(MusicTaskVars);
        break;

    case GUI_KeyDown_KeyNext | GUI_Key_Long:
        Music_FastForward(MusicTaskVars);
        break;

    case GUI_KeyUp_KeyPrev | GUI_Key_Long:
        Music_FastBackward(MusicTaskVars);
        break;
    }
    MusicTaskVars->PlayingTimeStub = 0;
 
}
void Music_DealPlayerMessage(muisc_vars *MusicTaskVars , msg_t *msg)
{
    switch(msg->msg.data[0])
    {
    case MS_DecEnd:
        Music_DecReachEnd(MusicTaskVars);            
        break;
    case MS_RedrawInfo:
        Music_RedrawSongInfo(MusicTaskVars);  
        Music_ResolveTimeOut(MusicTaskVars); 
        break;
    case MS_Redraw:
        MusicTaskVars->RedrawFlag = TRUE;
        WM_InvalidateWindow(MusicTaskVars->PlayWin);
        break;
    case MS_PlayerErr:
        Music_DealPlayerErr(MusicTaskVars , msg);
        break;
    }
}

void Music_DealPlayerErr(muisc_vars *MusicTaskVars, msg_t *msg)
{
    int err_type;
    char err[32];
    switch(msg->msg.data[1])
    {
    case FSErr: 
        err_type = EF_ERR;
        break;
    case DSPErr:
        err_type = EDS_ERR;
        break;
    case FileFormatErr:
        err_type = E_FILEF;
        break;
    case DiskErr:
        err_type = ED_ERR;
        break;
    case DiskEmptyErr:
        err_type = ED_EMPE;
        break;
    case ApplyBuffErr:
        err_type = E_APPBE;
        break;
    case UnknowErr:
        err_type = E_UNKER;
        break;
    case FifoErr:
        err_type = EFI_ERR;
        break;
    case FifoCloseErr:
        err_type = EFI_C;
        break;
    case FifoOpenErr:
        err_type = EFI_O;
        break;
    case FifoModeErr:
        err_type = EFI_M;
        break;
    case FifoReadErr:
        err_type = EFI_R;
        break;
    case FifoSeekErr:
        err_type = EFI_S;
        break;
    case FifoNameErr:
        err_type = EFI_W;
        break;
    default:
        err_type = E_UNKEX;
    }
    strcpy(err,GUI_GetStringByID(S_MUSER, 1));
    GUI_MessageBox(GUI_GetStringByID(err_type , 1),err, GUI_MESSAGEBOX_CF_MOVEABLE);
    Music_BackToMainTask(MusicTaskVars);
}
/*
void Music_ShowSearchBar(muisc_vars *MusicTaskVars)
{
    msg_t msg_send;
    if(MusicTaskVars->SearchWin == NULL)
    {
        MusicTaskVars->SearchWin = PROGBAR_Create(8,32,80,10, WM_CF_SHOW);
        PROGBAR_SetText(MusicTaskVars->SearchWin, GUI_GetStringByID(S_SEAMU , 1));
        PROGBAR_SetBarColor(MusicTaskVars->SearchWin, 0, GUI_BLUE);
        PROGBAR_SetBarColor(MusicTaskVars->SearchWin, 1, GUI_RED);
        PROGBAR_SetValue(MusicTaskVars->SearchWin, 0);
        MYOSQFlush(MP3_Player_Out);

    }
    else
    {
        int i;
        if( (i =PROGBAR_GetValue(MusicTaskVars->SearchWin)) >= 100)
            i = 99;
        PROGBAR_SetValue(MusicTaskVars->SearchWin, i+1);
    }
    msg_send.type = MSG_RESERVE1;
    MYOSQPost(MP3_Player_Out,&msg_send);
    MusicTaskVars->PlayingTimeStub=0;
    OSTimeDly(2);
}*/
//void Music_DeleteSearchBar(muisc_vars *MusicTaskVars)
//{
//    PROGBAR_SetValue(MusicTaskVars->SearchWin, 100);
//    MYOSQFlush(MP3_Player_Out);
//    WM_DeleteWindow(MusicTaskVars->SearchWin);
//}

void Music_ResolveTimeOut(muisc_vars *MusicTaskVars)
{
    if(MusicTaskVars->PlayingTimeStub++ > 8)
    {   
        if(!MusicTaskVars->PlayWin && MusicTaskVars->g_music_var->status != music_unvalid)
        { 
            //MusicTaskVars->music_selectflag = TRUE;
            Music_CreatePlayingWindow(MusicTaskVars); 
        }
        if(MusicTaskVars->VolumWin)
        {   
            MusicTaskVars->RedrawFlag = TRUE;
            Music_DeleteVolumnWindow(MusicTaskVars); 
        }
    }

}
/********************************************************************/
void Music_SetABPoint(muisc_vars *MusicTaskVars)
{
    msg_t msg_send;    
    msg_send.type = MS_SetAB;
    MYOSQPost(MP3_Player_In,&msg_send);
}
void Music_FastForward(muisc_vars *MusicTaskVars)
{
    if(MusicTaskVars->g_music_var->status != music_FFStep)
    {
        msg_t msg;    
        msg.type = MS_SetStep;
        msg.msg.data[0] = MusicPlayer_StepFF;
        msg.msg.data[1] = 0;
        MYOSQPost(MP3_Player_In,&msg);
    }
}
void Music_FastBackward(muisc_vars *MusicTaskVars)
{
    if(MusicTaskVars->g_music_var->status != music_FBStep)
    {
        msg_t msg;    
    
        msg.type = MS_SetStep;
        msg.msg.data[0] = MusicPlayer_StepRv;
        msg.msg.data[1] = 0;
        MYOSQPost(MP3_Player_In,&msg);
    }
}
bool Music_FastStepStop(muisc_vars *MusicTaskVars)
{
    if(MusicTaskVars->g_music_var->status == music_FFStep || MusicTaskVars->g_music_var->status == music_FBStep)
    {
        msg_t msg;    

        msg.type = MS_SetStep;
        msg.msg.data[0] = MusicPlayer_StepStop;
        MYOSQPost(MP3_Player_In,&msg);
        return TRUE;
    }
    return FALSE;
}
void Music_SelectSong(muisc_vars *MusicTaskVars)
{
    msg_t msg_send;
    int *fileno = MusicTaskVars->point[2];
    Music_StopSong(MusicTaskVars);    
    
    OSTimeDly(20);
    MusicTaskVars->g_music_var->infomation.fileno = fileno[ LISTBOX_GetSel(MusicTaskVars->ListWin) ];
    Music_PlaySong(MusicTaskVars);
}
   
void Music_PlaySong(muisc_vars *MusicTaskVars)
{
    msg_t msg_send;
/***************将长名转为ASCII码格式******************/
//    int i;
//    for(i = 0;MusicTaskVars->g_music_var->infomation.MusicFullName[i<<1] != 0x00 ;i++)
//    {
//        MusicTaskVars->g_music_var->infomation.MusicFullName[i] = MusicTaskVars->g_music_var->infomation.MusicFullName[i<<1];
//    }
    //MusicTaskVars->g_music_var->infomation.MusicFullName[i] = 0;
    //MusicTaskVars->music_selectflag = TRUE;
    MusicTaskVars->RedrawFlag = TRUE;
    
    Music_CreatePlayingWindow(MusicTaskVars);

    msg_send.type = MS_SetLocation;
    MYOSQPost(MP3_Player_In,&msg_send);
    OSTimeDly(50);
    msg_send.type = MS_Play;
    MYOSQPost(MP3_Player_In,&msg_send);     
}
void Music_PauseSong(muisc_vars *MusicTaskVars)
{
    msg_t msg;
    msg.type = MS_Play;
    MYOSQPost(MP3_Player_In,&msg);
}

void Music_StopSong(muisc_vars *MusicTaskVars)
{
    msg_t   msg;
    Music_DeletePlayingWindow(MusicTaskVars);
    Music_DeleteVolumnWindow(MusicTaskVars);
    //MusicTaskVars->music_selectflag = FALSE;
 
    msg.type = MS_Stop;
    MYOSQPost(MP3_Player_In,&msg);
}
void Music_DecReachEnd(muisc_vars *MusicTaskVars)
{
    //MusicTaskVars->RedrawFlag = TRUE;
    //Music_DeletePlayingWindow(MusicTaskVars);
    //Music_DeleteVolumnWindow(MusicTaskVars);
    //Music_PlaySong(MusicTaskVars);
    //MusicTaskVars->music_selectflag = FALSE;
//    MusicTaskVars->MusicABFlag = MSG_Normal;
}
void Music_BackToMainTask(muisc_vars *MusicTaskVars)
{
    WM_SetFocus(WM_HBKWIN);
    Music_DeleteAllWindow(MusicTaskVars);  
    MainTaskCreate();
    MusicTaskDelete();
}
void Music_BackToListWindow(muisc_vars *MusicTaskVars)
{
    Music_DeleteVolumnWindow(MusicTaskVars);
    Music_DeletePlayingWindow(MusicTaskVars);
}
void  Music_AddVolumn(muisc_vars *MusicTaskVars)
{
    msg_t msg;
    Music_CreateVolumnWindow(MusicTaskVars);
    SLIDER_Inc(MusicTaskVars->SliderWin);
    MusicTaskVars->CurVolumn = SLIDER_GetValue(MusicTaskVars->SliderWin);

    msg.type = MS_SetVolume;
    msg.msg.data[0] = MusicTaskVars->CurVolumn;
    MYOSQPost(MP3_Player_In,&msg);
 
}
void  Music_SubVolumn(muisc_vars *MusicTaskVars)

⌨️ 快捷键说明

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