Musik von Tetris im Hintergrund abspielen lassen

Hallo zusammen,

Ich habe wieder mal ein Problem mit dem Tetris. Ich dachte mir man sollte auch die Tetris Musik im Hintergrund ablaufen lassen. Ich habe auch die Melodie mit Pausen und Tönen und allem, allerdings weis ich nicht wie ich das Lied abspielen kann. Soll ich das auch mit den millis(); machen? Oder hat jemand eine bessere Idee? Wenn es nicht funktionieren soll ist das kein Problem da ich eh eine eigene Platine für den Tetristisch entwickle, da könnte ich auch einen zweiten Arduino Uno Klon auf die Platine pcken.

Vielen Dank schonmal im Vorraus.

MfG bdorer

Vor längerer Zeit habe ich mit dem Adafruit "Music Maker" MP3 Shield einen MP3-Player gebaut. Vorteil: Voller zugriff des Arduino auf die SD-Karte beispielsweise für den Text aus einer Textdatei. Nachteil: Teuer und ein Teil der Rechenkapazität des Arduino wird für die Wiedergabe benötigt. Ob ein Tetris nebenbei noch geht, kann ich leider nicht einschätzen.

Alternativ gibt es Platinen, die selbständiger agieren, da kann der Arduino nur den ersten oder zweiten Titel starten und stoppen. Beispiel wäre der DFPlayer.

Weitere Links: Freaduino MP3 Music Shield VS1053 MP3 breakout board

Vielen Dank schonmal,

Dachte aber eher in die Richtung das Lied an sich auf den Arduino zu speichern, da es sich dann einfach "elektronischer" bzw. "orginaler" anhört als eine MP3 Datei, ich habe wie gesagt auch schon die Frequenzen und alles das Problem ist nur das ich eben nich weis wie ich es ablaufen lassen soll.

MfG bdorer

bdorer: Soll ich das auch mit den millis(); machen?

Das ist der (vielleicht abgesehen von Interrupt-Programmierung) der beste Weg. Deine Noten und Längen speicherst du in einem Array. In jedem Loop-Durchlauf prüfst du, ob die nächste Note gespielt werden muss. Deine Loop muss möglichst schnell ablaufen (ohne Delays). Ein Musik-Player-Modul ist trotzdem eine Überlegung wert. Es kann ja eine elektronische Version der Tetris-Melodie und nicht eine Orchesterfassung abspielen.

Ich habe auch die Melodie mit Pausen und Tönen und allem

In welchem Format hast du den Sound vorliegen? *.MID *.MP3 oder hast du schon die tatsächlichen Frequenz-Werte vorliegen? Danach entscheidet sich nämlich, wie du vorgehen "könntest".

Auf den damaligen Game-Boy Versionen etc. wurde für dieses Gedudel ein separater Sound-Chip genutzt, dessen Programmierung wieder ein Kapitel für sich ist. Wenn du dir die Originale "aufmerksam" anhörst wirst du feststellen, dass einige musikalische Ausmalungen drin sind wie Akkorde, Vibrato usw. Hierfür wird ein Arduino nicht wirklich "mal eben" drauf einzustellen sein.

https://www.youtube.com/watch?v=oYto8hKZpSY (Original) https://www.youtube.com/watch?v=nJTDglKu-DQ (Echt cooler Remix!)

Wenn der Tisch wirklich "gut" werden soll, dann kann ich mich meinen Vorrednern nur anschließen und würde einen DFPlayer-Mini in das System integrieren. Der wiederum bietet die Möglichkeit, bei Bedarf das Gedudel umzuschalten und einen anderen Hintergrund-Sound abspielen lassen. Einzig die akustischen Signale bei "herunterfallen" bzw. "Zeile löschen" könnten eventuell via "tone()" dazugemischt werden.

Wirklich alles in einen Arduino zu bringen sehe ich als sehr problematisch an. Der ist dafür einfach nicht ausgelegt.

(ich stelle mir gerade den Tisch vor und dieser coole Remix im Hintergrund - da käme echt Party-Stimmung auf ...)

Man merkt gleich, Rudi ist auch Musiker :D

:smiley: kennst mich ja :smiley:

Also ich habe die tatsächliche Ton Frequenz die ich mit tone(); ausgeben wollte.

Joa, wenn dir eine monophone und trockene (langweilige) Melodie ausreicht, was steht dem dann im Wege?

Schreibe die einzelnen Notenwerte in ein langes word-Array, die Notendauer in ein anderes word-Array gleicher Länge. Danach brauchst du nur z.B. innerhalb einer For-Schleife beide Arrays auslesen und diese beiden Werte an die Funktion “tone(pin, frequenz, duration)” übergeben:

https://www.arduino.cc/en/Reference/Tone

Es geht auch ohne den Parameter “duration”, du musst halt nur dafür sorgen, dass die Töne dann über die vorgegebene Spieldauer an den relevanten Pin übertragen werden. Entweder anfangs “zum Üben” mittels (hust, sorry) “delay” (was natürlich keinen Spielbetrieb mehr zulässt), oder du arbeitest besser mit millis(). Dann kannst du nebenbei deine Tasten abfragen und die LEDs steuern.

Wenn dann allerdings “lebendiger” Sound kommen soll … siehe oben …

Hier nur ein Beispiel:

#define pin 4

word musik[15] = {262,294,330,349,392,440,494,523,587,659,698,784,880,988,1046};
word duration  = 15;

void setup()
{	
  pinMode( pin, OUTPUT );
  for( byte j = 0; j < 3; j++ )
     {
       for( byte n = 0; n < 15; n++ )
          {
            tone( pin, musik[n] );       
            delay(duration);
          }
     }
  noTone(pin);    
}

void loop()
{
}

Vielen Dank Rudi :smiley:

MfG bdorer

Keine Ursache

Wenn der Tisch fertig ist kannst du ihn ja auf dieser Seite vorstellen: https://forum.arduino.cc/index.php?topic=372623.0 Bin gespannt... ;)

Das werde ich machen :D

Hallo Rudi,

ich hoffe ich darf deine kurze Melodie auch einbinden. Ich würde sie gerne abspielen wenn eine Reihe gelöscht wird.

PS: Im Anhang ist ein aktuelles Bild des Tetris, so langsam wird es besser :smiley:

mfg bdorer

Rudi hat sich nach seinem Umzug noch nicht wieder im Forum oder sonstwie gemeldet. Ich hoffe, es geht ihm gut und es liegt nur an einer fehlenden Internetverbindung.

agmue: Rudi hat sich nach seinem Umzug noch nicht wieder im Forum oder sonstwie gemeldet. Ich hoffe, es geht ihm gut und es liegt nur an einer fehlenden Internetverbindung.

Oh okey ja das hoffe ich auch :/

Dann noch eine andere Frage, ich habe einen seperaten Arduino Uno der für die Musik zuständig ist, da das Hauptprogramm dem Timer für den Befehl tone() benötigt.

Daher wollte ich mal fragen ob es möglich ist eine WAV-Datei oder eine MP3 Datei ausgeben kann. Wenn es sein müsste, was wahrscheinlich passieren wird, kann ich auch gerne ein SD-Kartenleser auf meine Platine bauen. Auch ein ATmega1284 ist möglich falls das gehen sollte.

Eine weitere Idee wäre ob ich zwei ATtiny84 oder 85 parallel die Musik, also einer Violin- und der andere Bassschlüssen ausgeben kann. Würde das funktionieren?

Vielen Dank im Vorraus.

Eine WAV oder MP3 Datei kannst du mit einem DFPlayer mini ausgeben. Das wäre bestimmt die einfachste Lösung. Diese kannst du auch mit einem ATtin85 ansteuern.

bdorer: Daher wollte ich mal fragen ob es möglich ist eine WAV-Datei oder eine MP3 Datei ausgeben kann.

Siehe #1, wolltest Du zu dem Zeitpunkt aber nicht.

agmue: Siehe #1, wolltest Du zu dem Zeitpunkt aber nicht.

Lieber später, als nie. ;)

agmue: Siehe #1, wolltest Du zu dem Zeitpunkt aber nicht.

Jaaa sry bin nun den Weg der Besserung durchlaufen :D