FRA221_B18 / VS1053

Dependents:   MP3333 B18_MP3_PLAYER B18_MP3_PLAYER B18_MP3_PLAYER

Committer:
PKnevermind
Date:
Mon Dec 07 10:19:01 2015 +0000
Revision:
0:928e5b21896c
Child:
1:4afda9d22e34
ygjhgj

Who changed what in which revision?

UserRevisionLine numberNew contents of line
PKnevermind 0:928e5b21896c 1 #include "player.h"
PKnevermind 0:928e5b21896c 2 #include "SDFileSystem.h"
PKnevermind 0:928e5b21896c 3
PKnevermind 0:928e5b21896c 4 SDFileSystem sd(D11, D12, D13, D10, "sd"); // the pinout on the mbed Cool
PKnevermind 0:928e5b21896c 5 vs10xx vs1053(D11, D12, D13, D4, D5, D3, D6);//mosi,miso,sclk,xcs,xdcs,dreq,xreset
PKnevermind 0:928e5b21896c 6
PKnevermind 0:928e5b21896c 7 playerStatetype playerState;
PKnevermind 0:928e5b21896c 8 ctrlStatetype ctrlState;
PKnevermind 0:928e5b21896c 9 static unsigned char fileBuf[32768];
PKnevermind 0:928e5b21896c 10 unsigned char *bufptr;
PKnevermind 0:928e5b21896c 11
PKnevermind 0:928e5b21896c 12 char list[20][50]; //song list
PKnevermind 0:928e5b21896c 13 char index = 0; //song play index
PKnevermind 0:928e5b21896c 14 char index_MAX; //how many song in all
PKnevermind 0:928e5b21896c 15 unsigned char vlume = 0x40; //vlume
PKnevermind 0:928e5b21896c 16 unsigned char vlumeflag = 0; //set vlume flag
PKnevermind 0:928e5b21896c 17
PKnevermind 0:928e5b21896c 18 void Player::begin(void)
PKnevermind 0:928e5b21896c 19 {
PKnevermind 0:928e5b21896c 20 DirHandle *dir;
PKnevermind 0:928e5b21896c 21 struct dirent *ptr;
PKnevermind 0:928e5b21896c 22 FileHandle *fp;
PKnevermind 0:928e5b21896c 23
PKnevermind 0:928e5b21896c 24 vs1053.reset();
PKnevermind 0:928e5b21896c 25 dir = opendir("/sd");
PKnevermind 0:928e5b21896c 26 printf("\r\n**********playing list**********\r\n");
PKnevermind 0:928e5b21896c 27 unsigned char i = 0,j=0;
PKnevermind 0:928e5b21896c 28 while(((ptr = dir->readdir()) != NULL)&&(i <20)) {
PKnevermind 0:928e5b21896c 29 if(strstr(ptr->d_name,".mp3")||strstr(ptr->d_name,".MP3")) {
PKnevermind 0:928e5b21896c 30 fp =sd.open(ptr->d_name, O_RDONLY);
PKnevermind 0:928e5b21896c 31 if(fp != NULL) {
PKnevermind 0:928e5b21896c 32 char *byte = ptr->d_name;
PKnevermind 0:928e5b21896c 33 j=0;
PKnevermind 0:928e5b21896c 34 while(*byte) {
PKnevermind 0:928e5b21896c 35 list[i][j++] = *byte++;
PKnevermind 0:928e5b21896c 36 }
PKnevermind 0:928e5b21896c 37 printf("%2d . %s\r\n", i,list[i++]);
PKnevermind 0:928e5b21896c 38 fp->close();
PKnevermind 0:928e5b21896c 39 }
PKnevermind 0:928e5b21896c 40 }
PKnevermind 0:928e5b21896c 41 }
PKnevermind 0:928e5b21896c 42 index_MAX = i-1;
PKnevermind 0:928e5b21896c 43 dir->closedir();
PKnevermind 0:928e5b21896c 44 printf("\r\n");
PKnevermind 0:928e5b21896c 45 }
PKnevermind 0:928e5b21896c 46
PKnevermind 0:928e5b21896c 47 /* This function plays back an audio file. */
PKnevermind 0:928e5b21896c 48 void Player::playFile(char *file)
PKnevermind 0:928e5b21896c 49 {
PKnevermind 0:928e5b21896c 50 int bytes; // How many bytes in buffer left
PKnevermind 0:928e5b21896c 51 int n;
PKnevermind 0:928e5b21896c 52
PKnevermind 0:928e5b21896c 53 playerState = PS_PLAY;
PKnevermind 0:928e5b21896c 54
PKnevermind 0:928e5b21896c 55 vs1053.setFreq(24000000); //hight speed
PKnevermind 0:928e5b21896c 56 FileHandle *fp =sd.open(file, O_RDONLY);
PKnevermind 0:928e5b21896c 57 if(fp == NULL) {
PKnevermind 0:928e5b21896c 58 printf("Could not open %s\r\n",file);
PKnevermind 0:928e5b21896c 59
PKnevermind 0:928e5b21896c 60 } else {
PKnevermind 0:928e5b21896c 61 printf("Playing %s ...\r\n",file);
PKnevermind 0:928e5b21896c 62
PKnevermind 0:928e5b21896c 63 /* Main playback loop */
PKnevermind 0:928e5b21896c 64 while((bytes = fp->read(fileBuf,32768)) > 0) {
PKnevermind 0:928e5b21896c 65 bufptr = fileBuf;
PKnevermind 0:928e5b21896c 66
PKnevermind 0:928e5b21896c 67 // actual audio data gets sent to VS10xx.
PKnevermind 0:928e5b21896c 68 while(bytes > 0) {
PKnevermind 0:928e5b21896c 69 n = (bytes < 1)?bytes:1;
PKnevermind 0:928e5b21896c 70 vs1053.writeData(bufptr,n);
PKnevermind 0:928e5b21896c 71 bytes -= n;
PKnevermind 0:928e5b21896c 72 bufptr += n;
PKnevermind 0:928e5b21896c 73 }
PKnevermind 0:928e5b21896c 74 }
PKnevermind 0:928e5b21896c 75 /*while(playerState == PS_PAUSE); //Pause
PKnevermind 0:928e5b21896c 76
PKnevermind 0:928e5b21896c 77 if(vlumeflag) { //set vlume
PKnevermind 0:928e5b21896c 78 vs1053.setFreq(12000000); //low speed
PKnevermind 0:928e5b21896c 79 vs1053.writeRegister(SPI_VOL, vlume*0x101); //Set volume level
PKnevermind 0:928e5b21896c 80 vs1053.setFreq(24000000); //higth speed
PKnevermind 0:928e5b21896c 81 vlumeflag = 0; //clear flag;
PKnevermind 0:928e5b21896c 82 }
PKnevermind 0:928e5b21896c 83
PKnevermind 0:928e5b21896c 84 if(playerState != PS_PLAY) { //stop
PKnevermind 0:928e5b21896c 85 fp->close();
PKnevermind 0:928e5b21896c 86 vs1053.softReset();
PKnevermind 0:928e5b21896c 87 return;
PKnevermind 0:928e5b21896c 88 }*/
PKnevermind 0:928e5b21896c 89 fp->close();
PKnevermind 0:928e5b21896c 90 vs1053.softReset();
PKnevermind 0:928e5b21896c 91 printf("[done!]\r\n");
PKnevermind 0:928e5b21896c 92 }
PKnevermind 0:928e5b21896c 93 if(index != index_MAX)index++;
PKnevermind 0:928e5b21896c 94 else index = 0;
PKnevermind 0:928e5b21896c 95 }
PKnevermind 0:928e5b21896c 96
PKnevermind 0:928e5b21896c 97 void Set32(unsigned char *d, unsigned int n)
PKnevermind 0:928e5b21896c 98 {
PKnevermind 0:928e5b21896c 99 int i;
PKnevermind 0:928e5b21896c 100 for (i=0; i<4; i++) {
PKnevermind 0:928e5b21896c 101 *d++ = (unsigned char)n;
PKnevermind 0:928e5b21896c 102 n >>= 8;
PKnevermind 0:928e5b21896c 103 }
PKnevermind 0:928e5b21896c 104 }