Knobs Galore - vaihevääristymäsyntetisaattori


#1

Knobs Galore

Knobs Galore on kehitteillä oleva digitaalinen syntetisaattori, jota rakennan halvan lelupianon runkoon. Se toimii Casion CZ-linjan syntetisaattoreissaan käyttämällä vaihevääristymäsynteesitekniikalla, josta käytetään joskus lyhennettä PD (Phase Distortion). PD:n voidaan kuvailla olevan jotakuinkin vaihemodulaatiosynteesin (“FM”-synteesi) ja analogisissa syntetisaattoreissa käytetyn subtraktiivisen synteesin välimaastossa. Valitsin vaihevääristymäsynteesin, koska FM:n verrattuna siinä on paljon vähemmän parametreja (joten se on helpompi oppia), ja toisin kuin subtraktiivisessa synteesissä, siinä ei tarvita digitaalisia suodattimia.

Ajattelin aluksi toteuttaa syntetisaattorin mikrokontrolleripohjaisena, mutta huomasin pian, että ainakin 8-bittisten mikrokontrollerien tehot jäivät liian pieniksi polyfoniselle syntetisaattorille — esimerkiksi 44kHz näytteenottotaajuudella kunkin näytteen laskeminen vie 23 mikrosekuntia, jollon 1MHz prosessorilla 8 ääntä käyttäen on alle 3 kelloa aikaa kutakin näytettä varten. Tilannetta voisi helpottaa puskuroinnilla ja DMA:lla, mutta siihenkään ei pelkkä mikrokontrolleri riitä. Lopulta päätin tehdä syntetisaattorin FPGA:ta käyttämällä, jolloin kullakin kellolla voi tehdä paljon enemmän. Valitsin Papilio-merkkisen FPGA-protoilulaudan, koska se on melko halpa, siihen on saatavilla paljon lisäkrääsää, kuten valmis 3,5mm-jakkiliitinmoduli (ja MIDI-moduli), ja siinä on kattava ohjeistus.

Papilio One

Papilio One

Käytän syntetisaattorin runkona saksalaisen Simban My Music World-lelukosketinsoitinta. Kyseisellä nimellä myydään useita soittimia, mutta minun soittimeni on kuulemma oikein modernin tyylinen. Kosketinsoitin on varsin sopiva tarkoituksiini: siinä on juuri sopiva määrä näppäimiä käyttöliittymää varten ja se on melko pieni, mutta sen sisään on helppo laittaa esimerkiksi Papilio (tai muu piirilevy). Ennen kaikkea kuitenkin siinä koskettimisto ja näppäimistö ovat erillään itse elektroniikasta, lattakaapelilla yhdistettynä, joten ne on helppo yhdistää omiin tekeleisiini! Soitin maksoi uutena 14 euroa Mikkelin Prismassa.

Simba My Music World

Simba My Music World

Mielestäni syntetisaattoreissa pitää mielellään olla paljon nuppeja; mitä enemmän, sen parempi. Nupit ja slaiderit ovat paljon intuitiivisempia mielestäni kuin valikkokäyttöliittymät, joten otan niistä inspiraatiota. Ikävä kyllä lelukosketinsoittimissa ei erinäisistä syistä ole nuppeja kuin enintään äänenvoimakkuudelle, joten joudun päätymään toisenlaiseen käyttöliittymäratkaisuun.

Käyttöliittymä on vasta suunnitteluvaiheessa, mutta ajattelin tehdä jokaista parametria varten 2 nappia: +, joka kasvattaa ko. parametria, sekä -, joka pienentää sitä — valikoita ei siis tarvita. Teen myös hienoa ja karkeaa säätöä varten omat napit: x10-napin painamisen jälkeen kukin napin painallus muuttaa parametria kymmenellä, ja x1-napin painamisen jälkeen yhdellä. Käytän kahta nappia, jotta käyttäjän ei tarvitsisi muistaa kummassa tilassa koskettimisto on kullakin hetkellä. Parametrien näyttämiseksi ei ole näyttöä, joten ne pitää säätää korvakuulolla, mutta saatan lisätä yksinkertaisen numeronäytön myöhemmin.

Käyttöliittymä

Esimerkki siitä, millainen käyttöliittymä voisi olla

Syntetisaattorissa ei ole kovin paljon toimintoja, joten napit riittävät varsin hyvin. Säätimiä tarvitaan ainakin

  • amplitudin verhokäyrälle (V[ADSR])
  • pseudosuotimen kynnystaajuudelle (Cutoff)
  • pseudosuotimen verhokäyrälle (F[ADSR])
  • pseudosuotimen verhokäyrän määrälle (Env)
  • aaltomuodolle (WF)
  • äänenvoimakkuudelle (Vol) sekä
  • ohjelmamuistille (Preset, Load, Save)

Täällä on ääninäyte syntetisaattorin tämän hetkisestä tilasta. Kyseistä näytettä varten toteutin ramppigeneraattorin, ADSR-vaippageneraattorin vaihevääristymäparametria (“cutoff”) varten, vaihevääristimen sekä siniaalto-look-up-taulukon. Lisäksi toteutettuna on D/A-muunnin ja rengaspuskuri, jotka tulevat lopulliseen syntetisaattoriin. Olen kasannut suunnitelmani oheiseen kuvaan, jonka mukaan toteuttamatta ovat vielä ohjaus ja vahvistus, sekä tietenkin integraatio koskettimistoon ja näppäimiin.

Suunnitelmia
Suunnitelma lopullisesta systeemistä

Nykyisellään syntetisaattorin voi myös syntetisoida (heh) ja ladata Papilioon, mutta se on vain monofoninen, sillä äänten allokointia ei ole toteutettu. Ajattelin aluksi, että äänet allokoitaisiin “älykkäästi” (otetaan aina seuraava vapaana oleva kanava käyttöön), mutta Xilinx ISEn raporteista kävi ilmi, että nykyisellään vain 2% sliceistä on käytettynä. Kellopulssejakin on käytössä 488 kutakin näytettä kohden, joten voin yhtä hyvin varata kullekin koskettimelle yhden kanavan, joten äänien allokoinnista tulee triviaali tehtävä, ja bonuksena syntetisaattoriin tulee täysi polyfonia!

Seuraavaksi aion kasata breadboardille kalvokytkimistä pienen “koskettimiston”, joiden avulla syntetisaattoria voi soittaakkin (: sitä seuraavana listalla ovat myös vahvistuksen toteuttaminen (ajattelin toteuttaa sen yksinkertaisena look-up taulukkona, kuten vaihevääristymän ja aaltomuotogeneroinnin) ja moniäänisyys.


Projektin lähdekoodit ovat saatavilla GitHubissa.