Inhoudsopgave:

Raspberry Pi-drummachine - Ajarnpa
Raspberry Pi-drummachine - Ajarnpa

Video: Raspberry Pi-drummachine - Ajarnpa

Video: Raspberry Pi-drummachine - Ajarnpa
Video: DIY Raspberry Pi Touchscreen Drum Machine with Pure Data 2024, Juli-
Anonim
Raspberry Pi-drummachine
Raspberry Pi-drummachine

Sample Sequencer, via een Raspberry Pi + Python.

De sequencer heeft 4 polyfonen en stelt de gebruiker in staat om 6 verschillende sequenties op te slaan en op te zetten waartussen ze in realtime kunnen afwisselen, en ondersteunt de mogelijkheid om tussen verschillende samples te wisselen.

Ik schreef het script op een manier die volledig bruikbaar is met echt elke MIDI-controller en geluiden. Ik gebruik 18 verschillende geluidsbanken, elk 16 samples, maar het optellen of aftrekken van banken en samples is eenvoudig en vereist niet veel aanpassingen. Als je problemen hebt, stuur me dan een e-mail: [email protected]

Vind de code op GitHub op:

Laat het me weten als je het gebruikt, en vooral als je er een video mee maakt!

Stap 1: Afhankelijkheden

Dit programma vereist de volgende (niet ingebouwde) Python-modules:

mido

pygame

numpy

Mido geeft echter enkele complicaties, omdat Mido zelf een paar afhankelijkheden vereist. Om ervoor te zorgen dat ze allemaal worden geïnstalleerd, typt u gewoon de volgende opdrachten in de terminal van uw Raspberry Pi (laat de '$' weg) en alles komt goed. De andere modules kunnen normaal worden geïnstalleerd.

$ sudo apt-get update

$ sudo apt-get install build-essentieel

$ sudo apt-get install libasound-dev of libasound2-dev

$ sudo apt-get install libjack0

$ sudo apt-get install libjack-dev

$ sudo apt-get install python-pip

$ sudo apt-get install python-dev

$ sudo pip install python-rtmidi

$ sudo pip install mido

Stap 2: Configureer Midi-invoerwaarden

MIDI-invoerwaarden configureren
MIDI-invoerwaarden configureren

Binnen het Python-hoofdscript bestaat een array met de naam noteList die bestaat uit 16 gehele getallen (regel 165.) Dit zijn de MIDI-nootwaarden die onze controller naar de Pi stuurt om de geluiden te activeren. Elke midi-controller is echter anders, dus tenzij je ook een Akai LPD8 hebt, moet je deze waarden waarschijnlijk aanpassen aan je apparaat.

De Github-repo bevat ook een ander script genaamd "midihelp.py" dat speciaal voor dit doel is gemaakt! Het enige dat het doet, is de invoerwaarden van de eerste MIDI-controller die de computer herkent naar de console afdrukken. Het enige dat u hoeft te doen, is deze waarden in de array te vervangen als ze verschillen van de waarden in noteList.

De volgorde van de noten hangt ook samen met welk geluidseffect per map wordt gespeeld, dus houd daar ook rekening mee.

Stap 3: Voeg extra mappen toe met voorbeelden

Voorbeeldkits in het script worden opgeslagen via mappen in dezelfde map, precies ingesteld zoals de 808-kit zich in het GitHub-bestand bevindt. Op deze manier kan ik allerlei verschillende samplesets opslaan in mappen die gemakkelijk kunnen worden georganiseerd en vervangen.

Het enige dat in het script zelf moet worden gewijzigd, is de variabele foldNum die het script vertelt hoeveel mappen met voorbeelden er zijn. Momenteel heeft het script foldNum ingesteld op één omdat er slechts één submap in dezelfde map is (de 808-kit.) Het maximale aantal mappen dat het script op dit moment aankan, is 18, en dat is hoeveel ik gebruik, maar het is vrij triviaal om verander dit, laat het me weten als je hulp nodig hebt.

De namen van de mappen doen er niet echt toe (zolang ze allemaal verschillend zijn), omdat het script alleen het aantal mappen in dezelfde map leest en de paden op die manier pakt. De namen van de bestanden zelf zijn echter belangrijk, daarover meer in de volgende stap.

Stap 4: Voeg extra voorbeelden toe en configureer ze in nieuwe mappen

Extra voorbeelden toevoegen en configureren in nieuwe mappen
Extra voorbeelden toevoegen en configureren in nieuwe mappen

Geluiden worden in de sampler geladen via mappen in dezelfde map die.wav-bestanden bevatten met namen genummerd tussen 0-15. Zie de meegeleverde 808-map voor een voorbeeld hiervan. ELKE submap met voorbeelden moet er identiek uitzien.

De index van MIDI-ingangen in de array noteList komt exact overeen met de.wav-bestandsnaam.

Bijvoorbeeld:

  • wanneer je de MIDI-noot activeert die is opgeslagen in noteList[0], zou het wav-bestand 0.wav worden afgespeeld.
  • wanneer je de MIDI-noot activeert die is opgeslagen in noteList[8], zou het wav-bestand 8.wav worden afgespeeld.

Ik deed dit gedeeltelijk zodat elke afzonderlijke MIDI-controller gemakkelijk kon worden ingesteld om met het script te werken, en ook zodat ik het sample en het invoernummer gemakkelijk kon uitbreiden of beperken, en de bestanden en het script zo kon ordenen dat de kickdrum geluiden zouden bijvoorbeeld altijd worden opgeslagen als 0.wav en worden getriggerd door de eerste MIDI-noot.

Ik heb 16 waarden enigszins willekeurig gekozen om overeen te komen met de 16 ingangen op mijn controller, dus als je liever een sequencer maakt met slechts 1 sample, of met veel meer, hoef je alleen maar de audiobestanden dienovereenkomstig te nummeren en trek de getallen die zijn opgeslagen in de noteList-array af of voeg ze toe om overeen te komen.

Als de meegeleverde 808-kit goed werkt, maar je problemen hebt met je eigen samples, is de oplossing waarschijnlijk om de samplefrequentie van de bestanden aan te passen aan PyGame's 22, 050khz samplefrequentie en bitdiepte van 16. Je kunt dit doen in Audacity of andere audiobewerkingssoftware. Vanaf daar zouden ze perfect moeten werken!

Stap 5: Nummerblokreferentie

Oké, er gebeurt veel in de sequencer, meer dan ik aanvankelijk in gedachten had, dus ik propte nogal wat op een numeriek toetsenblok om de toegenomen functionaliteit te evenaren. Dit in gedachten, de Asterisk * en de Periode. beide werken als functietoetsen.

VERWIJZING

HOOFDFUNCTIES

[8] - Metronoom in- en uitschakelen

[9] - Opnamemodus in- en uitschakelen

[Enter] - Afspelen/pauzeren

[0] - Huidige noot in volgorde verwijderen

[Num Lock en *] - Afsluiten

[MIDI Note en.] - Kwantiseer niet naar even getallen

TEMPO FUNCTIES

[+] - Koers versnellen BPM

[-] - Koers vertragen BPM

[+ en *] - Versnel BPM snel

[- en *] - BPM snel vertragen

[+ en.] - Fine Speed Up BPM

[- en.] - Fijn vertragen BPM

SEQUENTIE FUNCTIES

[1-6] Oproepvolgorde 1-6

[1-6 en.] Opslaanvolgorde 1-6

[0 en.] Huidige reeks wissen

MONSTERMAPPEN WIJZIGEN

[1-9 en *] - Wijzig naar proefpakket in mappen 1-9

[1-9 en * en.] - Wijzig naar proefpakket in mappen 10-18

VOLGORDE TIPS:

-Wis de huidige reeks [0 en.] en sla deze op in elke reeks die u uit het geheugen wilt wissen.

- Roep een reeks op en sla deze op onder een ander nummer om deze te kopiëren.

Aanbevolen: