[Projekt-Idee] Arduino Drum-Computer

Hallo Freunde der Bits und Bytes,

in den vergangenen paar Jahren „Grundlagenforschung“ auf dem Arduino habe ich recht erfolgreich kleinere oder größere Sketches und Bastelarbeiten realisiert. Vor allen Dingen mein SudokuSolver.UNO, mein DF-Player.85, sogar ein halbwegs ordentlich spielendes Schachprogramm auf dem 328p wurde Realität. Nach all diesen „netten Spielereien“ dachte ich mir aber, mal ein „nützlicheres“ Projekt zu starten.

Zielsetzung:

Als alter Gitarrist schwebt mir vor - einen vom Arduino gespeisten Drum-Computer zu bauen. Hierbei erhoffe ich mir zur Ergänzung meiner eigenen Ideen - eure Gedanken zu Verbesserungen, Vereinfachungen, oder auch Hinweise auf Denkfehler bzw. eventuelle Hürden.

Stand der Dinge:

Ich kann bereits einen Mega 8a, 168a oder 328p mit einem WAV-Schnipsel bestücken und auf Tastendruck z.B. ein „Snaredrum“ abrufen. Das klappt ebenso für ein „Kickdrum“ oder für „Cymbals“. Die Auswahl des µC richtet sich nach dem Umfang der einzelnen WAV-Samples. Der Abruf bringt diese Daten an einen 8-Bit Port, aus dem mittels DA-Wandler ein analoges Signal erzeugt und per OP-Amps abgetastet wird. Am Ende werden alle Kanäle gemischt, gehen auf einen Verstärker und machen „ordentlich Lärm“. Klappt bisher alles wunderbar und mit recht gutem Klang! In Zukunft sollen diese „Instrumente“ parallel zu den Tastern auch automatisch aktiviert werden können. Die Programmierung der WAV-Ausgabe geschieht (hust) in Assembler - und benötigt je Instrument lediglich etwa 200 Bytes inkl. analoger Poti-Abfrage um die Tonhöhe der „Trommeln“ zu manipulieren. Der Rest des Controllers nimmt die WAV-Rohdaten auf.

Problem dabei:

Da ich erst 3 solcher „Instrumente“ realisiert habe, gehen meine Gedanken derzeit in Richtung „IC-Grab“, weil ich gerne bis zu 16 „Instrumente“ parallel verarbeiten möchte. Zusammen mit einem übergeordneten Steuer-Controller für eine geplante Automatik wären das nach aktueller Schätzung 16 µC im Format DIP 28 plus 1x DIP 40 für die Steuerung, sowie die jeweiligen DA-Bausteine und OP-Amps. Besser wäre es, wenn ich z.B. einen Tiny 84 je Instrument einsetzen könnte (spart einiges an Platz). Die WAVs passen dann aber nur zu einem Teil in die max. 8 kByte des Tiny-FLASH (reicht lediglich für „Snare“, „Cowbell“ oder auch „Tamburin“). Daher auch die größeren Contoller mit 16 bzw. 32 kByte. In der Summe macht mich dieses „IC-Grab“ aber etwas unsicher...

Meine Frage(n) dazu:

  • Kennt jemand eine geeignete Bibliothek, die ich für die Umwandlung von MP3-Samples nutzen könnte?
  • Hat jemand einen Tipp, wie groß so ein Decoder ist und evtl. wie er programmiert wird?
  • Wird dadurch der Einsatz der 8k Tinys wiederum illusorisch?
  • Habe ich vielleicht noch irgend etwas vergessen, um dieses Projekt „generell“ zu realisieren?
  • Oder hat jemand eine Idee, wie ich das ganz anders lösen könnte (außer „Fertiggerät kaufen“)?
  • Wäre PWM eine günstigere bzw. geeignetere Lösung?
  • Wie funktioniert das in diesem Fall mit der Umwandlung in Töne?

Vielen Dank vorab für eure Zeit und
beste Grüße
Rudi

Hi

Das liest Sich doch sehr interessant - ich würde einer Vorstellung mit Spannung entgegen sehen - auch die anderen genannten 'nicht sonderlich sinnvollen' Programme sind weit über meinem Niveau.

Du schreibst, daß Du für das Abspielen Assembler benutzt - geht es hierbei um die schiere Geschwindigkeit, oder warum wähltest Du diesen Weg?
(auch daran hätte ich Interesse, Inline-Assembler geht mir gar nicht in den Kopf)
Als Datengrab könnte man FRams nutzen - Die gibt's wohl auch parallel, womit Du ggf. direkt Deine Byte-Werte zum DAC leiten kannst.
https://www.fujitsu.com/us/Images/SPBG_FRAM_Overview_BR.pdf
Da Du die Daten aber wohl <100.000 Mal aufspielen willst, sollte ein externes EEprom ebenso gehen.

MfG

Bei Tönen am DAC könnte ich mir vorstellen, dass die Geschwindigkeit eine Rolle spielt. FRAM sind schneller, als EEPROM.

Gruß Tommy

RudiDL5:
... vom Arduino gespeisten Drum-Computer ...

Ich habe Dein Posting nicht vollständig gelesen, evtl. poste ich hier Überflüssiges.

Wie wär's, die Tonerzeugung/Ausgabe nicht mit dem Arduino zu machen, sondern ihn „lediglich“ MIDI-Befehle senden zu lassen? Tonerzeuger wäre dann ein MIDI-Expander bzw. PC. Du wärst erheblich flexibler, was die Sounds angeht (SW-Synthesizer à la Zynaddsubfx oder ein Programm, das Soundfonts benutzt).

Gruß

Gregor

RudiDL5:

  • Kennt jemand eine geeignete Bibliothek, die ich für die Umwandlung von MP3-Samples nutzen könnte?

Eine verlustbehaftete Komprimierung mag für ein Smartphone seine Berechtigung haben, aber für ein Instrument der alten Schule erscheint mir das vollkommen unangebracht. Also FRAM oder einen Mega 2560.

Ich bin kein Musiker, also nur so meine spontane Meinung.

Hallo Rudi,

die Frage wäre ob die Zugriffslatenzen bei externen angebundenem Speicher eine Rolle spielen oder nicht. Man muss ja erst auf den externen Speicher zugreifen, auslesen und am eigenen µC wieder ausgeben. Wieviel Speicher wird denn benötigt? Falls 16kB RAM und 128kB Flash reichen sollten, wäre der lötfreundliche ATmega1284P sicherlich eine Option. Oder einen Teensy oder ESP32.

Doc_Arduino:
... wäre der lötfreundliche ATmega1284P sicherlich eine Option.

Das finde ich einen guten Vorschlag.

Im Datenblatt lese ich "8-channel, 10-bit ADC", möglicherweise ließe sich damit auch ein Ton erzeugen?

EDIT: Ja danke, es grüßt der Legasteniker :slight_smile:

ADC != DAC

Gruß Tommy

Ein sehr allgemeiner Tipp:
Wenn es um Musikcontrolling geht, geht es ja auch immer um MIDI.
Bei einem Drumcomputer könnte ich mir da die Einbindung in eine DAW Software vorstellen oder die Verbindung zu anderen MIDI Instrumenten oder Controllern.

Aus eigener Erfahrung kann ich da zu den "grossen" kleinen Bruder vom Arduino raten, den Teensy.
Der hat eine eigene MIDI Schnittstelle und braucht kein Zusatzprogramm zur Kommunikation unter MIDI.

Tommy56:
Bei Tönen am DAC könnte ich mir vorstellen, dass die Geschwindigkeit eine Rolle spielt. FRAM sind schneller, als EEPROM.

Das ist erst mal nur die reine Zugriffszeit auf den Speicher. Man muss aber noch die Geschwindigkeit des Busses berücksichtigen. SPI ist um ein vielfaches schneller als I2C

Hi

In dem von mir oben verlinktem PDF wird neben I²C und SPI auch noch Parallel genannt.
Auch stehen die möglichen Frequenzen dabei (Seite 2/4).
Dort gibt's einen Typ mit

4Mbit (265Kx16)

Die 265 sind eher 256, wohl ein Freudscher :slight_smile:
Das wären 512KB (wohl an 16 Leitungen ?)
Bei 6,6MHz, dafür aber 16 Leitungen 'am Stück' - (von mir aus auch nur 8 ) - schlägt Das die SPI-Versionen dennoch um Längen.
Habe nichts Näheres über den parallelen Anschluss gesehen.

MfG

Hallo zusammen,

zunächst erst einmal recht herzlichen Dank für die freundlichen Kommentare zu meiner Idee. Ich habe daraus bereits Gedankengänge für mich gewinnen können, die für mein Projekt geeignet sind. Vielleicht muß ich aber auch ein wenig mehr ausholen, was hinter dieser Idee eigentlich steckt, wo meine Motivation her kommt und was ich im Endeffekt beabsichtige:

Ende er 70er Jahre hatte ich bereits einen modularen Synthesizer gebaut ( „Elektor Formant“ ) und eine „Elektor Drumbox“. Diese Geräte nutzte ich (zusammen mit meiner damaligen Band) auch als Begleitung für private Aufnahmen. Ab etwa Mitte der 80er konnte ich diese aus beruflichen Gründen nicht mehr nutzen (Netzwerke und Programmierung). Das ganze Zeugs wanderte zunächst in den Keller meiner Eltern – wo es lange Jahre vor sich hin gammelte – und später entsorgt worden ist.

„Heute“ stehe ich knapp vor der Rente, habe endlich etwas mehr „Ruhe“ gefunden und suche eine neue Herausforderung. Daher auch vor etwa 4 Jahren mein langsam aufkommendes Interesse für „Mikrocontroller“, welches ich bis heute eigentlich recht gut in den Griff bekommen habe.

Die Idee zu dem o.g. Drum-Computer entstand aus der Tatsache, dass ich derzeit lediglich nur noch eine akustische Gitarre besitze. Dieses Drum-Gerät soll eigentlich in ein größeres Projekt eingebunden werden, an dessen Ende ein Synthesizer wie der o.g. „Formant“ stehen soll, zusammen mit dem geplanten Drum-Computer und einem Sequenzer. Das muss aber alles noch warten, weil ich zur Zeit noch keinen Platz dafür schaffen konnte. Also erst mal „klein anfangen“ und die Rhythmus-Einheit für mein Gitarren-Spiel realisieren. Alles soll später im Grunde unabhängig vom PC nutzbar sein.

@gregorss & @axelMunshine
Die angesprochenen MIDI-Dinge werde ich im Auge behalten und bei Bedarf untersuchen und einbinden. Zur Zeit kann ich das aber noch nicht verwenden weil noch keine MIDI-Geräte vorhanden sind.

@agmue & @doc_arduino
Ich sehe ein dass MP3 wohl nicht gut ist – ich höre bei einigen Versuchen deutlich den qualitativen Unterschied heraus -also bleibt es wohl bei WAV. Den lötfreundlichen 1284p habe ich schon gut „im Griff“ und der reicht von der Kapazität für einige „Trommeln“ deutlich aus.

@Serenifly, @Tommy56 und @postmaster_ino
Die Geschwindigkeit ist gar nicht soooo sonderlich kritisch: Ich programmiere halt aus „alter Gewohnheit“ sehr gerne in Assembler und bewahre mir dadurch den vollständigen Überblick, was innerhalb der µC „wirklich“ geschieht – ohne durch Bibliotheken, Interrupts etc. an der Nase herumgeführt zu werden. Die bisherigen „Trommeln“ laufen sogar nur mit 8 MHz internem Takt und ich muss je gesendetem DAC-Byte sogar noch eine Art längeres „Delay“ einbauen, um auf die Sample-Frequenz von 44,100 KHz „runter zu kommen“. Dieses „Delay“ kann ich aber in gewissen Grenzen mit einem Poti regeln und kann dadurch die Tonhöhe +/- einer Oktave anpassen. Nur die Sache mit den FRAM ist bisher an mir vorbeigegangen... und ich kenne mich damit (noch) gar nicht aus. Aber was nicht ist wird noch werden.

Nochmals besten Dank für die interessanten Statements. Falls Interesse besteht halte ich euch auf dem Laufenden und verbleibe mit schönen Grüßen

Rudi

Hallo Rudi,

danke für die ausführliche Rückmeldung. Gern kannst Du uns auf dem Laufenden halten.
Wenn der Speicherzugriff nicht so zeitkritisch ist, kannst Du auch I2C-FRAM benutzen.
Hier hatten wir eine Diskussion dazu. In #22 ist die funktionierende Fassung der Zugriffslib.

Gruß Tommy

RudiDL5:
... weil noch keine MIDI-Geräte vorhanden sind.

Da Du das mit der Musik schon länger machst, kennst Du vermutlich die Vorteile von MIDI. Dass noch keine MIDI-Geräte vorhanden sind, ist IMO nur ein schwaches Argument dafür, es nicht mit MIDI zu machen.

Der Standard ist inzwischen ja nicht mehr taufrisch und entsprechende Geräte kosten kein Vermögen mehr. Die MIDI-Lösung ist erheblich flexibler und komfortabler als eine Lösung, bei der die Tonerzeugung vom Arduino übernommen wird.

Wie auch immer, auf meine Unterstützung kannst Du Dich verlassen. Eine Zeit lang nicht kreativ sein zu können war für mich die schlimmste Sache, die ich bislang erlebt habe. Hätte dieser Zustand länger angedauert, würde ich die Radieschen jetzt von unten betrachten (soll heißen: Ich wäre gesprungen).

Und ja, bitte halte uns auf dem Laufenden!

Gruß

Gregor

RudiDL5:
... ich höre bei einigen Versuchen deutlich den qualitativen Unterschied heraus -also bleibt es wohl bei WAV.

Gute Entscheidung! Menschen mit Hörschädigung durch Alter oder Krankheit bemerken die bei der Komprimierung entstandenen Lücken. Ein semiprofessionelles Instrument sollte daher diese Lücken vermeiden.

Man kann ohne weiteres aus nem UNO (ein ProMini tuts auch, wenn es wirklich billig werden soll) ein Midi-Interface bauen.
Das ist dann quasi nur die Schreibmaschine, mit z.B Piezosensoren lassen sich da ohne weiteres Touchpads basteln, die auch wirklich gut funktionieren.
Falls es noch bissel nach Schlagzeug aussehen soll (und man die Sensoren nich selber bauen will)- für die Playstation oder irgend so ne Konsole gibts so ein Ding fertig, das braucht man nur auf Midi umbauen.
Da gibts irgendwo auf Youtube was zu....
Dann nimmt man nen billigen USB-Midi-Adapter (gibts fertig, für nen Zehner), und macht den Rest im Laptop.
Beispielsweise mit Hydrogen, ein sehr leistungsfähiger Schlagzeug-Synthie, für den auch grosse Mengen an Samples verfügbar sind. Gratis.

Oder, du nimmst eine DAW- gratis wäre z.B. LMMS (auch für Windows verfügbar), dort kannst du Soundfonts einbinden, mit den entsprechenden VST-Plugins auch komplette Soft-Synthesizer.

Noch ne Alternative, wenn das Ganze transportabler werden soll: ein Raspberry. Auf den Dingern laufen so einige Synthesizer inzwischen (Hydrogen weiss ich noch nicht, bin noch nicht zu gekommen, das zu probieren), und Soundfonts kann der auch handlen. Dadurch reicht QSYnth schon aus....und das läuft auf nem Pi3 problemlos, in Verbindung mit Jack.

Als Schreibmaschine genügt hier ebenfalls irgendein Midi-Eingabegerät, zusammen mit nem Midi-USB-Kabel.
Damits auch nach was klingt, dann noch irgendeine USB-Soundkarte dran- sowas ist ab 10-15€ zu haben (je nach Ansprüchen auch fürs zwanzigfache).
Sowas kann man dann auch schon mit ner kräftigen Powerbank betreiben.

Hallo zusammen,

das im Ruhrgebiet verregnete WE lieferte mir den notwendigen Freiraum viel zu lesen und zu stöbern. Im Grunde habe ich meine Gedanken "MP3" und "PWM" endgültig verworfen und bleibe bei WAV. Es ist schon ein deutlich hörbarer Unterschied.

Bei den FRAMs habe ich ein neben dem genannten Beitrag ein Datenblatt zu Rate gezogen - und es erinnert mich stark an meine bisher erfolgreichen Versuche mit EEPROMS. Wie sich die Zugriffszeiten via I2C oder SPI entwickeln muß ich durch weitere Versuche ermitteln.

Und die freundlich angebotene Unterstützung in Bezug auf MIDI kommt mir sehr gelegen. Ich gebe zu dass ich hierbei noch einiges an Defiziten habe - immerhin hatte ich in den letzten vielen Jahren keine Verwendung dafür. Daher stehe ich damit erst am Anfang und freue mich auf weitere Korrespodenz. Spontan fällt mir dazu ein, dass ich auf jeden Fall darauf zurückgreifen werde, weil ich demnächst einen "MIDI2CV-Konverter" bauen will. Den brauche ich um die zukünftige Klaviatur an den Synthi anschließen zu können.

Auf jeden Fall bleibt das Ziel bestehen, vollständig unabhängig vom PC bleiben zu können. Die Kosten spielen dabei vielleicht eine weniger erhebliche Rolle. Natürlich auch - aber das mit der Kreativität hatte Gregorss schon erstaunlich vergleichbar mit der eigenen Situation angesprochen. Als "notorischer Bastler" schwärme ich davon, so ein modulares Ding mit vielen Reglern und Patchmöglichkeiten zu bauen. Auch wenn alles im PC oder so laufen könnte - ich habe selbst schon FL-Studio im Einsatz und habe damit einiges gut hörbares produziert - aber es ist alles für mich "nichts zum anfassen und drin herumrühren" :wink:

Einstweilen also herzliches Dankeschön an alle für die motivierenden Beiträge.
Da das obige sich zu einer "Dauerbaustelle" entwickelt - wird es eine
Weile brauchen bis ich wieder von mir hören lassen.

Beste Grüße
Rudi

RudiDL5:
Im Grunde habe ich meine Gedanken "MP3" und "PWM" endgültig verworfen und bleibe bei WAV. Es ist schon ein deutlich hörbarer Unterschied.

Hallo Rudi,

das interessiert mich jetzt näher. Mit welchen mp3 Bitraten hast du verglichen? Gewöhnlich hört man ab 128kBit und spätestens ab 192kBit keinen Unterschied mehr und spart eine Menge Speicherplatz im Vergleich zu wav. Wie es mit der Dekodierung aussieht weiß ich allerdings nicht.

Hi Doc_

gute Frage, nächste Frage... :wink: Da ich in meinen Programmen in der Vergangenheit nur mit "Standard"-Einstellungen gearbeitet hatte, habe ich auf die Bit/s bisher nur selten geachtet... (vielleicht beim WAV-Export aus "FL-Studio" heraus). Ich habe dennoch nachgesehen - und bin für eine längere Test-Rhythmussequenz zu folgenden Ergebnissen gekommen:

Dateigröße WAV: 1,72 MB bei 1411 kBit/s
Dateigröße MP3: 185 kByte bei 446 kBit/s
Die Umwandlung erfolgt innerhalb "Audacity" mit "Lame-Decoder"
Modus "Voreinstellung", 170-210 kBit/s
Sample Rate 44100 Hz

Vielleicht habe ich hier schon einen Fehler gemacht. Denn dass ich noch mehr Einstellmöglichkeiten in Bezug auf Qualität habe - hatte ich leider ... leider erst gerade entdeckt. Ich hatte vor zwei Jahren dem Kollegen "agmue" ein paar meiner eigenen Songs als MP3 geschickt - und da ist mir im Kopfhörer aufgefallen, dass bei "genauem Hinhören" das eine oder andere leise "Knirschen" (gegenüber der "originalen" WAV) im Hintergrund war.

Das alles ist aber zunächst nicht so wichtig, denn die einzelnen "Trommeln" lassen sich noch "gerade eben" in z.B. einen 328P bringen. Für "kleinere" WAVs (z.B. ein "Snare-Drum") konnte ich sogar einen Mega 8A einsetzen. Ein Sketch (oder eine Assembler-Routine) für das Lesen der MP3-Daten habe ich im Moment noch nicht. Ich bau die geplante "Schießbude" erst mal in der "einfachen" Version fertig. Die anderen Vorschläge kommen im Laufe der Zeit hinzu.

Ich möchte halt zunächst einen kleinen "Start" hinlegen, den man schon "hören" kann :slight_smile: Gelingt es mir "akzeptabel", geht es an die nächsten Schritte und Verbesserungen.

Schöne Grüße
Rudi

Hallo Rudi,

also das mp3 Soundfile an sich ist okay, nur beim codieren kamen aus unbekannten Gründen irgendwelche Knackser rein. Alles andere hätte mich gewundert. Hoffe ich habe das richtig interpretiert. Den Knacksern nachzugehen kostet natürlich viel Zeit. Wenn du mit der wav Größe klar kommste, dann ist ja gut. :wink: