Eine kleine Reihe zum Thema Sampling wollte ich schon lange machen. Ich wusste irgendwie nur nie wie ich anfangen sollte. Die Geschichte des Samplings ist sicherlich interessant, aber auch schon oft genug erzählt worden. Also lasse ich diese schon mal weg.

Fairlight CMI…

Viele denken beim Wort Sampling zunächst einmal an den Hip Hop der 90er und alles was danach in der Popmusik kam. Das ist sicherlich richtig, dass die Hip Hop Bewegung überwiegend gesampled hat, weil sie vielfach einfach keinen Zugang zu Instrumenten hatten. Sie haben sich dann an fertigen Aufnahmen bedient und diese kreativ zu neuen Songs umgebaut.

Aber Sampling ist mehr, als nur die fertigen Aufnahmen anderer Künstler zu nehmen und diese für sich selbst zu nutzen. Wenn man es ganz genau nimmt, ist heute quasi alles gesampled. Die Mehrheit heutiger Musik wird in digitalen Audio Workstations aufgenommen, bearbeitet und gemischt, Und diese Workstations sind nichts anderes als mächtige Sampler. Wenn ich also zuhause meine Akustikgitarre mit meiner DAW oder einem anderen digitalen Recorder aufzeichne, dann sample ich.

Eigene Instrumente samplen…

Ich will an dieser Stelle aber auf das Samplen eigener Instrumente eingehen. Entweder baut man sich irgendwas komplett Eigenes aus Found Sounds oder interessanten Synthesizer Kreationen oder man sampled ein vorhandenes Instrument. Heute will ich ein Instrument samplen, dass seit einigen Monaten hier unten im Schreibtisch-Schrank liegt: Ein altes Metallophon aus der ehemaligen DDR. Ich kann gar nicht genau sagen wie alt es ist, aber ich schätze mal aus den 70er Jahren des letzten Jahrhunderts.

Ich will an dieser Stelle aber nicht über wissenschaftliche Mikrofonausrichtung und -einstellungen sprechen, sondern zunächst einmal eine ganz simple Aufnahme machen. Ich will jeden der 10 Metallplatten (einzelnen Töne) mit einem mittleren Schlag aufnehmen. Keine unterschiedlichen Anschlagstärken, keine Round Robin Samples.

Ich nehme irgendein Mikrofon und platziere es passend nahe des Instruments oder ich nehme einen mobilen Recorder dafür (was ich in diesem Fall sogar gemacht habe). Zur Not tut es sogar die Aufnahmefunktion eines Smartphones.

Ich stelle den Aufnahmepegel passend ein (nicht zu leise und nicht zu laut, versteht sich) und mache eine komplette Aufnahme, die das Schlagen der einzelnen Töne festhält. In diesem Fall lasse ich genügend Zeit zwischen den einzelnen Schlägen, weil die Töne recht lange ausklingen.

Wenn ich fertig bin, importiere ich die Datei in meiner DAW (in diesem Fall Bitwig Studio) und fange an sie zu bearbeiten.

Aufnahme in der DAW

Zunächst schneide ich die einzelnen Schläge aus, passe die Lautstärken an und überprüfe die Stimmung. Das Metallophon ist alt und ich gehe mal davon aus, dass nicht jeder Ton genau passt. Jede DAW funktioniert ähnlich, aber die Feinheiten sind dann doch meistens recht unterschiedlich. In Bitwig Studio kann ich entweder per Hand das Audiomaterial zerschneiden oder ich benutze die Funktion „Slice in Place“ und wähle als Schneidekriterium die Onsets. Leider war das Ergebnis nicht wirklich zufriedenstellend und ich schneide doch per Hand 😉

Zum Stimmen der einzelnen Schläge empfiehlt sich entweder ein Stimmgerät oder irgendein Device, dass das Spektrum anzeigt (ein EQ z.B.). Falls die eigene DAW kein Stimmgerät mitbringt, empfehle ich das Freeware Plugin GTune.

Die Samples sind zwar alle etwas unterschiedlich lang, aber das interessiert mich im Moment nicht. Wer will, kann ja alle Files auf eine Länge bringen. Am Ende jedes Samples füge ich jetzt noch ein FadeOut ein, damit das Ende schön sauber ausklingt. Natürlich gebe ich meinen Samples auch einen Namen. Am besten den entsprechenden Notennamen.

Wenn die Feinarbeit erledigt ist, packe ich einen Compressor auf die Spur, um sicher zu gehen, dass alles auf einem Level ist. Dann bounce alle Samples. Diese kann ich nun exportieren. Fertig.

Ich könnte die Dateien jetzt in den Bitwig Sampler ziehen oder einen anderen Software Sampler. Die Auswahl ist groß. Hardware wäre auch eine Option. Ich habe mich aber für einen ganz bestimmten Software Sampler entschieden…

Decent Sampler

David Hilowitz ist Composer für Film- und Videospielmusik, macht eigene Musik und ist auch Software Entwickler. Er erstellt nebenbei Sample Libraries, hauptsächlich für Native Instruments‘ Kontakt. Da Kontakt schnell mal ein großes Loch in die Geldbörse reißen kann, hat er sich überlegt, dass es doch nicht so schwer sein kann, einen eigenen Sampler zu entwickeln, der minimal skriptfähig ist. Er musste feststellen, dass es doch ziemlich schwer war, hat nach einem halben Jahr Arbeit, in 2020, seinen Decent Sampler veröffentlicht … kostenlos.

Decent Sampler

Decent Sampler ähnelt dem SFZ-Library Format. Aber auch wenn es für Decent Sampler bisher keine grafische Möglichkeit gibt, die Samples einzufügen und zu editieren, sind die XML-Skripte für David’s Sampler immer noch besser zu verstehen, als SFZ-Skripte.

Die Oberfläche des Samplers ist denkbar einfach aufgebaut. Aber man hat die Möglichkeit relativ einfach ein schönes Bild des Instruments einzubauen und diverse Regler für Effekte etc. zu skripten. Genau diese Einfachheit und gewisse Flexibilität gefällt mir und daher möchte ich das Instrument hier vorstellen und zukünftig häufiger nutzen. Übrigens betreibt David auch einen sehr schönen YouTube Kanal, in dem er beschreibt, wie er Instrumente sampled und diese in Software Instrumente verwandelt.

Wie bereits erwähnt, ist der der Sampler kostenlos. Allerdings nutzt David die Möglichkeit auf seine eigenen Libraries aufmerksam zu machen. D.h. man muss sich ein Konto erstellen (funktioniert alles innerhalb von Decent Sampler) und wenn man dann oben links auf Browse klickt, dann gelangt man in den kleinen Shop mit seinen Libraries, darunter sind aber auch einige sehr gute kostenlose Instrumente. Außerdem kann man hier seine eigenen bzw. heruntergeladenen Bibliotheken aufrufen.

Der kleine Decent Samples Shop…

Ein Multisample Instrument in Decent Sampler zu erstellen, verlangt eigentlich nur zwei Dinge: einen Ordner mit Samples und eventuell Bildern. sowie eine einzige dspreset-Datei. Diese wird in XML geschrieben und beschreibt, wie der Sampler die ganzen Dateien nutzen soll.

Den Ordner mit den Samples haben wir schonmal und um ein Bild kümmern wir uns später. Jetzt ist erstmal interessant, wie wir unsere dspreset-Datei schreiben müssen. Glücklicherweise ist der Decent Sampler recht gut dokumentiert. Hier gibt es eine Seite, auf der alles Wissenswerte zur dspreset-Datei aufgeschrieben steht.

Da ich gerade selber zum ersten mal mit dem Decent Sampler arbeite wird der folgende Teil recht lang und ausführlich. Ich möchte sehr detailliert auf die Dokumentation des XML-Skripts eingehen und vielleicht ist es ja für den ein oder anderen auch ganz hilfreich.

Erstellen eines Instruments im Decent Sampler

Wie bereits weiter oben erwähnt, benötigen wir für unser Instrument den Ordner mit den Samples und eine dspreset-Datei, die wir in den gleichen Ordner legen, wie den Samples Ordner. Zum Editieren reicht im Grunde jeder Texteditor. Empfehlenswert ist allerdings ein Editor mit Syntax-Highlighting, wie z.B. VS Code, Sublime Text, Notepad++, etc…

Das Hauptelement jeder dspreset-Datei ist immer das <DecentSampler> Tag. Jede XML-Datei eines Instruments muss diesen Tag beinhalten. Vorher sollte man oben in die allererste Zeile noch eben deklarieren, dass es sich im Folgenden um ein XML-Dokument handelt. Somit würde das absolute minimalste dspreset-Dokument so aussehen:

<?xml version="1.0" encoding="UTF-8"?>
<DecentSampler>
    <!-- hier folgen weitere Tags ... 
            ... dies ist übrigens ein Kommentar -->
</DecentSampler>

Das nächste wichtige Element ist das <groups> Tag. Jedes dspreset-Dokument sollte genau ein <groups> Element beinhalten. Hier werden die einzelnen Gruppen für z.B. verschiedene Velocity-Ebenen, Round Robin Samples, etc … untergebracht.

<DecentSampler>
    <groups>
        <group>
            <sample /> <!-- Hier werden -->
            <sample /> <!-- die Samples   -->
            <sample /> <!-- definiert   -->
        </group>
    </groups>
</DecentSampler>

Wie gesagt, liegen die einzelnen Samples immer in einer <group>. Gruppen machen nicht nur bei Velocity– oder Round Robin – Einstellungen Sinn, sondern auch wenn man bestimmten Samples den gleichen Effekt zuweisen will oder ähnliches.

Das <sample> Tag ist wohl das wichtigste Element. hier werden die einzelnen Samples angegeben. Dieses Element kann eine Menge Attribute haben. Die wichtigsten sind:

pathnötigDer relative Pfad der Sample-Datei
rootNotenötigDie Midinoten-Nummer des Samples
loNoteoptionalDie niedrigste Midinoten-Nummer für die das Sample spielbar sein soll
hiNoteoptionalDie höchste Midinoten-Nummer für die das Sample spielbar sein soll

Es gibt noch haufenweise weiterer Attribute für das <sample> Element, die an dieser Stelle erstmal nicht allzu wichtig sind.

Jedes <groups> Element, jedes <group> Element und auch jedes <sample> Element kann seine eigene ADSR-Hüllkurve für die Lautstärke haben. Wenn wir nun alles auf unsere Metallophon Samples anwenden, dann sieht unser dspreset-Dokument folgendermaßen aus:

<?xml version="1.0" encoding="UTF-8"?>
<DecentSampler>
    <groups>
        <group attack="0.000" decay="25" sustain="1.0" 
               release="10.0" volume="5dB">
            <sample loNote="90" hiNote="97" rootNote="96" 
                    path="samples/C6-bounce-1.wav" /> 
            <sample loNote="98" hiNote="99" rootNote="98" 
                    path="samples/D6-bounce-1.wav" />
            <sample loNote="100" hiNote="100" rootNote="100" 
                    path="samples/E6-bounce-1.wav" />
            <sample loNote="101" hiNote="102" rootNote="101" 
                    path="samples/F6-bounce-1.wav" />
            <sample loNote="103" hiNote="104" rootNote="103" 
                    path="samples/G6-bounce-1.wav" />
            <sample loNote="105" hiNote="106" rootNote="105" 
                    path="samples/A6-bounce-1.wav" />
            <sample loNote="107" hiNote="107" rootNote="107" 
                    path="samples/B6-bounce-1.wav" />
            <sample loNote="108" hiNote="109" rootNote="108" 
                    path="samples/C7-bounce-1.wav" />
            <sample loNote="110" hiNote="111" rootNote="110" 
                    path="samples/D7-bounce-1.wav" />
            <sample loNote="112" hiNote="112" rootNote="112" 
                    path="samples/E7-bounce-1.wav" />
            <sample loNote="113" hiNote="114" rootNote="113" 
                    path="samples/F7-bounce-1.wav" />
            <sample loNote="115" hiNote="116" rootNote="115" 
                    path="samples/G7-bounce-1.wav" />
            <sample loNote="117" hiNote="118" rootNote="117" 
                    path="samples/A7-bounce-1.wav" />
            <sample loNote="119" hiNote="125" rootNote="119" 
                    path="samples/B7-bounce-1.wav" />                                                                                           
            
        </group>
    </groups>
</DecentSampler>

Die Midinoten-Nummern findet man mithilfe einer schnellen Google-Suche leicht im Netz. Ansonsten ist es vielleicht etwas fummelig, wenn man das erste mal die Nummern der rootNote, sowie loNote und hiNote eingeben muss. Beim ersten mal habe ich mich da auch ein wenig verzettelt. Aber wenn man das ein paar mal gemacht hat, dann wird das schon 😉

Jetzt kann man die dspreset-Datei schon im Decent Sampler laden:

Das virtuelle Metallophon Instrument

Man könnte jetzt noch mit den ADSR-Angaben spielen, aber ich finde das klingt gut so. Was jetzt noch fehlt ist eine kleine nette GUI. Zumindest will ich einen Hintergrund einfügen und einen Effekt. David hat bisher nur einen nativen Reverb und einen HiPass Filter implementiert. Ich denke, da wird demnächst noch mehr kommen.

Das Hintergrundbild und die Regler für die Effekte kommen alle in das <ui> Element, welches direkt ein Level unter dem <DecentSampler> Tag steht. Das Hintergrundbild Attribut ist bgImage und das Bild an sich sollte die Dimensionen 812 x 375 px haben, damit es perfekt im GUI des Samplers sitzt. Je nachdem, was man abbilden will, muss man vielleicht etwas herumprobieren. Ich habe mit jetzt nicht die aller größte Mühe gegeben 😉

Der Code hierfür sieht so aus:

<DecentSampler>
    <ui bgImage="metallophonBG.jpg" width="812" height="375">
    </ui>
    <groups>
        <group attack="0.000" decay="25" sustain="1.0" 
               release="10.0" volume="5dB">
            <sample loNote="90" hiNote="97" rootNote="96" 
                    path="samples/C6-bounce-1.wav" /> 
            ...

Jetzt fehlt noch der Drehregler für den Reverb. David hat vor, demnächst noch die Möglichkeit von mehreren Tabs in das GUI einzubauen. Im Moment kann man nur ein Tab haben und nutzen. Trotzdem muss das <Tab> Element genutzt werden, um dort GUI-Elemente zu platzieren.

Darin schreiben wir unseren Drehregler, den <labeled-knob>.

<ui bgImage="metallophonBG.jpg" width="812" height="375">
        <tab name="main">
            <labeled-knob x="655" y="0" label="Reverb" type="percent" 
                          minValue="0" maxValue="100"
                          textColor="FF000000" value="50.0" 
                          uid="a0">
                <binding  type="effect" level="instrument" position="1" 
                          parameter="FX_REVERB_WET_LEVEL"
                          factor="0.01" />
           </labeled-knob>
        </tab>
    </ui>

Das <binding> Element ist dafür da, damit die Eingabe über den Drehregler auch an den jeweiligen Effekt geschickt wird. Aber vielleicht sollten wir zunächst mal den Effekt einbauen, damit das auch alles Sinn macht.

Ich drucke hier jetzt mal einfach den kompletten Code. Oben zunächst das <ui> Element, danach die <groups> und am Ende die <effects>.

<?xml version="1.0" encoding="UTF-8"?>
<DecentSampler>
    <ui bgImage="metallophonBG.jpg" width="812" height="375">
        <tab name="main">
            <labeled-knob x="500" y="60" label="Reverb" type="percent" 
                          minValue="0" maxValue="100"
                          textColor="FF000000" textSize="22" value="50.0" 
                          uid="a0">
                <binding  type="effect" level="instrument" position="1" 
                          parameter="FX_REVERB_WET_LEVEL"
                          factor="0.1" />
           </labeled-knob>
        </tab>
    </ui>
    <groups>
        <group attack="0.000" decay="25" sustain="1.0" 
               release="10.0" volume="5dB">
            <sample loNote="90" hiNote="97" rootNote="96" 
                    path="samples/C6-bounce-1.wav" /> 
            <sample loNote="98" hiNote="99" rootNote="98" 
                    path="samples/D6-bounce-1.wav" />
            <sample loNote="100" hiNote="100" rootNote="100" 
                    path="samples/E6-bounce-1.wav" />
            <sample loNote="101" hiNote="102" rootNote="101" 
                    path="samples/F6-bounce-1.wav" />
            <sample loNote="103" hiNote="104" rootNote="103" 
                    path="samples/G6-bounce-1.wav" />
            <sample loNote="105" hiNote="106" rootNote="105" 
                    path="samples/A6-bounce-1.wav" />
            <sample loNote="107" hiNote="107" rootNote="107" 
                    path="samples/B6-bounce-1.wav" />
            <sample loNote="108" hiNote="109" rootNote="108" 
                    path="samples/C7-bounce-1.wav" />
            <sample loNote="110" hiNote="111" rootNote="110" 
                    path="samples/D7-bounce-1.wav" />
            <sample loNote="112" hiNote="112" rootNote="112" 
                    path="samples/E7-bounce-1.wav" />
            <sample loNote="113" hiNote="114" rootNote="113" 
                    path="samples/F7-bounce-1.wav" />
            <sample loNote="115" hiNote="116" rootNote="115" 
                    path="samples/G7-bounce-1.wav" />
            <sample loNote="117" hiNote="118" rootNote="117" 
                    path="samples/A7-bounce-1.wav" />
            <sample loNote="119" hiNote="125" rootNote="119" 
                    path="samples/B7-bounce-1.wav" /> 
        </group>
    </groups>
    <effects>
        <effect type="reverb" wetLevel="0.4999999888241291" />
    </effects>
</DecentSampler>

Ok, das mag jetzt alles noch etwas verwirrend sein und ich werde in nächsten Tutorials auch sicher noch näher auf verschiedene Parameter und vor allen Dingen auf weitere Möglichkeiten des Decent Samplers eingehen. Aber wir haben hier jetzt zumindest ein selbst gesampeltes, herrlich klingendes Metallophon.

Das fertige Instrument

Und wie klingt es?

Am besten man schiebt das Instrument in den im Decent Sampler voreingestellten Library Ordner. Man muss nicht mal einen Ordner dafür anlegen. Ich habe jetzt die dspreset-Datei, das Hintergrundbild und den samples-Ordner gezippt und dann die Endung von .zip in .dslibrary umbenannt. Dieses Format erkennt der Decent Sampler. Fertig.

Ich habe bei GitHub einfach mal einen Bereich angelegt, bei dem ich meine Libraries für den Decent Sampler zukünftig ablegen werde … wahrscheinlich. Vielleicht mache ich das demnächst auch hier irgendwo. Bis dahin, kann man das Metallophon hier herunterladen:

DOWNLOAD Metallophon Library

Soweit so gut. Nächstes mal mehr…