.

Fork of VS1053 by Chaiyaporn Boonyasathian

player.cpp

Committer:
PloyLL
Date:
2016-12-05
Revision:
2:787946147566
Parent:
1:ab6777568920

File content as of revision 2:787946147566:

#include "player.h"
#include"SDFileSystem.h"
#include<string.h>

SDFileSystem sd(D11, D12, D13, D9, "sd"); // the pinout on the mbed Cool
vs10xx vs1053(D11, D12, D13, D6, D7, D2, D8);//mosi,miso,sclk,xcs,xdcs,dreq,xreset
Serial pc(USBTX, USBRX);
playerStatetype  playerState;
ctrlStatetype ctrlState;
char list[20][14];            //song list
static unsigned char fileBuf[1024];
unsigned char *bufptr;



void Player::begin(void)
{
    DirHandle *dir;
    struct dirent *ptr;
		FileHandle *fp;
   
    vs1053.reset();
    dir = opendir("/sd");
    printf("\r\n**********playing list**********\r\n");
    unsigned char i = 0,j=0;
    while(((ptr = dir->readdir()) != NULL)&&(i <20)) {
        if(strstr(ptr->d_name,".mp3")||strstr(ptr->d_name,".MP3")) {
            fp =sd.open(ptr->d_name, O_RDONLY);
            if(fp != NULL) {
                char *byte = ptr->d_name;
                j=0;
                while(*byte) {
                    list[i][j++]  = *byte++;
                }
                printf("%2d . %s\r\n", i+1,list[i++]);
                fp->close();
            }
        }
    }
    //index_MAX = i-1;
		dir->closedir();
    printf("\r\n");
}



/*  This function plays back an audio file.  */
void Player::playFile(char *file){
    int bytes;        // How many bytes in buffer left
    char n;

    playerState = PS_PLAY;
    vs1053.setFreq(24000000);     //hight speed
	
    FileHandle *fp =sd.open(file, O_RDONLY);
    if(fp == NULL){
        printf("Could not open %s\r\n",file);

    }else{
        printf("Playing %s ...\r\n",file);

        /* Main playback loop */
         while((bytes = fp->read(fileBuf,512)) > 0) {
            bufptr = fileBuf;
            // actual audio data gets sent to VS10xx.
            //pc.printf("now: playing\n");
            while(bytes > 0) {
                n = (bytes < 32)?bytes:32;
                vs1053.writeData(bufptr,n);
                bytes -= n;
                bufptr += n;
                if(playerState == PS_STOP) break;
				//pc.printf("now: bype>0\n");
            }
            if(playerState == PS_STOP) break;
        }
        fp->close();
        vs1053.softReset();
        printf("[done!]\r\n");
    }
}