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/alguabeep
|
||||||
Beep/*.log
|
Beep/*.log
|
||||||
|
Beep/foo.html
|
||||||
|
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
#
|
||||||
|
# _ _ ____ _ _ _ ____ _____ _____ ____
|
||||||
|
# / \ ! ! / ___! ! ! ! / \ ! __ )! ____! ____! _ \
|
||||||
|
# / _ \ ! ! ! ! _! ! ! !/ _ \ ! _ \! _! ! _! ! !_) !
|
||||||
|
# / ___ \! !__! !_! ! !_! / ___ \! !_) ! !___! !___! __/
|
||||||
|
# /_/ \_\_____\____!\___/_/ \_\____/!_____!_____!_!
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
|
@ -1,11 +1,22 @@
|
|||||||
# AlguaBeep
|
# AlguaBeep
|
||||||
|
|
||||||
Une expérimentation hasardeuse pour traduire des images de webcam
|
C'est une expérimentation hasardeuse pour traduire des images de webcam
|
||||||
en sons qui déchirent les oreilles, mais qui sont bio-dégradables.
|
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
|
## Usage
|
||||||
|
|
||||||
```
|
```
|
||||||
|
available options:
|
||||||
-d /dev/? select video device
|
-d /dev/? select video device
|
||||||
-I take pictures
|
-I take pictures
|
||||||
-K set the K parameter
|
-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
|
tapez `ffplay /dev/videoN`, avec `N` de zéro à quatre. Vous
|
||||||
tomberez peut-être sur l'image désirée.
|
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 !
|
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>
|
Copyright (C) 2009 Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
@ -58,14 +64,14 @@ do {
|
|||||||
} while (r == -1 && ((errno == EINTR) || (errno == EAGAIN)));
|
} while (r == -1 && ((errno == EINTR) || (errno == EAGAIN)));
|
||||||
|
|
||||||
if (r == -1) {
|
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);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
void help(int v)
|
void help(int v)
|
||||||
{
|
{
|
||||||
puts("options :");
|
puts("available options:");
|
||||||
puts("\t-d /dev/?\tselect video device");
|
puts("\t-d /dev/?\tselect video device");
|
||||||
puts("\t-I\t\ttake pictures");
|
puts("\t-I\t\ttake pictures");
|
||||||
puts("\t-K\t\tset the K parameter");
|
puts("\t-K\t\tset the K parameter");
|
||||||
@ -200,7 +206,7 @@ initialise_ecran(0);
|
|||||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
xioctl(fd, VIDIOC_STREAMON, &type);
|
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);
|
mvaddstr(1, 0, chaine);
|
||||||
refresh();
|
refresh();
|
||||||
fprintf(stderr, "%s\n", chaine);
|
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);
|
// fmt.fmt.pix.width, fmt.fmt.pix.height, K);
|
||||||
|
|
||||||
if (mk_img) {
|
if (mk_img) {
|
||||||
sprintf(out_name, "i/out%04d.ppm", i);
|
sprintf(out_name, "o/out%04d.ppm", i);
|
||||||
if (verbosity) fprintf(stderr, "--> %s\n", out_name);
|
if (verbosity) fprintf(stderr, "\t--> %s\n", out_name);
|
||||||
|
|
||||||
fout = fopen(out_name, "w");
|
fout = fopen(out_name, "w");
|
||||||
if (!fout) {
|
if (!fout) {
|
||||||
@ -257,6 +263,10 @@ for (i = 0; i < nbre_capt; i++) {
|
|||||||
fclose(fout);
|
fclose(fout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* XXX CRITICAL BUG XXX
|
||||||
|
Doc say 'period can be real', so why not
|
||||||
|
use nanosleep(2) ?
|
||||||
|
*/
|
||||||
if (nbre_capt > 1 && period) {
|
if (nbre_capt > 1 && period) {
|
||||||
sleep(period);
|
sleep(period);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* Ugly hack made for AlguaBeep
|
||||||
|
*
|
||||||
|
* +++++++++++++++++++++++++++++++++++++++++
|
||||||
|
* + DO NOT USE IN REAL LIFE +
|
||||||
|
* +++++++++++++++++++++++++++++++++++++++++
|
||||||
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@ -27,10 +33,10 @@ if (-1 == ioctl (fd, VIDIOC_QUERYCTRL, &queryctrl)) {
|
|||||||
perror ("VIDIOC_QUERYCTRL");
|
perror ("VIDIOC_QUERYCTRL");
|
||||||
exit (EXIT_FAILURE);
|
exit (EXIT_FAILURE);
|
||||||
} else {
|
} 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) {
|
} 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 {
|
} else {
|
||||||
memset (&control, 0, sizeof (control));
|
memset (&control, 0, sizeof (control));
|
||||||
control.id = V4L2_CID_BRIGHTNESS;
|
control.id = V4L2_CID_BRIGHTNESS;
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* AlguaBeep is a cool project.
|
||||||
|
* merci clairchanoir.
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* various V4L2 functions
|
* various V4L2 functions
|
||||||
*/
|
*/
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
/*
|
||||||
|
* un module 'curses' de AlguaBeep
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@ -18,7 +21,7 @@ keypad(stdscr, TRUE); /* acces aux touches 'curseur' */
|
|||||||
|
|
||||||
atexit(finish);
|
atexit(finish);
|
||||||
|
|
||||||
sprintf(chaine, " alguabeep (%s %s) pid=%d \n", __DATE__, __TIME__,
|
sprintf(chaine, " AlguaBeep (%s %s) pid=%d \n", __DATE__, __TIME__,
|
||||||
getpid());
|
getpid());
|
||||||
standout(); mvaddstr(0, 0, chaine); standend();
|
standout(); mvaddstr(0, 0, chaine); standend();
|
||||||
|
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
/*
|
/*
|
||||||
* algua beep module
|
* 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 <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "funcs.h"
|
#include "funcs.h"
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
/*
|
||||||
|
* did you'v got funk with this funcs.h file ?
|
||||||
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
} Rect;
|
} Rect;
|
||||||
|
@ -28,6 +28,9 @@ static ao_sample_format format;
|
|||||||
static double debut;
|
static double debut;
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
/*
|
||||||
|
* what is the meaning of the 'K' parameter ?
|
||||||
|
*/
|
||||||
int init_process(int K)
|
int init_process(int K)
|
||||||
{
|
{
|
||||||
// int foo;
|
// int foo;
|
||||||
@ -50,7 +53,7 @@ format.rate = 44100;
|
|||||||
format.byte_format = AO_FMT_LITTLE;
|
format.byte_format = AO_FMT_LITTLE;
|
||||||
device = ao_open_live(default_driver, &format, NULL);
|
device = ao_open_live(default_driver, &format, NULL);
|
||||||
if (device == NULL) {
|
if (device == NULL) {
|
||||||
fprintf(stderr, "Error opening AO device.\n");
|
fprintf(stderr, "%s: Error opening AO device.\n", __func__);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,8 +72,8 @@ typedef struct {
|
|||||||
|
|
||||||
static int cmp_datums(const void *a, const void *b)
|
static int cmp_datums(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
Datum *pa = (Datum *)a;
|
Datum *pa = (Datum *)a; /* nice */
|
||||||
Datum *pb = (Datum *)b;
|
Datum *pb = (Datum *)b; /* code */
|
||||||
return pa->v < pb->v;
|
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)
|
static int generate_samples(short *where, int size, Datum *datas)
|
||||||
{
|
{
|
||||||
int loop;
|
int loop;
|
||||||
short value;
|
short svalue;
|
||||||
double vol;
|
double vol;
|
||||||
char chaine[100];
|
char chaine[100];
|
||||||
|
|
||||||
@ -108,24 +111,26 @@ for (loop=0; loop<size; loop++) {
|
|||||||
|
|
||||||
/* LEFT */
|
/* LEFT */
|
||||||
vol = 10000.0 * pow(datas[0].v / 256.0, 2.0);
|
vol = 10000.0 * pow(datas[0].v / 256.0, 2.0);
|
||||||
value = (short)(sin((double)loop*i2freq(datas[0].y)) * vol);
|
svalue = (short)(sin((double)loop*i2freq(datas[0].y)) * vol);
|
||||||
*where++ = value;
|
*where++ = svalue;
|
||||||
|
|
||||||
/* RIGHT */
|
/* RIGHT */
|
||||||
vol = 10000.0 * pow(datas[1].v / 256.0, 2.0);
|
vol = 10000.0 * pow(datas[1].v / 256.0, 2.0);
|
||||||
value = (short)(sin((double)loop*i2freq(datas[1].y)) * vol);
|
svalue = (short)(sin((double)loop*i2freq(datas[1].y)) * vol);
|
||||||
*where++ = value;
|
*where++ = svalue;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(chaine, "sample %6.3f = %7d", vol, value);
|
sprintf(chaine, "sample %6.3f = %7d", vol, svalue);
|
||||||
mvaddstr(35, 0, chaine);
|
mvaddstr(35, 0, chaine);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
/*
|
||||||
|
* PLEASE EXPLAIN !
|
||||||
|
*/
|
||||||
|
|
||||||
int charcuteur(unsigned char *datas, int w, int h, int K)
|
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);
|
mvaddstr(SL+1+bigR*DL, SC+bigC*DC, chaine);
|
||||||
idx++;
|
idx++;
|
||||||
#if DEBUG_LEVEL
|
#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
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -176,7 +181,7 @@ qsort(vals, nbR*nbC, sizeof(Datum), cmp_datums);
|
|||||||
for (idx=0; idx<16; idx++) {
|
for (idx=0; idx<16; idx++) {
|
||||||
sprintf(chaine, "%2d %2d %6.2f", vals[idx].x, vals[idx].y,
|
sprintf(chaine, "%2d %2d %6.2f", vals[idx].x, vals[idx].y,
|
||||||
vals[idx].v);
|
vals[idx].v);
|
||||||
mvaddstr(5+idx, 130, chaine);
|
mvaddstr(5+idx, 130, chaine); /* XXX why 130 ? */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* *** sound generator ***/
|
/* *** sound generator ***/
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
/*
|
||||||
|
* AlguaBeep is a cool project.
|
||||||
|
* merci clairchanoir.
|
||||||
|
*/
|
||||||
|
|
||||||
double dtime(void);
|
double dtime(void);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user