Zumindest konnte man im letzten Beitrag schon etwas hören … aber eigentlich will ich ja nicht ständig mit der Maus auf einen Button klicken, um das zu erreichen. Nein, ich will meinen Sampler mit dem Midi-Controller bedienen!

Im ersten Artikel habe ich mithilfe eines midiin Objekts und einigen anderen Objekten meine Tonhöhe und die Anschlagstärke ermittelt. Das will ich an dieser Stelle nochmal ändern. Ich habe nämlich Probleme den Note-Off Wert auszufiltern und mein Sample würde immer zweimal getriggert werden: Nämlich wenn ich die Taste drücke und wenn ich sie wieder loslasse.

Etwas aufgeräumter…

Aus diesem Grund verwende ich jetzt ein notein Objekt. Dieses verfügt gleich über zwei Ausgänge: einen für die Tonhöhe und einen für die Anschlagstärke. Wenn ich nun noch ein stripnote Objekt einfüge, werden Noten mit der Velocity = 0 (Note-Off) gleich herausgefiltert. Genau das wollte ich erreichen.

Jetzt müssen wir das Ganze noch mit dem Sampleplayer aus dem letzten Artikel verbinden. Ich weiß, dass man dem groove~ Objekt am linken Eingang mitteilen kann, wie schnell das Sample gespielt wird. Wenn ich jetzt davon ausgehe, dass das Sample in seiner Originaltonhöhe / -geschwindigkeit auf C3 liegt, dann sollte die Tonhöhe (Frequenz) eine Oktave tiefer (C2) genau die Hälfte betragen. Ich muss also für die Midiwerte der einzelnen Noten, irgendwie die Frequenzen herauskriegen.

Max hat natürlich auch dafür ein spezielles Objekt: mtof (Midi To Frequency). Das verbinde ich nun mit dem rechten Ausgang des stripnote Objekts und hänge ein print daran … mal sehen…

Ich drücke nacheinander: C3, C2 und C4

Perfekt. Das groove~ Objekt braucht nun eine 1, um mein Sample in normaler Tonhöhe abzuspielen (das entspräche dann der Frequenz von C3). Also muss ich ein Objekt einfügen, dass meine Frequenz durch die Frequenz von C3 teilt: / 261.625565

Wenn ich nun ein C3 auf meiner Midi-Tastatur spiele, wird eine 1.00000 in die Console gedruckt. Was will ich mehr? Also verbinde ich nun den Ausgang meines Divisors mit dem Eingang des sig~ Objekts. Somit kann ich die Tonhöhe regulieren. Allerdings wird trotzdem noch kein Sample abgespielt. Wenn wir uns erinnern, dass musste ich mit der 0 am Eingang des groove~ Objekt machen. Diese 0 startet die Wiedergabe ab 0 ms.

Die einfachste Möglichkeit, die mir jetzt gerade einfällt, wäre einfach den Wert, den uns der Divisor von eben liefert dafür zu nutzen. Denn immer wenn ich eine Note spiele wird dort ein Wert weitergeleitet. Allerdings sollte der zunächst immer 0 sein, damit mein Sample von Anfang an gespielt wird. Nichts einfacher als das: Ein Multiplikator mit 0. Und diesen verbinde ich einfach mit dem Eingang des groove~ Objekts. Jetzt wird immer ein 0 gesendet, sobald ich irgendeine Note spiele.

Es funktioniert…

Ok, jetzt kann ich zumindest schonmal irgendein Sample laden und diesen mithilfe meiner Midi-Tastatur in verschiedenen Tonhöhen spielen. Also haben wir einen waschechten Sampler gebaut! Allerdings ist dieser nicht allzu komfortabel. Aus diesem Grund: Fortsetzung folgt…