FRA221_B18 / VS1053

Dependents:   MP3333 B18_MP3_PLAYER B18_MP3_PLAYER B18_MP3_PLAYER

Revision:
0:928e5b21896c
Child:
1:4afda9d22e34
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/player.cpp	Mon Dec 07 10:19:01 2015 +0000
@@ -0,0 +1,104 @@
+#include "player.h"
+#include "SDFileSystem.h"
+
+SDFileSystem sd(D11, D12, D13, D10, "sd"); // the pinout on the mbed Cool
+vs10xx vs1053(D11, D12, D13, D4, D5, D3, D6);//mosi,miso,sclk,xcs,xdcs,dreq,xreset
+
+playerStatetype  playerState;
+ctrlStatetype ctrlState;
+static unsigned char fileBuf[32768];
+unsigned char *bufptr;
+
+char list[20][50];          //song list
+char index = 0;      //song play index
+char index_MAX;      //how many song in all
+unsigned char vlume = 0x40;   //vlume
+unsigned char vlumeflag = 0;  //set vlume flag
+
+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,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
+    int 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,32768)) > 0) {
+            bufptr = fileBuf;
+
+            // actual audio data gets sent to VS10xx.
+            while(bytes > 0) {
+                n = (bytes < 1)?bytes:1;
+                vs1053.writeData(bufptr,n);
+                bytes -= n;
+                bufptr += n;
+            }
+        }
+        /*while(playerState == PS_PAUSE);         //Pause
+
+        if(vlumeflag) {                        //set vlume
+            vs1053.setFreq(12000000);     //low speed
+            vs1053.writeRegister(SPI_VOL, vlume*0x101);     //Set volume level
+            vs1053.setFreq(24000000);     //higth speed
+            vlumeflag = 0;  //clear flag;
+        }
+
+        if(playerState != PS_PLAY) {       //stop
+            fp->close();
+            vs1053.softReset();
+            return;
+        }*/
+        fp->close();
+        vs1053.softReset();
+        printf("[done!]\r\n");
+    }
+    if(index != index_MAX)index++;
+    else index = 0;
+}
+
+void Set32(unsigned char *d, unsigned int n)
+{
+    int i;
+    for (i=0; i<4; i++) {
+        *d++ = (unsigned char)n;
+        n >>= 8;
+    }
+}