1 Simple Synth


Dit is de introductie opdracht voor het MSP-domein van Max (Max Signal Processing). Max is een ontzettend krachtige omgeving voor het zelf bouwen/prototypen van audio-effecten, live-performance tools, interactief geluid, custom sound design en nog veel meer! In deze opdracht leer je hoe signalen in Max werken en programmeer je een simpele mono synthesizer die je kunt bespelen met een keyboard.

Deadline: 11 februari

Belangrijke objecten in deze opdracht:



Snap je de functie van een object niet? Gebruik alt-click op het object om er meer over te weten te komen. Help-files in Max bestaan uit werkende programma's, zodat je meteen de toepassing van het object kan zien. Bekijk ook de Max Keyboard Shortcuts en Max CheatSheet.

Plaats comments (sneltoets c) bij delen van je patch om voor jezelf en ons duidelijk te maken dat je snapt wat er gebeurd en hoe iets werkt. Dit wordt documentatie genoemd, en kan je helpen jezelf te herinneren als je een week later (of een maand/jaar) weer eens de patch opent. Ook helpt dit ons gerichte vragen te stellen bij het aftekenen.

Maak je patch netjes en overzichtelijk voordat je hem laat aftekenen!



Extra leesvoer uit Max MSP Tutorials:



a. Signals in Max

De objecten met een ~ (tilde) in het eind van de naam zijn audio objecten (msp-objecten). Om audio te kunnen gebruiken in Max moet je de digital signal processing (dsp) aanzetten.

Maak een [ezdac~] object aan, lock de patch en klik erop om te zien dat die blauw wordt. De ezdac is naast een aan/uit-knop ook de output van je patch naar de speakers of koptelefoon. (dac = digital to analog converter, ez = easy).

Maak een programma dat twee signalen bij elkaar op kan tellen. Gebruik een [number], het [sig~] object en een [+~]-object. Geef het antwoord weer in het [number~] object. Probeer wat verschillende values uit. Doe dit voor de objecten [+~], [-~], [*~], [/~]. Noteer je antwoorden op de volgende vragen in een [comment]:

  1. Wat valt op aan de kabels van msp~ objecten?

  2. Wat valt op als je het linker of rechter number aanpast in vergelijking met normale data-objecten?

  3. Wat gebeurt er zodra je de audio uit zet en daarna values verandert?

LET OP: Sluit deze signalen NIET aan op de [ezdac]!

Objecten: [ezdac~], [+~], [-~], [/~], [*~], [number], [number~]


b. Beeeeeeep

Maak het [cycle~] object aan. Dit object is een oscillator die een sinus-toon genereert. Gebruik een [number] om de frequentie van de cycle~ in te stellen op 2 Hz. Sluit de cycle~ aan op het [scope~] object om het signaal te zien.

Maak een [gain~] object aan, en sluit nu de [cycle~] aan op de [gain~] en de [gain~] op links en rechts van de [ezdac~]. Zet de frequentie op 200 Hz en slide voorzichtig het volume omhoog om de sinustoon te horen.

LET OP: Plaats altijd een gain-slider voor je ezdac~ zodat je het volume van de audio kan regelen voordat je audio objecten aansluit. Doe je dat niet, dan wordt de sinus zo hard als die kan afgespeeld (0 dBFS).

Objecten: [cycle~], [scope~], [gain~], [number]


c. Play it!

In plaats van de frequentie in te stellen kun je ook werken met midi-pitch nummers. Maak een [kslider] en zorg dat je de midi pitch omrekend naar frequentie met het [mtof]-object (MidiTOFrequenc) om daarmee de cycle~ aan te sturen. Speel wat noten en hoor de toonhoogte veranderen.

Objecten: [kslider], [mtof]

(cijfer: 6)


d.

De sinustoon klinkt nu continu door, dit gaan we tegenhouden door een envelope toe te voegen aan het signaal. De envelope bepaalt het volume (amplitude) van een signaal in de tijd. Hiervoor gebruiken we het [line~] object. Maake een message met daarin (1 15 0 500). Verbind de messege met het line~-object om een envelope te maken met attack-tijd van 15ms, release-tijd van 500ms, en amplitude-waardes van 1 en vervolgens 0.

Zorg dat je met klikken op een toets van de [kslider] eerst de frequentie instelt bij de cycle~ en daarna de envelope triggered met een bang. Vermenigvuldig de envelope met het signaal van de [cycle~] voordat deze de [gain~] in gaat.

Objecten: [t b i], [message], [line~], [*~], [scope~], [mtof], [kslider].

(cijfer: 7)


e. Waveforms

Vervang de [cycle~] voor een [saw~], [rect~] of [tri~] om een andere golfvorm te gebruiken als de basis van je synth. Probeer ze alledrie eens uit. Vervang de waardes in de message voor het [line~] object voor verschillende waardes om de andere attack of release-tijden te maken. Probeer eens (1 1000 0 10), of (1 100 0 100 0.5 100 0 2000).

Pas op voor je oren! Amplitude waardes hoger dan 1 zorgen ervoor dat je sinustoon gaat clippen als je de gain~ op 0dBFS hebt staan.

Objecten: [saw~], [rect~], [tri~], [line~], [message]

(cijfer: 8)



Uitdaging (cijfer: 9, 10, 10+ met eeuwige waardering!)

  1. Maak 3 [cycle~]'s waarvan 1 een octaaf hoger klinkt dan de gespeelde toon, en 1 een octaaf lager klinkt. Geef ze alledrie een andere envelope met verschillende [line~] objecten, maar bespeel ze met 1 [kslider].

  2. Stuur de melodie van je synth aan met een algoritmisch proces in plaats van de kslider. Gebruik bijvoorbeeld wat werk uit het vorige semester!

  3. Laat het volume van de envelope voor de synth bepalen door de velocity van de [kslider] output. Tip: Je moet omschalen van de 0-127 midi range naar 0-1 floating amplitude range.

  4. Maak user-interface objecten waarmee je de attack en release tijden van de line~ kunt instellen. Kijk eens naar [pak i i], [zl.reg] en ($1 $2) argumenten in messages om de tijden variabel te maken.