2
player.cpp
- Committer:
- csggreen
- Date:
- 2018-08-07
- Revision:
- 6:a26a42923924
- Parent:
- 5:ce3a3ce60f30
- Child:
- 7:fc66dbd1ce99
File content as of revision 6:a26a42923924:
#include "player.h" #include"SDFileSystem.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 3spi+chip select Serial aa(USBTX, USBRX); Serial pc(D1, D0); playerStatetype playerState; static unsigned char fileBuf[48000]; unsigned char *bufptr; char green; bool startplaysong; bool playsong; char datainput; char list[20][50]; //song list char data ; DigitalIn sw_in(USER_BUTTON); 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++; green=i; } aa.printf("%2d . %s\r\n", i,list[i++]); //fp->close(); } } } dir->closedir(); } /* select file by num. */ void Player::selectfile(char n){ startplaysong=false; playerState =PS_STOP; playsong=false; green = n; } /* This function stop an audio file. */ void Player::stop(void){ startplaysong=true; playerState =PS_STOP; } void Player::run(void){ if(datainput=='0'){ selectfile(0); playFile(list[green]); //stop(); } if(datainput=='1'){ selectfile(1); playFile(list[green]); //stop(); } if(datainput=='2'){ selectfile(2); playFile(list[green]); //stop(); } if(datainput=='3'){ selectfile(3); playFile(list[green]); //stop(); } if(datainput=='4'){ selectfile(4); playFile(list[green]); //stop(); } if(datainput=='5'){ selectfile(5); playFile(list[green]); //stop(); } else{ stop(); } } void Player::read(void){ pc.readable(); datainput = pc.getc(); } /* This function plays 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,48000)) > 0) { { pc.printf("green\n"); if(pc.readable()){ break; //stop(); } vs1053.setFreq(24000000); bufptr = fileBuf; // actual audio data gets sent to VS10xx. while(bytes > 0) { n = (bytes < 32)?bytes:32; //defalt 32 vs1053.writeData(bufptr,n); bytes -= n; bufptr += n; if(pc.readable()){ break; //stop(); } } uint8_t vol = 0x00;//set vlume vs1053.setVolume(vol); //set vlume if(playerState != PS_PLAY) //stop { fp->close(); vs1053.softReset(); } } } } }