D S P, S U P E R C O L L I D E R , A R D U I N O …
T N M K 0 5 4 - L J U D T E K N I K 1
S U P E R C O L L I D E R
R E A LT I D S S Y N T E S M M …
S U P E R C O L L I D E R
• Gratis och open source
• http://supercollider.github.io/
• Miljö för realtidsljudsyntes och ljudprocessing
• Verktyg för viss visualisering
• En bastard av blandade språk och smalltalk, många
kockar…
I N T E R A K T I V T L J U D
S U P E R C O L L I D E R
Mest magenta
anpassar musiken bb
bb bb
bb
bb
bb
bb bb 8va
Röd
Magenta Cyan Gul
Ackordtoner
bb
Vitt
Karta och ljudfil Svart
Meloditoner
Bastoner Högt ackord
Tolkning av färger
Vit
Blå
Grön
8va
bb
U T F O R S K A E L L E R S K A PA ?
I N T E R A K T I V T L J U D
VA D G E R P R O C E S S E N ? V I L K E T M E D I A S T Y R ? L I N J Ä R T E L L E R O L I N J Ä R T ?
D S P
• Digital signal processor
• Tar en digital signal - röst
- ljud - video
- temperatur - tryck
- position
• och bearbetar den
matematiskt
D S P
• En (riktig) DSP är gjord för att processa matematiska beräkningar extra snabbt - addition
- subtraktion - multiplikation - division
• Men, behövs den idag?
• Kedjan består av AD, DSP,
minne, DA
A D / D A - O M VA N D L A R E
Förfilter (LPF)
Förstärkare Sampling Kvantisering Kodning
(4-bitpar)
Lagring Avkodning Postfilter
(LPF)
10111010 10011000 01110110 01010100 00110010
10111010 10011000 01110110 01010100 00110010
A D / D A
• Nyquistteoremet
• Samplingsfrekvens
• Aliasing
(vikningsdistorsion)
• Kvantisering
• Kvantiseringsbrus
• …
D S P
•
DSPn består av
•
Programminne med programmet för
signalbehandlingen
•
Dataminne där signalen som ska bearbetas lagras
•
Processorn där de matematiska uträkningarna sker
•
En I/O-enhet
Beräknings-
processor I/O-enhet
Serieportar Timers Hostportar Externa portar
LINKportar
I/O ansluter till världen
uftanför DSPn Program-
minne Data-
minne
§
S I G N A L B E - H A N D L I N G
• Linjära och icke linjära beräkningar.
• Ickelinjär signalbehandling kan implementeras i tids-, frekvens- och spatio-
temporala domäner.
• Från tidsdomän via FFT till
frekvensdomän.
S TÄ L L N I N G S - TA G A N D E N
• Bearbeta varje sample
• Bearbeta fönster med flera samples
• Vad bestämmer hur vi gör?
• Mängd minne
• Databeräkningskraft
• Acceptabel fördröjning
A R D U I N O
• ATmega328P
• 16 MHz
• Flashminne på 32KB (bootloader 0.5KB)
• SRAM 2KB
• Flash 1KB
• arduino.cc
A R D U I N O
• Programmeras via Arduinos IDE
- Windows - Linux
- OSX
• Online IDE
• Programmeras över USB mellan Arduino och dator
• USB ger oxå strömförsörjning
A R D U I N O
• Programmeringsspråket är Cish
• Om ni är bekväma med OOP så kör C/C++
• Inom kursens ramar kör vi
Arduino IDE… :)
A R D U I N O I D E
• Programmeras via Arduinos IDE
- Windows - Linux
- OSX
• Online IDE
• Programmeras över USB mellan Arduino och dator
• USB ger oxå strömförsörjning
I / O P I N S
• 6st analoga in/digitala ut
• 13st digitala in/ut
• 6st PWM ut
• VIN 6-20V (7-12V rekommenderat)
• Ger +5V och +3.3V ut
S T R U K T U R I
A R D U I N O K O D
• Globala variabler
• void setup
• void loop
• andra funktioner
VA R I A B L E R
• Är hårt typade - boolean
- char - byte - int - long - float - string - array
• Casta om typ:
int x = 5;
float z = (float)x/2.0;
VA R I A B L E R
Namnge variablerna smart!
Undvik därför x , y , och
temp …
Undvik Arduino-keywords Är case sensitive.
Kan innehålla siffror och
alla tecken…
VA R I A B L E R
Globala variabler
deklareras “utanför”
funktionen.
Lokala variabler
deklareras i funktionen.
F U N K T I O N E R
En funktion deklareras
utifrån vad den förväntas returnera.
Följt av funktionsnamn
förväntade variabler att ta emot inom ( )
och måsvingar { }
void testFunction { gör något;
}
S K R I VA U T…
Det är svårt att skriva ut…
men, Print()
Initiera serieporten i void setup:
Serial.begin(9600);
Senare i funktionerna:
Serial.print("Text");
Serial.print(variabel);
S T R Ä N G A R
Strängar med “”
Tecken med ‘ ‘
char Str4[ ] = "arduino";
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char* myStrings[]={"String 1",
"String 2", "String 3","String
4", "String 5","String 6”};
O P E R AT Ö R E R
Aritmetiska operatörer:
= + - * / % Jämförande:
== != < > <= >=
Boolean:
&& || ! Bitwise:
& | ^ ~ << >>
Sammansatta:
++ — += -= osv…
I F - S AT S E R
if (variabelNamn > 50) {
// gör något smart;
}
och
if (x > 120) digitalWrite(LEDpin, HIGH);
if (x > 120){ digitalWrite(LEDpin, HIGH);}
I F - S AT S E R
if (variabelNamn < 500) {
// gör något A;
}
else if (variabelNamn >= 1000) {
// gör något B;
}
else {
// gör något C;
}
L O O PA R
for (initialization; condition; increment) { //statement(s);
}
while(expression){
// statement(s);
} do {
// statement block;
} while (test condition);
B L I N K
A R D U I N O
D I G I TA LW R I T E
T R Y C K B L I N K
A R D U I N O
D I G I TA LW R I T E O C H P U L L D O W N - / P U L L U P - M O T S TÅ N D
P W M FA D E
A R D U I N O
A N A L O G W R I T E , P W M
P W M P O T FA D E
A R D U I N O
A N A L O G W R I T E , A N A L O G R E A D O C H M A P P I N G
M A S T E R C L O C K
A R D U I N O
M I D I , S Y N C 2 4 , K L O C K P U L S E R I / O
B U R S T G E N E R AT O R
A R D U I N O
G E N E R E R I N G AV K A S K A D E R AV P U L S E R
S O N I C E N V I R O N M E N T
A R D U I N O
L Ä S N I N G AV S E N S O R E R - > S E R I E L L I N F O R M AT I O N
Motion sensor
Ambient light sensor Temperature sensor Ambient microphone
Raspberry PI SuperCollider
Speaker output
L A B O R AT I O N
A R D U I N O
A R D U I N O S O M D S P
Beräknings- processor ATmega328P
60MHz
I/O-enhet 6 analoga in (digitala ut)
13 digitala in/ut (6 PWM ut)
VIN 6-20V
+5V & +3.3V ut
Ljud in
Potentionmeter in
Program-
minne Data-
minne
32KB
Ljud ut
L A B O R AT I O N
A R D U I N O
D C - O F F S E T, F I LT E R
L A B O R AT I O N
A R D U I N O
I N T E R R U P T P R O C E S S
Interruptprocess
31.25 kHz
1 0
15.625 kHz Påbörja nästa Timer 2, interrupt
62.5 kHz
Avsluta interrupt
Läs ADC 0 och sätt ADC Mux till kanal 1
Sampleflagga = 1
Läs ADC 1 och sätt ADC Mux till kanal 0
/2 /2
L A B O R AT I O N
A R D U I N O
V O I D L O O P, B E A R B E TA E N S A M P L E I TA G E T
Huvudloop void loop()
{
}
Sampleflagga
Läs nya sampelvärden
65 uSekunder
Skriv den nya sampeln, det nya värdet, till PWM som ljud ut, dvs digital ut 11.
Utför signalbehandling här.
Använd SRAM buffer för delay etc, max minne 512 bytes.
Läs värden från ADC1 för att förändra parametrar.
Skriv till SRAM buffer.
1
0 Sampleflagga = 0
L A B O R AT I O N
A R D U I N O
S R A M B U F F E R
läs frå
n minne skriv till minne
SRAM-buffert
0 511
510 509
...
1 2
...