İçindekiler:

Dans Eldiveni: 9 Adım
Dans Eldiveni: 9 Adım

Video: Dans Eldiveni: 9 Adım

Video: Dans Eldiveni: 9 Adım
Video: Kedi Patisi Yarım Parmak Eldiven Yapılışı Tıg işi Eldiven yapımı Parmaksız eldiven yap. 2024, Temmuz
Anonim
dans eldiveni
dans eldiveni

Bu derste, dans yoluyla müzikle etkileşime geçmenizi sağlayan bir eldiven tasarlama konusunda size yol göstereceğim. İvmeölçer özellikli bir eldiven yapacak, Ableton'da bir kompozisyon tasarlayacak ve ardından ikisini istediğiniz kadar karmaşık veya basit bir şekilde birleştireceksiniz!

Gereçler

  • Ableton (veya ücretsiz deneme)
  • Arduino
  • Atlama kabloları
  • Havya
  • Karton
  • Sıcak yapıştırıcı tabancası
  • Bol hayal gücü

1. Adım: Konsept

Bu proje eğlenceli olacak şekilde tasarlanmıştır. Bu eğitimdeki örnek projenin çalışma şekli sizin için eğlenceli değilse, yeniden tasarlayın!

En sevdiğiniz şarkılardan bazılarını koymanızı, ellerinizi onlara taşımanızı ve ne olduğunu görmenizi tavsiye ederim. Ellerinizi yukarı aşağı hareket ettiriyor musunuz? Yan yana? Yavaş mı yoksa hızlı mı? Müziğin hangi yönleri size ellerinizi hareket ettirmek istiyor? Bunların yazılı olduğu bir listeniz varsa, muhtemelen hoşunuza giden hareketleri nihai algoritmalarınıza dahil etmenin bazı yollarını bulabileceksiniz.

İşte kullandığım hareketler:

  • Hızlı bir yukarı ve aşağı hareket, şarkının, davulların veya basların başlamasını tetikler. (Bunlar şarkının farklı noktalarında olur, aynı anda olması gerekmez!)
  • Yavaş, eğik bir yan yana hareket, daha yankılı, tiz bir sesi tetikler.
  • Şarkının belirli bir bölümünde, elimi yukarıya doğru eğmek müziği sessizleştirir - bu yüzden onu kapalı yumruğumda "yakaladım".

Bunları kullanın veya kendinizinkini yapın!

(Lütfen unutmayın: bu eğitim, Ableton'da canlı olarak nasıl müzik veya melodi oluşturulacağını kapsamaz! Bu talimatlara bağlı kalırsanız, yalnızca parçaların sesini veya ses efektlerinin uygulamasını artırabilecek/azaltabileceksiniz.)

Adım 2: İvmeölçeri Hazırlayın

İvmeölçeri Hazırlayın
İvmeölçeri Hazırlayın

İlk önce, ne tür bir ivmeölçeriniz olduğunu bulun. ben bunu kullandım; herhangi bir üç eksenli ivmeölçer yapacaktır. (Ya da çıldırmak istiyorsanız başka bir sensör tipi deneyin.) Arduino'dan ivmeölçer verilerini nasıl okuyacağınızı bildiğinizden emin olun. Analog girişten daha karmaşık bir şey kullanıyorsa, ivmeölçeriniz için bir kitaplık indirmeniz gerekebilir.

Bir breadboard ile test ettikten sonra, kısa renk kodlu kabloları ivmeölçerinizin pinlerine lehimleyin. Güç pimine kırmızı bir kablo, topraklama pimine siyah bir kablo ve ivmeölçer iletişimi için gerekli diğer kabloları yerleştirin. (Eğer bir I2C ivmeölçeriniz varsa, bu SCL ve SDA pinleri olacaktır. Analog ivmeölçeriniz varsa, muhtemelen x, y ve z çıkışlarının her biri için bir pin olacaktır.) Lehiminizin sağlam olduğundan emin olun ve boncukların bitişik pimler arasında üst üste gelmemesi.

3. Adım: Eldiveni İnşa Et

Eldiveni İnşa Et
Eldiveni İnşa Et

İvmeölçerinizden biraz daha büyük bir dikdörtgen şeklinde bir parça ince karton veya kalın kağıt kesin. İvmeölçeri kartona yapıştırın, altına yapıştırıcı sürdüğünüzden emin olun. Ardından karton destekli ivmeölçeri eldiveninizin arkasına yapıştırın. İvmeölçer üzerindeki gerilimi azaltmak için her bir teli eldivenin bileğine gevşek bir şekilde dikin ve eldiveniniz hazır. Fişe takılıyken elinizi hareket ettirmek için yeterli alana sahip olmak için daha uzun kablolara bağlayın.

Adım 4: Ableton'da Oluşturun

Şimdi, sonunda kontrol etmek için eldiveni kullanacağınız şarkıyı besteleme zamanı. Hepsi bir arada kulağa hoş gelen, ancak kademeli olarak oluşturmak için kullanılabilecek Ableton döngülerini öneririm: melodi, akorlar, bas ve perküsyon deneyin. Her döngünün ne zaman çalışıp çalışmadığını kontrol etmek için eldiveninizi kullanabileceksiniz.

Garip bir ses efekti veya alışılmamış bir enstrüman gibi ara sıra bir şarkıya dahil etmek için herhangi bir ilginç ses türü düşünebiliyorsanız, bunlardan bir veya iki tanesini de eklemeyi deneyin! Arada bir ilginç bir şey getirmek için onları daha az yaygın el hareketlerine bağlayabilirsiniz.

Kendinizden bir tane yazmak istemiyorsanız, işte Arduino uyumlu kompozisyonuma bir bağlantı:

(Maalesef size Ableton'u öğretmek bu eğitimin kapsamında değil. Ancak, çok sayıda iyi nasıl yapılır videosu var ve Ableton'ın 90 günlük ücretsiz deneme sürümü var! Bu videoyu tavsiye ederim.)

Adım 5: Firmata'yı Kullanmaya Başlayın

Firmata'yı Kullanmaya Başlayın
Firmata'yı Kullanmaya Başlayın

Arduino'nuzun Ableton ile iletişim kurmasını sağlamak için Firmata adlı bir kütüphane kullanmanız gerekir. Ayrıca Ableton için Bağlantı Kitini de indirmeniz gerekecek.

Ableton'da, sol üstteki menüden Paketler>Bağlantı Kiti>Cihazlar'a tıklayın ve ardından eklemek için ilk cihaza (Arduino) çift tıklayın. Cihazı hangi Ableton parçasına eklediğinizi hatırladığınızdan emin olun!

Adım 6: Firmata'yı Test Edin

Firmata'yı Test Edin
Firmata'yı Test Edin

İlk olarak, Arduino'nuzun Ableton ile iletişim kurduğundan emin olacağız ve test edeceğiz. Bu kod parçasını Arduino'nuza yükleyin ve çalıştırın:

#include void analogWriteCallback(byte pin, int değeri){ if (IS_PIN_PWM(pin)) { pinMode(PIN_TO_DIGITAL(pin), OUTPUT); analogWrite(PIN_TO_PWM(pin), değer); }}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);}

Bu, Firmata ile iletişim kurmak için gereken minimum miktardır. Ableton'daki Firmata cihazının 0 portuna sürekli olarak 800 (1024 üzerinden) çıkış gönderir. Ableton'da açık bir Firmata cihazınız varken bu kodu Arduino'nuza yüklerseniz yukarıdaki resimdeki gibi görünmelidir. (Değerleri görebilmek için 0 bağlantı noktasını Ableton'daki herhangi bir şeyle eşleyin.)

Bu bağlantı noktasına alınan giriş ile o Ableton cihazının değeri arasında bir eşleme eklemek için Harita düğmesine ve ardından Ableton'daki herhangi bir Firmata uyumlu cihaza tıklayabilirsiniz. Kolay örnekler, bir ses efekti içindeki herhangi bir parçanın veya herhangi bir kadranın ses seviyesini içerir. Haritalamak için ne bulabileceğinizi keşfedin ve görün!

7. Adım: Müziği El Hareketlerinizle Etkileyin

El Hareketlerinizle Müziği Etkileyin!
El Hareketlerinizle Müziği Etkileyin!

Bu zamana kadar, Arduino'nuzdaki bir Firmata betiği olan Ableton'da biraz müzik ve bir ivmeölçer eldiveni takılı olmalıdır. Hadi biraz müzik yapalım!

Ableton'daki Arduino cihazının bağlantı noktalarını farklı şeylerle eşleyin (parça hacmini öneririm) ve ardından Arduino'dan her bağlantı noktasına veri göndermek için kod satırları ekleyin.

Firmata.sendAnalog(port, volumeLevel);

Her Firmata portu için böyle bir kod kullanın.

Basit bir şey yapmak istiyorsanız, işlenmemiş ivmeölçer değerlerini Ableton portlarına gönderebilir ve oradan haritalayabilirsiniz. Daha sofistike bir deneyim için şuna karar verebilirsiniz: hangi ivmeölçer değerleri sesleri tetiklemelidir, nasıl ve ne zaman?

Ardından tüm Ableton döngülerinizi oynayın, Arduino kodunuzu çalıştırın ve dans edin!

(Feragatname: Şarkınız için herhangi bir karmaşık algoritma oluşturmayı planlıyorsanız, ince ayar yapmak çok zaman alabilir. "Dance away" beklenenden daha az doğru olabilir.)

8. Adım: Pist Sınıfı (bonus!)

Ses patlamasının bir sakıncası yoksa veya bunu azaltmanın başka bir yolu varsa, bu adımı atlayın. Aksi takdirde, okumaya devam edin!

Sesi tek seferde sessizden tama değiştirmenin bazı hoş olmayan patlama sesleri yarattığını fark ettim ve ses seviyesini daha yavaş azaltabilmek güzel. Ancak bunu Arduino'nun senkron programlama ortamında yapmak zordur. İşte haşhaştan kurtulmak için bazı kodlar:

class Track{ public: int volume; int volumeHedef; int güncellemeHızı; Track() { hacim = 0; hacimHedef = 0; güncelleme Hızı = 0; } void setVolumeGoal(int hedef) { volumeGoal = hedef; } int getVolumeGoal() { return volumeGoal; } void setUpdateSpeed(int haslık) { updateSpeed = haslık; } int getVolume() { dönüş hacmi; } void updateVolume() { if((volume > volumeGoal) && ((volume - volumeGoal) >= updateSpeed)) { volume -= updateSpeed; } else if((volume = updateSpeed)) { volume += updateSpeed; } } void mute(int haslık) { volumeGoal = 50; updateSpeed = haslık; } void full(int haslık) { volumeGoal = 950; updateSpeed = haslık; }};

Her Parçanın geçerli bir hacmi, bir hedef hacmi ve o hedef hacme doğru hareket ettiği bir hız vardır. Bir parçanın ses düzeyini değiştirmek istediğinizde setVolumeGoal() öğesini çağırın. Arduino'nuzda loop() işlevini her çalıştırdığınızda, her parçada updateVolume() öğesini çağırın ve ardından bu bilgiyi getVolume() ile Firmata'ya gönderin. Daha hızlı veya daha fazla kademeli kararmalar için güncelleme hızını değiştirin! Ayrıca, mümkünse sesi 0'a ayarlamaktan kaçının; bunun yerine, çok düşük bir değere ayarlayın (mute() içindeki varsayılan değer 100'dür).

9. Adım: Parça Uzunluğu, Vuruşlar ve Daha Fazlası (bonus!)

Projenizden kaynaklanan sesi daha kolay dinlemek için birçok şey yapabilirsiniz. İşte birkaç seçenek:

Şarkının ne kadar süredir çalıştığını takip edebilirsiniz. Bunu yapabilmek için şarkının ne zaman başladığını bulmanız gerekecek; Bir el hareketi algılayana kadar kodunuzun çalışmasını geciktiren setup() işlevinde bir süre döngüsü öneririm. Şarkının başlangıç zamanını millis() kullanarak bir değişkende saklayın ve her döngüde() ne kadar sürdüğünü kontrol edin. Şarkının belirli zamanlarında belirli özellikleri etkinleştirmek veya devre dışı bırakmak için bunu kullanabilirsiniz.

Döngülerinizin milisaniye cinsinden ne kadar uzun olduğunu biliyorsanız, şarkı yapısını daha ayrıntılı bir şekilde anlamak için kaç döngüden geçtiğinizi de takip edebilirsiniz!

Karşılaşabileceğiniz bir diğer olası sorun, bir parçanın ne zaman çalmaya başlayıp ne zaman durdurulacağıdır. Bunu, şarkının o anda hangi vuruşta olduğunu takip ederek çözdüm. Ardından, hemen kesmek yerine, bir jestten sonra parçaları herhangi bir sayıda vuruş için çalabiliyordum. Bu, işlerin çok daha sorunsuz akmasını sağlar. İşte bir örnek:

if(millis() - lastLoop >= 4000) { döngüler += 1; lastLoop = millis(); for(int j = 0; j < 8; j++) { beatNow[j] = false; } } beat = (millis() - lastLoop) / 250; if(beat != lastBeat) { lastBeat = beat; beatsSol -= 1; }

Hacimleri beatNow[beat] ve/veya beatsLeft değerlerine göre güncellediğinizden emin olun. Bu eğitimdeki hemen hemen her şeyi ve bazılarını içeren örnek kod, pratikte görmek istemeniz durumunda ektedir.

Önerilen: