Arduino Audioterror - · PDF file- Seite 1 - Arduino Audioterror Daniel Fontes Orionstr. 1...

6
- Seite 1 - Arduino Audioterror Daniel Fontes Orionstr. 1 D-85302 Gerolsbach +49 89 1250900310 [email protected] Michael Ilg Jakoberstraße 18 D-86152 Augsburg +49 821 3195934 [email protected] Abstract Arduino Audioterror ist eine Installation, bestehend aus einem 4-Spur Stepsequenzer für Samples und ei- nem FM-Synthesizer Modul und ist im Rahmen einer Studienarbeit zur Vorlesung „Interaktion“ bei Professor Thomas Rist an der HS Augsburg entstanden. Eine Vi- deo-Demonstration ist unter http://www.youtube.com/ watch?v=lfoqBAUoGM4 zu sehen. Klassifizierung & Einordnung Signal analysis, synthesis, and processing General Terms Performance, Experimentation, Sound Synthesis 1. MOTIVATION Diese Arbeit entstand zum einen aufgrund des gene- rellen Interesses an der Fusion aus Programmcode mit selbst erstellter Hardware und ganz privatem Interesse an Musik. Zum anderen beschäftigt sich Michael Ilg aufgrund des audio-visuellen Projektes ‚SOUVI‘ zur Zeit der Erstellung dieser Studienarbeit intensiver mit dem Thema Soundsynthese, weshalb die Erstellung eines ersten eigenen elektronischen Musikgerätes für beide Autoren eine persönliche Bereicherung darstellt. Die aus dieser Studie hervorgehenden Ergebnisse sind von Interesse für Elektronikbastler und Musiker, die sich mit Soundsynthese beschäftigen, da zum einen grund- legende Elektronikbausteine zur Klangsynthese, als auch erweiterbarer, auf langsamer Hardware effizient funktionieriender Code erstellt wurden. 2. Verwandte Arbeiten Das erste Synthesizer-Projekt, das in Verbindung mit dieser Studienarbeit genannt werden muss, ist die Ar- duino Punk Console von Beavis Audio Research. Die Bauanleitung dieses Projektes diente als Vorlage zur Erstellung eines ersten Testgerätes, durch welches Er- fahrung sowohl im der Klangsynthese mit Hardware, als auch im Umgang mit dem Arduino Board gewonnen wurde. Es handelt sich hierbei um einen 8-Step Syn- thesizer nach dem Vorbild der legendären Atari Punk Console. Das zweite Projekt wurde zu Rate gezogen um die Au- dioquallität unserer Installation zu verbessern. Bisher wurde der Ton mittels Pulsweitenmodulation erzeugt. Collin Cunningham erklärt ausführlich wie man mit Hil- fe eines selbstgebauten Digital-to-Analog-Konverters 8-Bit Sound mit einer maximalen Abtastrate von 22 KHz (mono) generieren kann. Mit dieser Methode wur- de es uns ermöglicht, Sinuskurven zu erzeugen. 8-Bit-Sinuskurve erzeugt mittels DAC

Transcript of Arduino Audioterror - · PDF file- Seite 1 - Arduino Audioterror Daniel Fontes Orionstr. 1...

Page 1: Arduino Audioterror - · PDF file- Seite 1 - Arduino Audioterror Daniel Fontes Orionstr. 1 D-85302 Gerolsbach +49 89 1250900310 daniel@fontes.biz Michael Ilg Jakoberstraße 18 D-86152

- Seite 1 -

Arduino Audioterror

Daniel FontesOrionstr. 1

D-85302 Gerolsbach+49 89 1250900310

[email protected]

Michael IlgJakoberstraße 18

D-86152 Augsburg+49 821 3195934

[email protected]

AbstractArduino Audioterror ist eine Installation, bestehend aus einem 4-Spur Stepsequenzer für Samples und ei-nem FM-Synthesizer Modul und ist im Rahmen einer Studienarbeit zur Vorlesung „Interaktion“ bei Professor Thomas Rist an der HS Augsburg entstanden. Eine Vi-deo-Demonstration ist unter http://www.youtube.com/watch?v=lfoqBAUoGM4 zu sehen.

Klassifizierung & EinordnungSignal analysis, synthesis, and processing

General TermsPerformance, Experimentation, Sound Synthesis

1. MOTIVATIONDiese Arbeit entstand zum einen aufgrund des gene-rellen Interesses an der Fusion aus Programmcode mit selbst erstellter Hardware und ganz privatem Interesse an Musik. Zum anderen beschäftigt sich Michael Ilg aufgrund des audio-visuellen Projektes ‚SOUVI‘ zur Zeit der Erstellung dieser Studienarbeit intensiver mit dem Thema Soundsynthese, weshalb die Erstellung eines ersten eigenen elektronischen Musikgerätes für beide Autoren eine persönliche Bereicherung darstellt.

Die aus dieser Studie hervorgehenden Ergebnisse sind von Interesse für Elektronikbastler und Musiker, die sich mit Soundsynthese beschäftigen, da zum einen grund-legende Elektronikbausteine zur Klangsynthese, als auch erweiterbarer, auf langsamer Hardware effizient funktionieriender Code erstellt wurden.

2. Verwandte ArbeitenDas erste Synthesizer-Projekt, das in Verbindung mit dieser Studienarbeit genannt werden muss, ist die Ar-duino Punk Console von Beavis Audio Research. Die Bauanleitung dieses Projektes diente als Vorlage zur Erstellung eines ersten Testgerätes, durch welches Er-fahrung sowohl im der Klangsynthese mit Hardware, als auch im Umgang mit dem Arduino Board gewonnen wurde. Es handelt sich hierbei um einen 8-Step Syn-thesizer nach dem Vorbild der legendären Atari Punk Console.

Das zweite Projekt wurde zu Rate gezogen um die Au-dioquallität unserer Installation zu verbessern. Bisher wurde der Ton mittels Pulsweitenmodulation erzeugt. Collin Cunningham erklärt ausführlich wie man mit Hil-fe eines selbstgebauten Digital-to-Analog-Konverters 8-Bit Sound mit einer maximalen Abtastrate von 22 KHz (mono) generieren kann. Mit dieser Methode wur-de es uns ermöglicht, Sinuskurven zu erzeugen.

8-Bit-Sinuskurve erzeugt mittels DAC

Page 2: Arduino Audioterror - · PDF file- Seite 1 - Arduino Audioterror Daniel Fontes Orionstr. 1 D-85302 Gerolsbach +49 89 1250900310 daniel@fontes.biz Michael Ilg Jakoberstraße 18 D-86152

- Seite 2 -

3. ANWENDUNGSSZENARIO & Use Cases

3.1 AnwendungsszenarioDurch die experimentelle Gewinnung von Erfahrung mit der zuvor erwähnten Arduino Punk Console haben wir uns folgende Bedienungsfunktionalität zum Ziel ge-setzt:

Der Benutzer soll mit dem Gerät Rhythmen generieren können. Dabei soll er vorgefertigte oder selbst erstellte Samples benutzen können, um einen Beat zu gestalten. Die Funktionsweise soll der, eines einfachen Stepse-quenzers ähnlich und mehrspurig sein.

Begleitend oder alternativ zum Rhythmus soll der Benutzer die Möglichkeit haben, einen Synthesizer bedienen zu können, dessen Pitch, und Klangfarbe live moduliert werden können. Dies soll durch einen FM-Synthesizer realisiert werden.

Das Audiosignal soll mit regelbarer Lautstärke durch einen Kopfhörer abgenommen werden können und optional normalisiert an einen Amplifier weitergegeben werden.

3.2 Definition der Use CasesDie wichtigsten Use Cases werden im folgenden erläu-tert.

3.2.1 Auswahl von Beatsequenzer und SynthesizerZur gemeinsamen oder einzelnen Auswahl des Stepse-quenzermoduls und des Synthesizermoduls besitzt das Gerät 2 große Schalter, welche die einzelnen Elemente aktivieren.

3.2.2 Auswahl einer Spur am SequenzerUm die Steps einer der vier Spuren mit Sounds belegen zu können, muss der Benutzer diese zuerst auswählen. Die Auswahl erfolg mittels eines Schalters, der die Spur aktiv für die Belegung mit Samples macht.3.2.3 Abspielen einer SpurDamit eine Spur abgespielt wird besitzt jede Spur hier-für einen weiteren Schalter. Dieser schalter kann mit dem für die Auswahl kombiniert verwendet werden, so dass die Belegung mit Samples live mitgehört werden kann.

3.2.4 Belegen einer Spur mit SamplesUm die acht einzelnen Steps des Sequenzers individuell belegen zu können, aktiviert und deaktiviert der Benut-zer die acht entsprechenden Taster am Gerät. Die Bele-gung wirkt sich auf alle aktivierten Spuren aus.

3.2.5 Auswahl eines speziellen Sound-SamplesUm ein Sample zu wählen, dreht der Benutzer an ei-nem Potentiometer. Der Vorteil gegenüber einer ande-ren Auswahlmöglichkeit besteht hierbei darin, dass die Anzahl der benutzten Samples, welche auf dem Gerät gespeichert sind, variiert werden kann, da sich ihr Aus-wahlbereich gleichmäßig auf den kompletten Bereich des Potentiometers ausbreitet.

3.2.6 Veränderung des TimingsUm das Timing des Beats zu verändern stehen dem Be-nutzer 2 Potentiometer zur Verfügung. Das erste ver-ändert hierbei die Gesamtgeschwindigkeit des Rhyth-mus, während das zweite die Abspielgeschwindigkeit der einzelnen Samples verändert und die Sounds somit pitchbar machen.

Kult-Stepsequenzer der 80‘er Jahre: Roland TR-808

Grafik: Frequenzmodulation (Quelle: wikipedia.de)

Page 3: Arduino Audioterror - · PDF file- Seite 1 - Arduino Audioterror Daniel Fontes Orionstr. 1 D-85302 Gerolsbach +49 89 1250900310 daniel@fontes.biz Michael Ilg Jakoberstraße 18 D-86152

- Seite 3 -

3.2.7 FM-KlangsyntheseZur Frequenzmodulation stehen dem Benutzer drei Po-tentiometer zur Verfügung. Das erste regelt die Carrier-Frequenz, während das zweite die Modulations-Fre-quenz steuert. Mit dem dritten Potentiometer läßt sich die Modulationstiefe regeln.

4. ENTWURF EINES PROTOTYPS

4.1 Verwendete TechnologieZur Erzeugung des Klanges und Implementierung der Steuerlogik wurde ein I/O-Board von Arduino. Zur Orga-nisation der Buttons und Schalter wurden Shift-Register benutzt. Die Umwandlung in Audiosignale erfolgt mit-tels eines selbstgebauten Digital-Analog-Konverters.

4.2 Konzeptueller Aufbau des Prototypen

4.2.1 SteuerungDa das verwendete Board nur eine begrenzte Anzahl von digitalen Ein- und Ausgabeports (14 Stück) besitzt, war es unumgänglich, die Belegung der Buttons und Schalter seriell statt parallel an das Board zu übermit-teln. Hierfür wurden zwei ShiftIn-Register vom Typ CD-4021BE benutzt, welche in Reihe geschaltet lediglich 3 Digitalpins verbrauchen, um 16 Steuerinformationen an das Arduino zu übergeben.

4.2.2 SounderzeugungDie einzelnen Samples und die Sinuskurve (prinzipiell ist auch jede andere Kurve denkbar) werden auf dem Festspeicher des Boards abgelegt. Aus diesem Grund ist es nötig, dass es sich bei dem verwendeten Chip im Arduino-Board mindestens um einen Atmega328 Chip handelt, da dieser zumindest 32kByte Speicher mitbringt, was es ermöglicht wenige Samples in einer 22000Hz Auflösung und Mono abzulegen. Die elemen-taren Werte eines jeden Samples werden in Arrays ge-speichert, und durch ihren Index wieder aufgerufen.

Die Steuerung der Synthesizer-Klangfarbe wird durch Frequenzmodulation realisiert. Dabei wird eine Wel-lenform durch eine zweite Wellenform in einem ähnli-chen Frequenzbereich beeinflusst, und somit Moduliert. Physikalisch gesehen handelt es sich hierbei um eine Schwebung, da sich die beiden Wellenformen an den einzelnen Überlagerungspunkten verstärken bzw ab-schwächen.

4.2.3 SoundausgabeUm die generierten Töne möglichst genau akustisch auszugeben, wurde ein 8-Bit DAC (Digital-Audio-Con-verter) nach der R/2R-Methode konstruiert. Dieser Kon-verter wandelt binäre Informationen in ein Audiosignal um, welches durch einen Lautsprecher oder ähnlichem wiedergegeben werden kann. Hierzu sind möglichst toleranzarme Widerstände nötig; im konkreten Anwen-dungsfall wurden Bauteile mit 1% Toleranz verwendet.

5. IMPLEMENTIERUNGDer 8-Bit DAC arbeitet mit Werten zwischen 0 und 254, wobei 127 dem Nullpunkt der erzeugten Soundwaves entspricht. Wir mussten also unsere Samples zunächst passend konvertieren und im Flash-Speicher des Ardui-nos ablegen. Zur Umwandlung der WAV-Dateien wurde das Tool Sox (Freeware für Mac OS X) verwendet. Die erzeugten Text-Dateien wurden daraufhin mit einem von uns erstellten PHP-Skriptes in die benötigte Form gebracht und in den Quelltext eingebunden.

Für den FM-Synthesizer wurde eine Sinuskurve mit 254 Werten berechnet und ebenfalls auf diese Weise in un-ser Programm integriert.CD4021BE verkabelt

Page 4: Arduino Audioterror - · PDF file- Seite 1 - Arduino Audioterror Daniel Fontes Orionstr. 1 D-85302 Gerolsbach +49 89 1250900310 daniel@fontes.biz Michael Ilg Jakoberstraße 18 D-86152

- Seite 4 -

Zur Audioausgabe werden mittels Hardwaretimers die-se Audiowerte ausgelesen und an den DAC übertragen. Die Geschwindigkeit des Timers bestimmt die tatsäch-liche Abtastrate und lässt sich mittels Potentiometers steuern.

Der Sequenzer kann bis zu vier Spuren mit jeweils acht Steps gleichzeitig abspielen. Dazu merkt er sich zu jeder Spur die vom Benutzer festgelegten Samples in einem Array. Dieser wird im Wiedergabetimer benutzt um die Soundwerte der Samples auszulesen, mit den Werten des FM-Synthesizers zu addieren und dann per DAC auszugeben.

Für den FM-Synthesizer wird die Sinustabelle mittels Bit-Shifting moduliert. Die Parameter der Modulation lassen sich durch weitere Potentiometer einstellen.

5.1 Hard- und SoftwareumgebungDas Kernstück unserer Installation ist ein Arduino Due-milanove Entwicklungsboard. Dieses wurde mit der da-zugehörigen Software „Arduino Alpha“ programmiert und bespielt.Zur Bearbeitung der Soundsamples wurde das Pro-gramm „Audacity“ verwendet. Der mit unserer Ins-tallation erzeugter Sound wurde ebenfalls mit diesem Programm analysiert.

5.2 Kern der ImplementierungDie meisten Probleme entstanden durch den Umfang unserer Installation in Verbindung mit den wenigen Ressourcen der verwendeten Hardware und so bestand ein Großteil unserer Arbeit darin, den Code so weit zu optimieren, dass es bei der Benutzung zu keinen unge-wünschten Effekten kommt (Wiedergabegeschwindig-keit ändert sich mit aktivieren des Synthesizers uvm.)

und dass sich unsere Vorstellungen überhaupt erst re-alisieren lassen.

5.3 Umfang des PrototypenDer Umfang unseres Protoypens lässt sich am besten mit ein paar harten Fakten verdeutlichen:

1 Arduino Duemilanove Entwicklungsboard4 Kippschalter für Spuraktivierung / Rec4 Kippschalter für Spuraktivierung / Play1 Kippschalter für Random-Modus der Samples / Rec1 Kippschalter für Samples / Play1 Kippschalter für FM-Synthesizer / Play8 Knöpfe für die einzelnen Steps / Rec8 LEDs für die einzelnen Steps / Rec2 ICs für Shift-In der Knöpfe und Schalter1 Potentiometer für Lautstärke des Klinkesteckers3 Potentiometer für FM-Modulation2 Potentiometer für Sample-Steuerung / Play1 Potentiometer für Sample-Steuerung / Rec1 Chinch-Stecker1 3,5mm-Klinke-Stecker

30316 von 30720 verfügbaren Bytes belegt6 von 6 analogen Pins belegt14 von 14 digitalen Pins belegt

6. EVALUATIONUm das erstellte System zu optimieren wurde es unter verschiedenen Gesichtspunkten evaluiert. Hauptsäch-lich handelt es sich hierbei um eine gleichbleibende Verarbeitungsgeschwindigkeit (und somit eine gleich-bleibene Tonausgabe-Geschwindigkeit) und um die Be-dienlogik.

6.1 Ziele der Evaluation und MethodikDas System soll trotz seiner geringen Verarbeitungsge-schwindigkeit bei jeder beliebigen Komplexität der Ton-erzeugung synchron arbeiten, um Geschwindigkeitsver-änderungen zu vermeiden.

Das Bedienkonzept des Systems soll zumindest für Be-nutzer mit ein wenig Vorkenntnis der elektronischen Rhythmus- und Klangerzeugung durch betrachten der Bedienelemente ersichtlich werden.

8-Bit DAC Prototyp

Page 5: Arduino Audioterror - · PDF file- Seite 1 - Arduino Audioterror Daniel Fontes Orionstr. 1 D-85302 Gerolsbach +49 89 1250900310 daniel@fontes.biz Michael Ilg Jakoberstraße 18 D-86152

- Seite 5 -

6.2 Durchführung der EvaluationDie Synchronisierung der Geschwindigkeit wurde im Trial&Error-Verfahren durchgeführt. Dabei wurden nach und nach die Operatoren aller Berechnungen optimiert, die Datentypen auf den kleinsten möglichen Wertebe-reich und Genauigkeit heruntergesetzt. Codeteile wur-den vereinfacht und reduziert, sowie Schleifendurch-läufe und IF-Klauseln so implementiert, dass deren Durchlaufgeschwindigkeit möglichst immer die selbe Zeitdauer in Anspruch nimmt.

Bei der Planung des Bedienkonzeptes wurden bereits etablierte Eingabeschemen als Vorbild genommen. Der Stepsequenzer gleicht somit einem Bedienkonzept, wie es bei vielen gängigen Geräten in den 1980‘er Jah-ren und auch heute noch der Fall ist. Die FM-Synthese funktioniert, wie bei vielen handelsüblichen Hardware-Synthesizern. Jeweils wurden Bedienelemente, die lo-gisch zusammen gehören auch auf dem Layout optisch gruppiert.

6.3 Interpretation der EvaluationsergebnisseDie Anfänglichen Probleme mit der gleichbleibenden Geschwindigkeit der Audio-Ausgabe ist zurückzufüh-ren auf die interne Verarbeitungsgeschwindigkeit des verwendeten I/O-Boards. Da die Hardware durch die Komplexität der Anwendung sehr stark ausgelastet wird, treten schnell unterschiedliche Berechnungsdau-ern (z. B. bei der Addition der unterschiedlichen Anzahl von Tonsignalen) auf, welche ausgeglichen werden mussten. Auch einfache Berechnungen wie die Division durch eine Einstellige Zahl machten das System lang-sam und führten zu Geschwindigkeitsschwankungen, weshalb diese Berechnungen größtenteils durch Bits-hift-Operationen ersetzt wurden.

Anfänglich zu großzügig angelegte Variablentypen ver-brauchten zu viel Speicher und reservierten unnötigen Speicherplatz der für die Sample-Arrays dringend be-nötigt wurde. Somit wurde hier für jede Variable der kleinste nötige Wertebereich ermittelt und der Variab-lentyp dahingehend angepasst.

Die Evaluation der Bedienelemente wurde intuitiv vor-

genommen und beruht auf persönlichen Erfahrungen. Die Bedienelemente sind derzeit unbeschriftet, was de-ren Bedeutung für einen weniger erfahrenen Benutzer möglicherweise unverständlich machen kann. An dieser Stelle würde eine Optimierungsmaßnahme bedeuten, eine Folie zu bedrucken und auf das Gerät zu legen, auf welcher die einzelnen Buttons, Switches und Potis beschriftet und/oder erklärt werden.

7. ZUSAMMENFASSUNG

7.1 Erzielte ErgebnisseDie vorliegende Studie beschäftigte sich mit der Fra-gestellung, in wie weit sich das Arduino-Board zur Erzeugung von Musik eignet und wo seine Grenzen liegen. Dazu wurden grundsätzliche Ziele definiert, die sich auch alle zu einem gewissen Grad realisieren lie-ßen. Es gelang, einen mehrspurigen Stepsequenzer zu realisieren, welcher zumindest Audiodateien mit einer Auflösung von 22000khz in Mono anordnen, abspie-len und verändern lässt. Zudem gelang es einen Syn-thesizer nach dem Prinzip der Frequenzmodulation zu implementieren.

7.2 Erweiterungsmöglichkeiten / AusblickDa der Programmcode weitgehend optimiert wurde, stehen Überlegungen zur Speichererweiterung im Vor-dergrund, da der in der vorliegenden Umsetzung ver-wendbare Speicher sehr knapp ist und die Klangvielfalt des Sequenzers somit stark einschränkt. Denkbar ist es hier, das System um einen SD-Kartenleser zu erweitern und die Anzahl der spielbaren Samples somit um ein vielfaches zu erweitern. Zudem würde diese Erweite-rung das ersetzen von Samples vereinfachen, da nicht jedes mal der komplette Programmcode, in dem sich die Soundarrays befinden, neu auf das Board gespielt werden müsste, sondern Sounddateien „on-the-fly“ eingebunden werden könnten.

Des weiteren fällt beim musizieren auf, dass es wün-schenswert wäre, wenn der FM-Synthesizer eine ge-sonderte Lautstärkenregelung besäße. Der Synthesizer besitzt momentan nur eine Sinuskurve als Wellenform. Mittels einer weiteren, einfachen Erweiterung ist es denkbar, zwischen Sinus und anderen Wellenformen, wie Sägezahn-, Dreiecks- oder Rechtecksform und auch

Page 6: Arduino Audioterror - · PDF file- Seite 1 - Arduino Audioterror Daniel Fontes Orionstr. 1 D-85302 Gerolsbach +49 89 1250900310 daniel@fontes.biz Michael Ilg Jakoberstraße 18 D-86152

- Seite 6 -

durch Waveshaping erzeugte Wellenformen umzuschal-ten. Auch diese Möglichkeit ist abhängig von einer Spei-chererweiterung, da der interne Speicher derzeit mit 8 Samples und 1 Sinusform beinahe komplett gefüllt ist.

8 DANKSAGUNGDank gilt Professor Thomas Rist, der es uns ermöglichte, dieses Projekt im Rahmen einer Studienarbeit abzuhan-deln und durch seine Vorlesung einen guten Überblick über viele theoretische Ansätze zur Umsetzung gab.

Des weiteren danken wir den vielen, hier nicht nament-lich erwähnten Bastlern, welche ihre Erfahrungen und Codebeispiele dokumentiert und im Internet zur Verfü-gung gestellt haben. Spezieller Dank geht hier an Collin Cunningham und Beavis Audio Research.

9. REFERENZEN[1] Bild: Roland TR-808, http://machines.hyperreal.org/manufacturers/Roland/TR-808/images/808.jpg

[2] FM-Synthese, http://de.wikipedia.org/wiki/FM-Syn-these

[3] R/2R Prinzip, http://en.wikipedia.org/wiki/Resistor_ladder

[4] Code ShiftIn-Register, http://www.arduino.cc/en/Tu-torial/ShiftIn

[5] Tutorial: Arduino Punk Console: http://www.bea-visaudio.com/projects/digital/ArduinoPunkConsole/

[6] Tutorial: Proto-DAC shield for Arduino: http://blog.makezine.com/archive/2008/05/makeit_protodac_shield_fo.html

[7] Programm: Sox - Sound eXchange: http://sox.sour-ceforge.net/