Plugins en C++

Als ik noodgedwongen toch even iets anders doe blijven de problemen en ideeën over mijn te schrijven progje toch nog hardnekkig door malen in mijn hoofd. Tot in mijn dromen aan toe.

Tot in m'n dromen misschien niet (misschien ook wel, want kan die bijna nooit herinneren), maar dat herken ik. Komt bij dat je al snel tegen hetzelfde probleem aanloopt als jij, heb je een specifiek doel voor ogen, de keuze waarin te programmeren is soms maar klein. De taal die je wil leren en gebruiken hoeft in dat geval niet de eerste keuze te zijn. Ik kom vooral uit de hoek van Pascal en met name Delphi, zou als het puur om het leren van iets nieuws gaat en dat gericht is op de taal zelf, kiezen voor Ada. Maar als je een specifieke toepassing wil bouwen, voor een specifiek platform, het moet werken met andere specifieke software, de kans is groot dat je noodgedwongen iets anders moet gebruiken.
 
Iedere keer dat ik mijn progje bekijk zie ik nog weer ongerechtigheden of dingen die beter zouden kunnen, maar zo moet het maar. Zie de bijlage.

Ik neem nu even rust, en daarna ga ik bekijken of ik er een audio programma van kan maken. Niet met pratende mensen, maar met signalen die elkaar beïnvloeden.
 

Attachments

  • KROEGEN.cpp.zip
    2 KB · Bekeken: 41
Hier een voorbeeldje van een uitdraai:

uitdraai.png


Niet erg indrukwekkend. Voor een betere simulatie heb je denk ik veel meer mogelijke uitspraken nodig, en zouden de reacties ook op hun inhoudelijke gepastheid getoetst moeten worden. Ook dat zou wel te programmeren zijn, maar dat heeft mijn interesse niet. Ik heb van dit projectje al heel veel geleerd, en dat was ook de bedoeling. Ik zal er vervolgens een versie van maken waarin signalen (in plaats van stamgasten) elkaar beïnvloeden, wat dan wellicht later voor audio te gebruiken is.
 
Nieuwe opzet:

- Er zijn drie signalen: s1, s2 en s3.
- Er is een output-signaal sout.
- Het outputsignaal wordt per tijdstap n bepaald.
- Er is een poortwachtersignaal sp dat voor iedere afzonderlijke tijdstap n als output sout[n] uit s1[n], s2[n] en s3[n] kiest.
- De signalen: s1, s2 en s3 worden voor alle tijdstappen n bepaald door onderstaande relaties:
1. (s1)[n] = f1(sout[n-1], sout[n-2])
2. (s2)[n] = f2(sout[n-1], sout[n-2])
3. (s3)[n] = f3(sout[n-1], sout[n-2])
- Zo nodig worden startwaardes meegegeven.
- Welke keuzes voor de startwaardes en voor sp, f1, f2, en f3 voor audiotoepassingen interessant zijn is nader uit te zoeken.
 
Ik ga mijn nieuwe progje hier stap voor stap opbouwen. Hieronder wordt een voorbeeldfunctie f afgebeeld:

code.png


prent.png
 
Implementatie van het poortwachtersignaal sp met voorbeelden:

code.png


prent.png
 
Laatst gewijzigd:
Het is laat geworden (of vroeg - net hoe je het bekijkt ;)) maar ik ben met mijn nieuwe progje heel ver gekomen. Zie de bijlage.

Wie dat wil kan daar in een gratis IDE zoals Geany mee spelen. Mogelijk kan dat ook direct in de terminal, maar dat zoek ik later wel weer uit... :z
 

Attachments

  • audio4.cpp.zip
    1,5 KB · Bekeken: 32
Een kleine tip die ik je kan geven is: probeer je variabele omschrijvende namen te geven. Wellicht minder van toepassing op hobby projecten, maar als je je project een jaar in de koelkast zet en daarna weer oppakt helpt het echt enorm als je in 1 oogopslag kunt zien wat een variabele precies doet.

Je zou puur ter lering en vermaak eens een coding standard kunnen doorlezen. Een voorbeeld is de "barr-standaard" maar er is uiteraard meer te vinden op het web.
 
Het boekje met C standaard ziet er goed uit. :)

Het runnen van mijn C++ app vanuit de terminal gaat op mijn Linux Computer door de executable audio5 op mijn bureaublad te zetten; in de terminal naar het bureaublad te navigeren; en dan het commando ./audio5 te geven:
Code:
~$ cd Desktop
~/Desktop$ ./audio5

Maar of dat de correcte weg is weet ik niet...
 
Laatst gewijzigd:
Het boekje met C standaard ziet er goed uit. :)

Het runnen van mijn C++ app vanuit de terminal gaat op mijn Linux Computer door de executable audio5 op mijn bureaublad te zetten; in de terminal naar het bureaublad te navigeren; en dan het commando ./audio5 te geven:
Code:
~$ cd Desktop
~/Desktop$ ./audio5

Maar of dat de correcte weg is weet ik niet...
Dat is hoe het werkt idd. Je hoeft je applicatie niet per se op je bureaublad te zetten, maar kan ook gewoon in je home/documents of waar dan ook.
 
Kun je gegenereerde waarden naar een bestand schrijven? Zonder je te bekommeren, op dit moment, om dit volgens de specificaties van een bestandsformaat te doen zou je simpelweg de ruwe waarden kunnen wegschrijven en dit vervolgens inlezen in bv. Audacity. Zo kun je het nu al vrij eenvoudig hoorbaar maken.
 
Als je dan toch in de terminal gaat werken kan je net zo goed de command line arguments benutten:

C++:
int main(int argc, char *argv[]){
  
     // Function body
     return 0;
}

Hierin is argc de hoeveelheid command line arguments, en argv de string array met de arguments.
 
Met behulp van onderstaande tutorial is het me gelukt mijn progje uit te breiden met de functie van het uitschrijven van de output naar een txt-file.

 
Als je dan toch in de terminal gaat werken kan je net zo goed de command line arguments benutten:

C++:
int main(int argc, char *argv[]){
 
     // Function body
     return 0;
}

Hierin is argc de hoeveelheid command line arguments, en argv de string array met de arguments.

Wat moet daar de function body zijn?
 
Wat moet daar de function body zijn?
Dat kun je zien als jouw programma. En middels string compares zou je die argumenten kunnen afhandelen. Wellicht is daar in de libraries wel iets standaards voor.
 
Dat kun je zien als jouw programma. En middels string compares zou je die argumenten kunnen afhandelen. Wellicht is daar in de libraries wel iets standaards voor.

En wat levert dat dan als resultaat?
 
Dat je je programma kunt starten vanuit de terminal met bijvoorbeeld ./mijn_prog —help voor de uitleg, net zoals andere programma’s (/commands) in Linux
 
even als voorbeeld (in C):

C:
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    if (strcmp("--help",argv[0]))
    {
        printf("Help text\n");
    }
    
    //jouw programma

    return 0;
}

Als je dit runt met "./my_prog --help" is de output "Help text"
 
Back
Top