I cant seem to find any support threads on rMp3 shields, other than the old read only forum... I am hoping someone can help me out... I seem to be able to communicate with rmp3, it can find the file names of my mp3s and output them in the serial monitor, so I assume communications is ok... but when I try to play them, I never hear any sound... I am usin plain old headphones to test it out, are amplified speakers required? thanks in advance, and if a thead already exists on this, just point me to it...
So I do have communications, since I can see files, Is there any certain behavior the LED's should be doing while accessing the board? Mine seems to blink a few times on start up, but then nothing.
When playing, the activity LED will be on/changing slightly if it's a VBR song.
If there are no lights then nothing is playing.
Try the RogueMP3 Playback example (included with the RogueMP3 library) and then report back if there is no sound when it's playing. The serial monitor will display 'playing' with a time etc.
thats why im confused.... nothing ever plays... I have the correct filename for the song, but nothing.....p doesnt toggle anything, like the function fails silently
There should be a single .mp3 song in the root directory of the card (no folders), this should match the name of the song as defined in the top of the sketch. Make sure this song works on the computer.
I presume your SD card doesn't have weird formatting - how is it formatted?
I saw that when looking through the code. But still no sound really weird since I can use the SD library to obtain the filenames on the disk, but just not play them.
no, the activity light flashes occasionally, but never does anything to indicate its playing. What should the LED behavior be when playing? I used to us a VMusic module, and whenever it was playing the led was constantly flashing indicating that it was reading from the SD card.
ok, I have some more info on this... I used the following code
#include <RogueSD.h>
#include <RogueMP3.h>
#include <NewSoftSerial.h>
NewSoftSerial rmp3_serial(6, 7);
RogueMP3 rmp3(rmp3_serial);
RogueSD filecommands(rmp3_serial);
int numberOfSongs;
int lastSong;
char path[96];
const char *directory = "/";
void setup()
{
Serial.begin(9600);
Serial.println("Merry Xmas!");
rmp3_serial.begin(9600);
rmp3.sync();
rmp3.stop();
filecommands.sync();
// mix up our random number generator
randomSeed(analogRead(0));
// get the number of songs available
strcpy(path, directory);
strcat(path, "*.mp3"); // we have to do this because the IDE thinks that "/*" needs to be terminated everywhere
numberOfSongs = filecommands.filecount(path);
lastSong = -1;
}
void playNextSong()
{
uint8_t s, i;
char filename[80];
char path[96];
int nextSong = 0;
if (numberOfSongs > 0)
{
// Select our next song randomly
if (numberOfSongs > 2)
{
do
nextSong = random(numberOfSongs);
while (nextSong == lastSong);
}
else if (numberOfSongs == 2)
{
// we only have two songs
if (lastSong == 0)
nextSong = 1;
else
nextSong = 0;
}
// now, get our file name from file list
filecommands.opendir(directory);
for (i = 0; i <= nextSong; i++)
{
filecommands.readdir(filename, "*.mp3");
}
strcpy(path, directory);
strcat(path, filename);
rmp3.playfile(path);
Serial.print("Playing: ");
Serial.println(path);
lastSong = nextSong;
}
else
{
Serial.println("No files to play.");
}
}
void loop()
{
char c;
uint8_t i;
uint8_t lastvolume = 20;
int16_t newtime;
playbackinfo playinfo;
char status = 'S';
uint8_t playing = 1;
uint8_t volume = 20;
uint8_t boostOn = false;
volume = rmp3.getvolume(); // this only gets the left volume
playNextSong();
while(1)
{
while(!Serial.available())
{
// we should do fancy stuff like flash lights on our Xmas tree here!
// got lots of time!
delay(200);
status = rmp3.getplaybackstatus();
playinfo = rmp3.getplaybackinfo();
if (status == 'S' && playing)
playNextSong();
}
// OOH!! got a character!
c = Serial.read();
switch(c)
{
case 'p':
// pause
if(status == 'D')
{
// fade in
rmp3.playpause();
rmp3.fade(volume, 400);
}
else if(status == 'P')
{
// fade out
rmp3.fade(100, 400);
rmp3.playpause();
}
else
{
// start playing
playNextSong();
playing = 1;
}
break;
case 's':
rmp3.stop();
playing = 0;
break;
case 'n':
playNextSong();
playing = 1;
break;
case 'e':
if(boostOn)
{
rmp3.setboost(0);
boostOn = false;
}
else
{
rmp3.setboost(8, 6, 7, 3);
boostOn = true;
}
break;
case 'a':
// jump back 5 seconds
newtime = playinfo.position - 5;
if (newtime < 0) newtime = 0;
rmp3.jump(newtime);
break;
case 'd':
// jump forward 5 seconds
rmp3.jump(playinfo.position + 5);
break;
case 'k':
if(volume < 254) volume+=50;
if(status != 'D') rmp3.setvolume(volume);
break;
case 'i':
if(volume > 0) volume--;
if(status != 'D') rmp3.setvolume(volume);
break;
}
}
}
and its reading the files,but the status must say that the song is finished because it keeps printing the next song filename every 200 milliseconds... so its like playfile just doesnt work.....
further debugging, shows that it constantly is returning S for getPlayback status, so the app thinks its ready to move onto the next song.
getplaybackstatus= S
Playing: /ANNOYED.mp3
getplaybackstatus= S
Playing: /ALARM11.mp3
getplaybackstatus= S
Playing: /DOODOO.mp3
getplaybackstatus= S
Playing: /FAILURE.mp3
getplaybackstatus= S
Playing: /ANNOYED.mp3
getplaybackstatus= S
Playing: /CHORTLE.mp3
Also I have 2 rMp3 shields, one with the latest firmware, the other with whatever version it came with. I know it can read the memory card, I know that its communicating fine, but just failing somewhere.
Also I have 2 rMp3 shields, one with the latest firmware, the other with whatever version it came with. I know it can read the memory card, I know that its communicating fine, but just failing somewhere.
If they both don't work then there's no point in looking at code (as I know it works fine).
How is your card formatted? What bitrate are your songs?