Sampling, Recording, Programmierung & Software

Kategorie: Tutorial Seite 3 von 10

Audio Programmierung #09 – C++ Grundlagen: Funktionen (Teil 1)

Bisher haben wir all unseren Programmcode in die main()-Funktion geschrieben. Wenn man nur kleine Programme oder Beispiele schreibt, kann das durchaus Sinn machen. Wenn ein Programm aber größer und komplexer wird, sollte man den Code strukturieren. Dabei helfen Funktionen.

Funktionen helfen dabei ein Programm in logische Blöcke zu unterteilen, die man dann aufrufen kann, wenn man sie benötigt. Eine Funktion ist quasi ein Unterprogramm, dem man Parameter übergeben kann und die etwas zurückgeben kann. Damit sie ihre Arbeit verrichtet, muss sie aufgerufen werden.

Ein klassisches Beispiel für eine Anwendung ist die Berechnung des Umfangs und der Fläche eines Kreises. Der Nutzer gibt einen Radius an und das Programm berechnet diese beiden Werte. Man könnte das nun alles in die main()-Funktion schreiben. Eine bessere Lösung wäre es, wenn man den Code in logische Blöcke unterteilt: Eine Funktion, die den Umfang berechnet und eine Funktion, die die Fläche des Kreises bestimmt.

// circle01.cpp

#include <iostream>

using namespace std;

const double PI = 3.14159265;

// Function declarations (prototypes)
double area(double);
double circumference(double);

int main() {
    cout << "Enter radius: ";
    double radius = 0;
    cin >> radius;

    // Call function area()
    cout << "Area is: " << area(radius) << endl;

    // Call function circumference()
    cout << "Circumference is: " 
         << circumference(radius) << endl;
    
    return 0;
}

// Function definitios (implementations)
double area(double radius) {
    return PI * radius * radius;
}

double circumference(double radius) {
    return 2 * PI * radius;
}
Enter radius: 4
Area is: 50.2655
Circumference is: 25.1327

Up To Date – News und Kurioses für Audio Enthusiasten KW36

News

Arturia hat seine FX Collection um drei neue Modulationseffekte erweitert. Diese habe ich hier, hier und hier sogar schon angetestet.

Arturia Modulations-Trio (Quelle: arturia.com)

Ritmobox ist die neue Drummachine aus Russland, die sich an Klassiker aus den 70ern und 80ern orientiert.

Up To Date – News und Kurioses für Audio Enthusiasten KW33

News

Wenn man hobbymäßig DSP-Code schreibt, ist man schon gut beschäftigt. Wenn man dann seine Instrumente und Effekte auch noch in Form eines Moduls für das Open Source Projekt VCV Rack veröffentlichen will, muss man auch noch eine grafische Oberfläche designen. Genau diese Arbeit wird nun mit der neuen Erweiterung für Inkscape etwas erleichtert.

Der Synth Panel Designer ist eine User Extension für das freie Vektorenprogramm, die man ebenfalls umsonst herunterladen kann und die genauso schnell installiert ist. Voraussetzung ist die Version 1.0 von Inkscape.

ReEQ ist ein freier Equalizer für Reaper. Er ist fantastisch! Inspiriert von Fabfilter’s ProQ und programmiert in Cockos JSFX. Ok, diese Neuigkeit ist schon vom Juli, aber ich habe letzte Woche erst hiervon gehört.

Audio Programmierung #08 – C++ Grundlagen: Verschachtelte Schleifen

Genauso, wie man manchmal verschachtelte if-Anweisungen benötigt, ist es nicht ungewöhnlich auch Schleifen zu verschachteln. Wenn wir beispielsweise zwei Arrays mit Integern haben und jedes der Elemente miteinander multiplizieren wollen – wenn es sich um mathematische Vektoren handelt – dann benutzt man dazu am besten eine verschachtelte Schleife.

Die erste Schleife läuft durch myNums1, während die innere Schleife durch myNums2 läuft.

// nestedLoops.cpp

#include <iostream>

using namespace std;

int main() {
    const int ARRAY1_LEN = 3;
    const int ARRAY2_LEN = 2;

    int myNums1[ARRAY1_LEN] = {35, -3, 0};
    int myNums2[ARRAY2_LEN] = {20, -1};

    cout << "Multiplying each int in myNums1 by each"
         << " im MyNums2:" << endl;

    for(int index1 = 0; index1 < ARRAY1_LEN; ++index1) {
        for(int index2 = 0; index2 < ARRAY2_LEN; ++index2) {
            cout << myNums1[index1] << " X " << myNums2[index2]
                 << " = " << myNums1[index1] * myNums2[index2]
                 << endl;
        }
    }
    return 0;
}
Multiplying each int in myNums1 by each im MyNums2:
35 X 20 = 700
35 X -1 = -35
-3 X 20 = -60
-3 X -1 = 3
0 X 20 = 0
0 X -1 = 0

Die besagten verschachtelten for Schleifen sind in Zeile 17 und 18. Die erste Schleife durchläuft das Array myNums1 und die zweite Schleife durchläuft das Array myNums2. Für jedes Element in myNums1 wird immer die komplette zweite Schleife ausgeführt.

Up To Date – News und Kurioses für Audio Enthusiasten KW21

News

Voltage Modular 2.0 von Cherry Audio ist vorgestern veröffentlicht worden. Dieses kostenlose Update für Besitzer der ersten Version bietet einige neue Features und ja, das GUI wurde auch überarbeitet. Interessant ist auch der Designer, mit dem man sich eigene Module bauen kann (ja, ich weiß, den gab es auch schon in der ersten Version…)

FL Studio 20.7 kann jetzt Midi Scripting und hat neue Tools für Video … yipiiehh!

Valhalla Supermassive ist das neue Reverb Plugin von Valhalla DSP und es ist kostenlos!

Nächsten Monat wird JUCE den Sprung zu Version 6 machen und hier kann man schon einmal nachlesen, was es alles Neues gibt.

Max/MSP Tagebuch – Zweite Woche: Mach’s gut, Max…

Ich habe mir in meiner zweiten Woche mit Max erstmal ein paar Grundlagen gelernt. Ein vernünftiges Fundament ist wichtig, das hat mir mein Mathelehrer an der Fachoberschule schon immer gesagt … war’n guter Mann.

Allerdings habe ich nach Langem hin und her festgestellt, dass ich mich mit meinen Programmierkünsten zunächst nur auf C++ und JUCE beschränken will und MAX daher nicht erwerben werde. Die 30 Tage Demo ist nun schon einige Tage abgelaufen und ich werde die Software jetzt erstmal wieder deinstallieren … mach’s erstmal gut, MAX … war trotzdem nett.

Up To Date – News und Kurioses für Audio Enthusiasten KW20

News

Tja, als Erstes natürlich: Das neue Logic Pro X 10.5 ist raus und bringt wieder nette neue Features in die Apple DAW…

Moog’s 2018 angekündigter Semi-modularer, polyrhythmischer, analoger Synthesizer Subharmonicon ist nun endlich erhältlich…

Eine kleine Musik-Challenge

JACK Audio Server – Verkabel‘ Bitwig mit allen Audio Anwendungen … Die einzige Anleitung, die Du brauchst! (MacOS)

JACK kommt eigentlich aus der Linux Welt und ist dort der Audio Server schlechthin. Für viele ist das Wort Linux schon abschreckend und wenn man dann noch erwähnt, dass JACK ursprünglich ein Kommandozeilen-Tool war, braucht man meistens gar nicht weiter zu reden.

Aber JACK muss nicht kompliziert sein. Man muss ja nicht alle Möglichkeiten der Software nutzen. Ich finde den Gedanken spannend, dass man mithilfe von JACK einfach seine verschiedenen Applikationen miteinander verkabeln kann, genauso wie den Plattenspieler zuhause mit dem Stereo-Verstärker, oder das Casio Keyboard mit dem Audio Interface.

Apple’s Core Audio, das im MacOS Betriebssystem zur Anwendung kommt ist an sich schon eine sehr mächtige Audio API mit niedrigen Latenzen für die Echtzeit-Anwendung von virtuellen Instrumenten und Effekten. Da könnte Windows sich mal eine Scheibe von abschneiden. Allerdings fehlt Core Audio die Möglichkeit verschiedene Anwendungen im Betriebssystem miteinander zu verbinden, sodass man das Audio-Signal von einer Anwendung beispielsweise mit einer anderen Applikation aufzeichnen könnte.

Audio Programmierung #07 – C++ Grundlagen: Schleifen…

Bisher haben wir gesehen, dass man den Programmablauf ändern kann und der Benutzer entscheiden kann, ob er beispielsweise eine Multiplikation oder eine Addition durchführen will. Was aber, wenn er nach der ersten Addition eine weitere ausführen möchte, oder dann vielleicht doch mal eine Multiplikation? Was, wenn das Programm nicht einfach nach der ausgeführten Berechnung enden soll?

In diesem Fall müssen wir den Code immer wieder ausführen, bis eine Bedingung nicht mehr erfüllt ist und das Programm dann beendet. D.h. das Programm müsste in einer Schleife laufen. Iterative Anweisungen, auch Schleifen genannt, führen einen Codeblock solange aus, wie eine Bedingung true ist. Es gibt drei verschiedene Varianten von Schleifen. Die while und for Anweisungen prüfen zunächst eine Bedingung, bevor ein Codeblock ausgeführt wird und die do ... while Anweisung führt erst den Codeblock aus und prüft dann die Bedingung.

Die while Anweisung

Eine while Anweisung wiederholt einen Codeblock genau solange, wie eine gegebene Bedingung true ist. Die Syntax sieht so aus:

while (condition) {
    statements ...
}

Abenteuer Sound Design #06 – Rückkopplungen einer Gitarre erzeugen … ohne Gitarre in Bitwig’s Grid (Guitar Feedback Generator)

Heute bauen wir uns mal ein Instrument, eine Gitarre um genau zu sein. Eine elektrische Gitarre, mit der man aber nur Feedback erzeugen kann … sonst nix. Vor ein paar Monaten habe ich so etwas mal auf YouTube entdeckt und heute baue ich das mal in Bitwig’s Grid nach. Das ist recht simpel, versprochen.

Wenn es eine Band gibt, die mich seit Ende der 80er begleitet, dann ist es Sonic Youth. Leider habe die sich um 2010 aufgelöst. Ein wichtiger Bestandteil der Musik von Sonic Youth ist Gitarren Feedback.

Da mich diese Band stark beeinflusst hat, nutze auch ich „Gitarrenkrach“ in eigenen Songs. Beim Recorden zuhause ist es aber nicht immer ganz einfach, eine Gitarre richtig schön zum Kreischen zu bringen … man wohnt hier ja nicht komplett alleine auf dem Land. Also muss eine praktischere Lösung her.

Seite 3 von 10

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