diff options
author | tv <tv@also> | 2011-07-26 20:36:01 +0200 |
---|---|---|
committer | tv <tv@also> | 2011-07-26 20:36:01 +0200 |
commit | da0e214bf2997217528f2d130e21d21a69c2f97d (patch) | |
tree | 28fbc15d79f0b96135065e462bf4b79532e42654 /Kübelwagen | |
parent | 367eaf05de54be22de75793f0b1a49fa0ad45e24 (diff) |
Kübelwagen: initial import
Diffstat (limited to 'Kübelwagen')
-rw-r--r-- | Kübelwagen/Makefile | 14 | ||||
-rw-r--r-- | Kübelwagen/alarm.sh | 5 | ||||
-rw-r--r-- | Kübelwagen/index.c | 206 | ||||
-rw-r--r-- | Kübelwagen/sin.js | 37 |
4 files changed, 262 insertions, 0 deletions
diff --git a/Kübelwagen/Makefile b/Kübelwagen/Makefile new file mode 100644 index 00000000..e180d047 --- /dev/null +++ b/Kübelwagen/Makefile @@ -0,0 +1,14 @@ + +CC := gcc -std=c99 +CFLAGS := -D_XOPEN_SOURCE=500 +LIBS := $(shell pkg-config --cflags --libs jack) + +.PHONY: all clean + +all: a.out + +clean: + rm -f a.out + +a.out: index.c + $(CC) $(CFLAGS) -o $@ $^ $(LIBS) diff --git a/Kübelwagen/alarm.sh b/Kübelwagen/alarm.sh new file mode 100644 index 00000000..601a18db --- /dev/null +++ b/Kübelwagen/alarm.sh @@ -0,0 +1,5 @@ +#! /bin/sh +echo 'You are made of stupid!' >&2 +exit 23 + +sleep 5h 19m && while :; do echo $(echo "($(od -tu -An -N 2 /dev/urandom)%1000)+500"|bc) $(echo "($(od -tu -An -N 2 /dev/urandom)%500)+100"|bc) ; done | ./a.out 1 diff --git a/Kübelwagen/index.c b/Kübelwagen/index.c new file mode 100644 index 00000000..9a15c7c3 --- /dev/null +++ b/Kübelwagen/index.c @@ -0,0 +1,206 @@ +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <stdio.h> +#include <math.h> + +#include <jack/jack.h> + +const double PI = 3.14; + +/*Our output port*/ +jack_port_t *output_port; + +typedef jack_default_audio_sample_t sample_t; + +/*The current sample rate*/ +jack_nframes_t sr; + +/*samples in cycle*/ +jack_nframes_t samincy; +/*the current offset*/ +long offset=0; + +/*frequency of our sound*/ +int tone = 262; +int length = 1000000; + +char const *name = "<undefined>"; + +int process (jack_nframes_t nframes, void *arg){ + /*grab our output buffer*/ + sample_t *out = (sample_t *) jack_port_get_buffer + (output_port, nframes); + + int _tone = tone > 0 ? tone : 1; + + /*For each required sample*/ + for(jack_nframes_t i=0;i < nframes;i++){ + /*Copy the sample at the current position in the cycle to the buffer*/ + + jack_nframes_t samincy = sr / _tone; + sample_t scale = 2 * PI / samincy; + out[i] = sin(offset * scale); + + /*and increment the offset, wrapping to 0 if needed*/ + /*(Dumb increment fixed thanks to Jussi Sainio)*/ + offset++; + if(offset >= samincy) + offset = 0; + } + + return 0; +} + +int srate (jack_nframes_t nframes, void *arg){ + printf ("the sample rate is now %lu/sec\n", nframes); + sr=nframes; + return 0; +} + +void error (const char *desc){ + fprintf (stderr, "JACK error: %s\n", desc); +} + +void jack_shutdown (void *arg){ + exit (1); +} + +void usage(void) { + fprintf (stderr, "usage: %s [Hz [ms]]\n", name); +} + +int main (int argc, char *argv[]){ + jack_client_t *client; + const char **ports; + + name = argv[0]; + + if (argc < 2) { + usage(); + return 1; + } + if (argc >= 2) { + tone = atoi(argv[1]); + if (tone == 0) { + usage(); + return 1; + } + fprintf(stderr, "tone: %dHz\n", tone); + if (argc >= 3) { + length = atoi(argv[2]) * 1000; + if (length == 0) { + usage(); + return 1; + } + fprintf(stderr, "length: %dms\n", length/1000); + } + } + + /* tell the JACK server to call error() whenever it + experiences an error. Notice that this callback is + global to this process, not specific to each client. + + This is set here so that it can catch errors in the + connection process + */ + jack_set_error_function (error); + + /* try to become a client of the JACK server */ + + if ((client = jack_client_open(argv[0], JackNullOption, NULL)) == 0) { + fprintf (stderr, "jack server not running?\n"); + return 1; + } + + /* tell the JACK server to call `process()' whenever + there is work to be done. + */ + + jack_set_process_callback (client, process, 0); + + /* tell the JACK server to call `srate()' whenever + the sample rate of the system changes. + */ + + + jack_set_sample_rate_callback (client, srate, 0); + + /* tell the JACK server to call `jack_shutdown()' if + it ever shuts down, either entirely, or if it + just decides to stop calling us. + */ + + jack_on_shutdown (client, jack_shutdown, 0); + + /* display the current sample rate. once the client is activated + (see below), you should rely on your own sample rate + callback (see above) for this value. + */ + printf ("engine sample rate: %lu\n", jack_get_sample_rate (client)); + + + sr=jack_get_sample_rate (client); + + /* create two ports */ + + + output_port = jack_port_register (client, "output", + JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); + + /* tell the JACK server that we are ready to roll */ + + if (jack_activate (client)) { + fprintf (stderr, "cannot activate client"); + return 1; + } + + /* connect the ports*/ + if ((ports = jack_get_ports (client, NULL, NULL, + JackPortIsPhysical|JackPortIsInput)) == NULL) { + fprintf(stderr, "Cannot find any physical playback ports\n"); + exit(1); + } + + int i=0; + while(ports[i]!=NULL){ + if (jack_connect (client, jack_port_name (output_port), ports[i])) { + fprintf (stderr, "cannot connect output ports\n"); + } + i++; + } + + free (ports); + + //while (1) { //scanf("%i %i", &tone, &length) == 2) { + char buf[BUFSIZ]; + while (fgets(buf, BUFSIZ, stdin) == buf) { + //if (strstr(buf, "Hz\n")) { + // sscanf(buf, "%i", &tone); + // fprintf(stderr, "%dHz\n", tone); + //} + //if (strstr(buf, "us\n")) { + // sscanf(buf, "%i", &length); + // fprintf(stderr, "%dus\n", length); + //} + + int length = 0; + int c; + int pos = 0, n; + while ((c = sscanf(buf + pos, "%i%i%n", &tone, &length, &n)) == 2) { + + if (length > 0) { + usleep(length * 1000); + } + + pos += n; + + fprintf(stderr, "%dHz %dms\n", tone, length); + } + } + ///* 3 seconds of bleep is plenty*/ + ///usleep(length); + jack_client_close(client); + + exit(0); +} diff --git a/Kübelwagen/sin.js b/Kübelwagen/sin.js new file mode 100644 index 00000000..0f472715 --- /dev/null +++ b/Kübelwagen/sin.js @@ -0,0 +1,37 @@ + + + +var x = 3000; + +var t = 0; +var i = 0; +var j = 0.00001; +var t0 = new Date(); +(function rec () { + + var t1 = new Date(); + console.error('dt = ' + (t1 - t0)); + t0 = t1; + + if (x === 3000) { + x = 1000; + } else { + x = 3000; + }; + + console.log('2000 50 0 50 2000 50 0 50 ' + x + ' 100 0 0'); + return setTimeout(rec, 1000); + + i += 0.01; + console.log((2000 + Math.sin(i) * 1000 | 0) + ' 0'); + return setTimeout(rec, 1); + + var f = Math.abs(1000 + 500 * Math.tan( t )); + var scale = 1; + + console.log(((f * scale)|0) + ' 0'); + + t++; + setTimeout(rec, 100); + //process.nextTick(rec); +})(); |