Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Konzept
- Schritt 2: Bereiten Sie den Beschleunigungsmesser vor
- Schritt 3: Bauen Sie den Handschuh
- Schritt 4: In Ableton komponieren
- Schritt 5: Beginnen Sie mit der Verwendung von Firmata
- Schritt 6: Firmata testen
- Schritt 7: Beeinflussen Sie Musik mit Ihren Handbewegungen
- Schritt 8: Die Track-Klasse (Bonus!)
- Schritt 9: Tracklänge, Beats und mehr (Bonus!)
Video: Tanzhandschuh - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
In diesem Tutorial werde ich Sie durch die Gestaltung eines Handschuhs führen, mit dem Sie durch Tanz mit Musik interagieren können. Sie bauen einen beschleunigungsmesserfähigen Handschuh, entwerfen eine Komposition in Ableton und verbinden die beiden dann so komplex oder einfach, wie Sie möchten!
Lieferungen
- Ableton (oder kostenlose Testversion)
- Ein Arduino
- Überbrückungskabel
- Lötkolben
- Karton
- Heißklebepistole
- Viel Fantasie
Schritt 1: Konzept
Dieses Projekt soll Spaß machen. Wenn Ihnen die Funktionsweise des Beispielprojekts in diesem Tutorial keinen Spaß macht, gestalten Sie es neu!
Ich empfehle, einige deiner Lieblingslieder aufzulegen, deine Hände zu ihnen zu bewegen und zu sehen, was passiert. Bewegst du deine Hände auf und ab? Seite an Seite? Langsam oder schnell? Welche Aspekte der Musik bringen Sie dazu, Ihre Hände zu bewegen? Wenn Sie eine Liste davon aufgeschrieben haben, werden Sie wahrscheinlich in der Lage sein, einige Möglichkeiten zu finden, die Bewegungen, die Ihnen gefallen, in Ihre späteren Algorithmen zu integrieren.
Hier sind die Bewegungen, die ich verwendet habe:
- Eine schnelle Auf- und Abbewegung löst den Beginn des Songs, Schlagzeugs oder Basses aus. (Diese passieren an verschiedenen Stellen im Song, nicht unbedingt gleichzeitig!)
- Eine langsame, schiefe Bewegung von einer Seite zur anderen löst einen echoreicheren, hohen Ton aus.
- An einem bestimmten Abschnitt des Songs wird die Musik leiser, wenn ich meine Hand nach oben kippe – also habe ich sie mit meiner geschlossenen Faust "aufgefangen".
Verwenden Sie diese oder machen Sie Ihre eigenen!
(Bitte beachten: Dieses Tutorial behandelt nicht, wie man Musik oder Melodien live in Ableton erzeugt! Wenn Sie sich an diese Anweisungen halten, können Sie nur die Lautstärke von Tracks erhöhen/verringern oder die Anwendung von Audioeffekten.)
Schritt 2: Bereiten Sie den Beschleunigungsmesser vor
Finden Sie zuerst heraus, welche Art von Beschleunigungsmesser Sie haben. Ich habe dieses verwendet; Jeder dreiachsige Beschleunigungsmesser ist ausreichend. (Oder probieren Sie einen anderen Sensortyp aus, wenn Sie wild werden möchten.) Stellen Sie sicher, dass Sie wissen, wie Sie die Beschleunigungsmesserdaten vom Arduino lesen. Möglicherweise müssen Sie eine Bibliothek für Ihren Beschleunigungsmesser herunterladen, wenn er etwas komplexeres als einen analogen Eingang verwendet.
Nachdem Sie es mit einem Steckbrett getestet haben, löten Sie kurze farbcodierte Drähte in die Pins Ihres Beschleunigungsmessers. Stecken Sie ein rotes Kabel in den Stromanschluss, ein schwarzes Kabel in den Erdungsstift und alle anderen erforderlichen Kabel für die Beschleunigungssensor-Kommunikation. (Wenn Sie einen I2C-Beschleunigungsmesser haben, sind dies die SCL- und SDA-Pins. Wenn Sie einen analogen Beschleunigungsmesser haben, gibt es wahrscheinlich einen Pin für jeden der x-, y- und z-Ausgänge.) Stellen Sie sicher, dass Ihr Lötmittel fest ist und dass sich die Perlen nicht zwischen benachbarten Stiften überlappen.
Schritt 3: Bauen Sie den Handschuh
Schneiden Sie ein Stück dünne Pappe oder dickes Papier in ein Rechteck, das etwas größer als Ihr Beschleunigungsmesser ist. Kleben Sie den Beschleunigungsmesser auf den Karton und stellen Sie sicher, dass Sie Kleber auf die Unterseite auftragen. Kleben Sie dann den mit Pappe versehenen Beschleunigungsmesser auf die Rückseite Ihres Handschuhs. Nähen Sie jeden Draht locker an das Handgelenk des Handschuhs, um die Spannung des Beschleunigungsmessers zu verringern, und dann ist Ihr Handschuh fertig. Schließen Sie es an längere Kabel an, damit Sie beim Einstecken genügend Platz haben, um Ihre Hand zu bewegen.
Schritt 4: In Ableton komponieren
Jetzt ist es an der Zeit, den Song zu komponieren, den Sie schließlich mit dem Handschuh steuern werden. Ich empfehle Ableton-Loops, die alle zusammen gut klingen, aber zum allmählichen Aufbau verwendet werden können: Probieren Sie Melodie, Akkorde, Bass und Percussion aus. Sie können Ihren Handschuh verwenden, um zu steuern, wann jede Schleife abgespielt wird oder nicht.
Wenn Ihnen interessante Sounds einfallen, die Sie gelegentlich in einen Song integrieren können, wie zum Beispiel einen seltsamen Soundeffekt oder ein unkonventionelles Instrument, versuchen Sie es auch mit einem oder zwei davon! Sie können sie an weniger häufige Handbewegungen binden, um ab und zu etwas Interessantes einzufügen.
Hier ist ein Link zu meiner Arduino-kompatiblen Komposition, falls Sie keine eigene schreiben möchten:
(Leider ist es nicht Teil des Tutorials, Ihnen Ableton beizubringen. Es gibt jedoch viele gute Anleitungsvideos und Ableton hat eine kostenlose 90-Tage-Testversion! Ich empfehle dieses Video.)
Schritt 5: Beginnen Sie mit der Verwendung von Firmata
Damit Ihr Arduino mit Ableton kommunizieren kann, müssen Sie eine Bibliothek namens Firmata verwenden. Sie müssen auch das Connection Kit für Ableton herunterladen.
Klicken Sie in Ableton im Menü oben links auf Packs>Connection Kit>Devices und doppelklicken Sie dann auf das erste Gerät (Arduino), um es hinzuzufügen. Denken Sie daran, zu welchem Ableton-Track Sie das Gerät hinzugefügt haben!
Schritt 6: Firmata testen
Zuerst testen wir und stellen sicher, dass Ihr Arduino mit Ableton kommuniziert. Laden Sie dieses Code-Snippet auf Ihr Arduino hoch und führen Sie es aus:
#include void analogWriteCallback (Byte-Pin, Int-Wert) { if (IS_PIN_PWM (Pin)) { PinMode (PIN_TO_DIGITAL (Pin), OUTPUT); analogWrite (PIN_TO_PWM (Pin), Wert); }}void setup () { Firmata.setFirmwareVersion (FIRMATA_FIRMWARE_MAJOR_VERSION, FIRMATA_FIRMWARE_MINOR_VERSION); Firmata.attach(ANALOG_MESSAGE, analogWriteCallback); Firmata.begin(57600);}void loop() { Firmata.sendAnalog(0, 800);}
Dies ist das Nötigste, um mit Firmata zu kommunizieren. Es sendet kontinuierlich eine Ausgabe von 800 (von 1024) an Port 0 des Firmata-Geräts in Ableton. Wenn Sie diesen Code auf Ihr Arduino hochladen, während Sie ein Firmata-Gerät in Ableton geöffnet haben, sollte es wie im Bild oben aussehen. (Zuordnen von Port 0 zu allem in Ableton, um die Werte sehen zu können.)
Sie können auf die Schaltfläche Map und dann auf ein beliebiges Firmata-kompatibles Gerät in Ableton klicken, um eine Zuordnung zwischen der an diesem Port empfangenen Eingabe und dem Wert dieses Ableton-Geräts hinzuzufügen. Einfache Beispiele sind die Lautstärke eines beliebigen Tracks oder eines beliebigen Reglers innerhalb eines Audioeffekts. Erkunden Sie und sehen Sie, was Sie finden können, um eine Karte zu erstellen!
Schritt 7: Beeinflussen Sie Musik mit Ihren Handbewegungen
Zu diesem Zeitpunkt sollten Sie etwas Musik in Ableton, ein Firmata-Skript auf Ihrem Arduino und einen Beschleunigungsmesser-Handschuh haben. Lass uns Musik machen!
Ordnen Sie die Ports des Arduino-Geräts in Ableton verschiedenen Dingen zu (ich schlage vor, das Volumen zu verfolgen), und fügen Sie dann Codezeilen hinzu, um Daten vom Arduino an jeden Port zu senden.
Firmata.sendAnalog(port, volumeLevel);
Verwenden Sie Code wie diesen für jeden Firmata-Port.
Wenn Sie etwas Einfaches tun möchten, können Sie die Beschleunigungsmesserwerte unverarbeitet an Ableton-Ports senden und von dort aus zuordnen. Für ein anspruchsvolleres Erlebnis können Sie entscheiden: Welche Beschleunigungsmesserwerte sollen Geräusche auslösen, wie und wann?
Spielen Sie dann alle Ihre Ableton-Loops ab, führen Sie Ihren Arduino-Code aus und tanzen Sie los!
(Haftungsausschluss: Wenn Sie vorhaben, einen komplexen Algorithmus für Ihren Song zu erstellen, kann die Feinabstimmung viel Zeit in Anspruch nehmen. "Dance away" ist möglicherweise weniger genau als erwartet.)
Schritt 8: Die Track-Klasse (Bonus!)
Wenn es Ihnen nichts ausmacht, dass die Lautstärke platzt oder Sie eine andere Möglichkeit haben, dies zu verringern, überspringen Sie diesen Schritt. Ansonsten lesen Sie weiter!
Mir ist aufgefallen, dass das Umschalten der Lautstärke von stumm auf voll in einem Durchgang einige unangenehme Knallgeräusche erzeugt, und es ist schön, die Lautstärke allmählich einblenden zu können. Dies ist jedoch in der synchronen Programmierumgebung des Arduino schwierig. Hier ist also ein Code, damit das Popping verschwindet:
class Track{ public: int volume; int VolumenZiel; int updateSpeed; Track () { Lautstärke = 0; VolumenZiel = 0; Aktualisierungsgeschwindigkeit = 0; aufrechtzuerhalten. Void setVolumeGoal (int Ziel) { volumeGoal = Ziel; } int getVolumeGoal() { return volumeGoal; aufrechtzuerhalten. Void setUpdateSpeed (int Schnelligkeit) { updateSpeed = Schnelligkeit; } int getVolume () { Rückgabevolumen; aufrechtzuerhalten. Void updateVolume () { if ((Volume > volumeGoal) && ((Volume - volumeGoal) >= updateSpeed)) { volume -= updateSpeed; aufrechtzuerhalten. Sonst if ((Volume = updateSpeed)) { Volume += updateSpeed; aufrechtzuerhalten. aufrechtzuerhalten. Void stumm (int Schnelligkeit) { volumeGoal = 50; updateSpeed = Schnelligkeit; aufrechtzuerhalten. Void voll (int Echtheit) { volumeGoal = 950; updateSpeed = Schnelligkeit; }};
Jede Spur hat eine aktuelle Lautstärke, eine Ziellautstärke und eine Geschwindigkeit, mit der sie sich auf diese Ziellautstärke zubewegt. Wenn Sie die Lautstärke eines Tracks ändern möchten, rufen Sie setVolumeGoal() auf. Rufen Sie jedes Mal, wenn Sie die loop()-Funktion in Ihrem Arduino ausführen, updateVolume() für jede Spur auf und senden Sie diese Informationen dann mit getVolume() an Firmata. Ändern Sie die Aktualisierungsgeschwindigkeit für schnellere oder allmählichere Ausblendungen! Vermeiden Sie es außerdem, die Lautstärke nach Möglichkeit auf 0 einzustellen; Setzen Sie ihn stattdessen auf einen sehr niedrigen Wert (der Standardwert in mute() ist 100).
Schritt 9: Tracklänge, Beats und mehr (Bonus!)
Sie können viele Dinge tun, um den Sound, der aus Ihrem Projekt resultiert, leichter zu hören. Hier sind einige Optionen:
Sie können verfolgen, wie lange das Lied läuft. Um dies zu tun, müssen Sie herausfinden, wann der Song angefangen hat; Ich empfehle eine while-Schleife in der setup()-Funktion, die die Ausführung Ihres Codes verzögert, bis er eine Handbewegung erkannt hat. Speichern Sie die Startzeit des Songs in einer Variablen mit millis(), und überprüfen Sie bei jeder Schleife(), wie lange es dauert. Sie können damit bestimmte Funktionen zu bestimmten Zeiten des Songs aktivieren oder deaktivieren.
Wenn Sie wissen, wie lang Ihre Loops in Millisekunden sind, können Sie auch verfolgen, wie viele Loops Sie durchlaufen haben, um die Songstruktur nuancierter zu verstehen!
Ein weiteres potenzielles Problem, auf das Sie stoßen können, ist das Starten und Stoppen eines Titels. Ich habe dies gelöst, indem ich verfolgt habe, in welchem Beat eines Takts sich der Song gerade befand. Dann konnte ich nach einer Geste Tracks für eine beliebige Anzahl von Beats abspielen, anstatt sie sofort abzuschneiden. Dadurch laufen die Dinge viel reibungsloser. Hier ist ein Beispiel:
if(millis() - lastLoop >= 4000) { Schleifen += 1; lastLoop = millis(); for(int j = 0; j < 8; j++) { beatNow[j] = false; } } beat = (millis() - lastLoop) / 250; if(beat != lastBeat) { lastBeat = beat; beatsLeft -= 1; }
Stellen Sie sicher, dass Sie die Lautstärken entsprechend den Werten von beatNow[beat] und/oder beatsLeft aktualisieren. Beispielcode, der fast alles in diesem Tutorial enthält, plus einiges, ist angehängt, falls Sie es in der Praxis sehen möchten.