Artifact
c8dabf9d1d621a77ae0e19fd627b3349d89f13d9aa6c11e56eae3608aa5626d9:
- File
source/early-attempts.md
— part of check-in
[12a9bb700d]
at
2021-08-11 18:56:04
on branch trunk
— Import from git
Added a changelog
(user:
dev
size: 2288)
0000: 23 20 45 61 72 6c 79 20 41 74 74 65 6d 70 74 73 # Early Attempts
0010: 0a 0a 4d 79 20 66 69 72 73 74 20 61 74 74 65 6d ..My first attem
0020: 70 74 20 61 74 20 74 68 69 73 20 70 72 6f 6a 65 pt at this proje
0030: 63 74 20 77 61 73 20 63 61 6c 6c 65 64 20 62 61 ct was called ba
0040: 6e 67 32 35 36 20 7e 20 32 30 31 36 2c 20 6d 65 ng256 ~ 2016, me
0050: 61 6e 74 20 74 6f 20 6d 65 73 73 20 77 69 74 68 ant to mess with
0060: 20 52 65 6e 6f 69 73 65 27 73 20 4f 53 43 2e 20 Renoise's OSC.
0070: 49 74 73 20 73 74 69 6c 6c 20 75 73 61 62 6c 65 Its still usable
0080: 2e 0a 0a 54 68 65 20 6d 75 73 69 63 20 6c 6f 6f ...The music loo
0090: 70 20 66 6f 72 20 4f 53 43 20 73 65 71 75 65 6e p for OSC sequen
00a0: 63 69 6e 67 2e 20 59 6f 75 20 6e 65 65 64 20 74 cing. You need t
00b0: 6f 20 69 6e 73 74 61 6c 6c 20 6f 73 63 20 61 6e o install osc an
00c0: 64 20 6e 61 6e 6f 74 69 6d 65 72 2e 20 41 6c 74 d nanotimer. Alt
00d0: 65 72 6e 61 74 69 76 65 6c 79 20 79 6f 75 20 63 ernatively you c
00e0: 61 6e 20 75 73 65 20 70 6f 72 74 6d 69 64 69 0a an use portmidi.
00f0: 0a 60 60 60 0a 76 61 72 20 66 73 20 3d 20 72 65 .```.var fs = re
0100: 71 75 69 72 65 28 22 66 73 22 29 3b 0a 76 61 72 quire("fs");.var
0110: 20 6f 73 63 20 3d 20 72 65 71 75 69 72 65 28 22 osc = require("
0120: 6f 73 63 22 29 3b 0a 76 61 72 20 4e 61 6e 6f 54 osc");.var NanoT
0130: 69 6d 65 72 20 3d 20 72 65 71 75 69 72 65 28 27 imer = require('
0140: 6e 61 6e 6f 74 69 6d 65 72 27 29 3b 0a 76 61 72 nanotimer');.var
0150: 20 74 69 6d 65 72 20 3d 20 6e 65 77 20 4e 61 6e timer = new Nan
0160: 6f 54 69 6d 65 72 28 29 3b 0a 0a 66 75 6e 63 74 oTimer();..funct
0170: 69 6f 6e 20 62 61 6e 67 32 35 36 28 68 6f 73 74 ion bang256(host
0180: 2c 20 70 6f 72 74 2c 20 74 65 6d 70 6f 2c 20 6c , port, tempo, l
0190: 69 6e 65 73 5f 70 65 72 5f 62 65 61 74 2c 20 6d ines_per_beat, m
01a0: 65 61 73 75 72 65 2c 20 74 72 61 63 6b 73 2c 20 easure, tracks,
01b0: 74 69 74 6c 65 29 20 7b 0a 0a 20 20 20 20 76 61 title) {.. va
01c0: 72 20 75 64 70 50 6f 72 74 20 3d 20 6e 65 77 20 r udpPort = new
01d0: 6f 73 63 2e 55 44 50 50 6f 72 74 28 7b 0a 20 20 osc.UDPPort({.
01e0: 20 20 20 20 20 20 72 65 6d 6f 74 65 41 64 64 72 remoteAddr
01f0: 65 73 73 3a 20 68 6f 73 74 2c 0a 20 20 20 20 20 ess: host,.
0200: 20 20 20 72 65 6d 6f 74 65 50 6f 72 74 3a 20 70 remotePort: p
0210: 6f 72 74 0a 20 20 20 20 7d 29 3b 0a 0a 20 20 20 ort. });..
0220: 20 75 64 70 50 6f 72 74 2e 6f 70 65 6e 28 29 3b udpPort.open();
0230: 0a 0a 20 20 20 20 76 61 72 20 62 65 61 74 20 3d .. var beat =
0240: 20 36 30 2e 30 20 2f 20 74 65 6d 70 6f 3b 0a 20 60.0 / tempo;.
0250: 20 20 20 76 61 72 20 6c 69 6e 65 73 5f 70 65 72 var lines_per
0260: 5f 6d 65 61 73 75 72 65 20 3d 20 6c 69 6e 65 73 _measure = lines
0270: 5f 70 65 72 5f 62 65 61 74 20 2a 20 6d 65 61 73 _per_beat * meas
0280: 75 72 65 3b 0a 20 20 20 20 76 61 72 20 74 69 63 ure;. var tic
0290: 6b 20 3d 20 62 65 61 74 20 2f 20 6c 69 6e 65 73 k = beat / lines
02a0: 5f 70 65 72 5f 62 65 61 74 3b 0a 20 20 20 20 76 _per_beat;. v
02b0: 61 72 20 62 61 6e 67 73 20 3d 20 30 3b 0a 20 20 ar bangs = 0;.
02c0: 20 20 76 61 72 20 63 6f 75 6e 74 20 3d 20 30 3b var count = 0;
02d0: 0a 0a 20 20 20 20 74 69 6d 65 72 2e 73 65 74 49 .. timer.setI
02e0: 6e 74 65 72 76 61 6c 28 66 75 6e 63 74 69 6f 6e nterval(function
02f0: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61 72 () {. var
0300: 20 62 61 6e 67 20 3d 20 28 62 61 6e 67 73 20 25 bang = (bangs %
0310: 20 6c 69 6e 65 73 5f 70 65 72 5f 6d 65 61 73 75 lines_per_measu
0320: 72 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 re);. if
0330: 28 62 61 6e 67 20 3d 3d 20 30 29 20 7b 0a 20 20 (bang == 0) {.
0340: 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74 2b count+
0350: 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 +;. }.
0360: 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 74 20 for (var t
0370: 3d 20 31 3b 20 74 20 3c 3d 20 74 72 61 63 6b 73 = 1; t <= tracks
0380: 3b 20 74 2b 2b 29 20 7b 0a 20 20 20 20 20 20 20 ; t++) {.
0390: 20 20 20 20 20 76 61 72 20 70 61 74 68 20 3d 20 var path =
03a0: 74 69 74 6c 65 20 2b 20 22 2f 22 20 2b 20 74 3b title + "/" + t;
03b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
03c0: 28 66 73 2e 65 78 69 73 74 73 53 79 6e 63 28 70 (fs.existsSync(p
03d0: 61 74 68 29 29 20 7b 0a 20 20 20 20 20 20 20 20 ath)) {.
03e0: 20 20 20 20 20 20 20 20 76 61 72 20 63 6f 64 65 var code
03f0: 20 3d 20 66 73 2e 72 65 61 64 46 69 6c 65 53 79 = fs.readFileSy
0400: 6e 63 28 70 61 74 68 2c 20 7b 65 6e 63 6f 64 69 nc(path, {encodi
0410: 6e 67 3a 20 27 75 74 66 2d 38 27 7d 29 3b 0a 20 ng: 'utf-8'});.
0420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
0430: 61 72 20 66 20 3d 20 65 76 61 6c 28 63 6f 64 65 ar f = eval(code
0440: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 );.
0450: 20 20 20 66 28 75 64 70 50 6f 72 74 2c 20 62 61 f(udpPort, ba
0460: 6e 67 2c 20 63 6f 75 6e 74 2c 20 62 61 6e 67 73 ng, count, bangs
0470: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d );. }
0480: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 . }..
0490: 20 20 20 20 62 61 6e 67 73 2b 2b 3b 0a 0a 20 20 bangs++;..
04a0: 20 20 7d 2c 20 27 27 2c 20 74 69 63 6b 20 2b 20 }, '', tick +
04b0: 22 73 22 29 3b 0a 0a 7d 0a 0a 76 61 72 20 61 72 "s");..}..var ar
04c0: 67 76 20 3d 20 72 65 71 75 69 72 65 28 27 6d 69 gv = require('mi
04d0: 6e 69 6d 69 73 74 27 29 28 70 72 6f 63 65 73 73 nimist')(process
04e0: 2e 61 72 67 76 2e 73 6c 69 63 65 28 32 29 29 3b .argv.slice(2));
04f0: 0a 76 61 72 20 62 61 6e 67 32 35 36 20 3d 20 72 .var bang256 = r
0500: 65 71 75 69 72 65 28 22 62 61 6e 67 32 35 36 22 equire("bang256"
0510: 29 2e 62 61 6e 67 32 35 36 3b 0a 0a 76 61 72 20 ).bang256;..var
0520: 68 6f 73 74 20 3d 20 61 72 67 76 5b 22 68 6f 73 host = argv["hos
0530: 74 22 5d 20 7c 7c 20 22 31 32 37 2e 30 2e 30 2e t"] || "127.0.0.
0540: 31 22 3b 0a 76 61 72 20 70 6f 72 74 20 3d 20 61 1";.var port = a
0550: 72 67 76 5b 22 70 6f 72 74 22 5d 20 7c 7c 20 38 rgv["port"] || 8
0560: 30 30 30 3b 0a 76 61 72 20 74 65 6d 70 6f 20 3d 000;.var tempo =
0570: 20 61 72 67 76 5b 22 74 65 6d 70 6f 22 5d 3b 0a argv["tempo"];.
0580: 76 61 72 20 6c 69 6e 65 73 5f 70 65 72 5f 62 65 var lines_per_be
0590: 61 74 20 3d 20 61 72 67 76 5b 22 6c 70 62 22 5d at = argv["lpb"]
05a0: 20 7c 7c 20 34 3b 0a 76 61 72 20 6d 65 61 73 75 || 4;.var measu
05b0: 72 65 20 3d 20 61 72 67 76 5b 22 6d 65 61 73 75 re = argv["measu
05c0: 72 65 22 5d 20 7c 7c 20 34 3b 0a 76 61 72 20 74 re"] || 4;.var t
05d0: 72 61 63 6b 73 20 3d 20 61 72 67 76 5b 22 74 72 racks = argv["tr
05e0: 61 63 6b 73 22 5d 20 7c 7c 20 34 3b 0a 76 61 72 acks"] || 4;.var
05f0: 20 74 69 74 6c 65 20 3d 20 61 72 67 76 5b 22 74 title = argv["t
0600: 69 74 6c 65 22 5d 3b 0a 0a 62 61 6e 67 32 35 36 itle"];..bang256
0610: 28 68 6f 73 74 2c 20 70 6f 72 74 2c 20 74 65 6d (host, port, tem
0620: 70 6f 2c 20 6c 69 6e 65 73 5f 70 65 72 5f 62 65 po, lines_per_be
0630: 61 74 2c 20 6d 65 61 73 75 72 65 2c 20 74 72 61 at, measure, tra
0640: 63 6b 73 2c 20 74 69 74 6c 65 29 3b 0a 60 60 60 cks, title);.```
0650: 0a 0a 54 6f 20 72 75 6e 2c 0a 0a 60 60 60 0a 6e ..To run,..```.n
0660: 6f 64 65 20 2e 2f 62 61 6e 67 32 35 36 20 2d 68 ode ./bang256 -h
0670: 6f 73 74 20 22 31 32 37 2e 30 2e 30 2e 31 22 20 ost "127.0.0.1"
0680: 2d 2d 74 65 6d 70 6f 3d 31 32 30 20 2d 2d 6c 70 --tempo=120 --lp
0690: 62 3d 34 20 2d 2d 6d 65 61 73 75 72 65 3d 34 20 b=4 --measure=4
06a0: 2d 2d 74 72 61 63 6b 73 3d 34 20 2d 2d 74 69 74 --tracks=4 --tit
06b0: 6c 65 3d 66 6f 6f 0a 60 60 60 0a 0a 45 64 69 74 le=foo.```..Edit
06c0: 20 66 69 6c 65 73 20 69 6e 20 66 6f 6f 2f 31 20 files in foo/1
06d0: 61 6e 64 20 66 6f 6f 2f 32 20 61 6e 64 20 66 6f and foo/2 and fo
06e0: 6f 2f 33 20 61 6e 64 20 66 6f 6f 2f 34 20 74 6f o/3 and foo/4 to
06f0: 20 63 72 65 61 74 65 20 6c 69 76 65 20 6d 75 73 create live mus
0700: 69 63 20 77 69 74 68 20 61 6e 20 4f 53 43 20 63 ic with an OSC c
0710: 6f 6d 70 61 74 69 62 6c 65 20 73 79 6e 74 68 65 ompatible synthe
0720: 73 69 7a 65 72 2e 0a 0a 49 6e 73 69 64 65 20 74 sizer...Inside t
0730: 68 65 20 66 69 6c 65 20 60 66 6f 6f 2f 31 60 0a he file `foo/1`.
0740: 0a 60 60 60 0a 28 66 75 6e 63 74 69 6f 6e 20 28 .```.(function (
0750: 6f 73 63 2c 20 62 61 6e 67 2c 20 63 6f 75 6e 74 osc, bang, count
0760: 2c 20 62 61 6e 67 73 2c 20 74 68 72 65 61 64 29 , bangs, thread)
0770: 20 7b 0a 0a 20 20 20 20 69 66 20 28 5b 34 2c 20 {.. if ([4,
0780: 31 32 5d 2e 69 6e 64 65 78 4f 66 28 62 61 6e 67 12].indexOf(bang
0790: 29 20 21 3d 20 2d 31 29 20 7b 0a 20 20 20 20 20 ) != -1) {.
07a0: 20 20 20 76 61 72 20 6d 73 67 20 3d 20 7b 0a 20 var msg = {.
07b0: 20 20 20 20 20 20 20 20 20 20 20 61 64 64 72 65 addre
07c0: 73 73 3a 20 22 2f 72 65 6e 6f 69 73 65 2f 74 72 ss: "/renoise/tr
07d0: 69 67 67 65 72 2f 6e 6f 74 65 5f 6f 6e 22 2c 0a igger/note_on",.
07e0: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 args
07f0: 3a 20 5b 20 31 2c 20 31 2c 20 33 38 2c 20 31 32 : [ 1, 1, 38, 12
0800: 37 5d 2c 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 7],. };.
0810: 20 20 20 20 20 20 20 6f 73 63 2e 73 65 6e 64 28 osc.send(
0820: 6d 73 67 29 3b 0a 20 20 20 20 7d 0a 0a 7d 29 0a msg);. }..}).
0830: 60 60 60 0a 0a 3c 68 74 74 70 73 3a 2f 2f 77 77 ```..<https://ww
0840: 77 2e 70 65 72 6c 2e 63 6f 6d 2f 70 75 62 2f 32 w.perl.com/pub/2
0850: 30 30 34 2f 30 38 2f 33 31 2f 6c 69 76 65 63 6f 004/08/31/liveco
0860: 64 65 2e 68 74 6d 6c 2f 3e 20 20 61 6c 73 6f 20 de.html/> also
0870: 75 73 65 73 20 74 68 65 20 74 69 63 6b 73 20 61 uses the ticks a
0880: 70 70 72 6f 61 63 68 20 62 75 74 20 75 73 65 73 pproach but uses
0890: 20 61 20 6d 65 73 73 61 67 65 20 62 75 73 20 66 a message bus f
08a0: 6f 72 20 65 76 65 6e 74 73 2e 20 20 0a 3c 68 74 or events. .<ht
08b0: 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d tps://github.com
08c0: 2f 70 73 65 6e 6f 75 67 68 2f 74 65 61 63 68 5f /psenough/teach_
08d0: 79 6f 75 72 73 65 6c 66 5f 64 65 6d 6f 73 63 65 yourself_demosce
08e0: 6e 65 5f 69 6e 5f 31 34 5f 64 61 79 73 3e 0a 0a ne_in_14_days>..