Arduino Forum

Using Arduino => Audio => Topic started by: csnate on Apr 26, 2014, 02:40 pm

Title: Unable to Successfully Record Audio with the VS1053.
Post by: csnate on Apr 26, 2014, 02:40 pm
Hello all, I am working on a research project recording bird songs.  For lack of a better term, I am the resident computer scientist.  We are trying to use an Arduino and the VS1053 to record birds that have been tagged with an RFID chip.  When a tagged bird comes close enough to our antenna for a read, we want to begin recording.

The RFID reader works, but the audio recording does not.  We've used code from OGG recording sketch (https://learn.adafruit.com/adafruit-vs1053-mp3-aac-ogg-midi-wav-play-and-record-codec-tutorial/ogg-recorder) but have been unsuccessful.  We then tried to use WAV recording using mods from a guy named 'jonlab' over on the Adadfruit forums to record wave files and have also been unsuccessful with that method.

I've posted a link to the code, I'm hoping we could get some help on this.  I would have posted the code directly, but its too long.

https://bitbucket.org/csnate/bird-recording-utils/src/bdf95306ed1d055c7f9b39671112f52404069ea0/birdbox/birdbox.ino?at=dev (https://bitbucket.org/csnate/bird-recording-utils/src/bdf95306ed1d055c7f9b39671112f52404069ea0/birdbox/birdbox.ino?at=dev)

The code added to the VS1053 library.

Code: [Select]
void Adafruit_VS1053::startRecordWav(boolean mic)
{
   softReset();
   while (! readyForData() );
   sciWrite(VS1053_SCI_AICTRL0, 16000);    //Sample rate between 8000 and 48000
   sciWrite(VS1053_SCI_AICTRL1, 0);        //Recording gain : 1024 : 1.If 0, use AGC
   sciWrite(VS1053_SCI_AICTRL2, 4096);     //Maximum AGC level: 1024 = 1. Only used if SCI_AICTRL1 is set to 0.
   //Miscellaneous bits that also must be set before recording.
   sciWrite(VS1053_SCI_AICTRL3, 0); //joint stereo AGC + IMA ADPCM
   //sciWrite(VS1053_SCI_AICTRL3, 2); //LEFT only
   //sciWrite(VS1053_SCI_AICTRL3, 3); //RIGHT only
   //sciWrite(VS1053_SCI_AICTRL3, 4); //joint stereo AGC + LINEAR PCM
   if (mic)
   {
       sciWrite(VS1053_REG_MODE, VS1053_MODE_SM_RESET | VS1053_MODE_SM_ADPCM | VS1053_MODE_SM_SDINEW);
   }
   else
   {
       sciWrite(VS1053_REG_MODE, VS1053_MODE_SM_RESET | VS1053_MODE_SM_LINE1 | VS1053_MODE_SM_ADPCM | VS1053_MODE_SM_SDINEW);
   }
   
   while (! readyForData() ); //!!!!!!!!!!!!
   //IMA fix patch
   sciWrite(VS1053_REG_WRAMADDR, 0x8010);
   sciWrite(VS1053_REG_WRAM, 0x3e12);
   sciWrite(VS1053_REG_WRAM, 0xb817);
   sciWrite(VS1053_REG_WRAM, 0x3e14);
   sciWrite(VS1053_REG_WRAM, 0xf812);
   sciWrite(VS1053_REG_WRAM, 0x3e01);
   sciWrite(VS1053_REG_WRAM, 0xb811);
   sciWrite(VS1053_REG_WRAM, 0x0007);
   sciWrite(VS1053_REG_WRAM, 0x9717);
   sciWrite(VS1053_REG_WRAM, 0x0020);
   sciWrite(VS1053_REG_WRAM, 0xffd2);
   sciWrite(VS1053_REG_WRAM, 0x0030);
   sciWrite(VS1053_REG_WRAM, 0x11d1);
   sciWrite(VS1053_REG_WRAM, 0x3111);
   sciWrite(VS1053_REG_WRAM, 0x8024);
   sciWrite(VS1053_REG_WRAM, 0x3704);
   sciWrite(VS1053_REG_WRAM, 0xc024);
   sciWrite(VS1053_REG_WRAM, 0x3b81);
   sciWrite(VS1053_REG_WRAM, 0x8024);
   sciWrite(VS1053_REG_WRAM, 0x3101);
   sciWrite(VS1053_REG_WRAM, 0x8024);
   sciWrite(VS1053_REG_WRAM, 0x3b81);
   sciWrite(VS1053_REG_WRAM, 0x8024);
   sciWrite(VS1053_REG_WRAM, 0x3f04);
   sciWrite(VS1053_REG_WRAM, 0xc024);
   sciWrite(VS1053_REG_WRAM, 0x2808);
   sciWrite(VS1053_REG_WRAM, 0x4800);
   sciWrite(VS1053_REG_WRAM, 0x36f1);
   sciWrite(VS1053_REG_WRAM, 0x9811);
   sciWrite(VS1053_REG_WRAMADDR, 0x8028);
   sciWrite(VS1053_REG_WRAM, 0x2a00);
   sciWrite(VS1053_REG_WRAM, 0x040e);
}

void Adafruit_VS1053::stopRecordWav(void) {
   sciWrite(VS1053_SCI_AICTRL3, 1);
}


The relevant bits are located in the loop and the writeRecordedData functions.  Any help is appreciated!

Edit: Specifically, we are able to create .WAV files on the SD card but they are always either 0 or 1 kb large and the 1kb files are reported as corrupt.
Title: Re: Unable to Successfully Record Audio with the VS1053.
Post by: Frederic_Plante on Jan 01, 2017, 06:30 pm
It's not perfect. But this guy has the begining of an answer, check it out.

Record voice by vs1053 (https://github.com/Edzelf/Esp-radio/issues/36)

Happy new year!