Агуулгын хүснэгт:
- Алхам 1: Бүрэлдэхүүн хэсгүүд
- Алхам 2: Bouwen прототип
- Алхам 3: Кодын прототип
- Алхам 4: Uittesten прототип
- Алхам 5: "Онтмантэлэн" -г идэвхжүүлэх нь хамгийн чухал хэсэг юм Гебрукт Гаан Ворден
- Алхам 6: Werking Originele Buttons + Dremelen
- Алхам 7: Хэвтэж буй гагнуур + товчлуурууд
- Алхам 8: Де Бехуизинг дэх Макеныг дуудаж үзээрэй
- Алхам 9: Орны хорхойг тайлах Aansluiten Op Protobord
- Алхам 10: Верстевиген
- Алхам 11: Code Voor Het Communiceren Reaper -тэй уулзав
- Алхам 12: Uittesten хянагч
Видео: Гитар баатар Ардуино төсөл: 12 алхам (зурагтай)
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:05
Wij zijn Maarten Vrebos, Justin Cavanas en Wannes Stroobandt, бид мультимедиа, харилцаа холбооны технологийг судалж үздэг. Аудио-визуал ба мэдээллийн технологийн зарчмууд нь гитар баатар-гитар болон бусад MIDI-хянагчийг дэмждэг. Хет нь интернэтэд дадлагажигчаар ажиллах боломжтой болсон. Онцгой хянагч нь өргөн уудам бүсэд байдаг. Aangezien we iets hebben gehackt hebben бид нэмэлт мэдээлэл авах боломжтой.
Хязгааргүй тохиолдолд та энэ програмыг ашиглах боломжтой болно.
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 дуу хоолой төсөл
- 6 клейн товчлуур
- 7 1 кох резистор
- 1 гэрэл LED 1
- blauwe LED
- 1 Arduino Uno R3
- 1 гэрэл LED
- 2 морьтой LED
- 1 швифшакелаар
- 1 талхны самбар
- 1 потенциометр
- 1 протобар
- 1 гитар баатар гитар
- Voldoende орондоо хэвтэж байна
- Materiaal om te solderen/dremelen/
- Шровендрайер
Алхам 1: Бүрэлдэхүүн хэсгүүд
Voor ons прототип (op breadboard) hebben we volgende componenten gebruikt:
6 товчлуур
7 1 кох резистор
1 шар LED
1 цэнхэр LED
1 Arduino Uno R3
1 Ногоон LED
2 улаан LED
1 Шуйфшакелаар
1 Талхны самбар
1 потенциометр
Алхам 2: Bouwen прототип
Төмөр замын эх хавтангийн прототип нь бид талхны самбар дээр суурилсан, талхны самбарыг туршиж үзэхээс гадна тест хийх боломжийг олгодог. Энэ загварыг tinkercad.com -ээр дамжуулан олж авах боломжтой бөгөөд бид өөрсдийнхөө загварыг танилцуулж байна.
5 -ийн түлхүүрийг дарах нь мөөгөнцөрөөс гадна 5 -р товчлуурыг дарах нь комбинацид ороход маш чухал үүрэг гүйцэтгэдэг. LED-чийдэнгийн аль алиныг нь хянах боломжтой бөгөөд энэ нь харилцан үйлчлэлийг амжилттай гүйцэтгэдэг.
Алхам 3: Кодын прототип
Глобал төрөл
Ганцаараа бол кодыг эхлүүлэх боломжтой.
// zet pin number waar mainButton (snaar) en andere button aan verbonden zijn: const int mainButton = A1; // gitaar snaar const int lightSensor = A0; const int buttonPin1 = 2; // тооны машины товчлуур1 const int buttonPin2 = 3; // тооны машины товчлуур2const int buttonPin3 = 4; // тооны машины товчлуур3const int buttonPin4 = 5; // тооны машины товчлуур4const int buttonPin5 = 6; // nummer ван товчлуур 5
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};
Тохиргоог өөрчилж болно.
const int ledPin1 = 13; // LED зүү 13
const int ledPin2 = 12; // LED зүүний тоо 12 const int ledPin3 = 11; // LED зүүний тоо 11 const int ledPin4 = 10; // LED зүүний тоо 10 const int ledPin5 = 9; // LED зүү 9 const int potPin = A5 тоо; // LED зүү A5 тоо
Дэлхийн өнцөг булан бүрээс өөр өөр мужуудын мэдрэгч (диетийн потенциометр, личценсор).
// initialiseer buttonStates эсвэл knoppen (inietrukt of niet) int mainButtonState = 0; int товчState1 = 0; int товчState2 = 0; int buttonState3 = 0; int buttonState4 = 0; int товчState5 = 0; int lightSensorState = 0; int potValue = 0; int lightValue = 0;
Тохируулах
Хүчин төгөлдөр бус тохируулах функц. Deze is van het type void (geeft geen waarde terug) гэсэн зааварчилгаа нь 1 -ээс дээш тооны заавар юм.
Bij elke functie нь коммент бичихэд хялбар байдаг. Functie concreet doet -ээс илүү нэмэлт мэдээлэл авах боломжтой.
void setup () {// нэг секундын өгөгдлийн хурд (baud) voor seriele өгөгдөл дамжуулах Serial.begin (9600); // LEDPin -ийн анхны хувилбар нь pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); pinMode (ledPin3, OUTPUT); pinMode (ledPin4, OUTPUT); pinMode (ledPin5, OUTPUT); // initialiseer alle pushbuttons als input: pinMode (mainButton, INPUT); pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); pinMode (buttonPin5, INPUT); pinMode (potPin, INPUT); pinMode (lightSensor, INPUT); }
Хоосон хүчин зүйл
Na de setup () functie volgt de loop () functie, зааварчилгаа нь үхэх болно.
void loop () {// lees de staat van de pushbuttons uit (niet of ingedrukt) mainButtonState = digitalRead (mainButton); buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); buttonState3 = digitalRead (buttonPin3); buttonState4 = digitalRead (buttonPin4); buttonState5 = digitalRead (buttonPin5);
// бүх массив дахь бүх товчлуурын статус
int buttonStates = {buttonState1, buttonState2, buttonState3, buttonState4, buttonState5};
// leest de waarde uit van de potentiometer en de lichtsensor
potValue = analogRead (potPin); lightValue = analogRead (lightSensor);
// mainstates en geef die de standaard waarden 0 in.
int mainStates = {0, 0, 0, 0, 0};
// array гаруй давталт aantalKnoppen
for (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, all al knopnamen, alle buttonstates if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.println (buttonStates ); }}
Алхам 4: Uittesten прототип
Nadat het прототип gebouwd нь volgens ons загвар бөгөөд код нь geschreven нь Боловсруулалтад байдаг, гэхдээ энэ нь туршилтын загвар юм. Видео бичлэг нь маш энгийн бөгөөд маш сайн хослуулан ашиглах боломжтой юм.
Твид видео нь боловсруулалтанд ихээхэн хохирол учруулж буй потенциометр юм.
Алхам 5: "Онтмантэлэн" -г идэвхжүүлэх нь хамгийн чухал хэсэг юм Гебрукт Гаан Ворден
Алс код нь зөв хийгдсэн бөгөөд бид "гитарчин" гитар баатартай "ontmantelen" уулзсан. We hebben de gitaar opengemaakt enen schroevendraaier en bekeken welke originele componenten we eventueel nog zouden kunnen hergebruiken voor onze controller. Uiteindelijk hebben бид de bestaande товчлуурууд дээр eigen pushbuttons onze gekregen (zie volgende үдээс). We hebben de tremolo ook gebruikt voor ons eindproduct en voor onze hoofdbutton (эхлүүлэх товчлуурууд нь бүгд өөр өөр хослолууд юм) hebben we ook de originele twee button gebruikt (zie vierde foto). LED LED -ууд үнэн зөв байгаа эсэхийг шалгаарай.
Алхам 6: Werking Originele Buttons + Dremelen
Оп де bijhorende видео нь de wijze 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 юм.
Ум onze eigen товчлуурууд ver verken in de originele knoppen hebben бид де бинненкант ван де оригенэл гротендельс uitgehaald zoals te zien is op de foto.
Алхам 7: Хэвтэж буй гагнуур + товчлуурууд
Omdat we niet meer met een breadboard werken moeten de draden gesoldeerd worden om zo de verschillende componenten met elkaar te verbinden. Nadat dit gebeurd is kundnen we de button vastlijmen zoals te zien is op de foto's. Eens dit gebeurd is kunnen we doorgaan naar de volgende stap.
Алхам 8: Де Бехуизинг дэх Макеныг дуудаж үзээрэй
Omdat dit Guitar Hero-model redelijk krap was om mee te werken hebben we extra plaats moeten maken d.m.v. dremelen. Zo hebben we uit de achterkant van de gitaar een hele strook verwijderd zodat er meer plaats ontstaat voor de bedrading in de gitaar. Omdat er 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. Диск дээр дарсан гэрэл зургийн товчлуурууд нь аль хэдийн дарагдсан байдаг. Дахин хэлэхэд, бид маш их зүйлийг мэддэг байсан.
Алхам 9: Орны хорхойг тайлах Aansluiten Op Protobord
Тайлбарыг буцааж англи (Америкийн Нэгдсэн Улс) руу орчуулах Орчуулах Om alle componenten met elkaar te verbinden hebben we gebruik gemaakt van een protobord. Энэ бол нандин борлуулалт, үр дүнгийн талбар юм. Бид маш их үнэ цэнэтэй зүйл гэж үздэг. Dord bord is het centrale punt van waaruit al onze verbindingen vertrekken en samenkomen (зураг 2).
Алхам 10: Верстевиген
Алс дуусгах нь илүү тогтвортой байх болно. Op deze foto is te zien hoe we het deel dat we er hebben uitgehaald d.m.v. dremelen achteraan де товчлуурууд нь картонтой танилцсан.
Алхам 11: Code Voor Het Communiceren Reaper -тэй уулзав
Deze кодыг twee delen -д opgedeeld, het eerste дээлийг de arduino IDE (интерактив хөгжлийн орчин) ашиглах боломжтой. Die code wordt geüpload naar arduino zelf en dient om alle waarden van de sensors van de midi controller uit te lezen en door te sturen naar боловсруулах.
Боловсруулалтыг хийх ёстой. Deze code dient om alles wat arduino doorstuurt te ontvangen en door te sturen naar Reaper.
Ардуино
/* Энэ код нь Цуваагаар дамжуулж боловсруулахтай харилцах үндсэн ноорог юм.
Энэ бол өөрийн кодоо оруулах боломжтой зураг төсөл юм
өөрийн товчлуур, потенциометр эсвэл мэдрэгчид зориулагдсан болно.
Энэ нь холбоо барьж байгаа эсэхийг шалгахын тулд гар барих явдал юм
мөн бидний харилцаж буй хэлбэрийг шийддэг
Зурвасыг яг ийм байдлаар бүтээх нь чухал юм.
Тиймээс боловсруулалт нь үүнийг хэрхэн задалж, OSC-ийн зөв мессежийг манай DAW руу илгээхийг мэддэг
werkcollege AV&IT -д зориулж хийсэн
2017 оны аравдугаар сар
*
/ дохионы түвшин
const long baudRate = 115200;
// тээглүүр хүртэлх санал асуулгын хооронд хүлээх цаг
const int loopPauseTime = 200; // милл секунд
// Цуваа дээр илгээсэн зурвасын эхлэл ба төгсгөлийн утга
const String startString = "*", endString = "#";
const char contactCharacter = '|';
// таних тэмдэг
// бусад дэлхийн хувьсагчид
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 mainButton = A1;
int mainButtonState = 0;
int potValue = 0;
// аналог мэдрэгч
const int potPin = A5; // тремоло
// Боловсруулалтын тоймтой холбоо тогтооход бидэнд энэ функц хэрэгтэй
// Үүнийг энд void байлга, installContact () {while (Serial. // тэмдэгт илгээж хариу хүлээнэ үү … саатал (loopPauseTime); } Serial.read (); }
хүчингүй тохиргоо () {
// pinModes -ийг бүх тээглүүрт тохируулах (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); } pinMode (mainButton, INPUT); // хэрэв та 5V -ийн оронд 3V дээр ажилладаг мэдрэгч ашигладаг бол тайлбар өгөхгүй бол та 'ext' pin -ийг 3.3V -тэй холбох хэрэгтэй болно // analogReference (EXTERNAL);
// Serial comms -ийг эхлүүлэх
Цуваа.begin (baudRate); байхад (! Цуваа); // гар барихыг хүлээнэ үү installContact (); }
void loop () {
// 1 -Р АЛХАМ: READ TUTTONS // бүх тээглүүрээс санал асуулга авч, уншилтыг 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 (mainButton); for (int i = 0; i <aantalKnoppen; i ++) {buttonStates = digitalRead (knopPinnen ); } potValue = analogRead (potPin); // жишээ: // float v0 = газрын зураг (bpm, 0, 1023, 60, 250); // хэрэв та хэвийн хөвөгч (жишээ нь эзлэхүүний хувьд) ашиглахыг хүсч байвал // float v1 = map (analogRead (pin2), fromMin, fromMax, 0, 100) / 100.0;
// АЛХАМ 2: МЕССЕЖ БИЧИХ
Serial.print (startString); // (int i = 0; i <aantalKnoppen; i ++) {if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); if (i <aantalKnoppen - 1) {Serial.print (","); }} өөр {buttonStates = 0; Цуваа.хэвлэх (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); if (i <aantalKnoppen - 1) {Serial.print (","); }}} Serial.print (","); Serial.print ("tremolo"); Serial.print (","); Цуваа.хэвлэх (газрын зураг (potValue, 0, 1023, 0, 100)); // мессежийн төгсгөлийг бичих Serial.print (endString);
// түр хүлээгээрэй..
саатал (loopPauseTime); }
Боловсруулж байна
Disclaimer: Niet alle code all deoding sketch staat hier in geschreven, voor de volledige code zie het bestand: ProcessingSoundControl_handout_v6_1.pde in bijlage
Зааварчилгаа зааварчилгаа өгсөн (Энэтхэгийн):
// Baudrate moet hetzelfde zijn zoals in de arduino тойм зураг
final int baudRate = 115200;
// Хадуур дарагч дахь IP хаяг (zij дэлгэцийн зургууд
// Боловсруулж байна.
// эцсийн String remoteIP = "192.168.1.43"; // жишээ нь. "127.0.0.1";
эцсийн String remoteIP = "10.3.209.60";
// sendPort -ийг анхаарч, үүнийг Reaper дээр бөглөнө үү.
// Энэ бол Processing -ийн илгээдэг, Reaper -ийн сонсдог порт юм.
final int listenPort = 12000, sendPort = 12000;
// Энд байгаа listenPort нь идэвхтэй дибаг хийх болно.
// portNames нь дибаг хийхээр энд байна.
// эцсийн String portName = "/dev/ttyACM0";
эцсийн String portName = "COM5"; // "/dev/ttyUSB0";
/////////////////////// Хэрэглэгчийн параметрүүдийн төгсгөл ///////////////////////// ////
импорт боловсруулах.сериал.*;
java.util импортлох.*;
oscP5 импортлох.*;
netP5 импортлох.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
Цуваа коммпорт; // Цуваа порт
boolean messageArrived = false;
Ирж буй мөр = "", IncomingOSCMessage = "";
эцсийн char startChar = '*', endChar = '#'; final char contactCharacter = '|';
// Бид зөвхөн өөрчлөгдөж буй параметрүүдийг (утга) илгээдэг эсэхийг шалгахын тулд
// эдгээр глобал хувьсагчдыг энд устгадаг боловч // энд эхлүүлэх ёсгүй! HashMap oldParams, newParams, toSendParams;
// Бид зурвасыг таслал бүрт хуваах хэрэгтэй
void processIncoming () {String resVec = incoming.split (","); // бид нэр+утгын хосыг авдаг // тиймээс нэр бүрийн хувьд (+2)… оролдох {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+) 1]); // тэдгээрийг шинэ Hashtable newParams.put -д оруулах (resVec , утга); }} // хэрэв алдаа гарвал түүнийг барьж харуулъя. catch (Exception ex) {println ("Exception Message:" + ex); printArray (resVec); гарах(); }}
// Бидний зурвасыг шүүх
/ * Оролтын мессеж (Цуваа) өөрчлөгдөх үед бид зөвхөн OSC-аас гарах мессеж байгаа эсэхийг шалгадаг. Энэ нь хэрэв бид товчлуурыг эргүүлж/дарвал утга өөрчлөгддөг. * Тиймээс бид үнэндээ өөрчлөгдөж буй ирж буй утгыг шүүж авдаг * тэмдэглэл: жишээлбэл, хурдатгал хэмжигч эсвэл зайны мэдрэгчээс авсан утгуудын үсрэлтээс зайлсхийхгүй * та тэдгээрийг Arduino -д өөрөө тэгшлэх хэрэгтэй болно */ void filterParams () {toSendParams = new HashMap (); for (String key: newParams.keySet ()) {// хэрэв түлхүүр аль хэдийн байгаа бол (oldParams.containsKey (key)) {// түлхүүр байгаа бөгөөд утга нь ижил биш бол, хэрэв (! oldParams.get (key)).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key))); }} өөр {// түлхүүр нь хуучин параметрүүдэд байдаггүй тул үүнийг хэлээрэй! toSendParams.put (түлхүүр, newParams.get (түлхүүр)); } oldParams.put (түлхүүр, newParams.get (түлхүүр)); }}
хүчингүй болгох makeOSC () {
for (String key: toSendParams.keySet ()) {OscMessage myMessage = шинэ OscMessage ("/"+ түлхүүр); myMessage.add (toSendParams.get (түлхүүр)); / * мессеж илгээх */ oscP5.send (myMessage, myRemoteLocation); }}
хүчингүй translateMessage () {
processIncoming (); filterParams (); makeOSC (); } // Бид цонх руу хэвлэхийг хүсвэл void ShowIncoming () {// HashMap текстэд заасан "" ирж буй мессежийг харахын тулд ("Arduino -аас ирсэн", 20, 20); int y = 20; for (String key: newParams.keySet ()) {y = y+20; текст (түлхүүр, 20, у); текст (newParams.get (түлхүүр), 300, y); }}
void showOsc () {
текст (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }
хүчингүй тохиргоо () {
хэмжээ (1000, 800); // Шатны хэмжээг бөглөх (255); дэвсгэр (0); oldParams = шинэ HashMap (); newParams = шинэ HashMap (); // printArray (Serial.list ()); commsPort = шинэ цуваа (энэ, portName, baudRate);
/ * oscP5 -ийг эхлүүлж, ирж буй мессежийг сонсох */
oscP5 = шинэ OscP5 (энэ, listenPort);
/* myRemoteLocation бол NetAddress юм. NetAddress нь 2 параметрийг агуулдаг.
* IP хаяг ба портын дугаар.myRemoteLocation нь osc пакетуудыг өөр компьютер, төхөөрөмж, * програм руу илгээхдээ * oscP5.send () дахь параметр болгон ашигладаг. хэрэглээг доороос үзнэ үү. Туршилтын зорилгоор сонсох порт * болон алслагдсан байршлын хаягийн порт нь адилхан тул та энэ зурган дээр зурвас илгээх болно. */ myRemoteLocation = шинэ NetAddress (remoteIP, sendPort); }
хүчингүй сугалаа () {
if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = худал; } showOsc (); }
хүчингүй serialEvent (Serial commsPort) {
// цуваа портоос байтыг уншина уу: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // илүү их println асуух ("эхэлж байна …"); завсарлага; case startChar: ирж буй = ""; завсарлага; case endChar: messageArrived = үнэн; // println ("msg -ийн төгсгөл"); завсарлага; анхдагч: ирж буй += inChar; завсарлага; }}
/* ирж буй Оскар мессежийг oscEvent арга руу дамжуулдаг. */
void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // Оскарын 1 -р аргументыг авах
IncomingOSCMessage += "\ n" +
String.format ("### osc зурвас хүлээн авсан:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", утга); println (IncomingOSCMessage); }
Алхам 12: Uittesten хянагч
Nu alles бол aangesloten, alle code is geschreven en alles is gedubbelcheckt is het eindelijk tijd om de controller z'n werk te laten doen. Reaper -ийн хамгийн сайн хувилбар бол гитар баатар MIDI хянагч юм.
Зөвлөмж болгож буй:
Zoom -ийг хянахын тулд гитар баатар гитар ашиглах (зөвхөн Windows): 9 алхам
Zoom -ийг хянахын тулд гитар баатар гитар ашиглах (зөвхөн Windows): Дэлхий даяар тахал өвчин дэгдэж байгаа тул бидний ихэнх нь байшингаа цэвэрлэж, Zoom -ийн уулзалтад оролцож байна. Хэсэг хугацааны дараа энэ нь маш зөөлөн бөгөөд уйтгартай болно. Гэрээ цэвэрлэж байхдаа би хуучин гитар баатар гитарыг олсон
Гитар баатар гитар салгах засвар: 5 алхам (зурагтай)
Гитар баатар гитар салгах засвар: Тэгэхээр, та ebay -ээс зүгээр л тэр гоё ашигласан гитар баатар гитарыг худалдаж авсан бөгөөд энэ нь танд ирэхэд тэр USB залгууртай холбогдохгүй байсан тул та 30 & еврог дэмий үрсэн гэж бодож байна. ус зайлуулах хоолойн доор. Гэхдээ засвар байдаг бөгөөд энэ засвар нь магадгүй ажиллах болно
Баригдсан чанга яригчтай гитар баатар гитар: 8 алхам
Баригдсан чанга яригчтай гитар баатар гитар: Үндсэндээ би гитарын баатар хянагчийг нээж, дотор нь юу багтах вэ гэж бодсон. Хөнгөн юм шиг санагдсан тул маш олон өрөө байгаа гэж бодсон. Мэдээж хангалттай байсан. Эхэндээ би гитарын хүзүүнд iPod shuffle хийхээр төлөвлөж байсан
Эпик! Гитар баатар - Давхар хүзүүтэй гитар Амжилтгүй: 7 алхам (зурагтай)
Эпик! Гитар баатар - Давхар хүзүүт гитар … Бүтэлгүйтсэн: 2015 онд поп соёлын үзэгдэл болох Гитар баатрын 10 жилийн ой тохиож байна. Хөгжмийн зэмсэгээс илүү алдартай болсон видео тоглоомыг дуурайж чадсан нь санаанд оров уу? Арван жилийн ойгоо тэмдэглэхээс илүү сайн арга
OpenChord.org V0 - Жинхэнэ гитар гитар баатар/рок хамтлагийн хянагч бүтээх: 10 алхам
OpenChord.org V0 - Жинхэнэ гитар гитар баатар/рок хамтлагийн хянагч бүтээгээрэй: Бид бүгд гитарын баатар, рок хамтлагт дуртай. Бид эдгээр тоглоомыг тоглож байхдаа гитар тоглохыг хэзээ ч сурахгүй гэдгээ мэддэг. Гэхдээ бид жинхэнэ гитар ашиглах боломжийг олгодог Guitar Hero хянагчийг бүтээж чадвал яах вэ? Энэ бол OpenChord дээр бидний хийсэн зүйл юм