⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

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>..