summaryrefslogtreecommitdiffstats
path: root/K_belwagen
diff options
context:
space:
mode:
authortv <tv@shackspace.de>2014-12-20 23:50:33 +0100
committertv <tv@shackspace.de>2014-12-20 23:50:33 +0100
commit5c7c7d242fa943ec7a96de4a43efa3fc6b1ef77a (patch)
treeb0207325db6b66a9e346956e3793224022be0900 /K_belwagen
parentb7ea9e035a729186afb57894891d3bdec43aa9ae (diff)
nixify Kübelwagen (without UTF-8 :/)
Diffstat (limited to 'K_belwagen')
-rw-r--r--K_belwagen/Makefile14
-rwxr-xr-xK_belwagen/alarm27
-rw-r--r--K_belwagen/default.nix25
-rw-r--r--K_belwagen/index.c206
-rwxr-xr-xK_belwagen/playmobil12
-rw-r--r--K_belwagen/sin.js37
6 files changed, 321 insertions, 0 deletions
diff --git a/K_belwagen/Makefile b/K_belwagen/Makefile
new file mode 100644
index 00000000..9be84e13
--- /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) -lm
+
+.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 b/K_belwagen/alarm
new file mode 100755
index 00000000..a117c433
--- /dev/null
+++ b/K_belwagen/alarm
@@ -0,0 +1,27 @@
+#! /bin/sh
+#
+# //Kübelwagen/alarm SLEEPARGS...
+#
+# where SLEEPARGS are passed to sleep(3)
+#
+set -euf
+cd $(dirname $(readlink -f $0))
+exec >&2
+
+make
+
+jackd -d alsa &
+trap "kill -0 $! && kill $!" EXIT INT
+
+for i in `seq 8000 1000 10000`; do
+ echo $i 100
+done | ./a.out 1
+echo 'if you heard that sound, then goto sleep..^_^'
+
+echo sleep "$@"
+sleep "$@"
+
+echo 'wake up!'
+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/default.nix b/K_belwagen/default.nix
new file mode 100644
index 00000000..c284ac86
--- /dev/null
+++ b/K_belwagen/default.nix
@@ -0,0 +1,25 @@
+{ pkgs ? import <nixpkgs> {} }:
+
+# TODO check if system has jack2 installed
+
+pkgs.stdenv.mkDerivation {
+ name = "K_belwagen-1";
+
+ src = ./.;
+
+ buildInputs = with pkgs; [
+ coreutils
+ jack2
+ pkgconfig
+ ];
+
+ installPhase = ''
+ mkdir -p $out/bin $out/lib
+ cp alarm $out/bin
+ cp a.out $out/lib
+ sed -i '
+ s:^\(jackd\|trap\|make\|cd\)\>:#&:
+ s:\./a\.out:'$out/lib/a.out':
+ ' $out/bin/alarm
+ '';
+}
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/playmobil b/K_belwagen/playmobil
new file mode 100755
index 00000000..51ed70d6
--- /dev/null
+++ b/K_belwagen/playmobil
@@ -0,0 +1,12 @@
+#! /bin/sh
+file=`mktemp`
+trap "rm -f $file" EXIT INT TERM
+
+gcc -xc -lm -o $file - <<EOF
+#include<math.h>
+main(t) {
+ for (t=${2-0};;++t) putchar($1);
+}
+EOF
+
+$file | aplay
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);
+})();