Kategorie: VST-Entwicklung Seite 1 von 2

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 ...
}

Audio Programmierung #06 – C++ Grundlagen: Die Kontrolle des Programmablaufs (switch-case)

Das Ziel eines switch-case Konstrukts ist es, einen Ausdruck gegen eine größere Auswahl von Konstanten zu vergleichen und dann dementsprechend für jede Möglichkeit etwas anderes auszuführen. Die C++ Schlüsselwörter, die wir in diesem Zusammenhang oft sehen werden, sind switch, case, default und break.

Die allgemeine Syntax sieht so aus:

switch(expression) {

    case LabelA:
        DoSomething;
        break;

    case LabelB:
        DoSomethigElse;
        break;

    // and so on ...
    default:
        DoStuffWhenExpressionIsNotHandledAbove;
        break;
}
    

VST-Plugin Programmierung #04 – Eine JUCE GUI Anwendung kann mehr als nur Text darstellen…

Im letzten Artikel haben wir unserer GUI Anwendung mithilfe einer Komponente (main component) etwas Inhalt geschenkt. Dieser Inhalt bestand aber nur aus einfachem Text. Das geht natürlich noch besser. Wir machen zunächst ungefähr da weiter, wo wir das letzte mal aufgehört haben. Dazu öffnen wir das letzte Projekt MainComponentTutorial nochmal und ändern die paint() Methode wieder so ab, dass uns das beliebte „Hello World!“ wieder angezeigt wird. Außerdem können wir dann auch die Member-Variable currentSizeAsString wieder entfernen (auch deren Nutzung in der resize() Methode).

Damit sieht unsere paint() Methode wieder so aus:

void MainComponent::paint (Graphics& g)
{
    g.fillAll(Colours::darkgrey);
    g.setColour (Colours::orange);
    g.setFont (28.0f);
    g.drawText ("Hello World!", getLocalBounds(),
                Justification::centred, true);  
}

Wenn wir das Projekt nun kompilieren und ausführen, haben wir wieder unser dunkelgraues Fenster mit dem orangen „Hello World!“ Text in der Mitte.

Mithilfe der Graphics Klasse können wir nun noch andere Dinge in unsere MainComponent „zeichnen“.

Audio Programmierung #05 – C++ Grundlagen: Die Kontrolle des Programmablaufs (if … else)

Die meiste Software verhält sich den Eingaben des Nutzers entsprechend. D.h. der Nutzer kontrolliert den Ablauf des Programms. Damit eine Applikation sich dementsprechend verhält, muss man Bedingungen erfüllen oder nicht erfüllen, um verschiedene Verzweigungen im Code zu betreten.

Bedingte Ausführung mit if ... else

Bisher haben wir nur Programme geschrieben, die seriell abliefen, d.h. es wurde eine Anweisung nach der anderen abgearbeitet – von oben nach unten. Jede Zeile wurde ausgeführt und keine Zeile wurde ignoriert. Aber die meisten Anwendungen funktionieren so nicht. Angenommen ein Programm soll zwei Zahlen multiplizieren, wenn der Nutzer ein m eingibt, oder sie addieren, wenn der Nutzer irgendwas anderes eingibt.

Dieses Szenario ist im folgenden Flußdiagramm dargestellt:

VST-Plugin Programmierung #02 – Eine grundlegende JUCE GUI Anwendung (Application window)

In der Regel verfügen Audio-Plugins – egal ob Effekt oder Instrument – über eine grafische Benutzeroberfläche (GUI). Aus diesem Grund wollen wir heute mal damit anfangen, eine minimale Anwendung in einem Fenster zu generieren und ein wenig das Aussehen unserer App ändern. Diese Einführung ist an den offiziellen Tutorials der JUCE Website angelehnt, daher nutze ich die gleichen Namen für die Projekte.

Wir starten zunächst mal den Projucer und wählen die Option GUI Application. Das Projekt nennen wie MainWindowTutorial. Oben rechts im Projucer kann ich an dieser Stelle auswählen, welche Quellcode-Dateien erzeugt werden sollen. Hier wählen wir „Create a main.cpp file only„.

Audio Programmierung #04 – C++ Grundlagen: Anweisungen, Ausdrücke und Operatoren…

Im Grunde ist ein Programm, sei es in C++ geschrieben oder in einer anderen Programmiersprache, nichts anderes als Kommandos, die nacheinander abgearbeitet werden. Diese Kommandos bestehen aus Ausdrücken und Anweisungen und nutzen Operatoren um bestimmte Berechnungen oder andere Aktionen auszuführen.

Anweisungen

Die erste wichtige Anweisung, die wir gelernt haben:

cout << "Hello World!"  << endl;

Eine Anweisung mit cout gibt Text im Terminal auf dem Bildschirm aus. In C++ enden alle Anweisungen mit einem Semikolon (;). Das Semikolon markiert die Grenze oder das Ende einer Anweisung, vergleichbar mit dem Punkt (.) in der deutschen Sprache. Die nächste Anweisung könnte direkt hinter dem Semikolon beginnen, aber aus Gründen der Übersichtlichkeit ist es ratsamer eine neue Anweisung auch in einer neuen Zeile zu beginnen.

Audio Programmierung #03 – C++ Grundlagen: Arrays und Zeichenketten

Was ist ein Array?

Ein Array ist quasi eine Gruppe von Elementen, die eine Einheit ergeben. Diese Elemente müssen alle vom selben Typ sein (z.B. Integer Zahlen) und der Speicher der einzelnen Elemente liegt fortlaufend hintereinander. Somit kann ich mithilfe eines Indexes auf ein bestimmtes Element des Arrays zugreifen.

Angenommen wir schreiben ein Programm, bei dem der Benutzer fünf Zahlen eingeben muss. Eine Möglichkeit wäre es für diese fünf Zahlen einzelne Variablen zu deklarieren:

int firstNum = 0;
int secondNum = 0;
int thirdNum = 0;
int fourthNum = 0;
int fifthNum = 0;

Falls der Benutzer nun 500 Zahlen eingeben müsste, hätten wir ein Problem. Mit viel Zeit und Geduld könnte man das so machen, aber es geht auch einfacher. Der bessere Weg wäre es, ein Array mit fünf Zahlen zu deklarieren und diese mit 0 zu initialisieren.

VST-Plugin Programmierung #01 – JUCE installieren und „Hello Word“ – Plugin generieren…

Ja, auch wenn ich noch total am Anfang bin mit den C++ Tutorials, will ich schon mal so langsam in das JUCE Framework schauen und so langsam die ersten Gehversuche machen. Ich habe vor zwei Jahren schon mal damit angefangen und es wieder verworfen. Es wird Zeit für einen zweiten Versuch 😉

Quelle: juce.com

Was ist JUCE?

JUCE ist ein C++-Application Framework, dass teilweise Open Source ist. Dieses Framework unterstützt den Programmierer beim Erstellen von Multiplattform-GUI-Anwendungen. JUCE ist in erster Linie für die Entwicklung im Bereich Audio-Anwendungen (Standalone oder Plugins) bekannt.

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

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;
}

Seite 1 von 2

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