Pregunta:
Adafruit Music Maker Shield: recupera los nombres de las canciones de la tarjeta SD
Imayan
2015-04-15 03:37:00 UTC
view on stackexchange narkive permalink

Actualmente estoy trabajando en un proyecto que reproduce música para ti. Mi pregunta para este hilo es, ¿es posible recuperar los nombres de las canciones dentro de la tarjeta micro SD que está insertada en el escudo?

Actualmente estoy cambiando el nombre de los archivos de canciones a track001, track002, track003, etc. Como se puede ver en el siguiente código:

  const int arraySize = 5; char songs [arraySize] [15] = {{"track001.mp3"}, {"track002.mp3 "}, {" track003.mp3 "}, {" track004.mp3 "}, {" track005.mp3 "}};  

Así es como estoy reproduciendo música con este escudo . No estoy muy contento con esto, ya que me gustaría poder insertar diferentes tarjetas micro SD en el escudo sin tener que cambiarles el nombre a track00X o sin tener que cambiar el código cada vez para que coincida con los nombres de las canciones.

Entonces, ¿es posible codificarlo para recuperar los nombres de las canciones de la tarjeta SD en lugar de tener que especificar su nombre en el código?

A continuación puede ver mi código completo:

  #include <SPI.h> # include <Adafruit_VS1053.h> # include <SD.h> # define salida de pin 9_RES53 / BREAKOUT_RES53 / VS1053 Pin de selección de datos / comando (salida) #define SHIELD_CS 7 // Pin de selección de chip VS1053 (salida) #define SHIELD_DCS 6 // VS1053 Pin de selección de datos / comando (salida) #define CARDCS 4 // Pin de selección de chip de tarjeta # definir DREQ 3 // VS1053 Solicitud de datos, idealmente un pin de interrupción Adafruit_VS1053_FilePlay er musicPlayer = Adafruit_VS1053_FilePlayer (SHIELD_CS, SHIELD_DCS, DREQ, CARDCS); int volume = 20; const int arraySize = 5; char songs [arraySize] [15] = {{"track001.mp3"}, {"track002.mp3"} , {"track003.mp3"}, {"track004.mp3"}, {"track005.mp3"}}; int songNumber = 0; void setup () {Serial.begin (9600); musicPlayer.begin (); SD.begin (CARDCS); musicPlayer.setVolume (volumen, volumen); musicPlayer.useInterrupt (VS1053_FILEPLAYER_PIN_INT);}
void loop () {// Bajar el volumen if (musicPlayer.GPIO_digitalRead (7) == HIGH) {if (volume < 70) {volumen = volumen + 1; musicPlayer.setVolume (volumen, volumen); retraso (50); }} // Aumentar el volumen if (musicPlayer.GPIO_digitalRead (6) == HIGH) {if (volume > 0) {volume = volume - 1; musicPlayer.setVolume (volumen, volumen); retraso (50); }} // Iniciar el reproductor de música if (musicPlayer.GPIO_digitalRead (5) == HIGH) {if (! MusicPlayer.playingMusic) {musicPlayer.startPlayingFile (songs [songNumber]); }} // Pausar / Reanudar if (musicPlayer.GPIO_digitalRead (4) == HIGH) {if (! MusicPlayer.paused ()) {musicPlayer.pausePlaying (true); } else {musicPlayer.pausePlaying (falso); } retraso (500); } // Canción anterior if (musicPlayer.GPIO_digitalRead (3) == HIGH) {if (songNumber - 1 > = 0) {songNumber = songNumber - 1; } else {songNumber = arraySize - 1; } Serial.println (songNumber); musicPlayer.startPlayingFile (songs [songNumber]); retraso (500); } // Siguiente canción if (musicPlayer.GPIO_digitalRead (2) == HIGH) {if (songNumber + 1 < arraySize) {songNumber = songNumber + 1; } else {songNumber = 0; } Serial.println (songNumber); musicPlayer.startPlayingFile (songs [songNumber]); retraso (500); }}  

Si esto es posible y alguien que lea esto sabe cómo hacerlo, realmente agradecería que me lo explicara e incluso proporcionara un ejemplo o incluso editara mi propio código si usted quiere. ¡Gracias! :)

One responder:
mpflaga
2015-04-15 04:51:00 UTC
view on stackexchange narkive permalink

La biblioteca adafruit era similar a la biblioteca SFEMP3shield anterior (revelación, soy el autor principal de eso). Dicho esto, cualquiera de las bibliotecas puede funcionar en Adafruit o SFE shield o placa de ruptura. La biblioteca de AdaFruit es una reescritura más limpia. Pero al hacerlo, sus funciones son mínimas. La biblioteca SFE muestra muchas más características del chip VS1053.

Dicho eso; ./Example/fileplayer.ino hace exactamente lo que está pidiendo. El comando de directorio enumera los archivos con un número de enumeración. Al ingresar 0 [número] se reproduce ese archivo. Así es como me separé de la "pista ###. Mp3", sin tener que implementar un analizador del símbolo del sistema. Y también permite otros formatos de archivo.

La mayor parte de esta característica está en LOOP () y no en el restringido a la biblioteca. Así que uno puede cortarlo y pegarlo en un boceto usando la biblioteca Adafruit en lugar del SFEMP3 o cualquier boceto con una SdCard. Dicho esto, en realidad sería más fácil reemplazar las llamadas del archivo de reproducción e incluirlas en el ejemplo de FilePlayer.ino. O simplemente úselo directamente.

La biblioteca SFEmp3 es un poco abrumadora porque admite muchas funciones del VS1053. Y usa una biblioteca SdCard diferente, que está más actualizada que la SD del IDE ". Si bien la biblioteca Adafruit es una reescritura muy agradable y limpia muchas definiciones confusas, lo que hace que el código sea mucho más fácil de leer, no es tan rico en funciones . Pero la mayoría de las funciones más allá del juego y la parada no son realmente necesarias.

Buena suerte.



Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...