Teensy 3.2 i audio – tego się nie spodziewasz

To co robi twórca Teensy ze swoją społecznością jest niesamowite. Jego mikra płytka z procesorem ARM to dowód na to, że produkcje niezależne dalej mogą szokować pomysłami i możliwościami przy stosunkowo niskiej cenie.

Teensy 3.2
Teensy 3.2

Właśnie odkryłem bibliotekę Audio.h. Służy do przetwarzania dźwięków w czasie rzeczywistym i jak się potem przekonasz jest bajecznie prosta.

Wszystko opiera się na klockach. Każdy klocek robi coś z dźwiękiem, odbiera z wejścia, filtruje, analizuje widmo, wzmacnia, odtwarza z pamięci i dużo dużo więcej.

Na specjalnej stronie WWW łączysz te klocki wirtualnymi przewodami, naciskasz Export i masz gotowy kawałek programu, który robi to co chcesz z dźwiękiem. Jak to nie jest super, to nie wiem co jest.

audio

Na razie moje pomysły ograniczają się do zrobienia syreny alarmowej, efektu do gitary elektrycznej (rock!!!), wyświetlacza widma do wzmacniacza, odtwarzacza dźwięków z popularnych gier jako sygnał otwarcia drzwi do sklepu. Ale ty wymyślisz pewnie jeszcze bardziej niesamowite rzeczy. Np. dzwonek do drzwi z dźwiękiem karabinu plazmowego ;-D

Ponieważ najtrudniej jest zacząć, pokażę ci jak zrobić syrenę alarmową.

Wchodzisz na stronę edytora klocków Audio System Design Tool for Teensy Audio Library 

Syrena składa się z generatora sinusa – klocek “sine” i wyjścia audio – klocek “dac”.

klocki

Jeśli zaznaczysz któryś z klocków, z prawej strony okna pokaże się krótka dokumentacja z opisem jego działania, funkcji programu lub gdzie jest jego wyjście na płytce. Z niej dowiadujesz się jak zmieniać częstotliwość generatora sine1 i gdzie będzie wyjście dźwięku z przetwornika dac1.

Naciskasz przycisk “Export” i masz gotowy fragment programu do wklejenia w Teensyduino (o instalacji Teensy też napiszę).

#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
AudioSynthWaveformSine   sine1;          //xy=448,203
AudioOutputAnalog        dac1;           //xy=597,203
AudioConnection          patchCord1(sine1, dac1);
// GUItool: end automatically generated code
// GUItool: begin automatically generated code

W funkcjach setup i loop trzeba dopisać co twój program będzie robił z tymi klockami.

void setup() {
  AudioMemory(10);
  sine1.amplitude(1.0);
}

Funkcja “AudioMemory” ustala wielkość bufora audio. Im mniejsza wartość, tym mniej zajętej pamięci i mniejsze opóźnienia audio, ale większe obciążenie procesora i mniej czasu na twój program w funkcji “loop”.

Metoda “sine1.amplitude” ustala głośność generowanego sygnału. 1.0 oznacza maksymalną głośność.

void loop() {
  for (word freq=100; freq<1000; freq++)
  {
    sine1.frequency(freq);
    delay(2);
  }

 for (word freq=1000; freq>100; freq–)
  {
    sine1.frequency(freq);
    delay(2);
  }
}

Syrena działa tak, że płynnie obniża i podwyższa częstotliwość sygnału. Częstotliwość ustala się za pomocą metody “sine1.frequency”. Wstawiłem ją w dwie pętle “for”. Jedna podwyższa częstotliwość od 100 do 1000 Hz, a druga ją płynnie zmniejsza. W funkcji “delay” ustala się szybkość tych zmian.

Teraz wystarczy podłączyć wzmacniacz do wyjścia DAC w Teensy 3.1 przez kondensator 10 uF.

audio1

Jeśli chcesz sobie ułatwić podłączenie urządzeń audio, mam też świetne rozszerzenie Teensy Audio Board. Jest to płytka wyposażona w wejście i wyjście audio oraz czytnik kart SD. Dzięki specjalistycznemu układowi zapewnia lepszą jakość przetwarzanego dźwięku. Na karcie SD można przechowywać sample do odtwarzania przez Teensy.

Teensy Audio Board
Teensy Audio Board

 

To jest nasz starszy wpis przeniesiony z innego bloga: źródło