English
O alatima
Ovi jednostavni alati sa sučeljem naredbenog retka (dakle, bez grafičkog sučelja)
predstavljaju prvi korak u premošćivanju praznine koja dijeli glazbeničko od inženjerskog razmišljanja.
Osnovna ideja je najjednostavnijim primjerima pokazati "pisanje" zvuka na računalu, a da se ne ostane na površini.
"Alatnica" sadrži 25+ jednostavnih programa s izvornim kodom iz kojeg se točno vidi "što,
kako i zašto".
Čemu alati sa sučeljem naredbenog retka?
-
jer predstavljaju tematski osnov pisanja programa uopće
-
jer ohrabruju znatiželju, slobodu učenja i istraživački duh po načelu "uradi sam".
-
jer mogu ublažiti krivulju učenja.
-
jer takve primjere nismo pronašli drugdje.
-
jer su dovoljno jednostavni da ne iziskuju profesionalne programerske vještine da bi bili napisani.
Nužno je jedino nešto običnog
C jezika,
bez virtuoznih shell-skriptova, klasa i "omotača".
-
jer su jedina ovdje zvukovno-specifična programska pomagala, ako ikoja, ona najosnovnija:
CoreAudio ili
RTaudio.
-
jer je dokumentacija o pisanju takvih programa još uvijek iznenađujuće rijetka.
-
jer su se pokazali korisnima u uporabi.
-
jer se i najsofisticiraniji jezici za algoritamsku kompoziciju,
kao RTcmix temelje na tekstovnom unosu
podataka i sučelju naredbenog retka.
Programi:
Početni programi
Ovo je "Hello, World!" za išta započeti s tvorbom zvuka u C jeziku.
Pet malih programa stvaraju nizove vrijednosti signala, kao sirove podatke.
Mada sami ne mogu zvučati, već jedino prozivode podake koje mora odsvirati neki drugi
program, dijelovi su svakog programa koji proizvodi zvuk i tu su da pomognu vidjeti osnove
tvorbe zvukovnog signala.
UPORABA:
table size
sine num_cycles num_steps
sinef num_cycles num_steps destfile
siner duration frequency sampling_rate
ks duration frequency sampling_rate
Molimo pročitajte priloženi README.txt dokument.
PartialsCatenator
Pored sirovih podataka signala, koristimo i analitičke podatke koji predstavljaju slijedove kontrolnih
vrijednosti, koji olakšavaju muzički razumljiv prikaz vrijednosti kojima se tvorba signala upravlja.
Jedan takav tip podataka je "parcijalna analiza".
Ovaj UNIX alat pisan je jedonstavnim "Hello, World!"-stilom C
jezika i služi za povezivanje podataka iz većeg broja analiza u jedan podatkovni skup.
Format ovih podataka je LISP lista, kakvu koristi program
SculptView.
UPORABA:
ptcat file1 file2 ... ...filen > destfile
Ako se rezultat ne preusmjeri u destfile, biti će samo prikazn na ekranu.
Partials' Converters
Programi za konverziju između dva često korištena tekstovna formata za partcijalnu analizu.
Dva su programa:
-
s2l pretvara noviji format programa SPEAR u stariji LISP format.
UPORABA:
s2l < infile > outfile
Ako se rezultat ne preusmjeri u destfile, biti će samo prikazn na ekranu.
-
l2s pretvara stariji LISP format u noviji SPEAR format.
UPORABA:
l2s < infile > outfile
Ako se rezultat ne preusmjeri u destfile, biti će samo prikazn na ekranu.
OPASKA:
SDIF tekstovni dokumenti su, mada u širokoj uporabi daleko složeniji za rad,
i njihova upotreba često podrazumijeva prilično delikatnu interpretaciju sadržaja, čemu ovaj
alat niti nije dorastao. Tomu su primjereniji programi
SculptView
ili SPEAR.
Partial Tracking File Resampler
Ovaj alat "preuzorkuje" postojeće LISP liste s parcijalima i raspoređuje točke loma
uniformno koristeći kubnu interpolaciju. Služi se nešto višom matematikom, i kod za
mrvljenje podataka temelji se na radu profesora George Wolberga.
1988 Columbia University Computer Science Dept.
Technical Report CUCS-389-88 : CUBIC SPLINE INTERPOLATION: A REVIEW.
UPORABA:
ptfr file_name <dur>
- dur je željeni uniformni razmak između točaka u sekundama.
Po obavljenom preuzorkovanju program će zatražiti ime novog dokumenta u koji će se podaci spremiti.
SineWaveGenerator
Ovo je najjednostavniji alat koji demonstrira proces audifikacije. Rabi CoreAudio
tehnologiju i služi ad-hoc audifikaciji brojki
koje predstavljaju proizvoljan skup parcijalnih frequencija, i za demonstaraciju kako one
uplivaju na boju tona. Također se na jednostavan način dočarava koncept aditivne sinteze.
Brojevi se upišu kao niz argumenata u naredbeni redak, s mogućim znakom "minus"
- i kraticom opcije za spektralnu
ovojnicu:
q for kvadratična
e for exponencijalna
b for Besselova J0
Ovojnica bez opcije je linearno recipročna
UPORABA:
swg freq1 freq2 ... ...freqn -[q|e|b]
Frekvencije su u titrajima po sekundi [=Hz]
Pritiskom na "Enter" pokrećemo sintezu.
Zvuci sinusoidnih valova odabranih frekvencija sviraju simultano s preciznošću
do u jedan uzorak.
Pritiskom na "Enter" zaustavljamo program.
FloatBufferPlayer
Ovo je najjednostavniji
CoreAudio
program za odsvirati proizvoljne binarne dokumente s
decimalnim podacima, koji nisu nastali kao "zvuk", već su mogli nastati
bilogdje, čak i bez ikakve veze sa zvukovnim podacima. Takve dokumente normalan program za
sviranje ili uređivanje zvukovnog zapisa ne bi niti otvorio.
Takvi dokumenti naime nemaju oznake "identiteta", zaglavlje, pakete,
kodiranje, audio deskriptore i sve druge korisne, cool and hype odlike koje
nesumnjivo pripomažu standardizaciji tonskih zapisa u svijetu razonode i glazbenoj industriji,
ali svojom prohibitivnošću onemogućavaju ono što se naziva sonifikacija.
Rješenje je posegnuti za jezikom C i napisati takav program.
UPORABA:
fbp file
File mora biti binaran, s 32-bitnim decimalnim podacima.
Program će ga interpretirati kao niz zvukovnih uzoraka.
Biti će reproduciran na zadanom audio izlazu zadanom frekvencijom uzorkovanja.
Normalizacija glasnoće je dio programa, tako da će zvučnici ostati čitavi.
Pritiskom na tipku "Enter" pokrećemo reprodukciju.
Pritiskom na "Enter" također zaustavljamo reprodukciju.
Verzija ovog programa s grafičkim sučeljem
može spremiti učitane podatke i u CAF ili AIF audio formatu.
TextFilePlayer je verzija istoga program koja
čita jednodimenzionalne nizove decimalnih podataka u tekstovnom formatu
i pretvara ih u zvuk; dostupna je u izvornom kodu.
UPORABA:
tfp file
FloatByteSwapper
Ovo je alat za Float32 format
byte-swapping (zamjenu bajtova), za slučaj da decimalni podaci nemaju raspored
bajtova koji je naativan na aktivnom računalu.
UPORABA:
fbs file.fp -[option]
option n = normalize
File mora biti binaran, s 32-bitnim decimalnim podacima.
Thread Demo
Ovo je simulator procedure tehnologije više programnih nîti
(multi-threading),
slične onoj kakva se koristi u digitalnoj sintezi signala. Željena duljina podatkovnog niza se
unosi u naredbeni redak. Program provjerava koliko mu paralelnih logičkih procesora stoji na raspolaganju
i prema tomu segmentira program na takav broj jedinica koje je moguće izvesti paralelno, svaka sa svojim
dijelom podatkovnog spremnika.
Na kraju ciklusa izračunati se podaci zbroje i rezultat se prikaže.
UPORABA:
threads -[option]
option n = no print da se onemogući ispis (što usporava CPU)
Enter buffer length:
Za lagan pregled što program radi unese se malen broj, poput 10.
Za nadgledanje opterećenosti procesora izračunom unese se velik broj, kao npr. 1000000.
Razrađeniji primjeri:
Ovi programi predstavljaju funkcionalnu nadogradnju gore opisanih osnovnih alata. Programe je u naredbenom retku moguće
međusobno povezati, tako da izlazni podaci jednog programa postanu ulazni podaci drugog. Izvorni kod pokazuje na koji je način
izvedena redirekcija, petlja događaja (event loop) i signali.
- algoritamski generatori nizova frekvencija:
- pri generira slijed frekvencija prema nizu prim brojeva unutar intervala [n1 n2], preslikanom u sustav
s dvanaest klasa tonskih visina, u rectus i inversus načinu.
USAGE: pri <n1 n2>, gdje su n1 i n2 prirodni brojevi.
- com generira slijed frekvencija prema binomnim koeficijentima preslikanim u sustav
s dvanaest klasa tonskih visina, u rectus i inversus načinu.
USAGE: com <n>, gdje je n prirodni broj.
- genetic generira slijed od n frekvencija prema rezultatima genetičkog algoritma, preslikanim u sustav
s dvanaest klasa tonskih visina.
USAGE: genetic <n>, gdje je n prirodni broj.
- sintetizator sinusiodnog valnog oblika:
- siner1 iz ulazne liste frekvencija generira podatkovni niz sinusoidnog valnog oblika u tekstovnom ili
binarnom formatu, sa zadanom frekvencijom uzorkovanja (44100Hz) i podesivom duljinom odsječka.
USAGE: siner1 [-bd duration], gdje je opcija b binaran izlazni format, a opcija d zahtijeva unos duljine segmenta (u sekundama).
- reproduktori:
- tfp1 prima podatke u tekstovnom formatu
- fbp1 prima podatke u binarnom formatu
- primjer povezivanja:
- pri 1 128 | siner1 | tfp1
- com 6 | siner1 -bd 0.2 | fbp1
RtAudio primjeri
Pisanje jednostavnih, smislenih i univerzalnih (platformski neovisnih) audio programa niske razine može predstavljati izazov.
Slijedi nekoliko osnovnih primjera u C++ jeziku, koji rabe, univerzalne (portabilne)
softverske biblioteke (librarije) RtAudio,
RtMidi i njihova programerska sučelja.
Ovi programi dostupni su u izvornom kôdu s uputama za kompiliranje. Preduvjet za rad je prethodno preuzeti
i kompilirati ove dvije softverske biblioteke (librarije):
-
rtsine svira glazbeni interval dva sinusoidna vala u in L i D kanalu.
UPORABA:
rtsine
-
rtswg je C++ izvorni kod za aditivni SineWaveGenerator
UPORABA:
rtswg freq1 freq2 ... ...freqn -[q|e|b]
korištenje i opcije su isti kao za swg (SineWaveGenerator).
-
rtfbp je C++ izvorni kod za FloatBufferPlayer
koristeći RtAudio:
UPORABA:
rtfbp sample_rate file_name <device_number> <channel_offset>
device_number i channel_offset vrijednosti su opcije.
-
rttfp je C++ izvorni kod za TextFilePlayer
koristeći RtAudio:
UPORABA:
rttfp sample_rate file_name <device_number> <channel_offset>
device_number i channel_offset vrijednosti su opcije.
-
rtpt je nešto kompleksniji program koji objedinjuje
rtswg i Thread Demo
prilagođen sintezi velikog broja
parcijala, pomoću brzog algoritma valne tablice, paralelnog multi-procesiranja, cirkularnog spremnika (circular buffer)
TPCircularBuffer i
RtAudio biblioteke (librarije):
UPORABA:
rtpt num_partials fundamental_freq -[q|e|b]
opcije su iste kao i za rtswg (SineWaveGenerator).
-
rtm je demo program koji sažima uporabu tehnologije
valne tablice, banke oscilatora, paralelnog multi-processiranja, POSIX nîti (threads),
cirkularnog spremnika,
RtAudio i
RtMidi, u formi
monofonog sintetizatora bez grafičkog sučelja.
UPORABA:
rtm num_partials -[q|e|b]
opcije su iste kao i za rtswg (SineWaveGenerator).
-
rtfbp1 je inačica programa rtfbp
napisana za povezivanje s programima iz ulomka Razrađeniji primjeri:
UPORABA:
rtfbp1 sample_rate file_name <device_number> <channel_offset>
device_number i channel_offset vrijednosti su opcije.
0 kao file_name znači da se podaci čitaju iz izlaza drugog programa:
PRIMJER: com 6 | siner1 -db 0.2 | rtfbp1 44100 0
-
rttfp1 je inačica programa rttfp
napisana za povezivanje s programima iz ulomka Razrađeniji primjeri:
UPORABA:
rttfp1 sample_rate file_name <device_number> <channel_offset>
device_number i channel_offset vrijednosti su opcije.
0 kao file_name znači da se podaci čitaju iz izlaza drugog programa:
PRIMJER: com 6 | siner1 -d 0.2 | rttfp1 44100 0
Alati rade na MacOS X ( macOS ) 10.6 - 10.14, i najvećim dijelom su izvorno kompatibilni sa svakim UNIX sistemom, ali:
NEMA JAMSTVA
preuzmi
starters (-izvorni kod).
preuzmi
PartialsCatenator (MacOS X -binarni / izvorni).
preuzmi
Partials' Converters (MacOS X -binarni / izvorni).
preuzmi
PartialsTrackingFileResampler (izvorni i MacOS X binarni).
preuzmi
SineWaveGenerator (MacOS X -binarni kod).
preuzmi
FloatBufferPlayer (MacOS X -binarni kod).
preuzmi
TextFilePlayer (izvorni i MacOS X binarni).
preuzmi
FloatByteSwapper (MacOS X binarni / izvorni).
preuzmi
Thread Demo (MacOS X binarni / izvorni).
preuzmi
pri (izvorni kod).
preuzmi
com (izvorni kod).
preuzmi
genetic (izvorni kod).
preuzmi
siner1 (izvorni kod).
preuzmi
FloatBufferPlayer1 (izvorni i MacOS X binarni).
preuzmi
TextFilePlayer1 (izvorni i MacOS X binarni).
preuzmi
rtsine ( -izvorni kod).
preuzmi
rtswg ( -izvorni kod).
preuzmi
rtfbp ( -izvorni kod).
preuzmi
rttfp ( -izvorni kod).
preuzmi
rtpt ( -izvorni kod).
preuzmi
rtm ( -izvorni kod).
preuzmi
rtfbp1 ( -izvorni kod).
preuzmi
rttfp1 ( -izvorni kod).
a tu je
grafičko sučelje FloatBufferPlayer (MacOS X -binarni kod).
Izvorni kod je dostupan ili će biti uskoro dostupan tamo gdje je to potrebno.