diff --git a/src/documentation/about.ts b/src/documentation/about.ts index 0a1b718..fe51e15 100644 --- a/src/documentation/about.ts +++ b/src/documentation/about.ts @@ -18,6 +18,7 @@ Topos is a free and open-source software distributed under [GPL-3.0](https://git - Felix Roos for the [SuperDough](https://www.npmjs.com/package/superdough) audio engine. - Frank Force for the [ZzFX](https://github.com/KilledByAPixel/ZzFX) synthesizer. +- Kristoffer Ekstrand for the [AKWF](https://www.adventurekid.se/akrt/waveforms/adventure-kid-waveforms/) waveforms. - All the [Topos](https//github.com/Bubobubobubobubo/Topos) contributors! **Have fun!** diff --git a/src/documentation/synths.ts b/src/documentation/synths.ts index 867c742..e5cf049 100644 --- a/src/documentation/synths.ts +++ b/src/documentation/synths.ts @@ -168,7 +168,7 @@ beat(.25) :: sound('square').freq(100*[1,2,4,8].beat()).sustain(0.1).out()`, )} ${makeExample( - "Ghost carillon", + "Ghost carillon (move your mouse!)", ` beat(1/8)::sound('sine') .velocity(rand(0.0, 1.0)) @@ -244,16 +244,39 @@ ${makeExample( ## Wavetable synthesis +Topos can also do wavetable synthesis. Wavetable synthesis allows you to use any sound file as a source to build an oscillator. By default, Topos comes with more than 1000 waveforms thanks to the awesome [AKWF](https://www.adventurekid.se/akrt/waveforms/adventure-kid-waveforms/) pack made by Kristoffer Ekstrand. Any sample name that contains wt_ as a prefix will be interpreted by the sampler as a wavetable and thus as an oscillator. See for yourself: + ${makeExample( "Acidity test", - ` -beat(.25) :: sound('wt_symetric:8').note([50,55,57,60].beat(.25) - [12,0].pick()).ftype('12db').adsr(0.05/4, 1/16, 0.25/4, 0) - .cutoff(1500 + usine(1/8) * 5000).lpadsr(16, 0.2, 0.2, 0.125/2, 0).room(0.9).size(0.9).resonance(20).gain(0.3).out() + `beat(.25) :: sound('wt_symetric:8').note([50,55,57,60].beat(.25) - [12,0] + .pick()).ftype('12db').adsr(0.05/4, 1/16, 0.25/4, 0) + .cutoff(1500 + usine(1/8) * 5000).lpadsr(16, 0.2, 0.2, 0.125/2, 0) + .room(0.9).size(0.9).resonance(20).gain(0.3).out() beat(1) :: sound('kick').n(4).out() beat(2) :: sound('snare').out() -beat(.5) :: sound('hh').out()` +beat(.5) :: sound('hh').out()`, + true )} + +Let's explore the galaxy of possible waveforms. It can be hard to explore them all, there is a **lot** of them: + +${makeExample( + "Let's explore some wavetables", + ` +// Exploring a vast galaxy of waveforms +let collection = [ + 'wt_sinharm', 'wt_linear', 'wt_bw_sawrounded', + 'wt_eorgan', 'wt_theremin', 'wt_overtone', + 'wt_fmsynth', 'wt_bitreduced', 'wt_bw_squrounded']; +beat(2) :: v('selec', irand(1, 100)) +beat(2) :: v('swave', collection.pick()) +beat(0.5) :: sound(v('swave')).n(v('selec')).out() +`, + true +)} + +You can work with them just like with any other waveform. Having so many of them makes them also very useful for generating sound effects, percussive, sounds, etc... # Frequency Modulation Synthesis (FM)