Სარჩევი:

საცეკვაო ხელთათმანი: 9 ნაბიჯი
საცეკვაო ხელთათმანი: 9 ნაბიჯი

ვიდეო: საცეკვაო ხელთათმანი: 9 ნაბიჯი

ვიდეო: საცეკვაო ხელთათმანი: 9 ნაბიჯი
ვიდეო: ლუკა და მარიამი 2024, ივლისი
Anonim
საცეკვაო ხელთათმანი
საცეკვაო ხელთათმანი

ამ გაკვეთილში მე გაგიმხელთ ხელთათმანის დიზაინში, რომელიც საშუალებას მოგცემთ მუსიკასთან ურთიერთობა ცეკვის საშუალებით. თქვენ ააშენებთ აქსელერომეტრის ხელთათმანას, შეიმუშავებთ კომპოზიციას აბლეტონში და შემდეგ დააკავშირებთ ამ ორს ისე რთულად ან მარტივად, როგორც გსურთ!

მარაგები

  • აბლეტონი (ან უფასო საცდელი)
  • არდუინო
  • ჯუმბერის კაბელები
  • გასაყიდი რკინა
  • მუყაო
  • ცხელი წებოს იარაღი
  • ბევრი ფანტაზია

ნაბიჯი 1: კონცეფცია

ეს პროექტი შექმნილია სახალისოდ. თუ ამ სამეურვეო პროექტის მაგალითი თქვენთვის არ არის სახალისო, ხელახლა შეიმუშავეთ იგი!

მე გირჩევთ ჩაწეროთ თქვენი საყვარელი სიმღერები, გადაიტანოთ ხელები მათზე და ნახოთ რა მოხდება. ხელებს ზევით-ქვევით მოძრაობთ? გვერდიგვერდ? ნელა თუ სწრაფად? მუსიკის რომელი ასპექტები გიბიძგებს ხელების მოძრაობისკენ? თუ თქვენ გაქვთ ჩამოთვლილი ჩამონათვალი, თქვენ ალბათ გექნებათ საშუალება გაარკვიოთ რამდენიმე გზა, რომლითაც თქვენ სარგებლობთ თქვენს საბოლოო ალგორითმებში.

აქ არის მოძრაობები, რომლებიც მე გამოვიყენე:

  • სწრაფი მაღლა და ქვევით მოძრაობა იწვევს სიმღერის, დრამის ან ბასის დაწყებას. (ეს ხდება სიმღერის სხვადასხვა წერტილში, არა აუცილებლად ერთდროულად!)
  • ნელი, დახრილი მოძრაობა იწვევს უფრო ექო, მაღალ ხმას.
  • სიმღერის ერთ კონკრეტულ მონაკვეთზე, ჩემი ხელის მაღლა დახრა მუსიკას წყნარად აქცევს - ასე რომ მე ის "დავიჭირე" ჩემს დახურულ მუშტში.

გამოიყენეთ ეს ან შექმენით თქვენი საკუთარი!

(გთხოვთ გაითვალისწინოთ: ეს გაკვეთილი არ მოიცავს როგორ შექმნათ მუსიკა ან მელოდიები Ableton– ში! თუ დაიცავთ ამ მითითებებს, თქვენ მხოლოდ შეძლებთ გაზარდოთ/შეამციროთ ტრეკების მოცულობა ან გამოიყენოთ აუდიო ეფექტები.)

ნაბიჯი 2: მოამზადეთ ამაჩქარებელი

მოამზადეთ ამაჩქარებელი
მოამზადეთ ამაჩქარებელი

პირველი, გაარკვიეთ რა ტიპის ამაჩქარებელი გაქვთ. მე გამოვიყენე ეს; ნებისმიერი სამი ღერძიანი ამაჩქარებელი გააკეთებს. (ან სცადეთ სხვა ტიპის სენსორი, თუ გსურთ გაგიჟდეთ.) დარწმუნდით, რომ იცით როგორ წაიკითხოთ არდუინოს ამაჩქარებლის მონაცემები. შეიძლება დაგჭირდეთ ბიბლიოთეკის გადმოტვირთვა თქვენი ამაჩქარებლისთვის, თუ ის იყენებს რაიმე უფრო რთულს, ვიდრე ანალოგური შეყვანა.

მას შემდეგ რაც შეამოწმეთ იგი დაფაზე, შეაერთეთ მოკლე ფერადი კოდირებული მავთულები თქვენი ამაჩქარებლის ქინძისთავებში. ჩადეთ წითელი მავთული დენის ქინძისთავში, შავი მავთული მიწაში და სხვა ნებისმიერი საჭირო მავთული ამაჩქარებლების კომუნიკაციისთვის. (თუ თქვენ გაქვთ I2C ამაჩქარებელი, ეს იქნება SCL და SDA ქინძისთავები. თუ თქვენ გაქვთ ანალოგური ამაჩქარებელი, სავარაუდოდ იქნება ერთი პინი თითოეული x, y და z გამოსავლებისთვის.) დარწმუნდით, რომ თქვენი შედუღება არის მყარი და რომ მძივები არ გადაფარონ მიმდებარე ქინძისთავებს შორის.

ნაბიჯი 3: შექმენით ხელთათმანი

ააშენე ხელთათმანი
ააშენე ხელთათმანი

თხელი მუყაოს ან სქელი ქაღალდის ნაჭერი მართკუთხედში ოდნავ აღემატება თქვენს ამაჩქარებელს. მიამაგრეთ ამაჩქარებელი მუყაოზე, დარწმუნდით, რომ ბოლოში წებოვანა გაქვთ. შემდეგ, მუყაოს გამყარებული ამაჩქარებელი დააწებეთ ხელთათმანის უკანა მხარეს. მიამაგრეთ თითოეული მავთული ხელთათმანის მაჯაზე, რათა გაათავისუფლოთ დაძაბულობა აქსელერომეტრზე, შემდეგ კი თქვენი ხელთათმანი მზად არის. შეაერთეთ იგი უფრო გრძელ მავთულხლართებთან, რათა გქონდეთ საკმარისი სივრცე ხელის გადასაადგილებლად როდესაც ის არის ჩართული.

ნაბიჯი 4: შეადგინეთ აბლეტონში

ახლა დროა შევადგინოთ სიმღერა, რომელსაც საბოლოოდ გამოიყენებთ ხელთათმანისთვის გასაკონტროლებლად. მე ვურჩევ აბლეტონის მარყუჟებს, რომლებიც ყველა ერთად კარგად ჟღერს, მაგრამ მათი გამოყენება შესაძლებელია თანდათანობით: სცადეთ მელოდია, აკორდები, ბასი და პერკუსია. თქვენ შეძლებთ გამოიყენოთ თქვენი ხელთათმანი, როდესაც თითოეული მარყუჟი უკრავს ან არა.

თუ შეგიძლიათ იფიქროთ რაიმე სახის საინტერესო ბგერაზე, რომელიც დროდადრო უნდა შეიტანოთ სიმღერაში, როგორიცაა უცნაური ხმის ეფექტი ან არატრადიციული ინსტრუმენტი, სცადეთ დაამატოთ ერთი ან ორი მათგანიც! თქვენ შეგიძლიათ დააკავშიროთ ისინი ხელების ნაკლებად გავრცელებულ მოძრაობებთან, რათა დროდადრო რაღაც საინტერესო შემოიტანოთ.

აქ არის ბმული ჩემი Arduino- თან თავსებადი კომპოზიციისთვის, იმ შემთხვევაში, თუ არ გსურთ რომ დაწეროთ თქვენი საკუთარი:

(სამწუხაროდ, Ableton– ის სწავლება არ არის სამეურვეო პროგრამის ფარგლებში. თუმცა, ბევრი კარგი ვიდეოა, და Ableton– ს აქვს 90 დღიანი უფასო საცდელი პერიოდი! მე გირჩევთ ამ ვიდეოს.)

ნაბიჯი 5: დაიწყეთ Firmata– ს გამოყენება

დაიწყეთ Firmata– ს გამოყენება
დაიწყეთ Firmata– ს გამოყენება

იმისათვის, რომ თქვენი Arduino შეძლოს Ableton– თან კომუნიკაცია, თქვენ უნდა გამოიყენოთ ბიბლიოთეკა სახელწოდებით Firmata. თქვენ ასევე უნდა ჩამოტვირთოთ Ableton– ის კავშირის ნაკრები.

აბლეტონში, დააწკაპუნეთ პაკეტებზე> კავშირის ნაკრები> მოწყობილობები მენიუში ზედა მარცხნივ და შემდეგ ორჯერ დააწკაპუნეთ პირველ მოწყობილობაზე (არდუინო) მის დასამატებლად. დარწმუნდით, რომ გახსოვთ აბლტონის რომელ ტრეკს დაამატეთ მოწყობილობა!

ნაბიჯი 6: შეამოწმეთ ფირმა

სატესტო ფირმატა
სატესტო ფირმატა

პირველი, ჩვენ შევამოწმებთ და დავრწმუნდებით, რომ თქვენი არდუინო ურთიერთობს აბლეტონთან. ატვირთეთ ეს კოდის ფრაგმენტი თქვენს არდუინოში და გაუშვით:

#include void analogWriteCallback (byte pin, int value) {if (IS_PIN_PWM (pin)) {pinMode (PIN_TO_DIGITAL (pin), OUTPUT); analogWrite (PIN_TO_PWM (პინი), მნიშვნელობა); }} 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);}

ეს არის მინიმუმი, რაც საჭიროა ფირმასთან კომუნიკაციისთვის. ის უწყვეტად აგზავნის გამომავალს 800 (1024 – დან) აბლეტონში მდებარე ფირმატა მოწყობილობის 0 პორტში. თუ თქვენ ატვირთავთ ამ კოდს თქვენს Arduino– ში, როდესაც თქვენ გაქვთ ფირმატა მოწყობილობა გახსნილი აბლეტონში, ის უნდა გამოიყურებოდეს ზემოთ მოცემულ სურათზე. (რუქა პორტი 0 აბლტონში არსებულ ყველაფერზე, რათა ნახოთ ღირებულებები.)

შეგიძლიათ დააწკაპუნოთ რუქის ღილაკზე და შემდეგ ნებისმიერ ფირმასთან თავსებადი მოწყობილობაზე აბლეტონში, რათა დაამატოთ რუქა იმ პორტში მიღებულ შეყვანასა და ამ აბლეტონის მოწყობილობის მნიშვნელობას შორის. მარტივი მაგალითები მოიცავს აუდიო ეფექტის ფარგლებში ნებისმიერი ტრეკის მოცულობას ან აკრიფეთ. გამოიკვლიეთ და ნახეთ რისი პოვნა შეგიძლიათ რუქაზე!

ნაბიჯი 7: გავლენა მოახდინეთ მუსიკაზე თქვენი ხელის მოძრაობებით

გავლენა მოახდინეთ მუსიკაზე თქვენი ხელის მოძრაობებით!
გავლენა მოახდინეთ მუსიკაზე თქვენი ხელის მოძრაობებით!

ამ დროისთვის თქვენ უნდა გქონდეთ მუსიკა აბლეტონში, ფირმატას სკრიპტი თქვენს არდუინოში და ამაღლებული აქსელერომეტრის ხელთათმანი. მოდით შევქმნათ მუსიკა!

Arduino მოწყობილობის პორტები აბლეტონში სხვადასხვა ნივთზე (მე ვთავაზობ სიმღერის მოცულობას) და შემდეგ დაამატეთ კოდის ხაზები მონაცემების გასაგზავნად თითოეულ პორტში Arduino– დან.

Firmata.sendAnalog (პორტი, მოცულობა დონე);

გამოიყენეთ მსგავსი კოდი Firmata თითოეული პორტისთვის.

თუ გსურთ რაიმე მარტივი გააკეთოთ, შეგიძლიათ გაგზავნოთ ამაჩქარებლის მნიშვნელობები დაუმუშავებელი აბლეტონის პორტებში და დაადგინოთ ისინი იქიდან. უფრო დახვეწილი გამოცდილებისთვის შეგიძლიათ გადაწყვიტოთ: რომელი ამაჩქარებლის მნიშვნელობებმა უნდა გამოიწვიოს ხმები, როგორ და როდის?

შემდეგ ითამაშეთ აბლეტონის ყველა მარყუჟი, გაუშვით თქვენი Arduino კოდი და იცეკვეთ!

(პასუხისმგებლობის შეზღუდვის განაცხადი: თუ თქვენ გეგმავთ რაიმე სახის კომპლექსური ალგორითმის შექმნას თქვენი სიმღერისთვის, შეიძლება ბევრი დრო დასჭირდეს მის სრულყოფას. "Dance away" შეიძლება იყოს ნაკლებად ზუსტი ვიდრე მოსალოდნელი იყო.)

ნაბიჯი 8: სიმღერის კლასი (ბონუსი!)

თუ არ გაწუხებთ მოცულობის ამოსვლა ან სხვა გზა გაქვთ მის შესამცირებლად, გამოტოვეთ ეს ნაბიჯი. წინააღმდეგ შემთხვევაში, წაიკითხე!

მე შევამჩნიე, რომ ხმის გადართვა მდუმარედან სრულზე ერთი ნაბიჯით ქმნის უსიამოვნო ჩამხშობ ბგერებს და სასიამოვნოა, რომ უფრო თანდათანობით შევძლოთ მოცულობის შემცირება. თუმცა, ძნელია ამის გაკეთება არდუინოს სინქრონული პროგრამირების გარემოში. ასე რომ, აქ არის რამოდენიმე კოდი, რომელიც ხელს შეუწყობს popping წასვლა:

კლასის სიმღერა {public: int ტომი; int მოცულობა მიზანი; int updateSpeed; ტრეკი () {ტომი = 0; მოცულობა მიზანი = 0; updateSpeed = 0; } void setVolumeGoal (int მიზანი) {volumeGoal = მიზანი; } int getVolumeGoal () {დაბრუნება volumeGoal; } void setUpdateSpeed (int fastness) {updateSpeed = სისწრაფე; } int getVolume () {დაბრუნების მოცულობა; } void updateVolume () {if ((volume> volumeGoal) && ((volume - volumeGoal)> = updateSpeed)) {volume - = updateSpeed; } else if ((ტომი = updateSpeed)) {ტომი += updateSpeed; }} void მუნჯი (int fastness) {volumeGoal = 50; updateSpeed = სისწრაფე; } void full (int fastness) {volumeGoal = 950; updateSpeed = სისწრაფე; }};

თითოეულ ტრეკს აქვს მიმდინარე მოცულობა, მიზნის მოცულობა და სიჩქარე, რომლითაც ის მოძრაობს ამ მიზნის მოცულობისკენ. როდესაც გსურთ შეცვალოთ ტრეკის მოცულობა, დარეკეთ setVolumeGoal (). ყოველ ჯერზე, როდესაც თქვენ აწარმოებთ მარყუჟის () ფუნქციას თქვენს არდუინოში, დარეკეთ updateVolume () ყველა ტრეკზე და შემდეგ ეს ინფორმაცია გაგზავნეთ ფირმაში getVolume () - ით. შეცვალეთ განახლების სიჩქარე უფრო სწრაფი ან თანდათანობითი გაქრობისთვის! ასევე, თავიდან აიცილეთ მოცულობის 0 დადგენა, თუ შეგიძლიათ; ამის ნაცვლად, დააყენეთ იგი ძალიან დაბალ მნიშვნელობაზე (ნაგულისხმევი მუნჯი () არის 100).

ნაბიჯი 9: თვალყური ადევნეთ სიგრძეს, დარტყმებს და სხვა (ბონუსი!)

თქვენ შეგიძლიათ ბევრი რამის გაკეთება, რათა თქვენი პროექტის შედეგად მიღებული ხმა უფრო ადვილი მოსასმენი იყოს. აქ არის რამოდენიმე ვარიანტი:

თქვენ შეგიძლიათ თვალყური ადევნოთ სიმღერის ხანგრძლივობას. ამისათვის თქვენ უნდა გაარკვიოთ როდის დაიწყო სიმღერა; მე გირჩევ ცოტა ხნის მარყუჟს setup () ფუნქციაში, რომელიც აჭიანურებს თქვენს კოდს გაშვებამდე, სანამ არ შეიგრძნობს ხელის მოძრაობას. შეინახეთ სიმღერის დაწყების დრო ცვლაში millis () - ის გამოყენებით და შეამოწმეთ რამდენი ხანი გრძელდება ყოველ ჯერზე (). თქვენ შეგიძლიათ გამოიყენოთ ეს სიმღერის გარკვეულ დროს გარკვეული ფუნქციების გასააქტიურებლად ან გამორთვისთვის.

თუ იცით რამდენი ხანია თქვენი მარყუჟები მილიწამებში, თქვენ ასევე შეგიძლიათ თვალყური ადევნოთ რამდენ მარყუჟს გაიარეთ სიმღერის სტრუქტურის უფრო ნიუანსური გაგებისთვის!

კიდევ ერთი პოტენციური საკითხი, რომელსაც შეიძლება წააწყდეთ არის როდის დაიწყოთ და შეაჩეროთ სიმღერის დაკვრა. მე ეს მოვაგვარე იმის თვალყურის დევნებით, თუ რომელ ზომებში იყო სიმღერა ამჟამად. შემდეგ ჟესტის შემდგომ შემეძლო სიმღერების დაკვრა ნებისმიერი რაოდენობის დარტყმის ნაცვლად, მისი დაუყოვნებლივ გაწყვეტის ნაცვლად. ეს ყველაფერი უფრო შეუფერხებლად მიედინება. აქ არის მაგალითი:

if (millis () - lastLoop> = 4000) {მარყუჟები += 1; lastLoop = მილი (); for (int j = 0; j <8; j ++) {beatNow [j] = false; }} beat = (millis () - lastLoop) / 250; თუ (სცემეს! = lastBeat) {lastBeat = სცემეს; beatsLeft -= 1; }

დარწმუნდით, რომ განაახლოთ მოცულობა შესაბამისად beatNow [beat] და/ან beatsLeft მნიშვნელობებზე. მაგალითი კოდი, რომელიც შეიცავს თითქმის ყველაფერს ამ სახელმძღვანელოში, პლუს ზოგიერთი, თან ერთვის იმ შემთხვევაში, თუ გსურთ მისი პრაქტიკაში ნახვა.

გირჩევთ: