Skicka och ta emot MIDI med Arduino (9 / 11 steg)

Steg 9: Pitchbend och Arduino



Nu när du vet hur man styr anteckning på och notera bort, kan du prova pitchbend.

Pitchbend information lagras i 2 data-byte, och mest signifikanta byte (MSB) och en minst signifikanta byte (LSB). Var och en av dessa byte innehåller bara 7 bitar av information. Detta innebär att alla pitchbend information lagras i 14 bitar, med de mest betydande 7 bitar lagras i MSB och de minst signifikanta 7 bitar lagras i LSB.

För de flesta tillämpningar endast hittar dig ändra pitchbend via MSB och bara ställa LSB till 0. I det här fallet har du 7 bitar av upplösning för pitchbend (128 steg). I MIDI-protokollet pitchbend = 64 är ingen pitchbend, pitchbend större än 64 är pitchbends frekvensen upp, och mindre än 64 pitchbends frekvensen ner.

I exemplet nedan en anteckning spelade och rymde, sedan spelade igen medan de pitchbend höjningarna från 64 till sitt max värde på 127, sedan spelade en tredje gång medan de pitchbend höjningarna från 64 till dess min värdet 0. Denna sekvens är loopas för evigt. Bilderna ovan visar utdata i ableton från denna Arduino skiss.

< pre > / *
MIDI-Pitchbend (msb)
Av Amanda Ghassaei
Juli 2012

* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.

*/

int noteON = 144; //144 = 10010000 i binärt, notera på kommando
noteON lagring av data:
int Obs = 60; //middle c
int hastighet = 100; //velocity för MIDI-noter, måste vara mellan 0 och 127
(högre hastighet gör vanligtvis MIDI-instrument högre)

int pitchbend = 224; //224 = 11100000 i binär, pitchbend kommando
pitchbend datalagring:
int lsb = 0; //least siginificant bit av pitchbend meddelande
int msb = 0; //most signifikanta biten av pitchbend meddelande

void setup() {
Ställ in MIDI-baud-hastighet:
Serial.BEGIN(31250);
}

void loop() {
först spela Obs utan pitchbend
MIDImessage (pitchbend, 0, 64); //reset pitchbend till 0 (noll pitchbend är lsb = 0, msb = 64)
MIDImessage (noteON, Obs, velocity); //turn anteckning på
fördröjning (700); //sustain anmärkning
MIDImessage (noteON, Obs, 0); //turn anmärkning av
fördröjning (500); //wait 500ms tills utlöser nästa anteckning

sedan spela med pitchbend
MIDImessage (pitchbend, 0, 64); //reset pitchbend till 0 (noll pitchbend är lsb = 0, msb = 64)
MIDImessage (noteON, Obs, velocity); //turn anteckning på
för (msb = 64, msb < = 127; msb ++) {//increase pitchbend msb 64 (ingen pitchbend) till 127
MIDImessage (pitchbend, lsb, msb); //send pitchbend meddelande
Delay(10);
}
MIDImessage (noteON, Obs, 0); //turn anmärkning av
fördröjning (500); //wait 500ms tills utlöser nästa anteckning

sedan spela med pitchbend
MIDImessage (pitchbend, 0, 64); //reset pitchbend till 0 (noll pitchbend är lsb = 0, msb = 64)
MIDImessage (noteON, Obs, velocity); //turn anteckning på
för (msb = 64, msb > = 0; msb--) {//decrease pitchbend msb från 64 (ingen pitchbend) 0;
MIDImessage (pitchbend, lsb, msb); //send pitchbend meddelande
Delay(10);
}
MIDImessage (noteON, Obs, 0); //turn anmärkning av
fördröjning (500); //wait 200ms tills utlöser nästa anteckning
}

skicka MIDI-meddelande
void MIDImessage (int befalla, int data1, int data2) {
Serial.write (kommandot); //send kommandobyte
Serial.write (data1); //send databyte #1
Serial.write (data2); //send databyte #2
}

Nedan är en video demonstration av koden ovan. För denna del av koden, kommer att pitchbend vara mest märkbar på instrument med en lång sustain, till exempel ett stränginstrument, ha detta i åtanke när du testar koden själv.

Du kommer troligen att bli bra med endast 128 steg pitchbend resolution, men om du måste använda alla 16384 steg, se koden nedan. I grund och botten vad jag har gjort här definieras en variabel som kallas pitchbendVal, som varierar från 0 till 16383. Som jag sa under "noll" pitchbend värdet är msb = 64 och lsb = 0. I binär är detta:

MSB = 64 = 01000000
LSB = 0 = 0000000

(kom ihåg MSB och LSB är 7 bitars tal)

sätta dessa värden tillsammans får vi:

1000000 0000000
MSB LSB

eller

10000000000000
som översätter till 8192 i decimal

så nu är "noll" pitchbend värdet 8192.

Du märker också jag var tvungen att bryta de variabla pitchbendVal i två 7 bitars delar att skicka ut via MIDI-meddelande:
MIDImessage (pitchbend, (pitchbendVal & 127), (pitchbendVal >> 7));
den första delen, pitchbendVal & 127, returnerar de minst signifikanta 7 bitarna av pitchbendVal
den andra delen, pitchbendVal >> 7, returnerar de mest betydande 7 bitarna av pitchbendVal
se & och >> på Arduino referenssida för mer information.

< pre > / *
MIDI-Pitchbend (full upplösning)
Av Amanda Ghassaei
Juli 2012

* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.

*/

int noteON = 144; //144 = 10010000 i binärt, notera på kommando
noteON lagring av data:
int Obs = 60; //middle c
int hastighet = 100; //velocity för MIDI-noter, måste vara mellan 0 och 127
(högre hastighet gör vanligtvis MIDI-instrument högre)

int pitchbend = 224; //224 = 11100000 i binär, pitchbend kommando
pitchbend datalagring:
int pitchbendVal = 8192; //value mellan 0 och 16383. noll pitchbend = 8192

void setup() {
Ställ in MIDI-baud-hastighet:
Serial.BEGIN(31250);
}

void loop() {
först spela Obs utan pitchbend
pitchbendVal = 8192; //reset pitchbend till "0" (noll pitchbend är pitchbendVal = 8192)
MIDImessage (pitchbend, (pitchbendVal & 127), (pitchbendVal >> 7)); //send pitchbend meddelande
MIDImessage (noteON, Obs, velocity); //turn anteckning på
fördröjning (700); //sustain anmärkning
MIDImessage (noteON, Obs, 0); //turn anmärkning av
fördröjning (500); //wait 500ms tills utlöser nästa anteckning

sedan spela med pitchbend
pitchbendVal = 8192; //reset pitchbend till "0" (noll pitchbend är pitchbendVal = 8192)
MIDImessage (pitchbend, (pitchbendVal & 127), (pitchbendVal >> 7)); //send pitchbend meddelande
MIDImessage (noteON, Obs, velocity); //turn anteckning på
för (pitchbendVal = 8192; pitchbendVal < 16384; pitchbendVal ++) {//increase pitchbend från 8192 till 16383
MIDImessage (pitchbend, (pitchbendVal & 127), (pitchbendVal >> 7)); //send pitchbend meddelande
Delay(1);
}
MIDImessage (noteON, Obs, 0); //turn anmärkning av
fördröjning (500); //wait 500ms tills utlöser nästa anteckning

sedan spela med pitchbend
pitchbendVal = 8192; //reset pitchbend till "0" (noll pitchbend är pitchbendVal = 8192)
MIDImessage (pitchbend, (pitchbendVal & 127), (pitchbendVal >> 7)); //send pitchbend meddelande
MIDImessage (noteON, Obs, velocity); //turn anteckning på
för (pitchbendVal = 8192; pitchbendVal > = 0, pitchbendVal--) {//decrease pitchbend 8192 till 0;
MIDImessage (pitchbend, (pitchbendVal & 127), (pitchbendVal >> 7)); //send pitchbend meddelande
Delay(1);
}
MIDImessage (noteON, Obs, 0); //turn anmärkning av
fördröjning (500); //wait 500ms tills utlöser nästa anteckning
}

skicka MIDI-meddelande
void MIDImessage (int befalla, int data1, int data2) {
Serial.write (kommandot); //send kommandobyte
Serial.write (data1); //send databyte #1
Serial.write (data2); //send databyte #2
}

Se Steg
Relaterade Ämnen

Skicka och ta emot e-post med en Net10 telefon

skicka och ta emot e-post med en Net10 telefon*************TeleFlip är död - men det finns andra resurser för de "enkla" (och billigt) mobiltelefon!Steg 1: Hittade jag några snygga Instructibles om skicka och ta emot e-post med en enkel Net10 ty...

RFduino - skicka och ta emot Data Via BLE

Numera är det lätt för en att integrera bluetooth anlagen till sitt projekt. Detta är tack vare Bluetooth Low energy styrelser som RFduino. Jag fick en RFduino styrelse nyligen och tänkte dela en enkel tutorial på Skicka och ta emot data mellan RFdui...

Säkerhetssystem och tillgång kontroll med Arduino och RFID-

säkerhetssystem och tillgång kontroll med Arduino och RFIDDetta projekt är en evolotuin av mitt första projekt kallat "Arduino - Security System och Access Control"Som ni kan se på bloggen http://arduinobymyself.blogspot.com.br/2012/03/arduino-s...

Rädda en NOKIA 3310 LCD och använda den med Arduino

Detta instructable berättar hur till extraktet LCD-skärm defekt händig Nokia 3310 och att modifiera den för användning med Arduino.Jag hade en gammal defekt Nokia 3310 händig. Det inte laddar batteriet. Jag ville kasta bort, men för mig kom den idén,...

Reparation och upcycle defekta torktumlare med Arduino

Efter att ha läst massor av i'bles från andra författare tror jag det är dags att bidra själv. Det handlar om en defekt torktumlare som jag reparerat ett år eller så sedan innan jag ens visste om Instructables. Så ledsen för den delvis suddiga och nå...

Spela Ode till glädjen och annan klassisk musik med Arduino

Detta är en grundläggande handledning (bra för nybörjare!) med hjälp av Arduino Uno eller liknande version för att spela Ode till glädjen av Beethoven. Detta var en av mina första projekt med Arduino.Vad du behöver:-Arduino Uno eller liknande version...

Spara data för temperatur och luftfuktighet på MySQL med Arduino Uno och Wifly

Hej killar, jag gör detta instructable för de människor som gillade elektroniken och den botaniska, med detta du har data om temperatura och fuktigheten av din orchard och registrera detta i en data bas MySQL.För denna proyect du behöver några kunska...

Trådlös pan och tilt kamera rigga med arduino

Detta är en liten arduino projekt med de NRF24L01 trådlös sändare moduler ans 2 servomotorer.riggen styrs av en trådlös joystick och det kan hålla en kamera, laser eller något du kan tänka på.Steg 1: kravnödvändiga verktyg:3D-skrivareliten skruvmejse...

DIY TV LCD skärm med Arduino och Smart fjärrkontroll

I nästa följande steg, du gör en DIY "TV" med koden för en smart fjärrkontroll, och faktiskt spela videor och även eventuellt ansluta smart fjärrkontrollen till faktiska moderkortet.Material:Folie/spegelSolid och inte sladdrigt stabilisatoren li...

Kommunicera med arduino micro controller och dator via usb med en vb program

Om du är som mig och vill kunna styra dina objekt anslutna till din arduino via datorn måste du ett sätt att upprätta en anslutning och kommunicera med din arduino från datorn. Denna video och handledning visar dig hur man gör just det! Jag har tagit...

Styra din Tv, Dvd och ljud system med Arduino och Android

Hej alla, detta är min andra instructable och min första på engelska, så, ledsen för misstag.Jag vill dela detta projekt det handlar om hur du kan styra din Tv, DVD och ljudanläggningen med Arduino och en app för Android med app inventor.Om du gillar...

2WD röst kontrollerat Robot med Arduino och BitVoicer Server

I detta Instructable ska jag visa hur man bygger en 2WD röststyrd robot. Även om jag kontrollera endast DC motorer om du vill flytta roboten, samma tillvägagångssätt kan användas till röststyrning stegmotorer och servomotorer, så om du planerar att b...

Trådlös Audio Streaming och taligenkänning med Arduino

i detta projekt jag ansluta min Arduino ombord till en WiFly modul (https://www.sparkfun.com/products/10822) från ambulerande nätverk och strömma ljud till datorn, så att BitVoicer (http://www.bitsophia.com/BitVoicer.aspx) kan utföra taligenkänning....

Hur man gör en mobiltelefon och dator kontrolleras 3D tryckta Robot med Arduino - IoBot.

Om du letar efter ett sätt att kontrollera en Arduino baserade enheter, kommer att denna anvisning Visa dig hur man gör det genom att bygga enkla robot.IoBot kan styras med mobil och dator ansökan via LAN eller USB-kabel. Programmet körs på Android,...

Bildskärmsmenyn ljud ATM-7 Smartphone talaren med Arduino och Blynk

Dessa dagar finns det flera sätt att genomföra flera zoner ljudet med smartphone baserad kontroll men de flesta är begränsade till ett par zoner eller kräver dyra egna rutor i varje läge (Hej! Sonos). En talare väljare ansluten till en mottagare med...

Bänk PSU strömförsörjning från gamla ATX med Arduino och LCD-skärm

Hej alla och Välkommen till min första Instructable.Jag har alltid velat en bänk PSU för enkel åtkomst till en strömkälla, och något som jag kan lita på när du arbetar med olika projekt. Jag ville ha ett NÄTAGG som:• ger 12v och 5v 3.3V utgångar• ger...

Avlägsen kontrollerade robot med Arduino och T.V. remote

Denna fjärrkontroll bil kan flyttas runt med praktiskt taget alla slags remote såsom TV, AC etc.Det använder sig av det faktum att fjärrkontrollen avger IR(infrared).Den här egenskapen är gjord använda av med hjälp av en IR-mottagare, vilket är en my...

Gränssnitt bult med Arduino: Bult UART

IntroduktionDetta instructable är gjord för bult förbrukaren vem önskan till gränssnitt bult hårdvara enheten med Arduino Uno eller helt enkelt vill experimentera med bult UART.FörutsättningarTillgång till bult IoT workshop och dess framgångsrika slu...

Styra RGB ljus från Android med Arduino & Bluetooth LE (BLE)

jag har sett en massa Kickstarter projekt med den nya Bluetooth 4.0 lågenergi-standarden och flera av Bluetooth LE (BLE) aktiverade Arduino kloner kommer ut på marknaden, men många av dessa projekt fortfarande verkar vara någonstans i produktionsproc...