MP3


MP3 CON EL MÓDULO WTV020M01


http://www.instructables.com/id/How-to-use-WTV020SD-16P-with-Arduino/

0.- TEORÍA: MP3
1.- MONTAJE SIN ARDUINO
2.- MONTAJE CON ARDUINO


0.- TEORÍA: MP3









Las siglas MP3 responden a una abreviación de MPEG 1 layer 3. Es un algoritmo de codificación perceptual desarrollado por el consorcio MPEG (Moving Picture Expert Group) junto con el Instituto Tecnológico Fraunhofer que finalmente se ha estandarizado como norma ISO-MPEG Audio Layer 3 (IS 11172-3 y IS 13818-3) y que viene a ser un avance importante sobre los anteriores desarrollos (Layer 1 y Layer 2).

El hecho de que haya sido adoptado como una norma ISO es más importante de lo que cabría suponer. Las normas ISO definen muchos estándares del mercado y tienen peso frente a la industria. Además eso habilita a las personas que quieran desarrollar aplicaciones o cualquier otra cosa dado que tiene a su alcance el funcionamiento del sistema.

El rango de frecuencias que percibe el oído humano esta aproximadamente entre los 20Hz y los 20kHz siendo más sensible entre los 2Hz y 4Hz.

Además cuando tenemos una señal de un volumen alto en una frecuencia y otra de un volumen más bajo en una frecuencia cercana esta queda "tapada" por la anterior. Esto es lo que se llama efecto enmascar.

Para aprovechar estas características se utiliza un sistema denominado Codificación de Sub Bandas.

En este proceso la señal original se descompone en sub bandas mediante un banco de filtros o algún método parecido. Estas sub bandas son comparadas con el original mediante el modelo psicoacústico que determina que bandas son importantes cuales no y cuales pueden ser eliminadas.

Así pues de lo que se trata es de aprovechar los "defectos" del oído humano para desechar todo aquello que realmente no vamos a oír. Por supuesto cada uno tiene su oído y por eso para probar el éxito de estos sistemas se utilizan métodos estadísticos.



Un MP3 creado usando una compresión de 128kbit/s tendrá un tamaño de aproximadamente unas 11 veces menor que su homónimo en CD. Un MP3 también puede comprimirse usando una mayor o menor tasa de bits por segundo, resultando directamente en su mayor o menor calidad de audio final, así como en el tamaño del archivo resultante.

En un disco compacto tenemos una onda de 44.1kHz 16bit estéreo eso significa aproximadamente 1400Kbps (44100 x 16 x 2 bits por segundo). Codificándolo por ejemplo a un MP3 de 128kbps obtenemos una reducción en torno al 1/12 del espacio inicial.



1.- MP3 SIN ARDUINO

 http://www.buildcircuit.com/how-to-use-wtv020sd-music-module-with-arduino/


WTV020SD-16P is an excellent module for adding music on to electronic projects. The module can be used with/without Arduino.

This tutorial is about mp3 mode of WTV020SD-16P module. With this simple circuit, you can play AD4 format music files.





I followed the schematic but I connected only RESET, PREV and NEXT switches only for this experiment.

Steps:
  1. Copy AD4 format music files on to your 2GB micro SD card.
  2. Connect speaker, 3.3V regulator, switches and power supply. See the connection on the image given below.
  3. I used a 5V and a 3.3V regulators for this project. I noticed that the 3.3V regulator heats up heavily when connected to a 9V battery, so I connected the battery to a 5V regulator first and then to the 3.3V regulator. I used a 2GB microSD card for this experiment.
There are several things to be considered while working with this module. For example, it works with only 2GB microSD card and it supports only AD4 format music file.


  1. Size of Micro SD card: I tested with 1GB and 2GB micro SD cards and it worked with a 2 GB card only.
  2. Mp3/WAV/AD4 format music files: mp3 and wav files did not play. But AD4 format files worked properly. Check out this article: how to convert mp3 and wav files to ad4.
  3.  Sampling rate: The sampling rate of the AD4 music file should be 32000 Hz. If you are using SOMO tool(Usb recorder),
Lo primero que puedo observar es su reducido tamaño, es un poco mayor que el tamaño de una MicroSD. Precisamente esta es la primera pega que hay que salvar, encontrar una tarjeta MicroSD compatible, por lo que he podido leer por ahí acepta hasta tarjetas de 2GB pero de ciertas marcas, en mi caso las que yo tengo de 2GB no son compatibles pero una SanDisk de 1GB sí que funciona. Por lo tanto voy a utilizar una tarjeta SanDisk de 1GB.



2.- MP3 CON ARDUINO

http://arubia45.blogspot.com.es/

El WTV020-SD-16P es un decodificador de ficheros de música WTV020 con tarjeta MicroSD y 16 Pins de salida. 
CONEXIONES BÁSICAS:

VCC 16VDD_SENSOR >> 3.3V ARDUINO
GND 8GND >> GND ARDUINO
1 RESET >> D2 ARDUINO
7CLOCK_P04 >> D3 ARDUINO
10DATA_P05 >> D4 ARDUINO
15BUSSY_P06 >> D5 ARDUINO

Este es el esquema de conexiones para la librería Wtv020sd16p de Diego J. Arevalo, se puede bajar del foro oficial de Arduino o bien directamente aquí: Librería Wtv020sd16p


Este módulo es capaz de trabajar directamente sin Arduino que lo controle, simplemente conectando la entrada de alimentación y tierra. Como test podemos sólo conectar estos pins del módulo, un altavoz y con un cable a tierra hacer contacto sobre P02 ó P03 (Cambio de track).





Para hacer este testeo en la MicroSD metemos algunos sonidos de prueba en formato ad4 un formato especial, las pruebas con MP3 no las he hecho aún. Por ejemplo los sonidos que nos facilita SOMO para testear su producto (SOMO Ad4) Ejemplos AD4

Una vez que comprobemos que el módulo es capaz de leer nuestra MicroSD y reproducir los tracks de ejemplo lo conectamos al Arduino.

Una vez hecha esta conexión, podemos subir el ejemplo que viene junto con la librería Wtv020sd16p que debemos de descargar y descomprimir en la carpeta Libraries de nuestro entorno IDE. El ejemplo es el Wtv020sd16pExample









OTRO EJEMPLO
http://www.buildcircuit.com/example-1-using-wtv020sd-16p-music-module-with-arduino/


This article is about playing music files using WTV020SD-16P and Arduino. WTV020-SD module is a voice rewritable content type of mass storage voice module, pluggable maximum capacity of 1 GB SD card memory. It can load WAV format files and AD4 formats files.

WTV020-SD module voice chip has WTV020SD-20S master core, with MP3 control mode, the key one-to-one control mode (3 voice with the voice two), the power-loop control mode as well as the second-line serial control mode.

The following circuit layout shows a basic experiment of WTV020SD module using Arduino. In this experiment, I have connected NEXT and PREV switches only. Actually, these switches are optional because the songs stored on the microSD card can be controlled by Arduino sketch also. Besides, you might also be surprised to know that Arduino is also optional if you just want to play the songs. Check this tutorial that shows how to use this music module without Arduino. Also check this article that shows how to use an audio amplifier with the music module.





Simply go to the ‘Documents’ tab and download the sketch and upload to your Arduino. The link for the library is also available there. You can change the sketch to make the songs play the way you want.


Steps:
  1. Copy AD4 format music files on to your 2GB micro SD card. I tested the project with 2GB microSD card only. Download AD4 Format Files (sample files). You can make your own AD4 format files, check this tutorial.
  2. DOWNLOAD AD4 FORMAT SAMPLE FILES- SET2-SAMPLES FILES 2 (NEW!!! uploaded on 15.1.2014)
  3. Connect 3.3V power to the music module. Remember that 5V may breakdown your MicroSD card.


CÓDIGO

// WWW.BUILDCIRCUIT.COM//
//SELECTOR BTN = pin 6
//TRIGGER = pin 7
//RESET = PIN 2
//CLOCK = PIN 3
//DATA = PIN 4
//BUSY = PIN 5
#include <Wtv020sd16p.h>
int resetPin = 2; // The pin number of the reset pin.
int clockPin = 3; // The pin number of the clock pin.
int dataPin = 4; // The pin number of the data pin.
int busyPin = 5; // The pin number of the busy pin.
const int buttonPin = 6; // the pin that the SELECTOR pushbutton is attached to
const int triggerPin = 7; // the pin that the TRIGGER is attached to
// Variables will change:
int buttonPushCounter = 0; // counter for the number of SELECTOR button presses
int buttonState = 0;             // current state of the SELECTOR button
int lastButtonState = 0;         // previous state of the button
int triggerState = 0;            // current state of the Trigger
int lastTriggerState = 0;        // previous state of the Triger
long time = 0;           // the last time the output pin was toggled
long debounce = 200; // the debounce time, increase if the output flickers
Wtv020sd16p wtv020sd16p(resetPin,clockPin,dataPin,busyPin);

void setup() {
//Initializes the module.
wtv020sd16p.reset();
// initialize the SELECTOR and Trigger button pins as a inputs:
pinMode(buttonPin, INPUT);
pinMode(triggerPin, INPUT);
Serial.begin(9600); //Start serial interface (for debugging)
wtv020sd16p.asyncPlayVoice(0);
}
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
triggerState = digitalRead(triggerPin);
// compare the buttonState to its previous state
if (buttonState != lastButtonState && millis() - time > debounce) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button
// went from off to on:
time = millis();
Serial.println("Selector Button Pushed");
// plays words
wtv020sd16p.asyncPlayVoice(5);
if (buttonPushCounter < 3)
{
buttonPushCounter++;
Serial.print("Selector Button State: ");
Serial.println(buttonPushCounter);
}
else buttonPushCounter = 1;
}
else {
}
}
// compare the triggerState to its previous state
if (triggerState != lastTriggerState) {
// if the state has changed, do something
if (triggerState == HIGH) {
         Serial.println("Trigger Pushed");
         Serial.print("Selector Button State: ");
         Serial.println(buttonPushCounter);
         SelectorPosition();
}
else {
}
}
// save the current state as the last state,
//for next time through the loop
lastButtonState = buttonState;
lastTriggerState = triggerState;
}

void SelectorPosition(){
switch (buttonPushCounter) {
case 1:
         Serial.println("song1");
         wtv020sd16p.asyncPlayVoice(0);
         wtv020sd16p.stopVoice();
            
         break;
        
case 2:

         Serial.println("Song2");
         wtv020sd16p.asyncPlayVoice(1);
         wtv020sd16p.stopVoice();
         
          break;
        
case 3:
         Serial.println("Song3");
         wtv020sd16p.asyncPlayVoice(2);
         delay(1000);
                  
         break;
        
}
}