Difference between revisions of "Adafruit VS1053 Codec + MicroSD Breakout - MP3/WAV/MIDI/OGG Play + Record - v4"

From Interaction Station Wiki
Jump to navigation Jump to search
(Created page with "<syntaxhighlight lang="c++"> /*************************************************** This is an example for the Adafruit VS1053 Codec Breakout Designed specifically to wor...")
 
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
The Adafruit VS1053 Codec + MicroSD Breakout - MP3/WAV/MIDI/OGG Play + Record - V4 can be used to play and record audio files to a microSD card. It can also be used for MIDI. On this page you can find  an example of the MP3 Playback function. You can use this shield with headphones, but if you want to make the sound audible on speakers, you will need some extra amplification.
 +
 +
 +
<b>SD CARD FORMATTING</b>
 +
 +
 +
To read audio files on the MP3 Shield, you need to use a FAT32 formatted microSD card. These card can go up to a maximum of 32GB. Bigger cards have a different format, called exFAT. Make sure you have the right microSD card installed!
 +
 +
 +
<b>FILE FORMATTING</b>
 +
 +
 +
The Adafruit VS1053 Codec + MicroSD Breakout - MP3/WAV/MIDI/OGG Play + Record - V4 can read audio files on a microSD card installed in the microSD card slot. The files on this, however, needs specific names and types so you can play them with your code. The filetypes that can be used are:
 +
 +
 +
- MP3
 +
 +
- AAC
 +
 +
- Ogg Vorbis
 +
 +
- WMA
 +
 +
- MIDI
 +
 +
- FLAC
 +
 +
- WAV (PCM and ADPCM)
 +
 +
 +
The SD library for Arduino can only handle 8.3 names, that means you can name your file track001.mp3 (8 letters dot 3 letters) but not MyFavoriteMusic.mp3.
 +
 +
<b>WIRING WITH ARDUINO UNO</b>
 +
 +
 +
[[File:WIRINGAdafruisVS1053.png|600px]]
 +
 +
 +
You need to wire the Arduino UNO to the breakout board in the following way:
 +
 +
Breakout    ->    Arduino
 +
 +
CC (VCC)    ->    5v
 +
 +
GND        ->    GND
 +
 +
SCLK (CLK)  ->    13
 +
 +
MISO        ->    12
 +
 +
MOSI        ->    11
 +
 +
CS          ->    10
 +
 +
RST        ->    9
 +
 +
XDCS        ->    8
 +
 +
SDCS        ->    4
 +
 +
DREQ        ->    3
 +
 +
<b>WIRING WITH ARDUINO MEGA</b>
 +
 +
CC (VCC)    ->    5v
 +
 +
GND        ->    GND
 +
 +
SCLK (CLK)  ->    52
 +
 +
MISO        ->    50
 +
 +
MOSI        ->    51
 +
 +
CS          ->    10
 +
 +
RST        ->    9
 +
 +
XDCS        ->    8
 +
 +
SDCS        ->    4
 +
 +
DREQ        ->    3
 +
 +
 +
<b>PROGRAMMING IN ARDUINO IDE</b>
 +
 +
<i>This sketch was only tested with Arduino UNO.</i>
 +
 +
To get started with the Adafruit VS1053 Codec + MicroSD Breakout - MP3/WAV/MIDI/OGG Play + Record - V4, you'll need to control the built-in VS1053 chip by installing the Adafruit_VS1053 library.
 +
 +
Open up the Arduino library manager, search for Adafruit_VS1053 library and install it.
 +
 +
Copy and paste this sketch in Arduino IDE. This sketch will allow you to play specific audio files by naming them with "musicPlayer.playFullFile("/track001.mp3");". To play a different file just change this piece of code.
 +
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
  

Latest revision as of 13:42, 21 June 2024

The Adafruit VS1053 Codec + MicroSD Breakout - MP3/WAV/MIDI/OGG Play + Record - V4 can be used to play and record audio files to a microSD card. It can also be used for MIDI. On this page you can find an example of the MP3 Playback function. You can use this shield with headphones, but if you want to make the sound audible on speakers, you will need some extra amplification.


SD CARD FORMATTING


To read audio files on the MP3 Shield, you need to use a FAT32 formatted microSD card. These card can go up to a maximum of 32GB. Bigger cards have a different format, called exFAT. Make sure you have the right microSD card installed!


FILE FORMATTING


The Adafruit VS1053 Codec + MicroSD Breakout - MP3/WAV/MIDI/OGG Play + Record - V4 can read audio files on a microSD card installed in the microSD card slot. The files on this, however, needs specific names and types so you can play them with your code. The filetypes that can be used are:


- MP3

- AAC

- Ogg Vorbis

- WMA

- MIDI

- FLAC

- WAV (PCM and ADPCM)


The SD library for Arduino can only handle 8.3 names, that means you can name your file track001.mp3 (8 letters dot 3 letters) but not MyFavoriteMusic.mp3.

WIRING WITH ARDUINO UNO


WIRINGAdafruisVS1053.png


You need to wire the Arduino UNO to the breakout board in the following way:

Breakout -> Arduino

CC (VCC) -> 5v

GND -> GND

SCLK (CLK) -> 13

MISO -> 12

MOSI -> 11

CS -> 10

RST -> 9

XDCS -> 8

SDCS -> 4

DREQ -> 3

WIRING WITH ARDUINO MEGA

CC (VCC) -> 5v

GND -> GND

SCLK (CLK) -> 52

MISO -> 50

MOSI -> 51

CS -> 10

RST -> 9

XDCS -> 8

SDCS -> 4

DREQ -> 3


PROGRAMMING IN ARDUINO IDE

This sketch was only tested with Arduino UNO.

To get started with the Adafruit VS1053 Codec + MicroSD Breakout - MP3/WAV/MIDI/OGG Play + Record - V4, you'll need to control the built-in VS1053 chip by installing the Adafruit_VS1053 library.

Open up the Arduino library manager, search for Adafruit_VS1053 library and install it.

Copy and paste this sketch in Arduino IDE. This sketch will allow you to play specific audio files by naming them with "musicPlayer.playFullFile("/track001.mp3");". To play a different file just change this piece of code.

/*************************************************** 
  This is an example for the Adafruit VS1053 Codec Breakout

  Designed specifically to work with the Adafruit VS1053 Codec Breakout 
  ----> https://www.adafruit.com/products/1381

  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

// include SPI, MP3 and SD libraries
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>

// define the pins used
//#define CLK 13       // SPI Clock, shared with SD card
//#define MISO 12      // Input data, from VS1053/SD card
//#define MOSI 11      // Output data, to VS1053/SD card
// Connect CLK, MISO and MOSI to hardware SPI pins. 
// See http://arduino.cc/en/Reference/SPI "Connections"

// These are the pins used for the breakout example
#define BREAKOUT_RESET  9      // VS1053 reset pin (output)
#define BREAKOUT_CS     10     // VS1053 chip select pin (output)
#define BREAKOUT_DCS    8      // VS1053 Data/command select pin (output)
// These are the pins used for the music maker shield
#define SHIELD_RESET  -1      // VS1053 reset pin (unused!)
#define SHIELD_CS     7      // VS1053 chip select pin (output)
#define SHIELD_DCS    6      // VS1053 Data/command select pin (output)

// These are common pins between breakout and shield
#define CARDCS 4     // Card chip select pin
// DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt
#define DREQ 3       // VS1053 Data request, ideally an Interrupt pin

Adafruit_VS1053_FilePlayer musicPlayer = 
  // create breakout-example object!
  Adafruit_VS1053_FilePlayer(BREAKOUT_RESET, BREAKOUT_CS, BREAKOUT_DCS, DREQ, CARDCS);
  // create shield-example object!
  //Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);
  
void setup() {
  Serial.begin(9600);
  Serial.println("Adafruit VS1053 Simple Test");

  if (! musicPlayer.begin()) { // initialise the music player
     Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
     while (1);
  }
  Serial.println(F("VS1053 found"));
  
   if (!SD.begin(CARDCS)) {
    Serial.println(F("SD failed, or not present"));
    while (1);  // don't do anything more
  }

  // list files
  printDirectory(SD.open("/"), 0);
  
  // Set volume for left, right channels. lower numbers == louder volume!
  musicPlayer.setVolume(20,20);

  // Timer interrupts are not suggested, better to use DREQ interrupt!
  //musicPlayer.useInterrupt(VS1053_FILEPLAYER_TIMER0_INT); // timer int

  // If DREQ is on an interrupt pin (on uno, #2 or #3) we can do background
  // audio playing
  musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT);  // DREQ int
  
  // Play one file, don't return until complete
  Serial.println(F("Playing track 001"));
  musicPlayer.playFullFile("/track001.mp3");
  // Play another file in the background, REQUIRES interrupts!
  Serial.println(F("Playing track 002"));
  musicPlayer.startPlayingFile("/track002.mp3");
}

void loop() {
  // File is playing in the background
  if (musicPlayer.stopped()) {
    Serial.println("Done playing music");
    while (1) {
      delay(10);  // we're done! do nothing...
    }
  }
  if (Serial.available()) {
    char c = Serial.read();
    
    // if we get an 's' on the serial console, stop!
    if (c == 's') {
      musicPlayer.stopPlaying();
    }
    
    // if we get an 'p' on the serial console, pause/unpause!
    if (c == 'p') {
      if (! musicPlayer.paused()) {
        Serial.println("Paused");
        musicPlayer.pausePlaying(true);
      } else { 
        Serial.println("Resumed");
        musicPlayer.pausePlaying(false);
      }
    }
  }

  delay(100);
}


/// File listing helper
void printDirectory(File dir, int numTabs) {
   while(true) {
     
     File entry =  dir.openNextFile();
     if (! entry) {
       // no more files
       //Serial.println("**nomorefiles**");
       break;
     }
     for (uint8_t i=0; i<numTabs; i++) {
       Serial.print('\t');
     }
     Serial.print(entry.name());
     if (entry.isDirectory()) {
       Serial.println("/");
       printDirectory(entry, numTabs+1);
     } else {
       // files have sizes, directories do not
       Serial.print("\t\t");
       Serial.println(entry.size(), DEC);
     }
     entry.close();
   }
}