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

📄 song_task.c

📁 51系列单片机AT89c51snd1 demof-2
💻 C
📖 第 1 页 / 共 3 页
字号:
                gl_key_press = FALSE;
                break;
    
              case KEY_FR:
              case KEY_LFR:
                if (Fseek(-(Int32)(song_frame_size) * SONG_SKEEP_FRAME_FRW) == OK)         /* Fast Rewind skeep frame */
                { 
                  do
                  {
                    status = song_init();
                  }
                  while ((status != SONG_NO_ERR) && (status != SONG_SYNC_ERR)); 
                  if (status != SONG_NO_ERR)
                  {
                    song_state = SONG_PLAY_NEXT_FILE;         /* Error status */           
                  }
                  else
                  {
                    count = gl_cpt_tick;
                    mp3_restart();                            /* Re-start MP3 */
                    Aud_song_play();                          /* start sample request */
                    disp_dec_time(SONG_REPEAT_TIME_FRW);
                    song_state = SONG_DETECT_REPEAT_KEY_END;
                  }
                }
                else
                {
                  Aud_song_play();
                  Mp3_set_right_vol(Song_get_saved_volume_level());
                  Mp3_set_left_vol(Song_get_saved_volume_level());
                  song_state = SONG_PLAY;
                }
                gl_key_press = FALSE;
                break;
            }
          }
        }
        else
        { /* Key changed or end of repeat key */
          Aud_song_play();
          Mp3_set_right_vol(Song_get_saved_volume_level());
          Mp3_set_left_vol(Song_get_saved_volume_level());
          song_state = SONG_PLAY;                             /* Go in state SONG PLAY */
        }
      }
      break;
    }


    case SONG_PLAY_NEXT_FILE:
    {
      /* select next song */
      song_pause();                     /* pause playing song */
      disp_clock_stop();                /* suspend clock timer */
      Fclose();
      file_seek_next(FILE_MP3, TRUE);   /* select next song & loop */
      song_state = SONG_NEW;
      break;
    }


    case SONG_PLAY_A_B_MUTE:                         /* one file openned in mode repeat A/B with no sound */
    {
      if (Feob() == TRUE)                 /* Reach B position? */
      {
        mp3_stop();                       /* Stop MP3 */
        Fseek_abs(file_pos_A);        
        mp3_restart();                    /* Re-start MP3 */
      }

      if (gl_cpt_tick >= count)
        delta_t = gl_cpt_tick - count;
      else
        delta_t = DISP_TICK_SEC - count + gl_cpt_tick;  

      if (delta_t > SONG_A_B_MUTE_NB)         /* Nb mute transfert reach? */
      {
        Mp3_set_right_vol(Song_get_saved_volume_level());
        Mp3_set_left_vol(Song_get_saved_volume_level());
        song_state = SONG_PLAY_A_B;           /* Start the state SONG_PLAY_A_B */
      }
      break;
    }

    case SONG_PLAY_A_B:                         /* one file openned in mode repeat A/B */
    {
      if (Feob() == TRUE)                 /* Reach B position */
      {
        mp3_stop();                       /* Stop MP3 */
        Fseek_abs(file_pos_A);        /* Reverse seek */
        song_state = SONG_PLAY_A_B_MUTE;  /* Next state : kill the DAC in mute mode */
        mp3_restart();                    /* Restart MP3 */
        disp_recall_time();               /* Refresh time */
        count = gl_cpt_tick;
        Song_save_volume_level(Mp3_get_right_vol());        /* Save volume level */
        Mp3_set_right_vol(VOLUME_MIN);
        Mp3_set_left_vol(VOLUME_MIN);
      }
      else 
      if (gl_key_press)                     /* a key is pressed? */
      {
        switch (gl_key)
        {
          case KEY_REPEAT_A_B:
            repeat_A_B = FALSE;             /* desactive mode repeat A/B */
            song_state = SONG_PLAY;
            if (song_loop)
              print_repeat(SYMB_REP_FILE);
            else
              print_repeat(SYMB_NO_REPEAT);
            break;

          case KEY_PAUSE:
            Aud_song_pause();               /* suspend sample request */
            disp_clock_stop();              /* suspend clock timer */
            print_state_pause();            /* display pause icon */
            song_state = SONG_PAUSE;
            break;

          case KEY_NEXT:
            song_stop();                    /* stop playing song */
            disp_clock_stop();              /* suspend clock timer */
            Fclose();
            file_seek_next(FILE_MP3, TRUE); /* select next song & loop */
            song_state = SONG_NEW;
            break;

          case KEY_PREV:
            song_stop();                    /* stop playing song */
            disp_clock_stop();              /* suspend clock timer */
            Fclose();
            file_seek_prev(FILE_MP3);       /* select previous song */
            song_state = SONG_NEW;
            break;

          case KEY_INC:
          case KEY_INC_REP:
          case KEY_INC_LREP:
            song_snd_inc();                 /* increment selected control */
            print_sound_level();            /* display new level */
            break;

          case KEY_DEC:
          case KEY_DEC_REP:
          case KEY_DEC_LREP:
            song_snd_dec();                 /* decrement selected control */
            print_sound_level();            /* display new level */
            break;

          case KEY_SOUND:
            song_snd_select();              /* select next sound control */
            print_sound();                  /* display selected sound icon */
            print_sound_level();            /* display new level */
            break;

          case KEY_REPEAT:
            song_loop = ~song_loop;         /* display repeat or not */
            if (song_loop)
            {
              print_repeat(SYMB_REP_FILE);
            }
            else
            {
              print_repeat(SYMB_NO_REPEAT);
            }
            break;

          case KEY_STOP:
            song_stop();                    /* stop playing song */
            Fclose();
            print_repeat(song_loop);
            song_state = SONG_STOP;
            break;

          case KEY_LOCK:
            print_kbd_lock();               /* print keyboard status */
            break;

          default:
            break;
        }
        gl_key_press = FALSE;               /* ack key usage */
      }
      break;
    }


    case SONG_PAUSE:                        /* one file openned */
    {
      if (gl_key_press)                     /* a key is pressed? */
      {
        switch (gl_key)
        {
          case KEY_PLAY:
            disp_clock_start();             /* restart clock timer */
            Aud_song_play();                /* restart sample request */
            print_state_play();             /* display play icon */
            song_state = SONG_PLAY;
            break;

          case KEY_NEXT:
            song_stop();                    /* stop playing song */
            Fclose();
            file_seek_next(FILE_MP3, TRUE); /* select next song */
            print_file_name();              /* display song name */
            song_state = SONG_IDLE;
            break;

          case KEY_PREV:
            song_stop();                    /* stop playing song */
            Fclose();
            file_seek_prev(FILE_MP3);       /* select previous song */
            print_file_name();              /* display song name */
            song_state = SONG_IDLE;
            break;

          case KEY_INC:
            song_snd_inc();                 /* increment selected control */
            print_sound_level();            /* display new level */
            break;

          case KEY_DEC:
            song_snd_dec();                 /* decrement selected control */
            print_sound_level();            /* display new level */
            break;

          case KEY_SOUND:
            song_snd_select();              /* select next sound control */
            print_sound();                  /* display selected sound icon */
            print_sound_level();            /* display new level */
            break;

          case KEY_REPEAT:
            song_loop = ~song_loop;         /* display repeat or not */
            if (song_loop)
            {
              print_repeat(SYMB_REP_FILE);
            }
            else
            {
              print_repeat(SYMB_NO_REPEAT);
            }
            break;

          case KEY_STOP:
            song_stop();                    /* stop playing song */
            Fclose();
            song_state = SONG_STOP;
            break;


          case KEY_LOCK:
            print_kbd_lock();               /* print keyboard status */
            break;

          default:
            break;
        }
        gl_key_press = FALSE;               /* ack key usage */
      }
      break;
    }


    case SONG_NEW:
    {
      song_state = SONG_INIT;               /* new song */
      print_file_name();                    /* display file name */
      break;
    }


    case SONG_STOP:
    {
      disp_clock_reset();                   /* reset clock timer */
      print_file_name();                    /* display file name */
      song_state = SONG_IDLE;
      break;
    }


    case SONG_NO_SONG:
    {
      if (gl_key_press)                     /* a key is pressed? */
      {
        switch (gl_key)
        {
          case KEY_MEM:
            mem_select_next();              /* select next memory */
            song_state = SONG_START;
            break;

          case KEY_MODE:
            mode_set_init();                /* exit from song task */
            song_state = SONG_START;
            break;

          case KEY_LOCK:
            print_kbd_lock();               /* print keyboard status  */
            break;
        }
        gl_key_press = FALSE;               /* ack key usage */
      }
      else
      { /* check card presence */
        if (mem_check_card() == KO)
        {
          mem_select_next();
          song_state = SONG_START;          /* card has been unplugged */
        }
      }
      break;
    }

    case SONG_DELETE:
    {
      Fdelete();
      disp_clock_reset();                       /* reset clock timer */
      /* this may be changed to retrieve last saved position */
      if (File_entry_root(FILE_MP3 | FILE_DIR) == OK) /* goto root directory */
      {
        print_file_name();              /* display file name */
        song_state = SONG_IDLE;
      }
      else
      { /* root is empty of song & diretory */
        print_state_blank();                  /* select blank icon */
        print_screen(SONG_SCREEN);            /* display voice screen */
        print_sound_level();                  /* display volume level */
        song_state = SONG_NO_SONG;
        disp_name_stop();
      }
      break;    
    }

    case SONG_ERROR:
    {
      song_stop();                          /* stop playing song */
      Fclose();                             /* close opened file */
      disp_clock_reset();                   /* reset clock timer */
      print_state_error();                  /* display error icon */
      disp_name_stop();
      song_state = SONG_IDLE;
      break;
    }
  }
}




⌨️ 快捷键说明

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