Talaan ng mga Nilalaman:

Guitar Hero Arduino Project: 12 Hakbang (na may Mga Larawan)
Guitar Hero Arduino Project: 12 Hakbang (na may Mga Larawan)

Video: Guitar Hero Arduino Project: 12 Hakbang (na may Mga Larawan)

Video: Guitar Hero Arduino Project: 12 Hakbang (na may Mga Larawan)
Video: Гитара для Clone Hero на Arduino своими руками 2024, Hulyo
Anonim
Guitar Hero Arduino Project
Guitar Hero Arduino Project
Guitar Hero Arduino Project
Guitar Hero Arduino Project
Guitar Hero Arduino Project
Guitar Hero Arduino Project

Wij zijn Maarten Vrebos, Justin Cavanas en Wannes Stroobandt para mag-aral kami ng multimedia at communicatietechnologie. Maaari kang mag-aral ng prohekto para sa Audiovisual at Mga Alituntunin ng IT na gagamitin sa Guitar Hero-gitaar na gehackt en gebruikt als behuizing voor onze MIDI-controller. Si Het ay nasa labas ng bedoeling om de bestaande knoppen op de gitaar intern te vervangen. Onze controller zal vastgehouden en bespeeld worden als een normale gitaar. Aangezien we iets hebben gehackt hebben we er niet veel extra materiaal in moeten verwerken.

In de afbeelding kan u onze allereerste schets op papier zien van hoe het eindproduct er zou moeten uitzien met daarnaast een foto van de gitaar die als behuizing zal worden gebruikt.

Wij hebben ons voor dit project gebaseerd op volgende bronnen:

slapyak.wordpress.com/guitar-hero-midi-con…

www.instructables.com/id/Converting-a-rescu…

gizmodo.com/391834/turn-your-guitar-hero-g…

Benodigdheden voor dit project

  • 6 kleine pushbuttons
  • 7 1kohm resistors
  • 1 gele LED 1
  • blauwe LED
  • 1 Arduino Uno R3
  • 1 groene LED
  • 2 rode LEDs
  • 1 schuifschakelaar
  • 1 breadboard
  • 1 potensyomiter
  • 1 protobord
  • 1 Guitar Hero gitaar
  • Voldoende bedrading
  • Materiaal om te solderen / dremelen /
  • Schroevendraaier

Hakbang 1: Componenten Verzamelen

Componenten Verzamelen
Componenten Verzamelen

Voor ons prototype (op breadboard) hebben we volgende componenten gebruikt:

6 Mga Pushbutton

7 1kohm Resistors

1 dilaw na LED

1 Blue LED

1 Arduino Uno R3

1 Green LED

2 pulang LED

1 Schuifschakelaar

1 Breadboard

1 Potensyomiter

Hakbang 2: Prototype Bouwen

Prototype na si Bouwen
Prototype na si Bouwen
Prototype na si Bouwen
Prototype na si Bouwen
Prototype na si Bouwen
Prototype na si Bouwen

Kami ay prototype ng bouwen hebben namin sa bawat bahagi ng aparato sa aming breadboard, ang breadboard dient at als na testobject zodat ay hindi namin tinutukoy sa pagpapakitang tao para sa iyo. Sa prototype hebben we dan ook gedigitaliseerd sa pamamagitan ng tinkercad.com, sa pamamagitan ng manier hadden ay nais naming mag-overzicht van ons na prototype ng mga ito sa pamamagitan ng isang diskarte ook kon bewerken.

Er worden 5 kleine pushbuttons gebruikt die fungeren als 5 snaren en een grote pushbutton die in combinatie met één of meerdere 'snaren' moet worden ingedrukt om een auditief effect te krijgen. De verschillende LED-lampjes dienen gewoon als visuele controle om er zeker van te zijn dat de interactiveie succesvol werkt.

Hakbang 3: Prototype ng Code

Prototype ng Code
Prototype ng Code

Globale variabelen

In het eerste deel van de code initialiseer je globale variabelen voor de pin van arduino uno waar all pushbuttons mee verbonden zijn.

// zet pin number waar main Button (snaar) en andere button aan verbonden zijn: const int main Button = A1; // gitaar snaar const int lightSensor = A0; Const int buttonPin1 = 2; // nummer van pushbutton1 const int buttonPin2 = 3; // nummer van pushbutton2const int buttonPin3 = 4; // nummer van pushbutton3const int buttonPin4 = 5; // nummer van pushbutton4const int buttonPin5 = 6; // nummer van pushbutton5

Hierna worden er twee arrays aangemaakt voor de namen van de pushbuttons en hun pinnummer.

const int aantalKnoppen = 5; const String namenKnoppen [aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen [aantalKnoppen] = {2, 3, 4, 5, 6};

En dan nog variabelen voor de pins van de LED lichtjes.

Const int ledPin1 = 13; // ang bilang ng LED pin 13

Const int ledPin2 = 12; // ang bilang ng LED pin 12 const int ledPin3 = 11; // ang bilang ng LED pin 11 const int ledPin4 = 10; // ang bilang ng LED pin 10 const int ledPin5 = 9; // ang bilang ng LED pin 9 const int potPin = A5; // ang bilang ng LED pin A5

De laatste globale variabelen dienen als 'states' voor de sensors (zijn de pushbuttons ingedrukt of niet? Potentiometer, lichtsensor).

// initialiseer buttonStates voor de knoppen (ingedrukt of niet) int main ButtonState = 0; int buttonState1 = 0; int buttonState2 = 0; int buttonState3 = 0; int buttonState4 = 0; int buttonState5 = 0; int lightSensorState = 0; int potValue = 0; int lightValue = 0;

Pag-set up

Nu volgt de void setup fctie. Ang Deze ay van het type na walang bisa (geeft geen waarde terug) en de nagtuturo ng hierin worden maar 1 keer uitgevoerd.

Bij elke functie ay nagkomento sa isang serye ng kanilang salita. Karagdagang uitleg sa wat een specifieke fctie concreet doet ay ang vinden sa de arduino referensya

void setup () {// data rate per seconde (baud) voor seriele data transmissie Serial.begin (9600); // Initialiseer de ledPin variabelen als output pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); pinMode (ledPin3, OUTPUT); pinMode (ledPin4, OUTPUT); pinMode (ledPin5, OUTPUT); // initialiseer alle pushbuttons als input: pinMode (main Button, INPUT); pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); pinMode (buttonPin5, INPUT); pinMode (potPin, INPUT); pinMode (lightSensor, INPUT); }

Walang bisa na fctie

Na de setup () fctie volgt de loop () fctie, de mga tagubilin mamatay hierin staan gaan herhaald uitgevoerd worden.

void loop () {// lees de staat van de pushbuttons uit (ingedrukt of niet) mainButtonState = digitalRead (mainButton); buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); buttonState3 = digitalRead (buttonPin3); buttonState4 = digitalRead (buttonPin4); buttonState5 = digitalRead (buttonPin5);

// alle pushbutton statusen sa een array

int buttonStates = {buttonState1, buttonState2, buttonState3, buttonState4, buttonState5};

// leest de waarde uit van de potentiometer en de lichtsensor

potValue = analogRead (potPin); lightValue = analogRead (lightSensor);

// nagdeklara een array mainStates en geef die de standaard waarden 0 sa.

int mainStates = {0, 0, 0, 0, 0};

// loop over de array aantalKnoppen

para sa (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); // initialiseer alle knopPinnen als input digitalRead (knopPinnen ); // lees de waarde van alle knoppinnen uit // indien de mainswitch (snaar) ingedrukt is, print alle knopnamen, alle buttonstates if (main ButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.println (buttonStates ); }}

Hakbang 4: Prototype Uittesten

Nadat het prototype gebouwd is volgens ons model en de code geschreven is in Processing, is het tijd om het prototype uit te testen. Ang op de video ay ang zien dat all knoppen een reactie geven op de bijhorende ledjes en dat ook combinaties van knoppen mogelijk zijn.

Sa video ng tweede ay ang zien hoe onze tremolo werkt aan de hand van een potentiometer in de gitaar en hoe de waardes worden uitgelezen sa Processing.

Hakbang 5: Behuizing "ontmantelen" En Kijken Welke Componenten Gebruikt Gaan Worden

Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing

Als de code correct werkte op het prototype zijn we begonnen met het "ontmantelen" van onze Guitar Hero-gitaar. We hebben de gitaar opengemaakt met een schroevendraaier en bekeken welke originele componenten we eventueel nog zouden kunnen hergebruiken voor onze controller. Uiteindelijk hebben we onze eigen pushbuttons in de bestaande pindutan gekregen (zie volgende stap). Inaalis namin ang tremor ook gebruikt voor ons eindproduct en voor onze hoofdbutton (simulan ang pindutan na kung saan ay magkakasama pagkatapos ng spelen) hebben we ook de originele twee pindutan ng gebruikt (zie vierde foto). De LEDjes zullen verdwijnen (deze waren enkel ter indatie zodat we zagen dat all knoppen correct werkten.

Hakbang 6: Werking Originele Buttons + Dremelen

Werking Originele Buttons + Dremelen
Werking Originele Buttons + Dremelen

Ang opsyong bijhorende na video ay ang wenze te zien waarop de twee originele knoppen werken als een soort van schakelaar die wij gebruiken om een effect te genereren bij combinatie van knoppen.

Ang mga pindutan ng eigen ay nabigyan ng verwerken in de originele knoppen hebben we de binnenkant van de originelen er grotendeels uitgehaald zoals te zien is op de foto.

Hakbang 7: Bedrading Solderen + Buttons Vastlijmen

Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen

Natutukoy namin ang mga ito sa pamamagitan ng pagtulong sa tinapay ng werken moeten de draden gesoldeerd worden om zo de verschillende componenten met elkaar te verbinden. Narat dit gebeurd ay kunnen namin ang mga pindutan ng malawak na mga zoals na ang zien ay op de litrato's. Eens dit gebeurd ay kunnen we doorgaan naar de volgende stap.

Hakbang 8: Mga Plaat na Ginagawa sa De Behuizing

Plaats Maken sa De Behuizing
Plaats Maken sa De Behuizing
Plaats Maken sa De Behuizing
Plaats Maken sa De Behuizing
Plaats Maken sa De Behuizing
Plaats Maken sa De Behuizing

Omdat dit Guitar Hero-model redelijk krap was om mee te werken hebben we extra plaats moeten maken d.m.v. dremelen Kung hindi ka makakakuha ng iyong van de gitaar een hele strook verwijderd zodat er meer plaats ontstaat voor de bedrading in de gitaar. Maaring magkaroon ng overal in de binnenkant obstakels waren, waaronder veel buisjes om de vijzen in te bevestigen, hebben we die ook verwijderd om optimaal van de gegeven ruimte gebruik te kunnen maken. Ang op de vierde en vijfde na litrato ay nasa loob ng van de gitaar een doorgang hebben gecreëerd voor de draden die naar de pindutan na gagamitin ng gitaar anders niet meer te sluiten was. En op de laatste litrato is the zien dat we de draden die rechtstreeks verbonden worden met de Arduino door een gat in de onderkant van de gitaar de behuizing verlaten.

Hakbang 9: Bedrading Aansluiten Op Protobord

Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord

Ang lahat ng mga sangkap ay natutugunan sa pamamagitan ng pandiwa ng hebben namin gebruik gemaakt van een protobord. Ito ay ang bordje dat eigenlijk op net dezelfde manier werkt als een breadbord, maar dan betrouwbaarder en efficiënter. We hebben de bedrading aan het bordje gesoldeerd zoals te zien is op de derde litrato. Ang bord ay het centrale punt van waaruit al onze verbindingen vertrekken en samenkomen (zie foto 2).

Hakbang 10: Verstevigen

Verstevigen
Verstevigen

Ang pagtatapos ng pag-ugnay ay maaaring tumindig sa pamamagitan ng pag-edit ng verstevigen voor dagdag na stabiliteit. Ang mga larawan ay nai-download para makita natin ang aming mga larawan sa loob ng dv. dremelen achteraan de button verstevigen met stukjes karton.

Hakbang 11: Code Voor Het Communiceren Met Reaper

Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper
Code Voor Het Communiceren Met Reaper

Ang code ng Deze ay na-oplay sa twee delen, ngunit ang deel ay nasa de arduino IDE (interactive development enviroment) geschreven. Ang code ng kamatayan ay maaari mong i-install ang sarili sa sarili sa lahat ng mga tagapag-alaga ng van sensor upang mai-kontrolado ang pintuan sa pintuan upang maproseso ito.

Ang pagpoproseso ay het tweede gedeelte. Ang code ng code ay nag-iingat sa lahat ng mga arstino na doorstuurt para sa pintuan sa pinto na tumatagal ng Reaper.

Arduino

/ * Ang code na ito ay isang pangunahing sketch upang makipag-usap sa Pagproseso sa pamamagitan ng Serial.

Ito ay isang blueprint kung saan maaari kang maglagay ng iyong sariling code

tinukoy para sa iyong sariling mga pindutan, potentiometers o sensor.

Mayroon itong handshake upang matiyak na mayroon kaming contact

at ang format kung saan kami nakikipag-usap ay napagpasyahan

Mahalagang buuin ang mensahe sa parehong paraan, upang alam ng Pagproseso kung paano ito deconstruct at magpadala ng mga tamang OSC-message sa aming DAW

ginawa para sa werkcollege AV&IT

Oktubre 2017

*

/ rate ng baud

const mahabang baudRate = 115200;

// oras upang maghintay sa ms sa pagitan ng mga botohan sa mga pin

Const int loopPauseTime = 200; // milli segundo

// simulan at wakasan ang mga halaga para sa mensahe na ipinadala sa Serial

Const String startString = "*", endString = "#";

Const char contactCharacter = '|';

// pin id's

// iba pang mga global variable

Const int aantalKnoppen = 5; const String namenKnoppen [aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen [aantalKnoppen] = {2, 3, 4, 5, 6}; Const int main Button = A1;

int main ButtonState = 0;

int potValue = 0;

// analoge sensors

const int potPin = A5; // pin voor tremolo

// Kailangan namin ang pagpapaandar na ito upang maitaguyod ang pakikipag-ugnay sa sketch ng Pagproseso

// Keep it here void establishContact () {habang (Serial.available () <= 0) {Serial.print (contactCharacter); // magpadala ng char at maghintay para sa isang tugon… pagkaantala (loopPauseTime); } Serial.read (); }

walang bisa ang pag-setup () {

// itakda ang pinModes para sa lahat ng mga pin para sa (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); } pinMode (main Button, INPUT); // hindi komportable kung gumagamit ka ng mga sensor na gumagana sa 3V sa halip na 5V // kakailanganin mong i-wire ang 'ext' na pin sa 3.3V pati na rin // analogReferen (EXternalAL);

// initialize Serial comms

Serial.begin (baudRate); habang (! Serial); // wait for handshake establishContact (); }

void loop () {

// HAKBANG 1: BASAHIN ANG mga BUTTON // i-poll ang lahat ng mga pin at i-map ang pagbabasa sa naaangkop na saklaw int buttonStates [aantalKnoppen]; / * buttonStates [0] = digitalRead (knopPinnen [0]); buttonStates [1] = digitalRead (knopPinnen [1]); buttonStates [2] = digitalRead (knopPinnen [2]); buttonStates [3] = digitalRead (knopPinnen [3]); buttonStates [4] = digitalRead (knopPinnen [4]); * / mainButtonState = digitalRead (main Button); para sa (int i = 0; i <aantalKnoppen; i ++) {buttonStates = digitalRead (knopPinnen ); } potValue = analogRead (potPin); // halimbawa: // float v0 = mapa (bpm, 0, 1023, 60, 250); // kung nais mong gumamit ng isang normalized float (hal. para sa dami) // float v1 = mapa (analogRead (pin2), fromMin, fromMax, 0, 100) / 100.0;

// HAKBANG 2: SULAT NG MENSAHE

Serial.print (startString); // simulan ang isang pagkakasunud-sunod ng mensahe para sa (int i = 0; i <aantalKnoppen; i ++) {if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); kung (i <aantalKnoppen - 1) {Serial.print (","); }} iba pa {buttonStates = 0; Serial.print (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); kung (i <aantalKnoppen - 1) {Serial.print (","); }}} Serial.print (","); Serial.print ("tremolo"); Serial.print (","); Serial.print (mapa (potValue, 0, 1023, 0, 100)); // isulat ang katapusan ng mensahe Serial.print (endString);

// teka sandali..

antala (loopPauseTime); }

Pinoproseso

Pagwawaksi: Ang lahat ng code ng van sa pagproseso ng sketch staat hier sa geschreven, voor de volledige code zie het bestand: ProcessingSoundControl_handout_v6_1.pde sa bijlage

Mga tagubilin sa volgende moeten aangepast worden (indien nodig):

// Baudrate moet hetzelfde zijn zoals in de arduino sketch

pangwakas na int baudRate = 115200;

// Zoek naar het IP adress sa ani (zie screenshot sa bijlage)

// Processing stuurt naar dit andres en reaper luistert hier naar //

// final String remoteIP = "192.168.1.43"; // hal. "127.0.0.1";

huling String remoteIP = "10.3.209.60";

// Take note of the sendPort at punan ito sa Reaper.

// Ito ang port na Pinapadala ng Pagproseso at nakikinig si Reaper.

pangwakas na int makinigPort = 12000, sendPort = 12000;

// Ang listenPort dito ay upang aktibong i-debug.

// ang mga portNames ay narito upang mag-debug din.

// final String portName = "/ dev / ttyACM0";

huling String portName = "COM5"; // "/ dev / ttyUSB0";

// ///. // //

pagproseso ng pag-import.serial. *;

import java.util. *;

i-import ang oscP5. *;

i-import ang netP5. *;

OscP5 oscP5;

NetAddress myRemoteLocation;

Serial commsPort; // Ang serial port

boolean messageArrived = false;

Papasok na string = "", PapasokOSCMessage = "";

huling char startChar = '*', endChar = '#'; pangwakas na char contactCharacter = '|';

// Upang matiyak na ipinapadala lamang namin ang mga parameter (halaga) na pagbabago

// ang mga pandaigdigang variabl na ito ay na-delcared dito ngunit hindi dapat // hindi isimula dito! HashMap oldParams, newParams, toSendParams;

// Kailangan naming hatiin ang mensahe sa bawat kuwit

void processIncoming () {String resVec = papasok.split (","); // nakukuha namin ang mga pares ng pangalan + halaga // kaya para sa bawat pangalan (+2)… subukan {para (int i = 0; i <resVec.length; i + = 2) {float value = Float.parseFloat (resVec [i + 1]); // ilagay ang mga ito sa bagong Hashtable newParams.put (resVec , halaga); }} // kung may naganap na error, abangan natin itong ipakita at lumabas. catch (Exception ex) {println ("Exception Message:" + ex); printArray (resVec); exit (); }}

// Upang ma-filter ang aming mga mensahe

/ * Tinitiyak namin na mayroon lamang isang mensahe sa OSC-out kapag * nagbabago ang input message (Serial) * Iyon ay: kung pipihitin natin / itulak ang pindutan at binabago nito ang halaga. * Kaya sinala namin ang mga papasok na halaga na talagang nagbabago * tala: hindi namin maiiwasan ang mga paglukso na halaga * na nagmula sa hal. Mga accelerometro o distansya sensor * kakailanganin mong pakinisin ang iyong sarili sa Arduino * / void filterParams () {toSendParams = bago HashMap (); para sa (String key: newParams.keySet ()) {// kung ang key ay naroroon kung (oldParams.containsKey (key)) {// key na naroroon at ang halaga ay hindi pareho, pagkatapos ay i-update kung (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} iba pa {// key ay wala sa mga lumang param, kaya't ilagay ito! toSendParams.put (key, newParams.get (key)); } oldParams.put (key, newParams.get (key)); }}

walang bisa makeOSC () {

para sa (String key: toSendParams.keySet ()) {OscMessage myMessage = bagong OscMessage ("/" + key); myMessage.add (toSendParams.get (key)); / * ipadala ang mensahe * / oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {

proseso ng Paparating (); filterParams (); makeOSC (); } // Kapag nais naming i-print sa window na walang bisa ang ShowIncoming () {// upang makita ang papasok na mensahe, tulad ng nakatakda sa teksto ng HashMap ("Papasok mula sa Arduino", 20, 20); int y = 20; para sa (String key: newParams.keySet ()) {y = y + 20; teksto (susi, 20, y); teksto (newParams.get (key), 300, y); }}

walang bisa showOsc () {

teksto (PapasokOSCMessage, 300, 200); PapasokOSCMessage = ""; }

walang bisa ang pag-setup () {

laki (1000, 800); // Punan ang laki ng entablado (255); background (0); oldParams = bagong HashMap (); newParams = bagong HashMap (); // printArray (Serial.list ()); commsPort = bagong Serial (ito, portName, baudRate);

/ * simulan ang oscP5, nakikinig para sa papasok na mga mensahe * /

oscP5 = bagong OscP5 (ito, listenPort);

/ * myRemoteLocation ay isang NetAddress. ang isang NetAddress ay tumatagal ng 2 mga parameter, * isang ip address at isang numero ng port. Ang myRemoteLocation ay ginagamit bilang parameter sa * oscP5.send () kapag nagpapadala ng mga osc packet sa isa pang computer, aparato, * application. paggamit tingnan sa ibaba. para sa mga layuning pansubok ang pakikinig port * at ang port ng malayuang lokasyon ng address ay pareho, samakatuwid ay * magpapadala ka ng mga mensahe pabalik sa sketch na ito. * / myRemoteLocation = bagong NetAddress (remoteIP, sendPort); }

walang bisa draw () {

kung (messageArrived) {background (0); translateMessage (); Ipakita ang Papasok (); messageArrived = false; } showOsc (); }

walang bisa ang serialEvent (Serial commsPort) {

// basahin ang isang byte mula sa serial port: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // ask for more println ("simula…"); pahinga; case startChar: papasok = ""; pahinga; case endChar: messageArrived = true; // println ("katapusan ng msg"); pahinga; default: papasok + = inChar; pahinga; }}

/ * Ang papasok na mensahe ng osc ay naipasa sa pamamaraang oscEvent. * /

void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // makuha ang 1st osc argument

PapasokOSCMessage + = "\ n" +

String.format ("natanggap ang isang osc message:" + "addrpattern:" + theOscMessage.addrPattern () + ":% f", halaga); println (PapasokOSCMessage); }

Hakbang 12: Controller Uittesten

Ang all all ay aangesloten, ang lahat ng code ay geschreven en alles ay gedubbelcheckt is het eindelijk tijd om de controller z'n werk te laten doen. Mag-click dito upang ma-access ang Reaper para sa talino ng van ng voltooide Guitar Hero MIDI Controller!

Inirerekumendang: