Zufällige WAV / MP3 abspielen

Hi, ich würde gerne eine zufällige WAV oder MP3 Datei (Mono) von SD abspielen, wenn ich keinen Knopf drücke.

Finden dazu tue ich absolut nix, habe es aber schon geschafft mit TMRPCM immerhin etwas auszugeben.

Es sind insgesamt 8 WAV Dateien mit 16000Hz und 8Bit PCM.

Hat jemand eine Idee, wie das zu realisieren ist?

Ich hab jetzt länger nicht mehr mit Arduino gearbeitet und bin wieder komplett raus ... wobei ich nie wirklich drin war. Programme lesen und verstehen kann ich, sie selbst schreiben fällt mir enorm schwer - warum weiß ich auch nicht.

Gruß Jan

Jannomag: Programme lesen und verstehen kann ich, sie selbst schreiben fällt mir enorm schwer - warum weiß ich auch nicht.

Aber ich: Mir fällt es manchmal auch enorm schwer. Das nennt man Gerechtigkeit :-)

Kannst Du eine der Sound-Dateien und evtl. den aktuellen Stand Deines Sketches posten? Ich guck auf jeden Fall drauf. Und wenn mir etwas Schlaues dazu einfällt, bekommst Du das zu lesen.

Gruß

Gregor

Wenn dir die Qualität ausreicht, wäre dies hier etwas. Andernfalls empfehle ich dir den DFPlayer mini.

Hier der Code:

#include "SD.h"
#define SD_ChipSelectPin 4
#include "TMRpcm.h"
#include "SPI.h"

TMRpcm tmrpcm;

void setup(){
tmrpcm.speakerPin = 9;
Serial.begin(9600);
if (!SD.begin(SD_ChipSelectPin)) {
Serial.println("SD fail");
return;
}

tmrpcm.setVolume(6);
tmrpcm.play("fb1.wav");
}

void loop(){  }

Ich bekomme es nichtmal hin, einen Taster einzubinden...liegt glaube ich daran, dass ich die Funktion von Arduino-Codes nicht ganz verstehe. Das Problem ist, dass ich kaum Motivation habe, mich da reinzusteigern, da mir Projekte fehlen. Das ist jetzt seit 3 Monaten mal wieder das erste, was ich mache und was neues ist auch nicht in Aussicht. :D

Die WAV-Dateien gibts hier.

Danke schonmal ;)

Jannomag: Ich bekomme es nichtmal hin, einen Taster einzubinden...liegt glaube ich daran, dass ich die Funktion von Arduino-Codes nicht ganz verstehe. Das Problem ist, dass ich kaum Motivation habe, mich da reinzusteigern, da mir Projekte fehlen. Das ist jetzt seit 3 Monaten mal wieder das erste, was ich mache und was neues ist auch nicht in Aussicht. :D

Taster ist doch wirklich einfach und in den Beispielen der IDE beschrieben.

Meinen Beitrag Post #2 gelesen ?

HotSystems: Taster ist doch wirklich einfach und in den Beispielen der IDE beschrieben.

Meinen Beitrag Post #2 gelesen ?

Taster bekomme ich schon irgendwie hin, wenn ich weiß, wie die Dateien auf der SD-Karte zufällig abgespielt werden.

Deinen Beitrag habe ich gelesen und wollte auch mal das Sketch vom ersten Link ausprobieren. Aber irgendwie bekomme ich da einen Fehler mit der Audio.h Bibliothek:

\Arduino\libraries\Audio-master\src/Audio.h:28:17: note:   no known conversion for argument 1 from 'short int [1024]' to 'const int16_t* {aka const int*}'

exit status 1
call of overloaded 'write(short int [1024], const int&)' is ambiguous

.

Der Sketch macht ja aber eigentlich das gleiche, wie meiner.

Und den zweiten Link kannte ich schon, ich wollte aber nix neues bestellen. Sieht aber etwas einfacher aus damit.

Jannomag: ...

Ohje. Solche Sachen potenzieren meine gute Laune ...

Welche Bibliotheken benutzt Du? Aus was für Quellen?

Jannomag: Und den zweiten Link kannte ich schon, ich wollte aber nix neues bestellen. Sieht aber etwas einfacher aus damit.

Egal. Du bleibst, bis das Problem gelöst ist :-)

So ein DF-Playerding habe ich seit ein paar Wochen hier herumliegen. Es tut, was es soll und kostet so wenig, dass es nicht diese Buchstaben hier wert ist.

Gruß

Gregor

Jannomag: Taster bekomme ich schon irgendwie hin, wenn ich weiß, wie die Dateien auf der SD-Karte zufällig abgespielt werden.

Bei meinem MP3-Player mit Titelanzeige habe ich die Dateien nummeriert, also beispielsweise "t102.mp3" benannt. Die Zahl habe ich mittels random() bestimmt.

gregorss:
Ohje. Solche Sachen potenzieren meine gute Laune …

Welche Bibliotheken benutzt Du? Aus was für Quellen?

Die einzige hinzugefügte Bibliothek für dieses Skript ist die Audio.h.
SD.h und SPI.h sind bereits integriert gewesen.

Realisieren wollte ich das ganze halt generell mit den Sachen, die ich momentan hier habe:
Arduino Nano, Micro SD Card Adapter, LM386 Modul (hatte ich mal im 10er Pack für 98cent bei Ali bestellt) und natürlich Lautsprecher, Taster und Co.

EDIT:
Hab mal weiter getestet und bin an folgendem Sketch hängen geblieben.
Jedoch funktioniert die Auswahl mit Taster nicht…jemand eine Idee, warum?
Wenn ich das so lese, dann sollte es eigentlich laufen :smiley:

// Include the SD library
#include <SD.h>

// use pin 
#define SD_CARD 4  

// This library plays the audio
#include <TMRpcm.h>         

// create an audio object
TMRpcm sample;   

  // LED pin
  int led = 3;      // the pin that the LED is attached to
  int brightness = 0;    // how bright the LED is
  int fadeAmount = 5;    // how many points to fade the LED by
  int button = 2;
  int buttonState;
  int prevButtonState;
  
// runs on startup 
void setup()
{
  // randomise
  randomSeed(analogRead(0));

  // set the speaker pin 
  sample.speakerPin = 9; 

  pinMode(button, INPUT);
  prevButtonState = digitalRead (button);
  
  // see if the card is ok
  if (!SD.begin(SD_CARD)) 
  {  
   return;   // It's not there, don't do anything
  }

 // quite loud
 sample.volume(9);
 
 // play the start up sound
 sample.play("tie1.wav"); 
 
}
 


void loop()
{

 
 
 buttonState = digitalRead(button);
 if (buttonState == HIGH) {
  switch (button == HIGH) {
    buttonState = random(8);

 
   case 1:
      sample.play("fb1.wav");
      break;
    case 2:
      sample.play("fb2.wav");
      break;
  case 3:   
    sample.play("fb3.wav");
      break;
  case 4:
    sample.play("fb4.wav");
      break;
    case 5:
      sample.play("fb5.wav");
      break;
    case 6:
      sample.play("fire1.wav");
      break;
    case 7:
      sample.play("fire2.wav");
      break;
    case 8:
      sample.play("fire3.wav");
      break;
  }
 }

 }

Für mich sieht die "Switch/Case"-Anweisung nicht richtig aus, jedenfalls merkwürdig. Versuche es doch mal nur mit einem sample, ohne switch/case.

Jannomag: EDIT: Hab mal weiter getestet und bin an folgendem Sketch hängen geblieben. Jedoch funktioniert die Auswahl mit Taster nicht...jemand eine Idee, warum? Wenn ich das so lese, dann sollte es eigentlich laufen :D

...

Ich habe zumindest loop() mal aufgehübscht und korrigiert:

void loop()
{
  buttonState = digitalRead(button);
  if (buttonState == HIGH)
  {
    byte blubb=random(8);
    switch (blubb)
    {
      case 1: sample.play("fb1.wav"); break;
      case 2: sample.play("fb2.wav"); break;
      case 3: sample.play("fb3.wav"); break;
      case 4: sample.play("fb4.wav"); break;
      case 5: sample.play("fb5.wav"); break;
      case 6: sample.play("fire1.wav"); break;
      case 7: sample.play("fire2.wav"); break;
      case 8: sample.play("fire3.wav"); break;
    }
  }
}

Gruß

Gregor

gregorss: Ich habe zumindest loop() mal aufgehübscht und korrigiert:

void loop()
{
  buttonState = digitalRead(button);
  if (buttonState == HIGH)
  {
    byte blubb=random(8);
    switch (blubb)
    {
      case 1: sample.play("fb1.wav"); break;
      case 2: sample.play("fb2.wav"); break;
      case 3: sample.play("fb3.wav"); break;
      case 4: sample.play("fb4.wav"); break;
      case 5: sample.play("fb5.wav"); break;
      case 6: sample.play("fire1.wav"); break;
      case 7: sample.play("fire2.wav"); break;
      case 8: sample.play("fire3.wav"); break;
    }
  }
}

Gruß

Gregor

Das scheint zu funktionieren! Ich hab nur ein Problem mit meinem Taster auf dem Breadboard...irgendwie scheinen da extreme Störsignale zwischen zu funken. Sobald ich die Hand nur in die Nähe des Unos (teste es am Uno, am ende kommts auf einen Nano), brummt der Lautsprecher etwas und das Skript scheint zufällig die Sounds abzuspielen.

Ich werde morgen mal nach einer Entstörung suchen - zu erst mal weg vom PC-Platz mit dem ganzen Krempel :D

Jannomag:
Das scheint zu funktionieren!
Ich hab nur ein Problem mit meinem Taster auf dem Breadboard…irgendwie scheinen da extreme Störsignale zwischen zu funken. Sobald ich die Hand nur in die Nähe des Unos (teste es am Uno, am ende kommts auf einen Nano), brummt der Lautsprecher etwas und das Skript scheint zufällig die Sounds abzuspielen.

Ich werde morgen mal nach einer Entstörung suchen - zu erst mal weg vom PC-Platz mit dem ganzen Krempel :smiley:

Hast du am Tasterpin einen PullDown-Widerstand (4,7 k) eingebaut ?

Jannomag: Ich werde morgen mal nach einer Entstörung suchen - zu erst mal weg vom PC-Platz mit dem ganzen Krempel :D

Also gut, Du darfst vor der endgültigen Lösung Deines Problems schlafen. Aber nur einmal! Und morgen stehst Du hier auf der Tasta^WMatte und dann sehen wir weiter.

Gruß

Gregor

So, funktioniert. Hatte den Widerstand vergessen - das ist das Thema mit "ich weiß noch nicht genau, wie der Arduino überhaupt funktioniert".

Dann hatte ich erst extreme Störgeräusche und die LED auf dem LM386 Modul hat geflimmert.

Das lag an der USB-Spannungsversorgung. Ich hab das ganze jetzt an mein Labornetzteil gehängt.

Bei 9V fährt der Arduino schön fix hoch und die Störungen sind weg.

Alles funktioniert, so wie es soll!

Jetzt muss ich nur noch einen stärkeren Lautsprecher nehmen - hab kurzer Hand einen 0,5W Lautsprecher auf einer alten Basistation vom Telefon ausgebaut...da war er irgendwie etwas lauter.

Jemand dazu noch ne Idee? Sollte klein sein.

Nun muss ich das ganze so klein wie möglich verbauen - hab da auch ne Idee, wofür ich mal jemanden mit nem 3D Drucker finden muss :D

Vielen, vielen Dank bis hier hin!

Wenn ich soweit fertig bin, gibts ein Video...

Jannomag: Alles funktioniert, so wie es soll!

Hat mir also Deine Schlafphase einen Strich durch die Helferrechnung gemacht. Nunja, Schlaf ist die alleroberbeste Quelle für Kreativität. Ich hoffe, Du hast wenigstens von Widerständen geträumt :-)

Jannomag: Wenn ich soweit fertig bin, gibts ein Video...

Wenn Du keinen neuen Thread dafür aufmachen möchtest, postest Du in diesem Thread oder schickst eine PM.

Gruß

Gregor

Jannomag: So, funktioniert. Hatte den Widerstand vergessen - das ist das Thema mit "ich weiß noch nicht genau, wie der Arduino überhaupt funktioniert".

Dann hatte ich erst extreme Störgeräusche und die LED auf dem LM386 Modul hat geflimmer.

Dann unbedingt merken. Jeder Eingangspin des Arduino, der an einen Taster/Schalter o.ä. geführt wird, muss mit einem Pullup- oder Pulldownwiderstand auf ein festes Potential gebracht werden. Ob Pullup- oder Pulldown hängt von deiner Abfrage im Sketch oder der externen Beschaltung ab.

Wenn du undefinierbare Störungen im Arduino hast, liegt es oft an fehlenden oder zu großen Widerständen. Bei Pullup-Widerständen kannst du auch die internen Pullups einschalten.

Jannomag: Jetzt muss ich nur noch einen stärkeren Lautsprecher nehmen - hab kurzer Hand einen 0,5W Lautsprecher auf einer alten Basistation vom Telefon ausgebaut...da war er irgendwie etwas lauter.

Ich habe diesen Mono-Lautsprecher (3W 4 Ohm) mit Gehäuse verwendet.

HotSystems: Dann unbedingt merken. Jeder Eingangspin des Arduino, der an einen Taster/Schalter o.ä. geführt wird, muss mit einem Pullup- oder Pulldownwiderstand auf ein festes Potential gebracht werden. Ob Pullup- oder Pulldown hängt von deiner Abfrage im Sketch oder der externen Beschaltung ab.

Wenn du undefinierbare Störungen im Arduino hast, liegt es oft an fehlenden oder zu großen Widerständen. Bei Pullup-Widerständen kannst du auch die internen Pullups einschalten.

Als Elektriker verstehe ich das, aber als Elektriker fällt es mir schwer so zu denken und mir das zu merken, da ich sonst mit anderem Arbeite :D

agmue: Ich habe diesen Mono-Lautsprecher (3W 4 Ohm) mit Gehäuse verwendet.

Auch mit einem einfachen LM386 Verstärker, oder braucht man mehr "wumms"?

Jannomag: Als Elektriker verstehe ich das, aber als Elektriker fällt es mir schwer so zu denken und mir das zu merken, da ich sonst mit anderem Arbeite :D

Dann ausdrucken und neben den Monitor hängen.