Go Down

Topic: [Projekt-Idee] Arduino Drum-Computer  (Read 773 times) previous topic - next topic

RudiDL5

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




postmaster-ino

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

Tommy56

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

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

gregorss

... 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
Können kommt von kunst.

agmue

  • 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.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Doc_Arduino

#5
Jan 11, 2019, 06:56 pm Last Edit: Jan 11, 2019, 06:59 pm by Doc_Arduino
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.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

agmue

#6
Jan 11, 2019, 07:53 pm Last Edit: Jan 11, 2019, 08:03 pm by agmue
... 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 :)
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Tommy56

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

AxelMunshine

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.

Serenifly

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

postmaster-ino

#10
Jan 11, 2019, 09:03 pm Last Edit: Jan 11, 2019, 09:07 pm by postmaster-ino
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
Quote
4Mbit (265Kx16)
Die 265 sind eher 256, wohl ein Freudscher :)
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

RudiDL5

#11
Jan 12, 2019, 12:35 pm Last Edit: Jan 12, 2019, 12:48 pm by RudiDL5
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


Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

gregorss

... 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
Können kommt von kunst.

agmue

... 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.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Go Up