Plugins en C++

Is er een goed alternatief voor die sleeps?

Event driven... maar dit is weer een heel ander blik wormen om open te trekken. Je zou vanuit je OS (Linux) een timer kunnen opzetten die elke X ms (of seconden) een handler (callback) aftrapt. Daar zou je je programma op kunnen baseren.
 
Uitgangspunt: Jan moet niets hebben van geklaag, en zal daar tegenin gaan.

Dit betekent dat voor Jan pos(U) negatief wordt beïnvloed door negatieve waarden van stem, pos(U*) en pos(U**)). Maar Jan heeft ook wat positieve uitspraken in zijn repertoire en dus mogen we verwachten dat pos(U) voor Jan positief wordt beïnvloed door positieve waarden van stem, pos(U*) en pos(U**). Een redelijke keuze voor de functie fJan lijkt mij daarom de afgeronde waarde van een passend gewogen gemiddelde. Zoiets:

[imath] \mathrm{f}_{Jan}(x ,y,z) = \mathrm{round}(0.25 \cdot x + 0.4 \cdot y + 0.1 \cdot z) [/imath]

(Mogelijk moet daar later nog wat aan gesleuteld worden, maar hier ga ik nu even van uit.)
 
Laatst gewijzigd:
Event driven... maar dit is weer een heel ander blik wormen om open te trekken. Je zou vanuit je OS (Linux) een timer kunnen opzetten die elke X ms (of seconden) een handler (callback) aftrapt. Daar zou je je programma op kunnen baseren.

Wordt de uitvoering van de andere programma's op mijn computer opgehouden door de sleeps in mijn progje?
 
Uitgangspunt: Marie probeert het gezellig te houden door de discussie bij te sturen.

Dit betekent dat voor Marie negatieve waarden van stem aanleiding zijn om juist positief uit hoek te komen.

Bij neutrale of positieve waarden van stem en negatieve waarden van pos(U*) + pos(U**) zijn er voor Marie twee opties, ofwel de "negatievelingen" erop aanspreken ofwel er zelf iets positief tegenover zetten. De negatievelingen erop aanspreken gebeurt slechts in onderstaande twee gevallen:
"Marie: Oh – de heren weten het weer beter..."
"Marie: Nou nou!"
En dat zijn ook gelijk de enige negatieve uitspraken van Marie. Marie heeft daarnaast ook positieve en neutrale uitspraken.
Laten we aannemen dat het toeval bepaalt of Marie op negatieve waarden van pos(U*) + pos(U**) positief of negatief reageert.

Bij neutrale of positieve waarden van stem en niet-negatieve waarden van pos(U*) + pos(U**) nemen aan dat Marie met neutrale uitspraken reageert.

Dit leidt tot onderstaande functie:

[imath] \mathrm{f}_{Marie}(x,y,z) = \left \{ \begin{array}{rcl} +1 & \mathrm{voor} & x < 0 \\ \pm 1 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y+z < 0 \\ 0 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y+z \geq 0 \end{array} \right . [/imath]
 
Heb mijn progje met de sleeps net even geprobeerd, en daarnaast kan ik zonder problemen ook tegelijkertijd een video afspelen. Dus de computer wordt door de sleeps niet stilgelegd. De sleep-tijd hoeft ook niet op de nanoseconde precies te kloppen.
 
De sleep-tijd hoeft ook niet op de nanoseconde precies te kloppen.
Dat doet het ook zeker niet want als je sleept dan wordt je process van de run-queue van de scheduler gehaald in het OS. De scheduler checkt om de zoveel tijd of processen weer moeten ontwaken. Daar heb je al een afwijking in tijd. Daarnaast wordt je process weer op de actieve run-queue geplaatst en het is aan de scheduler om te bepalen wanneer het weer CPU tijd gealloceerd krijgt en daar zit je tweede afwijking. Voor REALTIME processen kan dat problematisch zijn. Voor programma's met minder stringente timing-eisen is het geen probleem
 
Juist - dus voor audio kan het wel relevant zijn. Dan heb ik nog het punt dat ik op internet zag dat nanosleep niet in C++ zou zitten. Kun je het dan wel via een header binnenhalen?
 
Uitgangspunt: Kim is ideologisch bevlogen maar wil tegelijkertijd lief overkomen.

Er van uitgaande dat een algehele negatieve stemming met de toestand in de wereld samenhangt zal dit eveneens de stemming van Kim drukken en tot negatieve of op zijn best neutrale uitspraken leiden.

Bij neutrale of positieve waarden van stem en negatieve waarden van pos(U*) + pos(U**) zijn er voor Kim net als voor Marie twee opties, ofwel de "negatievelingen" erop aanspreken ofwel er zelf iets positief tegenover zetten. Laten we aannemen dat het toeval bepaalt of Kim op negatieve waarden van pos(U*) + pos(U**) positief of negatief reageert.

Bij neutrale of positieve waarden van stem en niet-negatieve waarden van pos(U*) + pos(U**) nemen aan dat Kim steeds met positieve uitspraken reageert.

Dit leidt tot onderstaande functie:

[imath] \mathrm{f}_{Kim}(x,y,z) = \left \{ \begin{array}{rcl} -1 \, \mathrm{of} \, 0 & \mathrm{voor} & x < 0 \\ \pm 1 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y+z < 0 \\ +1 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y+z \geq 0 \end{array} \right . [/imath]

(Ik heb de waardering van de uitspraken van Kim met het oog op bovenstaande definitie nog ietsjes aangepast.)
 
Uitgangspunt: Klaas is een botte hork.

Klaas heeft maar één positieve uitspraak, en dat is zijn afscheidsgroet "Later". Maar daarvan ligt de plaats in de gesprekken al vast. De rest van Klaas' uitspraken zijn negatief of neutraal. Verder nemen we aan dat Klaas geen boodschap heeft aan wat de voorlaatste uitspraak U** was.

Een daarbij passende functie is:

[imath] \mathrm{f}_{Klaas}(x,y,z) = \left \{ \begin{array}{rcl} -1 \, \mathrm{of} \, 0 & \mathrm{voor} & x < 0 \\ -1 \, \mathrm{of} \, 0 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y < 0 \\ 0 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y \geq 0 \end{array} \right . [/imath]


Voor Piet ten slotte hoeven we geen functie te bepalen want die reageert op niemand, en zijn uitspraken volgen een reeds eerder vastgesteld patroon.
 
Uitgangspunt: Jan moet niets hebben van geklaag, en zal daar tegenin gaan.

Dit betekent dat voor Jan pos(U) negatief wordt beïnvloed door negatieve waarden van stem, pos(U*) en pos(U**)). Maar Jan heeft ook wat positieve uitspraken in zijn repertoire en dus mogen we verwachten dat pos(U) voor Jan positief wordt beïnvloed door positieve waarden van stem, pos(U*) en pos(U**). Een redelijke keuze voor de functie fJan lijkt mij daarom de afgeronde waarde van een passend gewogen gemiddelde. Zoiets:

[imath] \mathrm{f}_{Jan}(x ,y,z) = \mathrm{round}(0.25 \cdot x + 0.4 \cdot y + 0.1 \cdot z) [/imath]

(Mogelijk moet daar later nog wat aan gesleuteld worden, maar hier ga ik nu even van uit.)

Ik zal de functie voor Jan nu qua opzet in overeenstemming brengen met de functies voor de anderen:

[imath] \mathrm{f}_{Jan}(x,y,z) = \left \{ \begin{array}{rcl} -1 \, \mathrm{of} \, 0 & \mathrm{voor} & x < 0 \\ -1 \, \mathrm{of} \, 0 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y+z < 0 \\ +1 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y+z \geq 0 \end{array} \right . [/imath]
 
Wordt de uitvoering van de andere programma's op mijn computer opgehouden door de sleeps in mijn progje?
Over het algemeen niet. Een beetje afhankelijk van hoe sleep is geinplementeerd geeft het de controle terug aan je operating system, met het bericht dat de thread waar jij op draait even niets te doen heeft.
In naive implementaties doet het een busy wait. Dus dan doet het een loop totdat de juiste tijd verstreken is. Voor systemen zonder multitasking kan dat zinvol zijn. Maar ik denk dat je veilig aan kan nemen dat deze sleep dat niet doet.
Juist - dus voor audio kan het wel relevant zijn.
Voor audio wil je zowieso geen sleep gebruiken voor de timing. Meestal gebruik je daar een framework waar jij alleen maar een functie hoeft te schrijven die een buffer met samples vult. Het framework dat je gebruikt is verantwoordelijk om op het juiste moment de juiste buffer beschikbaar te maken en jouw functie aan te roepen. Timing hoef je je geen zorgen over te maken.
Als je audio wil genereren zonder framework (bijv op embedded boardjes) doe je iets vergelijkbaars. Dan doet de hardware de timing voor je en draait jouw code waarschijnlijk op een interrupt routine. Dus daar hoef je je ook geen zorgen te maken over sleeps en timing etc.
 
Code voor fJan :

Code:
#include <iostream>

void fJan(int x, int y, int z) {
   if (x < 0) {std::cout << "-1 of 0";}
   else {if (y+z<0) {std::cout << "-1 of 0";} else {std::cout << "+1";}}
};

int main(){
fJan(1, -1, -1);
}
 
Uitgangspunt: Marie probeert het gezellig te houden door de discussie bij te sturen.
(...)
Dit leidt tot onderstaande functie:

[imath] \mathrm{f}_{Marie}(x,y,z) = \left \{ \begin{array}{rcl} +1 & \mathrm{voor} & x < 0 \\ \pm 1 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y+z < 0 \\ 0 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y+z \geq 0 \end{array} \right . [/imath]
Code voor fMarie :
Code:
#include <iostream>

void fMarie(int x, int y, int z) {
   if (x < 0) {std::cout << "+1";}
   else {if (y+z<0) {std::cout << "+1 of -1";} else {std::cout << "0";}}
};

int main(){
fMarie(1, -1, -1);
}
 
Uitgangspunt: Kim is ideologisch bevlogen maar wil tegelijkertijd lief overkomen.
(...)
Dit leidt tot onderstaande functie:

[imath] \mathrm{f}_{Kim}(x,y,z) = \left \{ \begin{array}{rcl} -1 \, \mathrm{of} \, 0 & \mathrm{voor} & x < 0 \\ \pm 1 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y+z < 0 \\ +1 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y+z \geq 0 \end{array} \right . [/imath]
Code voor fKim :
Code:
#include <iostream>

void fKim(int x, int y, int z) {
   if (x < 0) {std::cout << "-1 of 0";}
   else {if (y+z<0) {std::cout << "+1 of -1";} else {std::cout << "+1";}}
};

int main(){
fKim(1, -1, -1);
}
 
Uitgangspunt: Klaas is een botte hork.
(...)
Een daarbij passende functie is:

[imath] \mathrm{f}_{Klaas}(x,y,z) = \left \{ \begin{array}{rcl} -1 \, \mathrm{of} \, 0 & \mathrm{voor} & x < 0 \\ -1 \, \mathrm{of} \, 0 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y < 0 \\ 0 & \mathrm{voor} & x \geq 0 \,\, \& \,\, y \geq 0 \end{array} \right . [/imath]
Code voor fKlaas :
Code:
#include <iostream>

void fKlaas(int x, int y, int z) {
   if (x < 0) {std::cout << "-1 of 0";}
   else {if (y<0) {std::cout << "-1 of 0";} else {std::cout << "0";}}
};

int main(){
fKlaas(1, -1, -1);
}
 
Jouw enthousiasme heeft mijn programmeer hobby weer gewekt.
Het is lang geleden dat ik veel in C heb geprogrammeerd. Dat ga ik nu weer eens oppakken.
Niet voor muziek, maar om een aantal specifieke hulpprogramma's te schrijven voor het maken van statische berekeningen.
Ik gebruik daar een aantal programma's voor. Maar die zijn vrij generiek.
Allerlei detailberekeningen en specifieke dingen moet ik nu nog handmatig doen
Of in een spreadsheet.
Voor mij geen c++. Dat heb ik in de jaren '90 geprobeerd maar die taal ligt mij helemaal niet.
C is helemaal mijn ding. Eventueel met x86 assembly.
 
Ja, laat je berichtjes maar komen, @ProgHead . Ik volg het ook met belangstelling. Kan de moed nog niet opbrengen om ook weer 'ns aan iets te beginnen, vroeger wel heel wat geprogrammeerd. Het vergt een zekere 'state of mind' om het te kunnen en daar kom ik nog niet zo gemakkelijk in.
 
@Disharmonic Heb je het boek Hackers van Steven Levy al gelezen, dat is enorm motiverend. Maar ik merk zelf ook wel dat een beetje programmeren niet gaat. Ik moet er echt uren achtereen mee bezig zijn, en ik kan er maar heel weinig naast hebben. 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. Het is een soort van obsessie. Maar ik moet nu echt even doorzetten. Als ik - naar mijn idee - genoeg in C++ thuis ben kan ik weer minderen, of heel iets anders aanpakken.
 
Back
Top