Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]

5 - Les serveurs son : JACK, PulseAudio et autres...

> Forums de discussion > 5 - Les serveurs son : JACK, PulseAudio et autres... > afficher les x-runs dans un terminal[résolu]
Dernier post

afficher les x-runs dans un terminal[résolu]

dawamss utilisateur non connecté France
Bonjour,
y a-t-il une commande pour être informé, dans un terminal, des décrochages(x-runs) ?
Je compte faire apparaître ces décrochages dans le "post window" de superCollider.

damien

dawamss utilisateur non connecté France
re-
j'ai trouvé ça sur GitHub
je vais tâcher de comprendre comment s'en servir..

dawamss utilisateur non connecté France
Alors..
j'ai le code suivant qui fonctionne très bien dans un terminal.. malheureusement pas avec la commande "/path/to/./xruncounter".unixCmd de superCollider.

#include "stdio.h"
#include "errno.h"
#include "unistd.h"
#include "signal.h"
#include "stdlib.h"

#include "jack/jack.h"

/*   gcc -Wall xruncounter.c -lm `pkg-config --cflags --libs jack` -o xruncounter */

jack_client_t *client;


void
jack_shutdown (void *arg)
{
	exit (1);
}

int jack_xrun_callback(void *arg) 
{
	/* count xruns */
	static int xruns = 0;
	xruns += 1;
	fprintf (stderr, "xrun %i \n", xruns);
	return 0;
}

void
signal_handler (int sig)
{
	jack_client_close (client);
	fprintf (stderr, " signal received, exiting ...\n");
	exit (0);
}

int
main (int argc, char *argv[])

{

	if ((client = jack_client_open ("xruncounter", JackNullOption, NULL)) == 0) {
		fprintf (stderr, "jack server not running?\n");
		return 1;
	}

	signal (SIGQUIT, signal_handler);
	signal (SIGTERM, signal_handler);
	signal (SIGHUP, signal_handler);
	signal (SIGINT, signal_handler);

	jack_set_xrun_callback(client, jack_xrun_callback, 0);
	jack_on_shutdown (client, jack_shutdown, 0);

	if (jack_activate (client)) {
		fprintf (stderr, "cannot activate client");
		return 1;
	}
	while (1) {
		usleep (100000);
	}

	jack_client_close (client);
	exit (0);
}

un programme de type 'hello_world' imprime comme il faut son message avec "/path/to/./hello_world".unixCmd dans supercollider
#include "stdio.h"
#include "errno.h"
#include "unistd.h"
#include "signal.h"
#include "stdlib.h"

#include "jack/jack.h"

int main(void)
{
    int i;
    fprintf(stderr, "Hello world! %i \n", 666);
}


je vais encore gratter un peu mais le résultat attendu semble pas loin

dawamss utilisateur non connecté France
Suite et fin, ça fonctionne très bien. Je n'avais pas précisé l'os est librazik4 et il important d'installer les paquets libjack-jackd2-dev et gcc.

La fonction : jack_xrun_callback change un peu :

int jack_xrun_callback(void *arg) 
{
	/* count xruns */
	static int xruns = 0;
	xruns += 1;
	fprintf (stdout, "!xrun %i \n", xruns);
	fflush(stdout);  // permet au subshell d'imprimer sur stdout
	return 0;
}


olinuxx utilisateur non connecté France
Bravo à toi dawamss.
Et merci d'avoir partagé tout ceci avec tout le monde ici même.

Par curiosité, à quoi ça te sert de faire apparaître les décrochages audio dans supercollider ? C'est pour monitorer ton système ?

dawamss utilisateur non connecté France
plusieurs raisons à ça :
l'IDE officiel de superCollider affiche dans un cadre la conso DSP. C'est très pratique dans la phase d'élaboration de SynthDef et Pdef.. Aussi, au moment de booter le server 'SCSynth', s'il n'y a pas d'instance de jack ouverte, SC va démarrer jack dans son coin.. on aura pas de retour de xrun à ce moment là. L'idéal serait d'intégrer un nouveau cadre 'xrun' dans l'IDE.. je n'ai pas les compétences pour ça.
Aussi, même si Cadence (ou autre) est ouvert, j'utilise principalement SC en mode plein écran, je trouve pratique/suffisant d'avoir un retour dans le 'post window'. Il y a un fort potentiel des xruns lors de certaines étapes de sauvegarde : Archive.write, SynthDef().store...
Je développe un programme (sous SC) que je commence à proposer en 'beta'. Donc autant d'ordinateurs que de config différentes. Encore une fois, il me semble pratique d'avoir ce retour d'informations sans avoir à surveiller Cadence ou autre.

Ce petit bout de code devrait encore subir une 'amélioration' : j'aimerai, à la place d'imprimer sur stdout, envoyer ce message via OSC. Ce serait pratique pour les config 'headless' et correspondrai mieux aux pratiques de SC. Aussi ça se rapprocherai des 'jack-tools'.

olinuxx utilisateur non connecté France
OK, c'est un bon projet ça !
Si tu penses que le programme final devrait faire partie de LibraZiK, fais moi signe.

dawamss utilisateur non connecté France
Ok, une version OSC de ce code. Les paquets liblo-dev, libjack-jackd2-dev et gcc sont nécessaires. Le programme attend un port sur lequel envoyer ses messages. Lancer (par exemple pour le port 57120) /path/to/xrunToOsc 57120.
Si vous voyez des trucs pas malins dans ce code, n'hésitez pas à le faire savoir.
#include "stdio.h"
#include "errno.h"
#include "signal.h"
#include "stdlib.h"
#ifndef WIN32
#include "unistd.h"
#include "lo/lo.h"
#include "jack/jack.h"
#endif

/* gcc -Wall xrunToOsc.c -lm `pkg-config --cflags --libs liblo jack` -o xrunToOsc */

jack_client_t *client;

void
jack_shutdown (void *arg)
{
	exit (1);
}

void
signal_handler (int sig)
{
	jack_client_close (client);
	fprintf (stderr, " signal received, exiting ...\n");
	exit (0);
}

int main(int argc, char *argv[])
{
    lo_address t = lo_address_new(NULL, argv[1]);
    int jack_xrun_callback(void *arg)
    {
	static int xruns = 0;
	xruns += 1;
	lo_send(t, "/xRuns", "i", xruns);
	return 0;
    }
   if ((client = jack_client_open ("simple", JackNullOption, NULL)) == 0) {
		fprintf (stderr, "jack server not running?\n");
		return 1;
	}

	signal (SIGQUIT, signal_handler);
	signal (SIGTERM, signal_handler);
	signal (SIGHUP, signal_handler);
	signal (SIGINT, signal_handler);

	jack_set_xrun_callback(client, jack_xrun_callback, 0);
	jack_on_shutdown (client, jack_shutdown, 0);

	if (jack_activate (client)) {
		fprintf (stderr, "cannot activate client");
		return 1;
	}
	while (1) {
		usleep (100000);
	}

	jack_client_close (client);
	exit (0);
}

/* vi:set ts=8 sts=4 sw=4: */


Afficher les articles :
Aller au forum :

Documentation [Afficher / Cacher]

Faire un don
[Afficher / Cacher]

Connexion
[Afficher / Cacher]



Mégaphone [Afficher / Cacher]

calixtus06, 14:33, jeu. 28 mars 2024: Bonjour et bienvenue à b.vl :-)
calixtus06, 09:30, mer. 27 mars 2024: Bonjour et bienvenue à Noar :-)
olinuxx, 18:50, lun. 25 mars 2024: Bonjour et bienvenue à Ted Demore cool
olinuxx, 17:52, dim. 24 mars 2024: Bonjour et bienvenue à Noitavon cool
calixtus06, 11:07, jeu. 21 mars 2024: Bonjour et bienvenue à obds, ceric :-)
obds, 16:12, mar. 19 mars 2024: Cet édito est juste parfait. Trop beau !
olinuxx, 11:48, ven. 15 mars 2024: Bonjour et bienvenue à Jerry cool
calixtus06, 18:03, mer. 13 mars 2024: Bonjour et bienvenue à tanguero :-)
olinuxx, 11:01, dim. 10 mars 2024: Bonjour et bienvenue à lolo cool
bda, 16:59, sam. 09 mars 2024: Chapeau pour l'édito. Vous êtes au top les gars :-)
allany, 07:20, jeu. 07 mars 2024: Ça ne fait jamais de mal, c'est l'éditorial ! [Lien]
olinuxx, 19:52, mer. 06 mars 2024: Bonjour et bienvenue à TrkNrk cool