Compare commits
	
		
			2 Commits
		
	
	
		
			054715a960
			...
			cac558181f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					cac558181f | ||
| 
						 | 
					918e29cb98 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -37,4 +37,5 @@ ui/t
 | 
			
		||||
 | 
			
		||||
Beep/alguabeep
 | 
			
		||||
Beep/*.log
 | 
			
		||||
Beep/foo.html
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,10 @@
 | 
			
		||||
#
 | 
			
		||||
#      _    _     ____ _   _   _    ____  _____ _____ ____
 | 
			
		||||
#     / \  ! !   / ___! ! ! ! / \  ! __ )! ____! ____!  _ \
 | 
			
		||||
#    / _ \ ! !  ! !  _! ! ! !/ _ \ !  _ \!  _! !  _! ! !_) !
 | 
			
		||||
#   / ___ \! !__! !_! ! !_! / ___ \! !_) ! !___! !___!  __/
 | 
			
		||||
#  /_/   \_\_____\____!\___/_/   \_\____/!_____!_____!_!
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CC	= gcc
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,22 @@
 | 
			
		||||
# AlguaBeep
 | 
			
		||||
 | 
			
		||||
Une expérimentation hasardeuse pour traduire des images de webcam
 | 
			
		||||
en sons qui déchirent les oreilles, mais qui sont bio-dégradables.
 | 
			
		||||
C'est une expérimentation hasardeuse pour traduire des images de webcam
 | 
			
		||||
en sons qui déchirent les oreilles, mais qui sont relativement
 | 
			
		||||
inoffensifs.
 | 
			
		||||
 | 
			
		||||
Pour le moment, il n'y a pas de procédure d'installation, il faut
 | 
			
		||||
donc lancer le binaire à partir du répertoire de dèv :
 | 
			
		||||
`~/Devel/DD2-monitor/Beep/alguabeep [options]`, ce qui implique
 | 
			
		||||
de ne pas aller mettre la grouille dans ce coin-là.
 | 
			
		||||
 | 
			
		||||
Ensuite, pour apprécier pleinement la kitchitude (assumée) de l'affichage
 | 
			
		||||
numérique de la machinerie en action, il faut un `xterm` en 150 caractères
 | 
			
		||||
de large, et une toute petite fonte.
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
available options:
 | 
			
		||||
        -d /dev/?       select video device
 | 
			
		||||
        -I              take pictures
 | 
			
		||||
        -K              set the K parameter
 | 
			
		||||
@ -39,5 +50,10 @@ En cas de problème sur l'acquisition vidéo, dans un terminal,
 | 
			
		||||
tapez `ffplay /dev/videoN`, avec `N` de zéro à quatre. Vous
 | 
			
		||||
tomberez peut-être sur l'image désirée.
 | 
			
		||||
 | 
			
		||||
En cas de système muet, il faut aller voir avec `alsamixer` si la sortie
 | 
			
		||||
par défaut n'est pas en `mute`, mais il faut aussi parfois aller négocier
 | 
			
		||||
avec _pulseaudio_ et sa logique étrange. Bon courage.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Et surtout que la maman des algues reste CALME !
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,10 @@
 | 
			
		||||
   /* V4L2 video picture grabber
 | 
			
		||||
   /*
 | 
			
		||||
 | 
			
		||||
              A crude sound experiment, by Clairchanoir et tTh
 | 
			
		||||
 | 
			
		||||
              approimatively based on :
 | 
			
		||||
 | 
			
		||||
       V4L2 video picture grabber
 | 
			
		||||
       Copyright (C) 2009 Mauro Carvalho Chehab <mchehab@infradead.org>
 | 
			
		||||
 | 
			
		||||
       This program is free software; you can redistribute it and/or modify
 | 
			
		||||
@ -58,14 +64,14 @@ do	{
 | 
			
		||||
	} while (r == -1 && ((errno == EINTR) || (errno == EAGAIN)));
 | 
			
		||||
 | 
			
		||||
if (r == -1) {
 | 
			
		||||
	fprintf(stderr, "error %d, %s\n", errno, strerror(errno));
 | 
			
		||||
	fprintf(stderr, "%s: error %d, %s\n", __func__, errno, strerror(errno));
 | 
			
		||||
	exit(EXIT_FAILURE);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/* --------------------------------------------------------------------- */
 | 
			
		||||
void help(int v)
 | 
			
		||||
{
 | 
			
		||||
puts("options :");
 | 
			
		||||
puts("available options:");
 | 
			
		||||
puts("\t-d /dev/?\tselect video device");
 | 
			
		||||
puts("\t-I\t\ttake pictures");
 | 
			
		||||
puts("\t-K\t\tset the K parameter");
 | 
			
		||||
@ -200,7 +206,7 @@ initialise_ecran(0);
 | 
			
		||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 | 
			
		||||
xioctl(fd, VIDIOC_STREAMON, &type);
 | 
			
		||||
 | 
			
		||||
sprintf(chaine, "entering main loop, %d iters\n", nbre_capt);
 | 
			
		||||
sprintf(chaine, "entering main loop, %9d iters\n", nbre_capt);
 | 
			
		||||
mvaddstr(1, 0, chaine);
 | 
			
		||||
refresh();
 | 
			
		||||
fprintf(stderr, "%s\n", chaine);
 | 
			
		||||
@ -243,8 +249,8 @@ for (i = 0; i < nbre_capt; i++) {
 | 
			
		||||
//			fmt.fmt.pix.width, fmt.fmt.pix.height, K);
 | 
			
		||||
 | 
			
		||||
	if (mk_img) {
 | 
			
		||||
		sprintf(out_name, "i/out%04d.ppm", i);
 | 
			
		||||
		if (verbosity) fprintf(stderr, "--> %s\n", out_name);
 | 
			
		||||
		sprintf(out_name, "o/out%04d.ppm", i);
 | 
			
		||||
		if (verbosity) fprintf(stderr, "\t--> %s\n", out_name);
 | 
			
		||||
 | 
			
		||||
		fout = fopen(out_name, "w");
 | 
			
		||||
		if (!fout) {
 | 
			
		||||
@ -257,6 +263,10 @@ for (i = 0; i < nbre_capt; i++) {
 | 
			
		||||
		fclose(fout);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	/* XXX CRITICAL BUG XXX
 | 
			
		||||
		Doc say 'period can be real', so why not
 | 
			
		||||
			use nanosleep(2) ?
 | 
			
		||||
	*/
 | 
			
		||||
	if (nbre_capt > 1 && period) {
 | 
			
		||||
		sleep(period);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,10 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *		Ugly hack made for AlguaBeep
 | 
			
		||||
 *
 | 
			
		||||
 *		+++++++++++++++++++++++++++++++++++++++++
 | 
			
		||||
 *		+   DO   NOT   USE   IN   REAL   LIFE   +
 | 
			
		||||
 *		+++++++++++++++++++++++++++++++++++++++++
 | 
			
		||||
 */
 | 
			
		||||
#include  <stdio.h>
 | 
			
		||||
#include  <stdlib.h>
 | 
			
		||||
#include  <unistd.h>
 | 
			
		||||
@ -27,10 +33,10 @@ if (-1 == ioctl (fd, VIDIOC_QUERYCTRL, &queryctrl)) {
 | 
			
		||||
		perror ("VIDIOC_QUERYCTRL");
 | 
			
		||||
		exit (EXIT_FAILURE);
 | 
			
		||||
	} else {
 | 
			
		||||
		printf ("V4L2_CID_BRIGHTNESS is not supported\n");
 | 
			
		||||
		fprintf (stderr, "V4L2_CID_BRIGHTNESS is not supported\n");
 | 
			
		||||
	}
 | 
			
		||||
} else if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) {
 | 
			
		||||
	printf ("V4L2_CID_BRIGHTNESS is not supported\n");
 | 
			
		||||
	fprintf (stderr, "V4L2_CID_BRIGHTNESS is not supported\n");
 | 
			
		||||
} else {
 | 
			
		||||
	memset (&control, 0, sizeof (control));
 | 
			
		||||
	control.id = V4L2_CID_BRIGHTNESS;
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,8 @@
 | 
			
		||||
/*
 | 
			
		||||
 *		AlguaBeep is a cool project.
 | 
			
		||||
 *				merci clairchanoir.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *		various V4L2 functions
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,6 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	un module 'curses' de AlguaBeep
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include  <stdio.h>
 | 
			
		||||
#include  <unistd.h>
 | 
			
		||||
@ -18,7 +21,7 @@ keypad(stdscr, TRUE);           /* acces aux touches 'curseur' */
 | 
			
		||||
 | 
			
		||||
atexit(finish);
 | 
			
		||||
 | 
			
		||||
sprintf(chaine, " alguabeep (%s %s) pid=%d \n", __DATE__, __TIME__,
 | 
			
		||||
sprintf(chaine, " AlguaBeep (%s %s) pid=%d \n", __DATE__, __TIME__,
 | 
			
		||||
						getpid());
 | 
			
		||||
standout(); mvaddstr(0, 0, chaine); standend();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,14 @@
 | 
			
		||||
/*
 | 
			
		||||
 *	algua beep module
 | 
			
		||||
 *
 | 
			
		||||
 *	il faut etre honnete, mais ce module m'interpelle, parce
 | 
			
		||||
 *	ce que je ne comprend plus l'intention premiere.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include  <stdio.h>
 | 
			
		||||
#include  <string.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include  <unistd.h>
 | 
			
		||||
 | 
			
		||||
#include  "funcs.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,7 @@
 | 
			
		||||
/* --------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	did you'v got funk with this funcs.h file ?
 | 
			
		||||
 */
 | 
			
		||||
typedef struct {
 | 
			
		||||
	int	x, y, w, h;
 | 
			
		||||
	} Rect;
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,9 @@ static ao_sample_format	format;
 | 
			
		||||
static double		debut;
 | 
			
		||||
 | 
			
		||||
/* --------------------------------------------------------------------- */
 | 
			
		||||
/*
 | 
			
		||||
 *		what is the meaning of the 'K' parameter ?
 | 
			
		||||
 */
 | 
			
		||||
int init_process(int K)
 | 
			
		||||
{
 | 
			
		||||
// int			foo;
 | 
			
		||||
@ -50,7 +53,7 @@ format.rate = 44100;
 | 
			
		||||
format.byte_format = AO_FMT_LITTLE;
 | 
			
		||||
device = ao_open_live(default_driver, &format, NULL);
 | 
			
		||||
if (device == NULL) {
 | 
			
		||||
        fprintf(stderr, "Error opening AO device.\n");
 | 
			
		||||
        fprintf(stderr, "%s: Error opening AO device.\n", __func__);
 | 
			
		||||
        return -1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -69,8 +72,8 @@ typedef struct	{
 | 
			
		||||
 | 
			
		||||
static int cmp_datums(const void *a, const void *b)
 | 
			
		||||
{
 | 
			
		||||
Datum	*pa = (Datum *)a;
 | 
			
		||||
Datum	*pb = (Datum *)b;
 | 
			
		||||
Datum	*pa = (Datum *)a;			/* nice */
 | 
			
		||||
Datum	*pb = (Datum *)b;			/* code */
 | 
			
		||||
return pa->v < pb->v;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -95,7 +98,7 @@ return 30.0* (1.0 / (double)i);		/* please explain */
 | 
			
		||||
static int generate_samples(short *where, int size, Datum *datas)
 | 
			
		||||
{
 | 
			
		||||
int		loop;
 | 
			
		||||
short		value;
 | 
			
		||||
short		svalue;
 | 
			
		||||
double		vol;
 | 
			
		||||
char		chaine[100];
 | 
			
		||||
 | 
			
		||||
@ -108,24 +111,26 @@ for (loop=0; loop<size; loop++) {
 | 
			
		||||
 | 
			
		||||
	/* LEFT */
 | 
			
		||||
	vol = 10000.0 * pow(datas[0].v / 256.0, 2.0);
 | 
			
		||||
	value = (short)(sin((double)loop*i2freq(datas[0].y)) * vol);
 | 
			
		||||
	*where++ = value;
 | 
			
		||||
	svalue = (short)(sin((double)loop*i2freq(datas[0].y)) * vol);
 | 
			
		||||
	*where++ = svalue;
 | 
			
		||||
 | 
			
		||||
	/* RIGHT */
 | 
			
		||||
	vol = 10000.0 * pow(datas[1].v / 256.0, 2.0);
 | 
			
		||||
	value = (short)(sin((double)loop*i2freq(datas[1].y)) * vol);
 | 
			
		||||
	*where++ = value;
 | 
			
		||||
	svalue = (short)(sin((double)loop*i2freq(datas[1].y)) * vol);
 | 
			
		||||
	*where++ = svalue;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
sprintf(chaine, "sample %6.3f    = %7d", vol, value);
 | 
			
		||||
sprintf(chaine, "sample %6.3f    = %7d", vol, svalue);
 | 
			
		||||
mvaddstr(35, 0, chaine);
 | 
			
		||||
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* --------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *			PLEASE EXPLAIN !
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int charcuteur(unsigned char *datas, int w, int h, int K)
 | 
			
		||||
{
 | 
			
		||||
@ -166,7 +171,7 @@ for (bigR=0; bigR<nbR; bigR++) {
 | 
			
		||||
		mvaddstr(SL+1+bigR*DL, SC+bigC*DC, chaine);
 | 
			
		||||
		idx++;
 | 
			
		||||
#if DEBUG_LEVEL
 | 
			
		||||
		fprintf(stderr, "%s %6d %6d %6d\n", __func__, bigR, bigC, idx);
 | 
			
		||||
		fprintf(stderr, "%s: %6d %6d %6d\n", __func__, bigR, bigC, idx);
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@ -176,7 +181,7 @@ qsort(vals, nbR*nbC, sizeof(Datum), cmp_datums);
 | 
			
		||||
for (idx=0; idx<16; idx++) {
 | 
			
		||||
	sprintf(chaine, "%2d %2d  %6.2f", vals[idx].x, vals[idx].y,
 | 
			
		||||
					vals[idx].v);
 | 
			
		||||
	mvaddstr(5+idx, 130, chaine);
 | 
			
		||||
	mvaddstr(5+idx, 130, chaine);	/* XXX why 130 ? */
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/*		*** sound generator ***/
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *		AlguaBeep is a cool project.
 | 
			
		||||
 *				merci clairchanoir.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
double dtime(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user