5 Hybrid Instrument
In deze opdracht maak je een hybride instrument. Dit instrument is een synth, waarvan de amplitude bepaald wordt door een envelope follower op een drumloop, en de frequentie door pitch tracking op een melodieuze sample. Je gebruikt een onset detectie om parameters van een effect aan te passen, synchroon met de drumloop. En je kunt thuis 1 van de loops vervangen voor het gebruik van de microfoon en een opname maken met een eigen instrument als input voor de pitch tracking of de envelope follower.
Deadline: 9 april
Belangrijke objecten in deze opdracht:
Belangrijk:
Gebruik de help-files (alt-click). Bekijk ook de Max Keyboard Shortcuts en Max CheatSheet.
Plaats comments om duidelijk te maken dat je snapt hoe iets werkt.
Maak je patch netjes en overzichtelijk voordat je hem laat beoordelen!
a. Basic synth
Voordat we starten met de verschillende analyses, maken we eerst een simpele synth waarvan we straks de frequentie en amplitude kunnen aansturen.
NB: Kies in MaxForLive een Audio Effect, zodat je ook met audio-input kan werken van [plugin~], later in de opdracht.
- Maak een
[saw~]en koppel die via een gain-slider aan de[ezdac~]. - Maak een flonum om een frequentie in te kunnen stellen en zorg dat je die kan horen op je koptelefoon.
Objecten: [flonum], [saw~], [live.gain~], [ezdac~]/[plugout~]
b. Envelope Follower
Tip: gebruik regelmatig [live.scope~] en [number~] om te zien wat je signaal doet. Je kan ook onder Menu > Debug de Signal Probe aanzetten
We gaan nu de amplitude van een drumloop gebruiken om de amplitude van de zaagtand te moduleren. Luistervoorbeeld B
- Maak een
[buffer~]aan, met een argument voor de buffernaam, en laad daarin een drumloop. Voor nu kan je de standaarddrumloop.aifvan Max gebruiken, maar die mag je vervangen voor een andere drumloop. - Zorg dat de drumloop in een loop wordt afgespeeld, met bijvoorbeeld
[play~]of[groove~]. Stuur deze ook naar de speakers met een eigen gain-slider. - Maak een envelope follower door de absolute waarde van het signaal te nemen en vervolgens een logaritmisch filter (
[slide~]) met aparte attack en release daarop toe te passen, gebruik voor nu een attack van 10 samples en een release van 2000. (controleer dat je envelope werkt met een scope) - Pas de envelope toe op de saw, voordat deze naar de gain-slider gaat, gebruik hiervoor een
[*~]zoals met andere envelopes. - Maak 2
[live.dial]'s voor attack en release in milliseconden, geef die een zinvol bereik (via inspector of[scale]) en reken de milliseconden om naar samples om daarmee het slide-object aan te sturen.
Handige objecten: [buffer~], [sig~], [groove~]/[play~], [live.gain~], [abs~], [slide~], [*~], [live.dial], [mstosamps~]
c. Pitch Tracker
We gaan nu de pitch tracken van een sample met melodie, om daarmee de frequentie van de zaagtand aan te sturen. Je kan dit eerst los testen met een andere saw of sinus voordat je het combineert met b. Luistervoorbeeld C
- Maak nog een
[buffer~]aan. Deze keer met deduduk.aifsample. Ook die kan je later vervangen voor een sample die een melodie in zich heeft. - Zorg ook dat deze in een loop wordt afgespeeld en stuur ook naar de speakers met een eigen gain-slider om te luisteren dat het werkt.
- Gebruik
[fzero~]om de frequentie te kunnen analyseren van het signaal. Koppel twee[flonum]objecten aan de "Fundamental Pitch" output en aan de "Peak Amplitude" output. - Gebruik een
[gate]en een[>]om ervoor te zorgen dat de afgelezen frequentie alleen wordt doorgelaten wanneer de amplitude hoog genoeg is. Gebruik een threshold van0.2. - Maak 1
[live.dial]voor de threshold indB, geef die een zinvol bereik (via inspector of[scale]) en reken de decibel om naar amplitude om daarmee de threshold in te stellen. - Koppel de frequentie analyse aan de saw, samen met de envelope follower uit b en luister het geheel.
Handige objecten: [buffer~], [sig~], [groove~]/[play~], [live.gain~], [fzero~], [gate], [>], [live.dial], [dbtoa]
(voldoende)
d. Onset Detection
Nu gaan we op basis van de envelope follower een schmitt trigger bouwen, waarmee we de onset van de drums kunnen detecteren en deze omzetten in een bang. De trigger gaan we gebruiken om telkens een parameter van een effect willekeurig in te stellen. Luistervoorbeeld D
- Gebruik het
[thresh~]object om een on-threshold in te stellen, waarboven het signaal een true (of 1) uitstuurt, en ook om een off-threshold in te stellen waaronder het signaal weer een false (of 0) uitstuurt. - Koppel de envelope follower aan het
[thresh~]object, gebruik een scope om te meten of je thresholds goed staan. (tip, je kan de achtergrond van een live.scope~ transparant maken en dan over een andere scope met de envelope leggen) - Maak 2
[live.dial]'s voor de on/off thresholds indB, geef die een zinvol bereik (via inspector of[scale]) en reken de decibel om naar amplitude om daarmee de threshold in te stellen. - Kies een effect waar je de saw doorheen wilt sturen (bijv.
[svf~],[yafr2],[overdrive~]) en gebruik de trigger om elke keer een parameter willekeurig aan te passen. Kies een zinvolle range voor de[random]keuzes en gebruik[scale]voor de mapping naar de gekozen parameter.
Handige objecten: [thresh~], [edge~], [float], [svf~], [yafr2], [overdrive~]
(goed)
Uitdaging (zeer goed)
-
Vervang de drumloop, of de duduk sample voor een live input met
[adc~]of[plugin~], en gebruik je eigen instrument of stem om een stuk op te nemen waarbij je het instrument bespeelt (doe dit thuis of bijvoorbeeld in een edit-suite). -
Zorg ervoor dat de gemeten frequentie gekwantiseerd wordt aan een MIDI noot, en vervolgens dat die ook alleen binnen een gekozen toonladder past.
