[156] Arduino i perkusja z sampli
![[156] Arduino i perkusja z sampli](/_next/image?url=https%3A%2F%2Farduino.pl%2Fimgproxy%2FfM65ZMqgyR7MWKW6_F-YpFqIns8xVLMP_eVwWFF2lF8%2Ff%3Awebp%2Fw%3A1200%2FbG9jYWw6Ly8vaW1hZ2VzLzAtNjljLzgyMzU5Lzk4NzBlLzAtNjljODIzNTk5ODcwZTc2MzM5ODU5Ny5wbmc%3D.webp&w=3840&q=75)
Skoro tak nam tu ostatnio wszystko świetnie zagrało, zróbmy jeszcze jeden projekt, tym razem naprawdę użyteczny. Wykorzystam tutaj szkic z artykułu, w którym Arduino grało krakowski hejnał. Akurat można go zagrać pięcioma przyciskami znajdującymi się na płytce edukacyjnej TME. Z tym, że czwarty port zajęła mi biblioteka, ale to nic. Płytka edukacyjna ma matrycę wejść i peryferiów. Wystarczy skrosować lewy przycisk na port trzeci, pierwotnie przeznaczony dla odbiornika podczerwieni. Przyjrzyjmy się szkicowi.
#include <SimpleSDAudio.h> // Biblioteka odtwarzania sampli z karty SD.
const byte bass = 5; // Adresy pstryczków włączających odtwarzanie sampli.
const byte snare = 3;
const byte hihat = 8;
const byte ride = 7;
const byte crash = 6;
void setup() {
SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER); // Inicjalizacja biblioteki.
pinMode(bass, INPUT_PULLUP); // Deklaruj linie pstryczków jako wejścia podciągnięte wewnętrznie do wysokiego stanu.
pinMode(snare, INPUT_PULLUP);
pinMode(hihat, INPUT_PULLUP);
pinMode(ride, INPUT_PULLUP);
pinMode(crash, INPUT_PULLUP);
}
void loop() {
if (digitalRead(bass) == HIGH) { // Jeśli przycisk "bass" zostanie wciśnięty...
SdPlay.setFile("bass.afm"); // Pobierz plik bass.afm
SdPlay.play(); // Odtwarzaj go...
while (digitalRead(bass) == HIGH) { // Do czasu aż przycisk zostanie puszczony...
} // Albo przerwie go rozkaz odtworzenia nowego pliku.
}
if (digitalRead(snare) == HIGH) { // Przycisk "snare".
SdPlay.setFile("snare.afm");
SdPlay.play();
while (digitalRead(snare) == HIGH) {
}
}
if (digitalRead(hihat) == HIGH) { // Przycisk "hihat".
SdPlay.setFile("hihat.afm");
SdPlay.play();
while (digitalRead(hihat) == HIGH) {
}
}
if (digitalRead(ride) == HIGH) { // Przycisk "ride".
SdPlay.setFile("ride.afm");
SdPlay.play();
while (digitalRead(ride) == HIGH) {
}
}
if (digitalRead(crash) == HIGH) { // Przycisk "crash".
SdPlay.setFile("crash.afm");
SdPlay.play();
while (digitalRead(crash) == HIGH) {
}
}
}Na początku mamy deklarację wejść. Nazwałem je nazwami instrumentów perkusyjnych, bo właśnie to chcę tutaj zrobić: prostą elektroniczną perkusję wykorzystującą sample. Zaraz potem ujrzymy inicjację biblioteki. Sample mam w wersji mono, ale nic nie szkodzi, by załadować stereofoniczne.
Kolejno deklarujemy wejścia i przechodzimy do głównej pętli, w której znajduje się pięć bliźniaczych bloków. Jeśli dany przycisk jest wciśnięty, pobieramy plik zgodnie z nazwą i zaczynamy go odtwarzać. To dzieje się samo, że tak powiem, więc musimy tylko pilnować puszczenia przycisku i jeśli potem wciśniemy jakiś inny, odtwarzanie pliku zostanie natychmiast przerwane i nastąpi odtworzenie kolejnego sampla. Albowiem biblioteka jest tak napisana, że rozkaz kolejnego odtwarzania przerywa poprzednie automatycznie. Oczywiście nieprzerwane sample brzmią do końca i odtwarzanie się zatrzymuje.
W załączniku znajdziemy zestaw sampli perkusyjnych, lecz każdy może przygotować własne odgłosy czy na przykład komunikaty słowne, które będzie aktywował wciskaniem wybranych przycisków. Miłej zabawy :)





























































