Inhoudsopgave:

Arduino MIDI Rhythm Section Sequencer - Ajarnpa
Arduino MIDI Rhythm Section Sequencer - Ajarnpa

Video: Arduino MIDI Rhythm Section Sequencer - Ajarnpa

Video: Arduino MIDI Rhythm Section Sequencer - Ajarnpa
Video: Arduino 64 Steps Sequencer with minimum hardware, adapted from the Drum Sequencer 2024, Juli-
Anonim
Arduino MIDI Ritme Sectie Sequencer
Arduino MIDI Ritme Sectie Sequencer
Arduino MIDI Ritme Sectie Sequencer
Arduino MIDI Ritme Sectie Sequencer
Arduino MIDI Ritme Sectie Sequencer
Arduino MIDI Ritme Sectie Sequencer

Het hebben van een goede software-drummachine is tegenwoordig gemakkelijk en goedkoop, maar het gebruik van een muis maakt het plezier voor mij teniet. Dit is waarom ik me realiseerde wat in eerste instantie bedoeld was als een pure 64-stappen hardware MIDI-drumsequencer die tot 12 verschillende drumelementen (partijen) kan triggeren, maar vervolgens evolueerde naar een ritmesectie-sequencer…

… Daar gaan we!

Stap 1: Hoe het werkt

Deze hardware kan zelf geen geluiden genereren, maar kan alleen externe hardware sequencen via MIDI. Dit betekent dat je een geluidsgenerator van je drumgeluiden nodig hebt (een sampler of een drumsynthesizer of een pc met je favoriete drumsoftware of wat je maar wilt) die kan worden getriggerd door MIDI-note-on-berichten.

Het bestaat voornamelijk uit een matrix van 4 x 4 knoppen (met LED's), één voor elke stap van een balk. De hele reeks van 64 stappen bestaat uit 16 stappen vermenigvuldigd met 4 maten. Elke stap is 1/16e van een noot.

Er zijn twee werkingsmodi: live-modus en bewerkingsmodus.

In de bewerkingsmodus kunt u uw sequentie stap voor stap bewerken door te definiëren welke drum in elke stap zal spelen.

Uw externe hardware-instrument ("drum") wordt getriggerd door een MIDI "note on"-bericht te verzenden voor verschillende "MIDI-nootnummers" op kanaalnummer "10". Standaard zijn deze nootnummers:

drum #1 (d.w.z. kick) -> MIDI-nootnummer "60"

drum #2 (d.w.z. snare) -> MIDI-nootnummer "62"

drum #3 (d.w.z. klap) -> MIDI-nootnummer "64"

drum #4 (d.w.z. Hihat) -> MIDI-nootnummer "65"

drum #5 -> MIDI-nootnummer "67"

drum #6 -> MIDI-nootnummer "69"

drum #7 -> MIDI-nootnummer "71"

drum #8 -> MIDI-nootnummer "72"

drum #9 -> MIDI-nootnummer "74"

drum #10 -> MIDI-nootnummer "76"

drum #11 -> MIDI-nootnummer "77"

drum #12 -> MIDI-nootnummer "79"

Je kunt deze waarden (en het MIDI-kanaal) desgewenst in de schets wijzigen.

In de live-modus kunt u door op stapknoppen te drukken live drums spelen die aan elke stap zijn gekoppeld door MIDI-berichten via serieel te verzenden. U kunt uw toetsaanslagen en/of inkomende MIDI-berichten live opnemen.

Zowel in de live-modus als in de bewerkingsmodus kunt u een drum dempen (of dempen opheffen), de momenteel actieve drum "roll play" en uw sequence "swingen".

Ritme sectie?

De meeste drumsequencers zijn puur MIDI-drumpart-triggers, met een vast MIDI-nootnummer voor elk drumgeluid. In dit geval hebben we meer een "ritmesectiesequencer" dan een pure "drumsequencer", omdat je zelfs synthesizers kunt sequencen.

Lees de SNELSTARTGIDS voor meer details en een volledige lijst met functies.

Stap 2: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Dit project is gerealiseerd rond een Arduino DUE-bord. Ik heb geprobeerd de hardware zo eenvoudig mogelijk te houden, d.w.z. door het gebruik van LED-drivers te vermijden. Arduino DUE is waarschijnlijk niet het meest geschikte bord om een heleboel LED's zonder LED-driver te verwerken vanwege de uitgangsstroomlimieten (van 5 mA tot 15 mA, afhankelijk van de pin), maar het is de snelste Arduino en timing is alles bij het omgaan met sequencers. Houd er dus rekening mee dat DEZE hardwareconfiguratie uw Arduino DUE waarschijnlijk tot het uiterste drijft en deze op de lange termijn kan beschadigen.

Dit gezegd hebbende, de hardware is voornamelijk een sequencer met 16 knoppen, 16 LED's (één voor elke stap) met 5 extra knoppen voor functies en 3 potentiometers. Ik heb ook een rode LED toegevoegd na het toevoegen van een live-opnamefunctie.

Hier is de stuklijst:

- 1x Arduino DUE

- 16x kortstondige, niet-vergrendelende drukknoppen met geïntegreerde LED's (u kunt desgewenst externe LED's gebruiken, maar vergeet niet om LED's met laag vermogen te gebruiken!!)

- 1x rode LED (laag vermogen!)

- 5x kortstondige, niet-vergrendelende drukknoppen

- 3x 10K enkele slag, lineair, potentiometers

- 3x 6.5 mm paneelmontage mono jack vrouwelijk

- 1x kunststof koffer (ik gebruikte een koffer van 190x140x70 mm)

- 2x 5-pins DIN vrouwelijke paneelmontage socket connector (MIDI)

- 1x dubbelzijdig 70x90 mm geperforeerd bord

- 2x 40 pins mannelijke enkele rij pin header strip (2,54 mm), beter als verguld

- 1x H11L1 optocoupler

- 1x 1N4148 diode

- 23x 1000 ohm weerstanden

- 3x 220 ohm weerstanden

- 2x BC547 pnp-transistors

… soldeerdraad, wat kabels, soldeerstation, een boorgereedschap… en vrije tijd:)

Houd er rekening mee dat de knoppen op de foto's zijn vervangen door een ander type (zelfs goedkopere …) drukknoppen vanwege het schandalige stuiterende…

Benodigde tijd om het project te voltooien: 8 - 10 uur

WAARSCHUWING: Draag ALTIJD een veiligheidsbril en handschoenen tijdens het boren! Hete materiaalschilfers kunnen op uw ogen worden geprojecteerd of in contact komen met uw huid en brandwonden of zelfs ernstigere schade aan u of mensen om u heen veroorzaken

Stap 3: Bedrading

Bedrading
Bedrading
Bedrading
Bedrading
Bedrading
Bedrading

Stapknoppen zijn rechtstreeks verbonden met Arduino-pinnen van 22 (stap 1) tot 37 (stap16). De aarde van de knoppen is doorgelust en verbonden met de Arduino DUE-aarde. Er zijn geen pullup- of pulldown-weerstanden nodig, aangezien Arduino-geïntegreerde pullup-weerstanden softwarematig zijn ingeschakeld (zie de schets).

Hetzelfde geldt voor de extra 5 knoppen (Arduino-pinnen 2, 3, 4, 5 en 6), die worden gebruikt voor andere functies dan stappen. Ik heb ook een vrouwelijke jack-connector van 6,5 mm parallel met de "start" -knop geplaatst om mijn sequenties op afstand te kunnen afspelen en stoppen.

LED's zijn verbonden met aarde (daisy chain) en Arduino DUE-pinnen van 38 (stap #1) tot 53 (stap #16) in serie met elk een weerstand van 1K ohm om de stroomafname te beperken en de microcontroller te behouden.

Potentiometers worden aangesloten zoals weergegeven in de bijgevoegde afbeelding. Merk op dat de referentiespanning 3,3 V is, niet 5 V. Gebruikte ingangen zijn A0, A1 en A2.

Ik heb ook twee trigger-uitgangen geïmplementeerd voor arpeggiosignalen, zoals die nodig zijn om oude synths uit de jaren 80 te arpegieren, zoals de Korg Polysix en Roland Juno 6/60. Ze zijn verbonden met pinnen A3 en A4, maar je kunt digitale pinnen gebruiken als je liever digitale signalen hebt. Als je een synth gaat sequencen die compatibel is met V-Trig (voltage trigger) signalen, dan is een serieweerstand van 1k ohm om de stroomafname te verminderen voldoende; in het geval van een S-Trig (switch trigger) synth, heb je een eenvoudig pnp-schakelcircuit nodig (zie bijgevoegd schema).

MIDI IN- en OUT-circuits zijn schematisch weergegeven in de bijgevoegde afbeeldingen. Merk op dat, in tegenstelling tot de meeste Arduino's, Rx1 en Tx1 standaard worden gebruikt op DUE-borden in plaats van Rx0 en Tx0. Dit is geweldig omdat je je schets kunt uploaden zonder dat je Rx elke keer hoeft los te koppelen. Merk ook op dat ik een H11L1-optocoupler heb gebruikt omdat ik niet in staat was om te werken zoals een gewone 6N138 binnen de Arduino DUE 3.3V-limiet.

Stap 4: Software

De schets is geschreven in de Arduino IDE en moet worden geüpload naar je Arduino DUE-bord. Ik zal niet ingaan op details over het uploaden van de schets naar je Arduino DUE. Als dit je eerste ervaring met Arduino DUE is, lees dan dit. Als dit je eerste ervaring met arduino IDE is, lees dit dan ook.

U kunt de bijgewerkte firmware HIER downloaden (github-link).

De schets is gebaseerd op de uitstekende FortySevenEffects MIDI-bibliotheek. U moet de bibliotheek in uw arduino IDE installeren.

MIDI out-noten die aan elke drum zijn toegewezen, worden gedefinieerd door de variabele drumNote[STEPS_NUM] in de sketch. Je kunt ze naar eigen inzicht veranderen.

Het MIDI-uitgangskanaalnummer voor drums is standaard ingesteld op "10".

Ik ben in het echte leven geen programmeur en er zijn zeker betere manieren om te coderen wat we hier nodig hebben. Als u een codeur bent met een suggestie, bent u van harte welkom! Stuur me alstublieft elke variatie die de efficiëntie/effectiviteit van de code kan verhogen en ik zal deze opnemen in de hoofdschets (uiteraard met vermelding van de bijdrager!).

Stap 5: Snelstartgids

DRUMS: STAP-VOOR-STAP SEQUENTIE

Zodra u uw sequencer aanzet (of reset), wordt een lege sequence geladen. De sequencer start op in de bewerkingsmodus, met de eerste maat vast/vergrendeld en de eerste drum (d.w.z. kick) geselecteerd. Dit betekent dat u door op een willekeurige stapknop te drukken onmiddellijk een "kick" aan die stappen toewijst. Het volume waarmee de drum wordt getriggerd, wordt ingesteld door de positie van de "volume"-potentiometer bij het toewijzen van de drum aan de stap. Door opnieuw op een eerder toegewezen stapknop te drukken, verwijdert u de toewijzing van de huidige drum op die stap.

Als u op de "start"-knop drukt, ziet u dat uw LED's van links naar rechts, van boven naar beneden lopen en "kick" spelen telkens wanneer een trap wordt overschreden.

Door de "shift"-knop ingedrukt te houden, ziet u de 1e stap-LED op de 1e rij ingeschakeld (wat betekent dat de eerste trommel is geselecteerd) en de eerste stap-LED op de vierde rij (wat betekent dat u bent vergrendeld op de eerste balk). U kunt nu de drum die u wilt sequencen wijzigen door op een andere stapknop te drukken terwijl u "shift" ingedrukt houdt. Nadat u de nieuwe trommel hebt geselecteerd, laat u "shift" los. Alle LED's gaan uit (omdat u de nieuwe drum aan geen enkele stap hebt toegewezen) en u kunt beginnen met het toewijzen van de nieuwe drum aan stappen. Herhaal dit voor alle drums die je nodig hebt (maximaal 12).

Nu je een mooi patroon hebt gemaakt, houd je "shift" ingedrukt en zet je de gemarkeerde stap op de onderste rij uit (het zou de 1e stap van de 4e rij moeten zijn als je dezelfde lay-out hebt aangenomen die ik heb gebruikt): je hebt net " ontgrendeld" de reeks die nu over alle 4 de maten loopt. Onderste onbewerkte LED's beginnen te "bewegen", wat aangeeft welke maat momenteel wordt gespeeld (maatprogressie). U zult merken dat alleen wanneer in de eerste maat een sequens wordt afgespeeld, terwijl alle andere 3 maten geen geluid genereren. Dit komt omdat je alleen drums hebt toegewezen aan de eerste maat, terwijl de andere blanco zijn gelaten. U kunt ze met de hand vullen (selecteer een nieuwe maat door op een van de laatste 4 stapknoppen te drukken terwijl u "shift" ingedrukt houdt, selecteer een van de drums, vul de stappen enz. enz.) of kopieer en plak de maatreeks die u hebt gemaakt naar alle maten door naar de bewerkingsmodus te gaan (opnieuw vergrendelen naar de eerste maat) en op "record" te drukken (die nu de functie "plakken" overneemt) terwijl je "shift" ingedrukt houdt. Makkelijker gedaan dan gezegd.

DRUMS: LIVE SPEELMODUS

Bij het opstarten bevindt de sequencer zich in de bewerkingsmodus. Om de bewerkingsmodus te verlaten, moet u "shift" ingedrukt houden en op de balkknop drukken die momenteel wordt vastgehouden/vergrendeld (de stapknop op de 4e rij is ingeschakeld). Hierdoor wordt de LED van de eerder vergrendelde balk uitgeschakeld en wordt de reeks ontgrendeld. U bevindt zich nu in de live speelmodus.

In de live-afspeelmodus wordt door op een stapknop te drukken de drum die aan die knop is gekoppeld getriggerd.

Als u uw reeks live wilt opnemen, start u de reeks door op "afspelen" te drukken en vervolgens op de knop "opnemen" (alleen in de live-afspeelmodus). Er gaat een rode LED branden. Uw spel op de matrix van het drumsequencer-bedieningspaneel of een binnenkomend MIDI-note-on-bericht (d.w.z. van een extern MIDI-toetsenbord) wordt opgenomen.

Andere functies

Door op de "roll"-knop te drukken, wordt de momenteel actieve drum bij elke stap (in een rol) gespeeld. Dit werkt in zowel de "stap-voor-stap"- als de "live-play"-modus.

Door op een stapknop te drukken terwijl u de "mute"-knop ingedrukt houdt, wordt de drum die aan die stap is gekoppeld, gedempt (of ongedaan gemaakt). Dit werkt in zowel de "stap-voor-stap"- als de "live-play"-modus.

U kunt een specifieke drumsequentie wissen door op de betreffende stapknop te drukken terwijl u de "REC"-knop ingedrukt houdt.

U kunt de hele reeks wissen (zachte reset) door de "start"-knop langer dan 3 seconden ingedrukt te houden.

U kunt uw reeks "swingen" door aan de "swing"-potentiometer te draaien.

U kunt MIDI-echo in-/uitschakelen door op de "mute"-knop te drukken terwijl u de "shift"-knop ingedrukt houdt. Als MIDI-echo is ingeschakeld (standaard), wordt alle informatie die op de MIDI INPUT-aansluiting aanwezig is, naar de MIDI OUTPUT-aansluiting gestuurd (alleen MIDI-noot aan, noot uit, pitch bend, aftertouch en control change worden weergegeven).

Zowel MIDI-klokinvoer als -uitvoer zijn standaard geïmplementeerd en ingeschakeld. Als er geen klokinvoer wordt ontvangen, wordt het tempo ingesteld met de speciale potentiometer. In het geval dat een MIDI-klokinvoer wordt ontvangen, wordt daaruit het tempo berekend en reageert de tempo-potentiometer niet. MIDI-klok wordt altijd naar de MIDI-uitgang gestuurd.

Stap 6: Ritmesectie

Het oorspronkelijke idee was een "pure" MIDI-drumsequencer met 64 stappen om tot 12 onafhankelijke drumpartijen te sequencen. Na wat testen merkte ik dat het leuk zou zijn geweest om ook een baslijn te besturen, en ik heb de functie van een variabele toonhoogte per stap alleen aan de nieuwste drum toegewezen. Daarna heb ik de code opnieuw aangepast, zodat ik de toonhoogte in elke drum kon veranderen en tot 12 synthesizers kon bedienen. Een revisie later heb ik polyfonie toegevoegd (polyfonie per synth is standaard beperkt tot 3).

Opsommen:

- in LIVE-modus, als LIVE-opname is ingeschakeld en de sequentie is gestart, kunt u binnenkomende MIDI-note-on-berichten polyfoon opnemen. Pitch- en volume-informatie worden opgeslagen. Pitch bend en aftertoutch info gaan verloren. MIDI Control Change-berichten worden opgeslagen. Houd er rekening mee dat je slechts één CC-slot per kanaal, per stap hebt.

- Als de sequens is gestopt, kunt u tot 3 toonhoogtewaarden (akkoord) opnemen voor een specifieke stap van een specifieke maat door de bestemmingsstapknop ingedrukt te houden en (tegelijkertijd of één voor één) op de gewenste toetsen op de toetsenbord aangesloten op de MIDI IN-poort.

Let erop dat:

- de noot die bij een stap wordt geactiveerd, wordt bij de volgende stap "gedood". Om de nootlengte te vergroten, handelt u op de "release" VCA-parameter van uw synthesizer.

- in tegenstelling tot drums kunnen noten niet in een rol worden gespeeld door op de "roll"-knop te drukken.

- Wanneer u LIVE opneemt, worden de binnenkomende MIDI-kanaalgegevens opgeslagen in de relatieve "drum"-stap (MIDI-kanaal #1 -> "drum" #1 enzovoort).

U kunt een specifieke synth-sequence wissen door op de betreffende "drum"-stapknop te drukken terwijl u de "REC"-knop ingedrukt houdt. Als u er nogmaals op drukt, wordt ook de drumreeks gewist. Als er een CC-sequence is opgenomen, zal dat de eerste zijn die wordt gewist en vervolgens de volgorde CC -> Synth -> Drum volgen

Stap 7: Arpeggio-triggers

Pre-MIDI-synths uit de vroege jaren '80 zijn vaak uitgerust met een soms "arpeggio trigger-ingang". Door een trig-signaal van 2,5 tot 5,0 V te sturen (V-trig of "voltage trigger") of door de arpeggio-triggeringang (S-Trig of "switch trigger") te aarden, kunt u de synthesizer vertellen dat hij een stap vooruit moet gaan in een arpeggiosequence. Dit kan moeilijk te beheren zijn met een sequencer zonder een speciale trigger-out (soms "rimshot"-geluiden van een speciale out waar/worden gebruikt als een hulpmiddel voor V-trig-synths), maar met een microcontroller-bord kun je zo'n signaal en controle gemakkelijk beheren uw synth-arpeggio zoals het door de fabriek bedoeld was.

Deze sequencer voor de ritmesectie bevat de mogelijkheid om de arpeggiator van twee verschillende synthesizers onafhankelijk van elkaar te triggeren.

Het gebruik is heel eenvoudig: selecteer drum 11 of 12 (druk op stap 11 of 12 terwijl u op "shift" drukt) en activeer de stappen die u de arpeggiator één stap wilt laten verplaatsen. Op deze manier kunt u zeer strakke 1/16e van een nootlengte normale arpeggio's "programmeren" door alle stappen te activeren, of 1/8e door elke andere stap te activeren. Bovendien kunt u complexere arpeggio's programmeren door stappen te activeren die een niet-regulier pad volgen.

Afhankelijk van het type triggersignaal dat wordt ondersteund door de synth die je wilt aansturen, heb je een eenvoudige hardwarewijziging nodig: plaats in het geval van V-trig (d.w.z. Roland-synths) een weerstand van 1 Kohm in serie met arduino-triggeruitgang. Gebruik in het geval van een S-trig (d.w.z. Korg-synths) de shematic die is bevestigd aan de "bedrading" -stap voor een veilige schakeltrigger.

Stap 8: Als dingen niet werken…

Zelfs een relatief eenvoudig project als dit zal hoogstwaarschijnlijk niet 100% werken de eerste keer dat u het aanzet. Hier is bijvoorbeeld de corrispondentie tussen knoppen en LED's cruciaal, en een ongeëvenaarde bedrading zal de sequencer onbruikbaar maken.

Om alle verschillende componenten van de step sequencer te testen, heb ik een eenvoudige testschets geschreven (zie bijlage).

U kunt HIER de nieuwste testfirmware downloaden (GitHub-link).

De testschets werkt als volgt:

- druk op een step-knop: de bijbehorende LED moet gaan branden en een MIDI-note-on op kanaal 10 wordt naar de MIDI-uitgang gestuurd.

- druk op een functieknop: een van de eerste 5 LED's gaat branden.

- draai aan een potentiometer: LEDS gaan overeenkomstig branden (eerste pot -> eerste rij LED's, tweede pot -> tweede rij LED's, derde pot -> derde rij LED's).

- als een MIDI-noot aan wordt ontvangen, knippert de eerste LED.

Houd er rekening mee dat MIDI-echo standaard is ingeschakeld. Dit betekent dat als je een MIDI-loop hebt tussen een synth en MRSS, dit problemen kan veroorzaken (ik ervaarde meestal een voorspelbare dubbele noot die werd getriggerd, maar ook zeer lage getriggerde noten en een over het algemeen niet-reagerend ingebouwd toetsenbord met synths met MIDI uit als MIDI Throu… het hangt af van de synth). Als dit het geval is, schakelt u MIDI-echo uit door op de "mute"-knop te drukken terwijl u de "shift"-knop ingedrukt houdt.

Aanbevolen: