Teensy Audio Board – pierwsze kroki

Teensy Audio Board
Teensy Audio Board

Niewielkich rozmiarów płytka developerska Teensy 3.2 oferuje ogromne możliwości, szczególnie jeśli połączymy ją z różnego rodzaju płytkami rozszerzającymi możliwości. Taką płytką jest Audio Board, którą weźmiemy dziś na warsztat :) Niedawno pisaliśmy o niej, ale tylko teoretycznie. Teraz czas na trochę praktyki.

Myślę, że warto zacząć od krótkiego opisu narzędzia, które producent przygotował w celu łatwiejszego projektowania zależności pomiędzy wejściami, wyjściami, generatorami audio itp. Jest to bardzo dobry sposób dla początkujących na zapoznanie się z funkcjami do obsługi dźwięku. Interfejs jest bardzo intuicyjny i można sobie wszystko bez problemu „wyklikać”.

Na początek przechodzimy na stronę http://www.pjrc.com/teensy/gui/

Po lewej stronie zobaczymy listę bloczków, z których możemy korzystać. Są one podzielone na kategorie takie jak input, output, synth itp.

Po kliknięciu na którykolwiek z bloczków po prawej stronie wyświetla nam się jego dokładny opis (tj. lista funkcji, które można dla niego zastosować, opis podłączenia, opis wejść / wyjść).

Używając Audio Board najłatwiej będzie nam na początek przeciągnąć na środek bloczek z kategorii output o nazwie i2s. Wyjście to jest wyprowadzone w postaci złącza stereo mini jack 3,5mm na naszej płytce. Z opisu po prawej stronie możemy wyczytać, że pierwsze wejście tego bloczku to lewy kanał, a drugie to prawy. Dołączmy więc do nich 2 bloczki sine z kategorii synth. Aby nasz kod wyglądał bardziej elegancko warto zmienić domyślne nazwy na takie, które mówią więcej o przeznaczeniu danej zmiennej. Wystarczy, że klikniemy 2 razy na dany bloczek i możemy edytować jego nazwę. U mnie wygląda to tak:

Nazwy bloczków

Teraz kliknijmy czerwony przycisk Export na górze strony i skopiujmy go do naszego projektu.

#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// GUItool: begin automatically generated code
AudioSynthWaveformSine sine_left; //xy=456.2000274658203,168.19999408721924
AudioSynthWaveformSine sine_right; //xy=458.2000274658203,230.19999313354492
AudioOutputI2S headphones; //xy=641.1999969482422,199.1999969482422
AudioConnection patchCord1(sine_left, 0, headphones, 0);
AudioConnection patchCord2(sine_right, 0, headphones, 1);
// GUItool: end automatically generated code

Warto zostawić komentarze, które zostały wygenerowane razem z kodem, gdyż umożliwiają one późniejszy import i edycję zależności w graficznym edytorze.

Przejdźmy więc do dalszego pisania kodu. W setup() obowiązkowo musimy wywołać AudioMemory(), która jako parametr przyjmuje ilość pamięci do zaalokowania na dane audio. Im większą liczbę podamy tym więcej pamięci zajmie nasz kod, ale będzie szybszy. Musimy sami wybrać optymalną liczbę (u mnie jest to 15). Trzeba pamiętać, że jeżeli nie wywołamy tej funkcji to nie usłyszymy żadnych dźwięków.

Skonfigurujmy teraz nasze bloczki generujące sinusoidy. Kliknijmy więc na sine_left w graficznym edytorze i spójrzmy na listę funkcji po prawej stronie. Są to:

  • amplitude(level) – głośność generatora, przyjmuje wartości od 0.0 do 1.0,
  • frequency(freq) – częstotliwość, freq w zakresie od 0 do 22000,
  • phase(angle) – przesunięcie fazy sinusoidy, przyjmuje wartości od 0 do 360.

Ustawmy sobie głośność obu generatorów na 1.0, nasza funkcja setup() powinna wyglądać tak:

void setup() {
  AudioMemory(15);
  sine_left.amplitude(1.0);
  sine_right.amplitude(1.0);
}

Przejdźmy teraz do funkcji loop. Skoro postanowiliśmy stworzyć 2 generatory to fajnie by było, gdyby oba w tym samym czasie generowały różny dźwięk, a przejście było płynne. Skorzystajmy więc z 2 pętli for. Pierwsza z nich będzie zwiększała częstotliwość sine_left i zmniejszała sine_right, a druga zupełnie na odwrót.

void loop() {
  for(int freq = 0; freq = 0; freq--) {
    sine_left.frequency(100 + freq);
    sine_right.frequency(1100 - freq);
    delay(2);
  }
}

Złóżmy więc układ i zobaczmy jak działa w praktyce :)

Jak widać wszystko działa jak należy :) Tym artykułem chciałbym zapoczątkować serię poradników do płytek Teensy dla początkujących użytkowników, którzy pragną dowiedzieć się co wyróżnia tę malutką płytkę spośród wielu innych dostępnych na rynku.

Użyte części: