Sampling, Found Sounds & Sound Design

Kategorie: Programmierung Seite 3 von 6

SOUL – Könnte diese Sprache das ’nächste große Ding‘ im Bereich Audio Programmierung werden?

Julian Storer ist kein unbeschriebenes Blatt … JUCE, Tracktion und Kopf der Software-Abteilung bei ROLI. Vielbeschäftigter Mann. Trotzdem hat er die letzten Jahre an einer neuen Programmiersprache für Audio und Sound gearbeitet, die seit dem November letzten Jahres im Beta-Stadion ist. Echt jetzt? Noch eine neue Programmiersprache für den Bereich Audio? Jepp.

Quelle: soul.dev

SOUL heißt das Wunderkind und will die Audio-Programmierlandschaft umkrempeln. Aber SOUL ist keine generelle Sprache um Audio-Applikationen oder Plugins zu bauen. Diese Sprache ist speziell entwickelt worden, um Echtzeit-DSP Code zu entwickeln und ist gleichzeitig eine API, um diesen Code in alle möglichen Anwendungen und auch Hardware einzubinden.

Audio Programmierung #02 – C++ Grundlagen: Variablen und grundlegende Datentypen

Variablen helfen dem Programmierer Daten temporär für eine bestimmte Zeit zu speichern. Konstanten sind Variablen, die nach der Initialisierung (nach der Zuweisung mit einem Wert) nicht mehr geändert werden dürfen. Sie bleiben halt konstant.

Alle Computer haben einen Microprozessor und einen Speicher, der für die temporäre Speicherung von Daten zuständig ist (Random Access Memory: RAM). Zusätzlich gibt es noch den Speicher, der Daten ständig speichert, oder zumindest könnten sie permanent gespeichert bleiben (Festplatte). Der Microprozessor führt das Programm aus und arbeitet mit dem RAM zusammen, um auf das Programm und eventuell gespeicherte Daten für das Programm zuzugreifen.

Der RAM Speicher ist eine große Lagerhalle mit einzelnen Räumen, auf die man über eine bestimmte Adresse zugreifen kann … zumindest kann man sich das so vorstellen. Angenommen man schreibt ein Programm, dass zwei Zahlen addiert, die der User vorher über die Tastatur eingegeben hat. In C++ (und auch in anderen Programmiersprachen) definiert man hierfür Variablen, die diese Werte dann speichern. Somit muss man sich nicht komplizierte Speicheradressen merken. Man kann diese einfach mithilfe der Namen der Variablen erreichen und darauf zugreifen.

Eine Variable zu definieren ist denkbar einfach und sieht in etwa so aus:

VariableType VariableName

oder

VariableType VariableName = InitialValue

Max/MSP – Ich habe Max wiederentdeckt und mich erneut verknallt.

Ich hab vor zwei Jahren schon mal etwas mit Max For Live herumprobiert und dann wieder links liegen gelassen … wie so oft. Jetzt, wo ich seit ein paar Wochen wieder Hals über Kopf in die Programmierung eingestiegen bin (C++, Csound, Python) und ich nicht genug davon kriegen kann, habe ich mir überlegt mich nochmal mit Max anzufreunden. Ich fand Pure Data schon spannend, aber das läuft bei mir unter Win und MacOS so unstabil, dass es einfach keine Freude macht damit zu arbeiten.

Ich habe ein paar Artikel und Videos über Max gelesen und gesehen … und bin begeistert. Besonders die Möglichkeiten mit gen~ gehen mir nicht mehr aus dem Kopf. Ja, kann sein, dass ich im Moment zu viele Baustellen offen habe, aber die 30tägige Testversion von Cycling74 kommt mir gerade recht. 😀 Außerdem gibt es ein Subscription Modell für unter 10 Euro im Monat.

Quelle: cycling74.com

Was ist Max und was bedeutet MSP?

Max ist eine Programmierumgebung, in der man verschiedene Objekte mit eine Art Patchkabel verbindet. Jedes dieser Objekte hat eine andere Aufgabe, vergleichbar mit Funktionen in herkömmlichen Programmiersprachen. Der Name Max soll an Max Mathews (Entwickler der Audio-Programmiersprache MUSIC) erinnern. Max wurde für die Echtzeitkontrolle von Midi-Daten entwickelt, kann aber auch einfach Zahlen und Zeichen verarbeiten.

Audio Programmierung #01 – C++ Grundlagen: Hello World…

Ok, im letzten Teil habe ich kurz ein paar Bücher, Editoren und Compiler bzw Entwicklungsumgebungen für die C++ Programmierung aufgezählt. Am Ende habe ich noch das erste kleine Programm in den Editor getippt und übersetzt. Genau an der Stelle will ich heute wieder ansetzen und anhand des Hello World Programms erläutern, was der Compiler / Linker beim Übersetzen so macht und was die einzelnen Teile des simplen Programms zu bedeuten haben.

Ja, das klingt noch nicht spannend … und soviel kann ich schon mal sagen. Bis zur Programmierung eigener VST-Plugins wird es noch etwas dauern. Die C++ Grundlagen werden so einige Artikel umfassen und für den ein oder anderen die ganze Zeit nicht allzu spannend sein. Für mich sind sie das schon und darum kann ich es kaum abwarten anzufangen…

Hello, C++-world!

// helloworld.cpp
// This program outputs the message "Hello, C++-world!" 
// on the screen
#include <iostream>

using namespace std;
// C++ programs starts by executing the function main
int main() {    
    // output "Hello, C++-world!"
    cout << "Hello, C++-world!" << endl;    
    return 0;
}

Csound Tutorial #07 – Additive Synthese

Die additive Synthese bezieht ihre Theorie von einem Mathematiker namens Fourier. Diese besagt, dass jeder erdenkliche Klang aus einer geeigneten Mischung von vielen einzelnen elementaren Sinusschwingungen erzeugt werden kann. Man kann hiermit komplexe Wellenformen jeglicher Art erzeugen, indem man verschiedene Sinuswellen addiert.

Eine Orgel gehört zu den ersten Synthesizern der additiven Synthese… (Arturia B-3V Instrument)

Eine Orgel stellt einen frühen Vertreter der additiven Synthesizer dar. Mithilfe der Zugriegel kann man Teiltöne der Obertonreihe in Sinusform hinzufügen. Je weiter solch ein Riegel herausgezogen wird, desto lauter wird der Oberton.

Chocolatey – der süße Paketmanager für Windows

Wer schon einmal mit Linux oder MacOS gearbeitet hat, der kennt das Terminal. Der kennt auch die Möglichkeit mit Paketmanagern wie Homebrew (MacOS) oder Apt / Pacman / Yum (Linux) Software zu installieren, deinstallieren oder aktuell zu halten.

Pakete … (Quelle: pexels.com)

Seit ein paar Wochen besitze ich wieder ein Windows Notebook und nach einigen Versuchen mit Linux (meine Musiksoftware wollte nicht so wie ich will…) bin ich zu Windows 10 gewechselt. Wenn ich unter Windows Software installieren will, browse ich zur entsprechenden Seite im Netz, lade die Datei herunter und später installiere ich dann alles. Unter Unix Systemen geht das wesentlich einfacher.

Audio Programmierung: Der Einstieg mit C++

Ziemlich genau vor zwei Jahren habe ich einige Artikel zur VST-Entwicklung mit C++ und JUCE geschrieben und kurze Zeit später aus Zeitmangel nicht fortgesetzt. Ein Jahr später schrieb ich wieder einen ähnlichen Artikel, diesmal ging es um die Entwicklung von eigenen Modulen für das modulare Synthesizer-System VCV Rack. Auch das habe ich nicht wirklich weiter verfolgt.

Vor ein paar Wochen habe ich angefangen Python zu lernen und das hat meine Programmierlust wieder so richtig geweckt. Als ich dann vor ein paar Tagen eine Email von einem Leser des Blogs bekam, der ein paar Fragen zum Thema VST-Programmierung mit C++ und JUCE hatte, war das Feuer wieder entfacht.

Csound Tutorial #06 – Ein kurzer Überblick darüber, wie Csound intern arbeitet…

Wie bereits im letzten Teil angekündigt will ich heute ein wenig die interne Arbeitsweise von Csound beleuchten und das ein oder andere nochmal wiederholen. Es könnte also vielleicht etwas trocken werden … 😉

Csound hält die Trennung von Instrument und Noten strikt ein. Eine Sammlung von Instrumenten nennt man ein Orchester (orchestra) und eine Sammlung von Noten (notes) nennt man Komposition (score). Beides wird in einer .csd Datei gespeichert (man könnte sie auch getrennt in zwei separate Dateien ablegen) und diese Datei ist direkt ausführbar.

Csound unterscheidet zwei unterschiedliche Sampleraten. Die eine ist für Audio Signale (sample rate, sr) und die andere für Kontrollsignale (control rates, kr). Ein typischer Wert für eine Control Rate wäre z.B. ein Zehntel 1/10 der Sample Rate.

Ausgehend vom Nyquist Gesetz für Audiosignale, muss die Sample Rate mindestens doppelt so hoch sein, wie die höchste Frequenz, die wir generieren wollen. Wenn wir also einen Sound mit 20.000Hz (höchste hörbare Frequenz für ein junges, gesundes menschliches Ohr) spielen wollen, muss die Sample Rate mindestens 40.000Hz betragen. Die Wahl der Sample Rate hat immer Einfluss auf die Qualität des hörbaren Audio Signals.

Csound Tutorial #05 – Das Tempo eines Musikstücks…

In Csound hat man auch die Möglichkeit, das Tempo einer Komposition zu ändern. Dafür gibt es ein Statement, das speziell hierfür eingeführt wurde: das t (tempo) Statement. Die Syntax sieht folgendermaßen aus:

t    p1    p2    p3    p4    ...

wobei:

  • p1 (muss 0 sein (Beginn einer Komposition)
  • p2 gibt das Anfangstempo vor (in Beats per minute)
  • p3, p5, … Zeiten in Beats (in nicht-absteigender Reihenfolge)
  • p4, p6, … Tempi für die entsprechenden Beat-Zeiten (p4 ist der Tempowert zur Action-Zeit p3, p6 ist der Tempowert zur Action-Zeit p5, etc…

Csound Tutorial #04 – Frequenzen in Oktaven und Halbtönen, sowie Amplitude in dB…

Wie wir bisher gesehen haben, benötigt ein Oszillator die Frequenz immer in Hertz-Angaben (Hz), genauso muss die Amplitude immer in einer rohen Form (von 0 bis 32.767) angegeben werden. Das ist nicht gerade sehr komfortabel, denn wir drücken unsere Noten nun mal selten in Frequenzen aus, sondern eher in Oktaven und Halbtönen. Csound besitzt dafür einen Tonhöhen Konverter (pitch converter), der die Hertz-Zahl aus einer gegebenen Oktave und Tonhöhenklasse ermittelt (octave point pitch class).

Diese octave point pitch class Darstellung (pch) besteht aus einer Integer-Zahl, die die Oktave angibt und einem Dezimalteil, der die Halbtöne angibt. Die Oktave, die das mittlere C (261,63 Hz) enthält, wurde mit der Zahl 8 festgelegt. Deshalb:

8.00=middle C (261,63Hz)
8.01=C# (277,63Hz)
8.02=D (293,67Hz)
8.03=D# (311,13Hz)
7.09=A below middle C (220Hz)
8.09=A above middle C (440Hz)
9.00=C an octave higher than middle C (523,25Hz)
5.00=the lowest C of a piano (32,7Hz)

Seite 3 von 6

Präsentiert von WordPress & Theme erstellt von Anders Norén