├── README.md ├── Tidal-MaxMsp ├── code │ └── haddock-util.js ├── externals │ └── OSC-route.mxo │ │ └── Contents │ │ ├── Info.plist │ │ └── MacOS │ │ └── OSC-route ├── media │ ├── hslogo-16.png │ ├── minus.gif │ ├── plus.gif │ ├── synopsis.png │ └── tidal-max.gif ├── other │ ├── LICENSE │ ├── MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH.conf │ ├── MaxMspOsc.cabal │ ├── MaxMspOsc.dyn_hi │ ├── MaxMspOsc.dyn_o │ ├── MaxMspOsc.haddock │ ├── MaxMspOsc.hi │ ├── MaxMspOsc.hs │ ├── MaxMspOsc.o │ ├── MaxMspOsc.p_hi │ ├── MaxMspOsc.p_o │ ├── Paths_MaxMspOsc.hs │ ├── README.md │ ├── Setup.hs │ ├── Sound-Tidal-MaxMspOsc.html │ ├── cabal_macros.h │ ├── doc-index.html │ ├── frames.html │ ├── index-frames.html │ ├── index.html │ ├── libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH-ghc8.0.1.dylib │ ├── libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH.a │ ├── libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH_p.a │ ├── mini_Sound-Tidal-MaxMspOsc.html │ ├── ocean.css │ ├── package.cache │ └── setup-config ├── patchers │ ├── tidal-maxmsp.maxpat │ └── tidal-osc-parse.maxpat └── tidal-maxmsp.maxproj └── tidal ├── MaxMspOsc ├── LICENSE ├── MaxMspOsc.cabal ├── README.md ├── Setup.hs ├── dist │ ├── build │ │ ├── Sound │ │ │ └── Tidal │ │ │ │ ├── MaxMspOsc.dyn_hi │ │ │ │ ├── MaxMspOsc.dyn_o │ │ │ │ ├── MaxMspOsc.hi │ │ │ │ ├── MaxMspOsc.o │ │ │ │ ├── MaxMspOsc.p_hi │ │ │ │ └── MaxMspOsc.p_o │ │ ├── autogen │ │ │ ├── Paths_MaxMspOsc.hs │ │ │ └── cabal_macros.h │ │ ├── libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH-ghc8.0.1.dylib │ │ ├── libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH.a │ │ └── libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH_p.a │ ├── doc │ │ └── html │ │ │ └── MaxMspOsc │ │ │ ├── MaxMspOsc.haddock │ │ │ ├── Sound-Tidal-MaxMspOsc.html │ │ │ ├── doc-index.html │ │ │ ├── frames.html │ │ │ ├── haddock-util.js │ │ │ ├── hslogo-16.png │ │ │ ├── index-frames.html │ │ │ ├── index.html │ │ │ ├── mini_Sound-Tidal-MaxMspOsc.html │ │ │ ├── minus.gif │ │ │ ├── ocean.css │ │ │ ├── plus.gif │ │ │ └── synopsis.png │ ├── package.conf.inplace │ │ ├── MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH.conf │ │ └── package.cache │ └── setup-config └── src │ └── Sound │ └── Tidal │ └── MaxMspOsc.hs └── tidal-maxmsp-example.tidal /README.md: -------------------------------------------------------------------------------- 1 | # tidal-maxmsp 2 | Connecting the Tidal live coding environment to MaxMSP 3 | 4 | This is a very simple example of how to connect the Haskell based live coding environment Tidal Cycles to MaxMsp via an OSC connection. 5 | 6 | It lets you receive and manipulate data from Tidal parameters and either control visuals in Jitter, use MaxMsp as a synthesis engine for Tidal or whatever your heart desires. 7 | 8 | To be able to use it you need to have Tidal Cycles installed as well as cabal (see https://tidalcycles.org/getting_started.html ). 9 | 10 | ## NOTE: Not tested with Tidal 1.0+ 11 | 12 | ![tidal-maxmsp](Tidal-MaxMsp/media/tidal-max.gif) 13 | 14 | ### How to install: 15 | 1. Download this repo and save it somewhere you can reach it. 16 | 2. Open up a terminal and run `cd tidal/MaxMspOsc` in the folder you downloaded from this github and then run `cabal install`. This should install a Haskell module on your computer that you will import later on. You only need to do this once. 17 | 3. Open `tidal-maxmsp.maxproj` in Max Msp. This is where you will receive the data from Tidal. 18 | 4. Open up `tidal-maxmsp-example.tidal` and evaluate the import line, one or more of the lines starting with `max1 <-...` and then the last line. 19 | 5. Go back to max and see if you receive the data for the velocity parameter that is currently running in Tidal. If you do, congratulations you are now able to live code MaxMsp from Tidal. If not, go check the post window in Tidal for clues and errors. 20 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/code/haddock-util.js: -------------------------------------------------------------------------------- 1 | // Haddock JavaScript utilities 2 | 3 | var rspace = /\s\s+/g, 4 | rtrim = /^\s+|\s+$/g; 5 | 6 | function spaced(s) { return (" " + s + " ").replace(rspace, " "); } 7 | function trim(s) { return s.replace(rtrim, ""); } 8 | 9 | function hasClass(elem, value) { 10 | var className = spaced(elem.className || ""); 11 | return className.indexOf( " " + value + " " ) >= 0; 12 | } 13 | 14 | function addClass(elem, value) { 15 | var className = spaced(elem.className || ""); 16 | if ( className.indexOf( " " + value + " " ) < 0 ) { 17 | elem.className = trim(className + " " + value); 18 | } 19 | } 20 | 21 | function removeClass(elem, value) { 22 | var className = spaced(elem.className || ""); 23 | className = className.replace(" " + value + " ", " "); 24 | elem.className = trim(className); 25 | } 26 | 27 | function toggleClass(elem, valueOn, valueOff, bool) { 28 | if (bool == null) { bool = ! hasClass(elem, valueOn); } 29 | if (bool) { 30 | removeClass(elem, valueOff); 31 | addClass(elem, valueOn); 32 | } 33 | else { 34 | removeClass(elem, valueOn); 35 | addClass(elem, valueOff); 36 | } 37 | return bool; 38 | } 39 | 40 | 41 | function makeClassToggle(valueOn, valueOff) 42 | { 43 | return function(elem, bool) { 44 | return toggleClass(elem, valueOn, valueOff, bool); 45 | } 46 | } 47 | 48 | toggleShow = makeClassToggle("show", "hide"); 49 | toggleCollapser = makeClassToggle("collapser", "expander"); 50 | 51 | function toggleSection(id) 52 | { 53 | var b = toggleShow(document.getElementById("section." + id)); 54 | toggleCollapser(document.getElementById("control." + id), b); 55 | rememberCollapsed(id, b); 56 | return b; 57 | } 58 | 59 | var collapsed = {}; 60 | function rememberCollapsed(id, b) 61 | { 62 | if(b) 63 | delete collapsed[id] 64 | else 65 | collapsed[id] = null; 66 | 67 | var sections = []; 68 | for(var i in collapsed) 69 | { 70 | if(collapsed.hasOwnProperty(i)) 71 | sections.push(i); 72 | } 73 | // cookie specific to this page; don't use setCookie which sets path=/ 74 | document.cookie = "collapsed=" + escape(sections.join('+')); 75 | } 76 | 77 | function restoreCollapsed() 78 | { 79 | var cookie = getCookie("collapsed"); 80 | if(!cookie) 81 | return; 82 | 83 | var ids = cookie.split('+'); 84 | for(var i in ids) 85 | { 86 | if(document.getElementById("section." + ids[i])) 87 | toggleSection(ids[i]); 88 | } 89 | } 90 | 91 | function setCookie(name, value) { 92 | document.cookie = name + "=" + escape(value) + ";path=/;"; 93 | } 94 | 95 | function clearCookie(name) { 96 | document.cookie = name + "=;path=/;expires=Thu, 01-Jan-1970 00:00:01 GMT;"; 97 | } 98 | 99 | function getCookie(name) { 100 | var nameEQ = name + "="; 101 | var ca = document.cookie.split(';'); 102 | for(var i=0;i < ca.length;i++) { 103 | var c = ca[i]; 104 | while (c.charAt(0)==' ') c = c.substring(1,c.length); 105 | if (c.indexOf(nameEQ) == 0) { 106 | return unescape(c.substring(nameEQ.length,c.length)); 107 | } 108 | } 109 | return null; 110 | } 111 | 112 | 113 | 114 | var max_results = 75; // 50 is not enough to search for map in the base libraries 115 | var shown_range = null; 116 | var last_search = null; 117 | 118 | function quick_search() 119 | { 120 | perform_search(false); 121 | } 122 | 123 | function full_search() 124 | { 125 | perform_search(true); 126 | } 127 | 128 | 129 | function perform_search(full) 130 | { 131 | var text = document.getElementById("searchbox").value.toLowerCase(); 132 | if (text == last_search && !full) return; 133 | last_search = text; 134 | 135 | var table = document.getElementById("indexlist"); 136 | var status = document.getElementById("searchmsg"); 137 | var children = table.firstChild.childNodes; 138 | 139 | // first figure out the first node with the prefix 140 | var first = bisect(-1); 141 | var last = (first == -1 ? -1 : bisect(1)); 142 | 143 | if (first == -1) 144 | { 145 | table.className = ""; 146 | status.innerHTML = "No results found, displaying all"; 147 | } 148 | else if (first == 0 && last == children.length - 1) 149 | { 150 | table.className = ""; 151 | status.innerHTML = ""; 152 | } 153 | else if (last - first >= max_results && !full) 154 | { 155 | table.className = ""; 156 | status.innerHTML = "More than " + max_results + ", press Search to display"; 157 | } 158 | else 159 | { 160 | // decide what you need to clear/show 161 | if (shown_range) 162 | setclass(shown_range[0], shown_range[1], "indexrow"); 163 | setclass(first, last, "indexshow"); 164 | shown_range = [first, last]; 165 | table.className = "indexsearch"; 166 | status.innerHTML = ""; 167 | } 168 | 169 | 170 | function setclass(first, last, status) 171 | { 172 | for (var i = first; i <= last; i++) 173 | { 174 | children[i].className = status; 175 | } 176 | } 177 | 178 | 179 | // do a binary search, treating 0 as ... 180 | // return either -1 (no 0's found) or location of most far match 181 | function bisect(dir) 182 | { 183 | var first = 0, finish = children.length - 1; 184 | var mid, success = false; 185 | 186 | while (finish - first > 3) 187 | { 188 | mid = Math.floor((finish + first) / 2); 189 | 190 | var i = checkitem(mid); 191 | if (i == 0) i = dir; 192 | if (i == -1) 193 | finish = mid; 194 | else 195 | first = mid; 196 | } 197 | var a = (dir == 1 ? first : finish); 198 | var b = (dir == 1 ? finish : first); 199 | for (var i = b; i != a - dir; i -= dir) 200 | { 201 | if (checkitem(i) == 0) return i; 202 | } 203 | return -1; 204 | } 205 | 206 | 207 | // from an index, decide what the result is 208 | // 0 = match, -1 is lower, 1 is higher 209 | function checkitem(i) 210 | { 211 | var s = getitem(i).toLowerCase().substr(0, text.length); 212 | if (s == text) return 0; 213 | else return (s > text ? -1 : 1); 214 | } 215 | 216 | 217 | // from an index, get its string 218 | // this abstracts over alternates 219 | function getitem(i) 220 | { 221 | for ( ; i >= 0; i--) 222 | { 223 | var s = children[i].firstChild.firstChild.data; 224 | if (s.indexOf(' ') == -1) 225 | return s; 226 | } 227 | return ""; // should never be reached 228 | } 229 | } 230 | 231 | function setSynopsis(filename) { 232 | if (parent.window.synopsis && parent.window.synopsis.location) { 233 | if (parent.window.synopsis.location.replace) { 234 | // In Firefox this avoids adding the change to the history. 235 | parent.window.synopsis.location.replace(filename); 236 | } else { 237 | parent.window.synopsis.location = filename; 238 | } 239 | } 240 | } 241 | 242 | function addMenuItem(html) { 243 | var menu = document.getElementById("page-menu"); 244 | if (menu) { 245 | var btn = menu.firstChild.cloneNode(false); 246 | btn.innerHTML = html; 247 | menu.appendChild(btn); 248 | } 249 | } 250 | 251 | function adjustForFrames() { 252 | var bodyCls; 253 | 254 | if (parent.location.href == window.location.href) { 255 | // not in frames, so add Frames button 256 | addMenuItem("Frames"); 257 | bodyCls = "no-frame"; 258 | } 259 | else { 260 | bodyCls = "in-frame"; 261 | } 262 | addClass(document.body, bodyCls); 263 | } 264 | 265 | function reframe() { 266 | setCookie("haddock-reframe", document.URL); 267 | window.location = "frames.html"; 268 | } 269 | 270 | function postReframe() { 271 | var s = getCookie("haddock-reframe"); 272 | if (s) { 273 | parent.window.main.location = s; 274 | clearCookie("haddock-reframe"); 275 | } 276 | } 277 | 278 | function styles() { 279 | var i, a, es = document.getElementsByTagName("link"), rs = []; 280 | for (i = 0; a = es[i]; i++) { 281 | if(a.rel.indexOf("style") != -1 && a.title) { 282 | rs.push(a); 283 | } 284 | } 285 | return rs; 286 | } 287 | 288 | function addStyleMenu() { 289 | var as = styles(); 290 | var i, a, btns = ""; 291 | for(i=0; a = as[i]; i++) { 292 | btns += "
  • " 294 | + a.title + "
  • " 295 | } 296 | if (as.length > 1) { 297 | var h = "
    " 298 | + "Style ▾" 299 | + "" 300 | + "
    "; 301 | addMenuItem(h); 302 | } 303 | } 304 | 305 | function setActiveStyleSheet(title) { 306 | var as = styles(); 307 | var i, a, found; 308 | for(i=0; a = as[i]; i++) { 309 | a.disabled = true; 310 | // need to do this always, some browsers are edge triggered 311 | if(a.title == title) { 312 | found = a; 313 | } 314 | } 315 | if (found) { 316 | found.disabled = false; 317 | setCookie("haddock-style", title); 318 | } 319 | else { 320 | as[0].disabled = false; 321 | clearCookie("haddock-style"); 322 | } 323 | styleMenu(false); 324 | } 325 | 326 | function resetStyle() { 327 | var s = getCookie("haddock-style"); 328 | if (s) setActiveStyleSheet(s); 329 | } 330 | 331 | 332 | function styleMenu(show) { 333 | var m = document.getElementById('style-menu'); 334 | if (m) toggleShow(m, show); 335 | } 336 | 337 | 338 | function pageLoad() { 339 | addStyleMenu(); 340 | adjustForFrames(); 341 | resetStyle(); 342 | restoreCollapsed(); 343 | } 344 | 345 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/externals/OSC-route.mxo/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 14E46 7 | CFBundleDevelopmentRegion 8 | English 9 | CFBundleExecutable 10 | OSC-route 11 | CFBundleIdentifier 12 | com.cnmat.OSC-route 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundlePackageType 16 | iLaX 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1.0 21 | CSResourcesFileMapped 22 | 23 | DTCompiler 24 | com.apple.compilers.llvm.clang.1_0 25 | DTPlatformBuild 26 | 6E35b 27 | DTPlatformVersion 28 | GM 29 | DTSDKBuild 30 | 14D125 31 | DTSDKName 32 | macosx10.10 33 | DTXcode 34 | 0640 35 | DTXcodeBuild 36 | 6E35b 37 | 38 | 39 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/externals/OSC-route.mxo/Contents/MacOS/OSC-route: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/externals/OSC-route.mxo/Contents/MacOS/OSC-route -------------------------------------------------------------------------------- /Tidal-MaxMsp/media/hslogo-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/media/hslogo-16.png -------------------------------------------------------------------------------- /Tidal-MaxMsp/media/minus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/media/minus.gif -------------------------------------------------------------------------------- /Tidal-MaxMsp/media/plus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/media/plus.gif -------------------------------------------------------------------------------- /Tidal-MaxMsp/media/synopsis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/media/synopsis.png -------------------------------------------------------------------------------- /Tidal-MaxMsp/media/tidal-max.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/media/tidal-max.gif -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Author name here (c) 2018 2 | 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 11 | * Redistributions in binary form must reproduce the above 12 | copyright notice, this list of conditions and the following 13 | disclaimer in the documentation and/or other materials provided 14 | with the distribution. 15 | 16 | * Neither the name of Author name here nor the names of other 17 | contributors may be used to endorse or promote products derived 18 | from this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH.conf: -------------------------------------------------------------------------------- 1 | name: MaxMspOsc 2 | version: 0.1.0.0 3 | id: MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH 4 | key: MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH 5 | license: BSD3 6 | copyright: 2018 Author name here 7 | maintainer: example@example.com 8 | homepage: https://github.com/githubuser/MaxMspOsc#readme 9 | category: Web 10 | author: Author name here 11 | exposed: True 12 | exposed-modules: 13 | Sound.Tidal.MaxMspOsc 14 | abi: 15 | trusted: False 16 | import-dirs: /Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/build 17 | library-dirs: /Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/build 18 | data-dir: /Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc 19 | hs-libraries: HSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH 20 | depends: 21 | base-4.9.0.0 tidal-0.9.6-KGZzHkkaZ4355BtcG1PTOw 22 | haddock-interfaces: /Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOsc/MaxMspOsc.haddock 23 | haddock-html: /Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOsc 24 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/MaxMspOsc.cabal: -------------------------------------------------------------------------------- 1 | name: MaxMspOsc 2 | version: 0.1.0.0 3 | -- synopsis: 4 | -- description: 5 | homepage: https://github.com/githubuser/MaxMspOsc#readme 6 | license: BSD3 7 | license-file: LICENSE 8 | author: Author name here 9 | maintainer: example@example.com 10 | copyright: 2018 Author name here 11 | category: Web 12 | build-type: Simple 13 | extra-source-files: README.md 14 | cabal-version: >=1.10 15 | 16 | library 17 | hs-source-dirs: src 18 | exposed-modules: Sound.Tidal.MaxMspOsc 19 | build-depends: base >= 4.7 && < 5, tidal 20 | default-language: Haskell2010 21 | default-extensions: OverloadedStrings 22 | 23 | source-repository head 24 | type: git 25 | location: https://github.com/githubuser/MaxMspOsc 26 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/MaxMspOsc.dyn_hi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/other/MaxMspOsc.dyn_hi -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/MaxMspOsc.dyn_o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/other/MaxMspOsc.dyn_o -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/MaxMspOsc.haddock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/other/MaxMspOsc.haddock -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/MaxMspOsc.hi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/other/MaxMspOsc.hi -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/MaxMspOsc.hs: -------------------------------------------------------------------------------- 1 | module Sound.Tidal.MaxMspOsc where 2 | 3 | import Sound.Tidal.Context 4 | import Sound.Tidal.Scales 5 | import Sound.Tidal.Chords 6 | import Sound.Tidal.OscStream 7 | -- 8 | -- Send OSC via TIDAL 9 | -- taken from: http://ask.tidalcycles.org/question/367/how-to-define-a-custom-osc-message/ 10 | -- 11 | 12 | maxmspShape = Shape { 13 | -- Define the parameters. The first bit is the type - S for 14 | -- string, F for float, I for integer. The second part is the 15 | -- name of the parameter. The third is the default value for the 16 | -- parameter (only used if 'namedParams' defined below is set to 17 | -- 'False', so set to Nothing here). 18 | params = [ 19 | I "note" Nothing, 20 | F "param1" Nothing, 21 | F "velocity" (Just 1), 22 | F "param2" Nothing, 23 | F "param3" Nothing, 24 | F "param4" Nothing, 25 | F "param5" Nothing, 26 | F "param6" Nothing, 27 | F "param7" Nothing, 28 | F "param8" Nothing, 29 | F "warp" Nothing, 30 | F "fold" Nothing, 31 | F "filterenv" Nothing, 32 | F "pitchenv" Nothing, 33 | F "lfo1" Nothing, 34 | F "lfo2" Nothing, 35 | F "lfo3" Nothing 36 | ], 37 | -- Whether to add the current cycles per second to the message 38 | cpsStamp = True, 39 | -- How far ahead of time to send the message 40 | latency = 0 41 | } 42 | -- 43 | maxmspSlang streamNo = OscSlang { 44 | -- the OSC 'path' 45 | path = "/fromTidal/" ++ (show streamNo), -- Will become something like /fromTidal/1 or /fromTidal/2 etc 46 | -- Whether to timestamp the message with 47 | -- its logical time - can be 'BundleStamp' 48 | -- (put in a timestamped bundle), 49 | -- 'MessageStamp' (put in the message 50 | -- parameters), or 'NoStamp' (don't timestamp) 51 | timestamp = NoStamp, 52 | -- Whether to interleave the parameter 53 | -- names in the message. If this isn't 54 | -- set, all parameters will be sent, using 55 | -- defaults set above if they're not 56 | -- given in a tidal pattern 57 | namedParams = True, 58 | -- Parameters to stick on the beginning of 59 | -- a message 60 | preamble = [] 61 | } 62 | -- a function to start your OSC stream, where "127.0.0.1" is the 63 | -- target host and 7000 the port number 64 | maxmspStream targetip targetport streamNo = do 65 | s <- makeConnection targetip targetport (maxmspSlang streamNo) 66 | stream (Backend s $ (\_ _ _ -> return ())) maxmspShape 67 | -- pattern parameter functions, where makeS is for string, makeF for floats, and so on. 68 | -- Many parameter functions are already defined and don't need re-defining, see here: 69 | -- https://github.com/tidalcycles/Tidal/blob/master/Sound/Tidal/Params.hs 70 | -- 71 | warp = makeF maxmspShape "warp" 72 | fold = makeF maxmspShape "fold" 73 | filterenv = makeF maxmspShape "filterenv" 74 | pitchenv = makeF maxmspShape "pitchenv" 75 | lfo1 = makeF maxmspShape "lfo1" 76 | lfo2 = makeF maxmspShape "lfo2" 77 | lfo3 = makeF maxmspShape "lfo3" 78 | -- 79 | param1 = makeF maxmspShape "param1" 80 | param2 = makeF maxmspShape "param2" 81 | param3 = makeF maxmspShape "param3" 82 | param4 = makeF maxmspShape "param4" 83 | param5 = makeF maxmspShape "param5" 84 | param6 = makeF maxmspShape "param6" 85 | param7 = makeF maxmspShape "param7" 86 | param8 = makeF maxmspShape "param8" 87 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/MaxMspOsc.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/other/MaxMspOsc.o -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/MaxMspOsc.p_hi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/other/MaxMspOsc.p_hi -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/MaxMspOsc.p_o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/other/MaxMspOsc.p_o -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/Paths_MaxMspOsc.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE CPP #-} 2 | {-# OPTIONS_GHC -fno-warn-missing-import-lists #-} 3 | {-# OPTIONS_GHC -fno-warn-implicit-prelude #-} 4 | module Paths_MaxMspOsc ( 5 | version, 6 | getBinDir, getLibDir, getDataDir, getLibexecDir, 7 | getDataFileName, getSysconfDir 8 | ) where 9 | 10 | import qualified Control.Exception as Exception 11 | import Data.Version (Version(..)) 12 | import System.Environment (getEnv) 13 | import Prelude 14 | 15 | #if defined(VERSION_base) 16 | 17 | #if MIN_VERSION_base(4,0,0) 18 | catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a 19 | #else 20 | catchIO :: IO a -> (Exception.Exception -> IO a) -> IO a 21 | #endif 22 | 23 | #else 24 | catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a 25 | #endif 26 | catchIO = Exception.catch 27 | 28 | version :: Version 29 | version = Version [0,1,0,0] [] 30 | bindir, libdir, datadir, libexecdir, sysconfdir :: FilePath 31 | 32 | bindir = "/Users/madskjeldgaard/Library/Haskell/bin" 33 | libdir = "/Users/madskjeldgaard/Library/Haskell/ghc-8.0.1-x86_64/lib/MaxMspOsc-0.1.0.0" 34 | datadir = "/Users/madskjeldgaard/Library/Haskell/share/ghc-8.0.1-x86_64/MaxMspOsc-0.1.0.0" 35 | libexecdir = "/Users/madskjeldgaard/Library/Haskell/libexec" 36 | sysconfdir = "/Users/madskjeldgaard/Library/Haskell/etc" 37 | 38 | getBinDir, getLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath 39 | getBinDir = catchIO (getEnv "MaxMspOsc_bindir") (\_ -> return bindir) 40 | getLibDir = catchIO (getEnv "MaxMspOsc_libdir") (\_ -> return libdir) 41 | getDataDir = catchIO (getEnv "MaxMspOsc_datadir") (\_ -> return datadir) 42 | getLibexecDir = catchIO (getEnv "MaxMspOsc_libexecdir") (\_ -> return libexecdir) 43 | getSysconfDir = catchIO (getEnv "MaxMspOsc_sysconfdir") (\_ -> return sysconfdir) 44 | 45 | getDataFileName :: FilePath -> IO FilePath 46 | getDataFileName name = do 47 | dir <- getDataDir 48 | return (dir ++ "/" ++ name) 49 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/README.md: -------------------------------------------------------------------------------- 1 | # MaxMspOsc 2 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/Sound-Tidal-MaxMspOsc.html: -------------------------------------------------------------------------------- 1 | Sound.Tidal.MaxMspOsc

    MaxMspOsc-0.1.0.0

    Safe HaskellNone
    LanguageHaskell2010

    Sound.Tidal.MaxMspOsc

    Documentation

    maxmspSlang :: Show a => a -> OscSlang #

    maxmspStream :: Show a => String -> Int -> a -> IO (ParamPattern -> IO ()) #

    -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/cabal_macros.h: -------------------------------------------------------------------------------- 1 | /* DO NOT EDIT: This file is automatically generated by Cabal */ 2 | 3 | /* package MaxMspOsc-0.1.0.0 */ 4 | #define VERSION_MaxMspOsc "0.1.0.0" 5 | #define MIN_VERSION_MaxMspOsc(major1,major2,minor) (\ 6 | (major1) < 0 || \ 7 | (major1) == 0 && (major2) < 1 || \ 8 | (major1) == 0 && (major2) == 1 && (minor) <= 0) 9 | 10 | /* package base-4.9.0.0 */ 11 | #define VERSION_base "4.9.0.0" 12 | #define MIN_VERSION_base(major1,major2,minor) (\ 13 | (major1) < 4 || \ 14 | (major1) == 4 && (major2) < 9 || \ 15 | (major1) == 4 && (major2) == 9 && (minor) <= 0) 16 | 17 | /* package tidal-0.9.6 */ 18 | #define VERSION_tidal "0.9.6" 19 | #define MIN_VERSION_tidal(major1,major2,minor) (\ 20 | (major1) < 0 || \ 21 | (major1) == 0 && (major2) < 9 || \ 22 | (major1) == 0 && (major2) == 9 && (minor) <= 6) 23 | 24 | /* tool cpphs-1.20.2 */ 25 | #define TOOL_VERSION_cpphs "1.20.2" 26 | #define MIN_TOOL_VERSION_cpphs(major1,major2,minor) (\ 27 | (major1) < 1 || \ 28 | (major1) == 1 && (major2) < 20 || \ 29 | (major1) == 1 && (major2) == 20 && (minor) <= 2) 30 | 31 | /* tool gcc-4.2.1 */ 32 | #define TOOL_VERSION_gcc "4.2.1" 33 | #define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\ 34 | (major1) < 4 || \ 35 | (major1) == 4 && (major2) < 2 || \ 36 | (major1) == 4 && (major2) == 2 && (minor) <= 1) 37 | 38 | /* tool ghc-8.0.1 */ 39 | #define TOOL_VERSION_ghc "8.0.1" 40 | #define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\ 41 | (major1) < 8 || \ 42 | (major1) == 8 && (major2) < 0 || \ 43 | (major1) == 8 && (major2) == 0 && (minor) <= 1) 44 | 45 | /* tool ghc-pkg-8.0.1 */ 46 | #define TOOL_VERSION_ghc_pkg "8.0.1" 47 | #define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\ 48 | (major1) < 8 || \ 49 | (major1) == 8 && (major2) < 0 || \ 50 | (major1) == 8 && (major2) == 0 && (minor) <= 1) 51 | 52 | /* tool haddock-2.17.2 */ 53 | #define TOOL_VERSION_haddock "2.17.2" 54 | #define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\ 55 | (major1) < 2 || \ 56 | (major1) == 2 && (major2) < 17 || \ 57 | (major1) == 2 && (major2) == 17 && (minor) <= 2) 58 | 59 | /* tool happy-1.19.5 */ 60 | #define TOOL_VERSION_happy "1.19.5" 61 | #define MIN_TOOL_VERSION_happy(major1,major2,minor) (\ 62 | (major1) < 1 || \ 63 | (major1) == 1 && (major2) < 19 || \ 64 | (major1) == 1 && (major2) == 19 && (minor) <= 5) 65 | 66 | /* tool hpc-0.67 */ 67 | #define TOOL_VERSION_hpc "0.67" 68 | #define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\ 69 | (major1) < 0 || \ 70 | (major1) == 0 && (major2) < 67 || \ 71 | (major1) == 0 && (major2) == 67 && (minor) <= 0) 72 | 73 | /* tool hsc2hs-0.68 */ 74 | #define TOOL_VERSION_hsc2hs "0.68" 75 | #define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\ 76 | (major1) < 0 || \ 77 | (major1) == 0 && (major2) < 68 || \ 78 | (major1) == 0 && (major2) == 68 && (minor) <= 0) 79 | 80 | /* tool hscolour-1.24 */ 81 | #define TOOL_VERSION_hscolour "1.24" 82 | #define MIN_TOOL_VERSION_hscolour(major1,major2,minor) (\ 83 | (major1) < 1 || \ 84 | (major1) == 1 && (major2) < 24 || \ 85 | (major1) == 1 && (major2) == 24 && (minor) <= 0) 86 | 87 | /* tool pkg-config-0.29.2 */ 88 | #define TOOL_VERSION_pkg_config "0.29.2" 89 | #define MIN_TOOL_VERSION_pkg_config(major1,major2,minor) (\ 90 | (major1) < 0 || \ 91 | (major1) == 0 && (major2) < 29 || \ 92 | (major1) == 0 && (major2) == 29 && (minor) <= 2) 93 | 94 | #define CURRENT_COMPONENT_ID "MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH" 95 | 96 | #define CURRENT_PACKAGE_KEY "MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH" 97 | 98 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/doc-index.html: -------------------------------------------------------------------------------- 1 | MaxMspOsc-0.1.0.0 (Index)

    MaxMspOsc-0.1.0.0

    Index

    filterenvSound.Tidal.MaxMspOsc
    foldSound.Tidal.MaxMspOsc
    lfo1Sound.Tidal.MaxMspOsc
    lfo2Sound.Tidal.MaxMspOsc
    lfo3Sound.Tidal.MaxMspOsc
    maxmspShapeSound.Tidal.MaxMspOsc
    maxmspSlangSound.Tidal.MaxMspOsc
    maxmspStreamSound.Tidal.MaxMspOsc
    param1Sound.Tidal.MaxMspOsc
    param2Sound.Tidal.MaxMspOsc
    param3Sound.Tidal.MaxMspOsc
    param4Sound.Tidal.MaxMspOsc
    param5Sound.Tidal.MaxMspOsc
    param6Sound.Tidal.MaxMspOsc
    param7Sound.Tidal.MaxMspOsc
    param8Sound.Tidal.MaxMspOsc
    pitchenvSound.Tidal.MaxMspOsc
    warpSound.Tidal.MaxMspOsc
    -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/frames.html: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/index-frames.html: -------------------------------------------------------------------------------- 1 | MaxMspOsc-0.1.0.0

    Modules

    -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/index.html: -------------------------------------------------------------------------------- 1 | MaxMspOsc-0.1.0.0

    MaxMspOsc-0.1.0.0

    MaxMspOsc-0.1.0.0

     

    Modules

    -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH-ghc8.0.1.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/other/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH-ghc8.0.1.dylib -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/other/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH.a -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH_p.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/other/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH_p.a -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/mini_Sound-Tidal-MaxMspOsc.html: -------------------------------------------------------------------------------- 1 | Sound.Tidal.MaxMspOsc

    Sound.Tidal.MaxMspOsc

    maxmspShape

    maxmspSlang

    maxmspStream

    warp

    fold

    filterenv

    pitchenv

    lfo1

    lfo2

    lfo3

    param1

    param2

    param3

    param4

    param5

    param6

    param7

    param8

    -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/ocean.css: -------------------------------------------------------------------------------- 1 | /* @group Fundamentals */ 2 | 3 | * { margin: 0; padding: 0 } 4 | 5 | /* Is this portable? */ 6 | html { 7 | background-color: white; 8 | width: 100%; 9 | height: 100%; 10 | } 11 | 12 | body { 13 | background: white; 14 | color: black; 15 | text-align: left; 16 | min-height: 100%; 17 | position: relative; 18 | } 19 | 20 | p { 21 | margin: 0.8em 0; 22 | } 23 | 24 | ul, ol { 25 | margin: 0.8em 0 0.8em 2em; 26 | } 27 | 28 | dl { 29 | margin: 0.8em 0; 30 | } 31 | 32 | dt { 33 | font-weight: bold; 34 | } 35 | dd { 36 | margin-left: 2em; 37 | } 38 | 39 | a { text-decoration: none; } 40 | a[href]:link { color: rgb(196,69,29); } 41 | a[href]:visited { color: rgb(171,105,84); } 42 | a[href]:hover { text-decoration:underline; } 43 | 44 | a[href].def:link, a[href].def:visited { color: black; } 45 | a[href].def:hover { color: rgb(78, 98, 114); } 46 | 47 | /* @end */ 48 | 49 | /* @group Fonts & Sizes */ 50 | 51 | /* Basic technique & IE workarounds from YUI 3 52 | For reasons, see: 53 | http://yui.yahooapis.com/3.1.1/build/cssfonts/fonts.css 54 | */ 55 | 56 | body { 57 | font:13px/1.4 sans-serif; 58 | *font-size:small; /* for IE */ 59 | *font:x-small; /* for IE in quirks mode */ 60 | } 61 | 62 | h1 { font-size: 146.5%; /* 19pt */ } 63 | h2 { font-size: 131%; /* 17pt */ } 64 | h3 { font-size: 116%; /* 15pt */ } 65 | h4 { font-size: 100%; /* 13pt */ } 66 | h5 { font-size: 100%; /* 13pt */ } 67 | 68 | select, input, button, textarea { 69 | font:99% sans-serif; 70 | } 71 | 72 | table { 73 | font-size:inherit; 74 | font:100%; 75 | } 76 | 77 | pre, code, kbd, samp, tt, .src { 78 | font-family:monospace; 79 | *font-size:108%; 80 | line-height: 124%; 81 | } 82 | 83 | .links, .link { 84 | font-size: 85%; /* 11pt */ 85 | } 86 | 87 | #module-header .caption { 88 | font-size: 182%; /* 24pt */ 89 | } 90 | 91 | .info { 92 | font-size: 85%; /* 11pt */ 93 | } 94 | 95 | #table-of-contents, #synopsis { 96 | /* font-size: 85%; /* 11pt */ 97 | } 98 | 99 | 100 | /* @end */ 101 | 102 | /* @group Common */ 103 | 104 | .caption, h1, h2, h3, h4, h5, h6 { 105 | font-weight: bold; 106 | color: rgb(78,98,114); 107 | margin: 0.8em 0 0.4em; 108 | } 109 | 110 | * + h1, * + h2, * + h3, * + h4, * + h5, * + h6 { 111 | margin-top: 2em; 112 | } 113 | 114 | h1 + h2, h2 + h3, h3 + h4, h4 + h5, h5 + h6 { 115 | margin-top: inherit; 116 | } 117 | 118 | ul.links { 119 | list-style: none; 120 | text-align: left; 121 | float: right; 122 | display: inline-table; 123 | margin: 0 0 0 1em; 124 | } 125 | 126 | ul.links li { 127 | display: inline; 128 | border-left: 1px solid #d5d5d5; 129 | white-space: nowrap; 130 | padding: 0; 131 | } 132 | 133 | ul.links li a { 134 | padding: 0.2em 0.5em; 135 | } 136 | 137 | .hide { display: none; } 138 | .show { display: inherit; } 139 | .clear { clear: both; } 140 | 141 | .collapser { 142 | background-image: url(minus.gif); 143 | background-repeat: no-repeat; 144 | } 145 | .expander { 146 | background-image: url(plus.gif); 147 | background-repeat: no-repeat; 148 | } 149 | .collapser, .expander { 150 | padding-left: 14px; 151 | margin-left: -14px; 152 | cursor: pointer; 153 | } 154 | p.caption.collapser, 155 | p.caption.expander { 156 | background-position: 0 0.4em; 157 | } 158 | 159 | .instance.collapser, .instance.expander { 160 | margin-left: 0px; 161 | background-position: left center; 162 | min-width: 9px; 163 | min-height: 9px; 164 | } 165 | 166 | 167 | pre { 168 | padding: 0.25em; 169 | margin: 0.8em 0; 170 | background: rgb(229,237,244); 171 | overflow: auto; 172 | border-bottom: 0.25em solid white; 173 | /* white border adds some space below the box to compensate 174 | for visual extra space that paragraphs have between baseline 175 | and the bounding box */ 176 | } 177 | 178 | .src { 179 | background: #f0f0f0; 180 | padding: 0.2em 0.5em; 181 | } 182 | 183 | .keyword { font-weight: normal; } 184 | .def { font-weight: bold; } 185 | 186 | @media print { 187 | #footer { display: none; } 188 | } 189 | 190 | /* @end */ 191 | 192 | /* @group Page Structure */ 193 | 194 | #content { 195 | margin: 0 auto; 196 | padding: 0 2em 6em; 197 | } 198 | 199 | #package-header { 200 | background: rgb(41,56,69); 201 | border-top: 5px solid rgb(78,98,114); 202 | color: #ddd; 203 | padding: 0.2em; 204 | position: relative; 205 | text-align: left; 206 | } 207 | 208 | #package-header .caption { 209 | background: url(hslogo-16.png) no-repeat 0em; 210 | color: white; 211 | margin: 0 2em; 212 | font-weight: normal; 213 | font-style: normal; 214 | padding-left: 2em; 215 | } 216 | 217 | #package-header a:link, #package-header a:visited { color: white; } 218 | #package-header a:hover { background: rgb(78,98,114); } 219 | 220 | #module-header .caption { 221 | color: rgb(78,98,114); 222 | font-weight: bold; 223 | border-bottom: 1px solid #ddd; 224 | } 225 | 226 | table.info { 227 | float: right; 228 | padding: 0.5em 1em; 229 | border: 1px solid #ddd; 230 | color: rgb(78,98,114); 231 | background-color: #fff; 232 | max-width: 40%; 233 | border-spacing: 0; 234 | position: relative; 235 | top: -0.5em; 236 | margin: 0 0 0 2em; 237 | } 238 | 239 | .info th { 240 | padding: 0 1em 0 0; 241 | } 242 | 243 | div#style-menu-holder { 244 | position: relative; 245 | z-index: 2; 246 | display: inline; 247 | } 248 | 249 | #style-menu { 250 | position: absolute; 251 | z-index: 1; 252 | overflow: visible; 253 | background: #374c5e; 254 | margin: 0; 255 | text-align: center; 256 | right: 0; 257 | padding: 0; 258 | top: 1.25em; 259 | } 260 | 261 | #style-menu li { 262 | display: list-item; 263 | border-style: none; 264 | margin: 0; 265 | padding: 0; 266 | color: #000; 267 | list-style-type: none; 268 | } 269 | 270 | #style-menu li + li { 271 | border-top: 1px solid #919191; 272 | } 273 | 274 | #style-menu a { 275 | width: 6em; 276 | padding: 3px; 277 | display: block; 278 | } 279 | 280 | #footer { 281 | background: #ddd; 282 | border-top: 1px solid #aaa; 283 | padding: 0.5em 0; 284 | color: #666; 285 | text-align: center; 286 | position: absolute; 287 | bottom: 0; 288 | width: 100%; 289 | height: 3em; 290 | } 291 | 292 | /* @end */ 293 | 294 | /* @group Front Matter */ 295 | 296 | #table-of-contents { 297 | float: right; 298 | clear: right; 299 | background: #faf9dc; 300 | border: 1px solid #d8d7ad; 301 | padding: 0.5em 1em; 302 | max-width: 20em; 303 | margin: 0.5em 0 1em 1em; 304 | } 305 | 306 | #table-of-contents .caption { 307 | text-align: center; 308 | margin: 0; 309 | } 310 | 311 | #table-of-contents ul { 312 | list-style: none; 313 | margin: 0; 314 | } 315 | 316 | #table-of-contents ul ul { 317 | margin-left: 2em; 318 | } 319 | 320 | #description .caption { 321 | display: none; 322 | } 323 | 324 | #synopsis { 325 | display: none; 326 | } 327 | 328 | .no-frame #synopsis { 329 | display: block; 330 | position: fixed; 331 | right: 0; 332 | height: 80%; 333 | top: 10%; 334 | padding: 0; 335 | max-width: 75%; 336 | } 337 | 338 | #synopsis .caption { 339 | float: left; 340 | width: 29px; 341 | color: rgba(255,255,255,0); 342 | height: 110px; 343 | margin: 0; 344 | font-size: 1px; 345 | padding: 0; 346 | } 347 | 348 | #synopsis p.caption.collapser { 349 | background: url(synopsis.png) no-repeat -64px -8px; 350 | } 351 | 352 | #synopsis p.caption.expander { 353 | background: url(synopsis.png) no-repeat 0px -8px; 354 | } 355 | 356 | #synopsis ul { 357 | height: 100%; 358 | overflow: auto; 359 | padding: 0.5em; 360 | margin: 0; 361 | } 362 | 363 | #synopsis ul ul { 364 | overflow: hidden; 365 | } 366 | 367 | #synopsis ul, 368 | #synopsis ul li.src { 369 | background-color: #faf9dc; 370 | white-space: nowrap; 371 | list-style: none; 372 | margin-left: 0; 373 | } 374 | 375 | /* @end */ 376 | 377 | /* @group Main Content */ 378 | 379 | #interface div.top { margin: 2em 0; } 380 | #interface h1 + div.top, 381 | #interface h2 + div.top, 382 | #interface h3 + div.top, 383 | #interface h4 + div.top, 384 | #interface h5 + div.top { 385 | margin-top: 1em; 386 | } 387 | #interface .src .selflink, 388 | #interface .src .link { 389 | float: right; 390 | color: #919191; 391 | background: #f0f0f0; 392 | padding: 0 0.5em 0.2em; 393 | margin: 0 -0.5em 0 0; 394 | } 395 | #interface .src .selflink { 396 | border-left: 1px solid #919191; 397 | margin: 0 -0.5em 0 0.5em; 398 | } 399 | 400 | #interface span.fixity { 401 | color: #919191; 402 | border-left: 1px solid #919191; 403 | padding: 0.2em 0.5em 0.2em 0.5em; 404 | margin: 0 -1em 0 1em; 405 | } 406 | 407 | #interface span.rightedge { 408 | border-left: 1px solid #919191; 409 | padding: 0.2em 0 0.2em 0; 410 | margin: 0 0 0 1em; 411 | } 412 | 413 | #interface table { border-spacing: 2px; } 414 | #interface td { 415 | vertical-align: top; 416 | padding-left: 0.5em; 417 | } 418 | #interface td.src { 419 | white-space: nowrap; 420 | } 421 | #interface td.doc p { 422 | margin: 0; 423 | } 424 | #interface td.doc p + p { 425 | margin-top: 0.8em; 426 | } 427 | 428 | .clearfix:after { 429 | clear: both; 430 | content: " "; 431 | display: block; 432 | height: 0; 433 | visibility: hidden; 434 | } 435 | 436 | .subs ul { 437 | list-style: none; 438 | display: table; 439 | margin: 0; 440 | } 441 | 442 | .subs ul li { 443 | display: table-row; 444 | } 445 | 446 | .subs ul li dfn { 447 | display: table-cell; 448 | font-style: normal; 449 | font-weight: bold; 450 | margin: 1px 0; 451 | white-space: nowrap; 452 | } 453 | 454 | .subs ul li > .doc { 455 | display: table-cell; 456 | padding-left: 0.5em; 457 | margin-bottom: 0.5em; 458 | } 459 | 460 | .subs ul li > .doc p { 461 | margin: 0; 462 | } 463 | 464 | /* Render short-style data instances */ 465 | .inst ul { 466 | height: 100%; 467 | padding: 0.5em; 468 | margin: 0; 469 | } 470 | 471 | .inst, .inst li { 472 | list-style: none; 473 | margin-left: 1em; 474 | } 475 | 476 | /* Workaround for bug in Firefox (issue #384) */ 477 | .inst-left { 478 | float: left; 479 | } 480 | 481 | .top p.src { 482 | border-top: 1px solid #ccc; 483 | } 484 | 485 | .subs, .doc { 486 | /* use this selector for one level of indent */ 487 | padding-left: 2em; 488 | } 489 | 490 | .warning { 491 | color: red; 492 | } 493 | 494 | .arguments { 495 | margin-top: -0.4em; 496 | } 497 | .arguments .caption { 498 | display: none; 499 | } 500 | 501 | .fields { padding-left: 1em; } 502 | 503 | .fields .caption { display: none; } 504 | 505 | .fields p { margin: 0 0; } 506 | 507 | /* this seems bulky to me 508 | .methods, .constructors { 509 | background: #f8f8f8; 510 | border: 1px solid #eee; 511 | } 512 | */ 513 | 514 | /* @end */ 515 | 516 | /* @group Auxillary Pages */ 517 | 518 | 519 | .extension-list { 520 | list-style-type: none; 521 | margin-left: 0; 522 | } 523 | 524 | #mini { 525 | margin: 0 auto; 526 | padding: 0 1em 1em; 527 | } 528 | 529 | #mini > * { 530 | font-size: 93%; /* 12pt */ 531 | } 532 | 533 | #mini #module-list .caption, 534 | #mini #module-header .caption { 535 | font-size: 125%; /* 15pt */ 536 | } 537 | 538 | #mini #interface h1, 539 | #mini #interface h2, 540 | #mini #interface h3, 541 | #mini #interface h4 { 542 | font-size: 109%; /* 13pt */ 543 | margin: 1em 0 0; 544 | } 545 | 546 | #mini #interface .top, 547 | #mini #interface .src { 548 | margin: 0; 549 | } 550 | 551 | #mini #module-list ul { 552 | list-style: none; 553 | margin: 0; 554 | } 555 | 556 | #alphabet ul { 557 | list-style: none; 558 | padding: 0; 559 | margin: 0.5em 0 0; 560 | text-align: center; 561 | } 562 | 563 | #alphabet li { 564 | display: inline; 565 | margin: 0 0.25em; 566 | } 567 | 568 | #alphabet a { 569 | font-weight: bold; 570 | } 571 | 572 | #index .caption, 573 | #module-list .caption { font-size: 131%; /* 17pt */ } 574 | 575 | #index table { 576 | margin-left: 2em; 577 | } 578 | 579 | #index .src { 580 | font-weight: bold; 581 | } 582 | #index .alt { 583 | font-size: 77%; /* 10pt */ 584 | font-style: italic; 585 | padding-left: 2em; 586 | } 587 | 588 | #index td + td { 589 | padding-left: 1em; 590 | } 591 | 592 | #module-list ul { 593 | list-style: none; 594 | margin: 0 0 0 2em; 595 | } 596 | 597 | #module-list li { 598 | clear: right; 599 | } 600 | 601 | #module-list span.collapser, 602 | #module-list span.expander { 603 | background-position: 0 0.3em; 604 | } 605 | 606 | #module-list .package { 607 | float: right; 608 | } 609 | 610 | /* @end */ 611 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/package.cache: -------------------------------------------------------------------------------- 1 | ghcpkgMaxMspOsc-0.1.0.0 MaxMspOsc(MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH base-4.9.0.0"tidal-0.9.6-KGZzHkkaZ4355BtcG1PTOwI/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/build*HSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkHI/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/buildh/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOsc/MaxMspOsc.haddockV/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOscSound.Tidal.MaxMspOsc MaxMspOsc(MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH(MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH2018 Author name hereexample@example.comAuthor name here.https://github.com/githubuser/MaxMspOsc#readmeWebSoundTidal MaxMspOscI/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/buildI/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/build>/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc*HSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH base-4.9.0.0"tidal-0.9.6-KGZzHkkaZ4355BtcG1PTOwh/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOsc/MaxMspOsc.haddockV/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOsc -------------------------------------------------------------------------------- /Tidal-MaxMsp/other/setup-config: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/Tidal-MaxMsp/other/setup-config -------------------------------------------------------------------------------- /Tidal-MaxMsp/patchers/tidal-maxmsp.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 7, 6 | "minor" : 3, 7 | "revision" : 4, 8 | "architecture" : "x86", 9 | "modernui" : 1 10 | } 11 | , 12 | "rect" : [ 102.0, 78.0, 1150.0, 738.0 ], 13 | "bglocked" : 0, 14 | "openinpresentation" : 0, 15 | "default_fontsize" : 12.0, 16 | "default_fontface" : 0, 17 | "default_fontname" : "Arial", 18 | "gridonopen" : 1, 19 | "gridsize" : [ 15.0, 15.0 ], 20 | "gridsnaponopen" : 1, 21 | "objectsnaponopen" : 1, 22 | "statusbarvisible" : 2, 23 | "toolbarvisible" : 1, 24 | "lefttoolbarpinned" : 0, 25 | "toptoolbarpinned" : 0, 26 | "righttoolbarpinned" : 0, 27 | "bottomtoolbarpinned" : 0, 28 | "toolbars_unpinned_last_save" : 0, 29 | "tallnewobj" : 0, 30 | "boxanimatetime" : 200, 31 | "enablehscroll" : 1, 32 | "enablevscroll" : 1, 33 | "devicewidth" : 0.0, 34 | "description" : "", 35 | "digest" : "", 36 | "tags" : "", 37 | "style" : "", 38 | "subpatcher_template" : "", 39 | "boxes" : [ { 40 | "box" : { 41 | "id" : "obj-11", 42 | "maxclass" : "message", 43 | "numinlets" : 2, 44 | "numoutlets" : 1, 45 | "outlettype" : [ "" ], 46 | "patching_rect" : [ 868.335144, 512.0, 29.5, 22.0 ], 47 | "style" : "", 48 | "text" : "dur" 49 | } 50 | 51 | } 52 | , { 53 | "box" : { 54 | "fontface" : 2, 55 | "fontsize" : 18.0, 56 | "id" : "obj-19", 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 268.920319, 189.0, 221.0, 27.0 ], 61 | "style" : "", 62 | "text" : "Tidal-MaxMsp example" 63 | } 64 | 65 | } 66 | , { 67 | "box" : { 68 | "id" : "obj-6", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "" ], 73 | "patching_rect" : [ 758.085205, 437.0, 72.0, 22.0 ], 74 | "style" : "", 75 | "text" : "loadmess 0" 76 | } 77 | 78 | } 79 | , { 80 | "box" : { 81 | "id" : "obj-5", 82 | "maxclass" : "newobj", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 525.502747, 437.0, 72.0, 22.0 ], 87 | "style" : "", 88 | "text" : "loadmess 1" 89 | } 90 | 91 | } 92 | , { 93 | "box" : { 94 | "fontface" : 0, 95 | "fontname" : "Arial", 96 | "fontsize" : 12.0, 97 | "id" : "obj-3", 98 | "linecount" : 2, 99 | "maxclass" : "comment", 100 | "numinlets" : 1, 101 | "numoutlets" : 0, 102 | "patching_rect" : [ 268.920319, 232.0, 628.914795, 33.0 ], 103 | "style" : "", 104 | "text" : "This is a simple example of receiving OSC data from Tidal. Info about installation and setup can be found here: https://github.com/datamads/tidal-maxmsp" 105 | } 106 | 107 | } 108 | , { 109 | "box" : { 110 | "id" : "obj-16", 111 | "maxclass" : "comment", 112 | "numinlets" : 1, 113 | "numoutlets" : 0, 114 | "patching_rect" : [ 329.0, 577.0, 97.0, 20.0 ], 115 | "presentation_rect" : [ 164.0, 449.0, 97.0, 20.0 ], 116 | "style" : "", 117 | "text" : "parameter value" 118 | } 119 | 120 | } 121 | , { 122 | "box" : { 123 | "id" : "obj-14", 124 | "maxclass" : "comment", 125 | "numinlets" : 1, 126 | "numoutlets" : 0, 127 | "patching_rect" : [ 815.835144, 577.0, 82.0, 20.0 ], 128 | "presentation_rect" : [ 650.835144, 449.0, 82.0, 20.0 ], 129 | "style" : "", 130 | "text" : "raw message" 131 | } 132 | 133 | } 134 | , { 135 | "box" : { 136 | "id" : "obj-12", 137 | "maxclass" : "message", 138 | "numinlets" : 2, 139 | "numoutlets" : 1, 140 | "outlettype" : [ "" ], 141 | "patching_rect" : [ 454.920319, 577.0, 348.0, 22.0 ], 142 | "presentation_rect" : [ 289.920319, 449.0, 348.0, 22.0 ], 143 | "style" : "", 144 | "text" : "cps 1. delta 0.05 cycle 1597.95 n 0 param1 0.093548" 145 | } 146 | 147 | } 148 | , { 149 | "box" : { 150 | "format" : 6, 151 | "id" : "obj-9", 152 | "maxclass" : "flonum", 153 | "numinlets" : 1, 154 | "numoutlets" : 2, 155 | "outlettype" : [ "", "bang" ], 156 | "parameter_enable" : 0, 157 | "patching_rect" : [ 269.0, 577.0, 50.0, 22.0 ], 158 | "presentation_rect" : [ 104.0, 449.0, 50.0, 22.0 ], 159 | "style" : "" 160 | } 161 | 162 | } 163 | , { 164 | "box" : { 165 | "id" : "obj-7", 166 | "linecount" : 8, 167 | "maxclass" : "comment", 168 | "numinlets" : 1, 169 | "numoutlets" : 0, 170 | "patching_rect" : [ 840.0, 396.0, 138.0, 114.0 ], 171 | "presentation_linecount" : 8, 172 | "presentation_rect" : [ 674.0, 335.0, 150.0, 20.0 ], 173 | "style" : "", 174 | "text" : "Choose a parameter from this dropdown box or pass a message to the parser to look for any tidal pattern. All of the parameters defined in this dropdown are 0.0-1.0 floats. " 175 | } 176 | 177 | } 178 | , { 179 | "box" : { 180 | "id" : "obj-4", 181 | "maxclass" : "comment", 182 | "numinlets" : 1, 183 | "numoutlets" : 0, 184 | "patching_rect" : [ 587.0, 472.0, 95.0, 20.0 ], 185 | "presentation_rect" : [ 423.0, 328.0, 150.0, 20.0 ], 186 | "style" : "", 187 | "text" : "stream number " 188 | } 189 | 190 | } 191 | , { 192 | "box" : { 193 | "id" : "obj-2", 194 | "maxclass" : "comment", 195 | "numinlets" : 1, 196 | "numoutlets" : 0, 197 | "patching_rect" : [ 377.920319, 294.0, 123.0, 20.0 ], 198 | "presentation_rect" : [ 221.920319, 264.0, 123.0, 20.0 ], 199 | "style" : "", 200 | "text" : "receive on port 8020\n" 201 | } 202 | 203 | } 204 | , { 205 | "box" : { 206 | "annotation" : "streamnumber", 207 | "bgcolor" : [ 0.290196, 0.309804, 0.301961, 0.46 ], 208 | "fontname" : "Ableton Sans Medium", 209 | "fontsize" : 9.5, 210 | "hint" : "streamnumber", 211 | "id" : "obj-10", 212 | "maxclass" : "number", 213 | "minimum" : 0, 214 | "numinlets" : 1, 215 | "numoutlets" : 2, 216 | "outlettype" : [ "", "bang" ], 217 | "parameter_enable" : 0, 218 | "patching_rect" : [ 525.502747, 472.0, 51.0, 18.0 ], 219 | "presentation" : 1, 220 | "presentation_rect" : [ 64.0, 129.0, 31.0, 18.0 ], 221 | "style" : "", 222 | "textcolor" : [ 0.994051, 0.710779, 0.19417, 1.0 ], 223 | "triangle" : 0, 224 | "varname" : "number[1]" 225 | } 226 | 227 | } 228 | , { 229 | "box" : { 230 | "activebgcolor" : [ 0.0, 0.0, 0.0, 0.0 ], 231 | "annotation" : "Tidal parameter to route", 232 | "bordercolor" : [ 1.0, 0.709804, 0.196078, 1.0 ], 233 | "focusbordercolor" : [ 0.994051, 0.710779, 0.19417, 1.0 ], 234 | "hint" : "Tidal parameter to route", 235 | "hltcolor" : [ 1.0, 0.709804, 0.196078, 1.0 ], 236 | "id" : "obj-35", 237 | "maxclass" : "live.menu", 238 | "numinlets" : 1, 239 | "numoutlets" : 3, 240 | "outlettype" : [ "", "", "float" ], 241 | "parameter_enable" : 1, 242 | "patching_rect" : [ 758.085205, 472.0, 71.0, 15.0 ], 243 | "presentation" : 1, 244 | "presentation_rect" : [ 135.0, 34.0, 68.0, 15.0 ], 245 | "saved_attribute_attributes" : { 246 | "valueof" : { 247 | "parameter_longname" : "Source1", 248 | "parameter_shortname" : "Source 1", 249 | "parameter_type" : 2, 250 | "parameter_enum" : [ "velocity", "pan", "attack", "release", "sustain", "warp", "fold", "filterenv", "pitchenv", "lfo1", "lfo2", "lfo3", "portamento", "size", "room", "resonance", "hresonance", "param1", "param2", "param3", "param4", "param5", "param6", "param7", "param8" ], 251 | "parameter_initial_enable" : 1, 252 | "parameter_initial" : [ 0.0 ], 253 | "parameter_annotation_name" : "tidalparam" 254 | } 255 | 256 | } 257 | , 258 | "textcolor" : [ 1.0, 0.709804, 0.196078, 1.0 ], 259 | "tricolor" : [ 1.0, 0.709804, 0.196078, 1.0 ], 260 | "varname" : "live.menu[6]" 261 | } 262 | 263 | } 264 | , { 265 | "box" : { 266 | "id" : "obj-38", 267 | "maxclass" : "newobj", 268 | "numinlets" : 3, 269 | "numoutlets" : 2, 270 | "outlettype" : [ "", "" ], 271 | "patching_rect" : [ 268.920319, 512.0, 534.0, 22.0 ], 272 | "style" : "", 273 | "text" : "tidal-osc-parse" 274 | } 275 | 276 | } 277 | , { 278 | "box" : { 279 | "id" : "obj-39", 280 | "maxclass" : "newobj", 281 | "numinlets" : 1, 282 | "numoutlets" : 1, 283 | "outlettype" : [ "" ], 284 | "patching_rect" : [ 268.920319, 294.0, 99.0, 22.0 ], 285 | "presentation_rect" : [ 103.920326, 264.0, 99.0, 22.0 ], 286 | "style" : "", 287 | "text" : "udpreceive 8020" 288 | } 289 | 290 | } 291 | , { 292 | "box" : { 293 | "id" : "obj-40", 294 | "maxclass" : "newobj", 295 | "numinlets" : 1, 296 | "numoutlets" : 2, 297 | "outlettype" : [ "", "" ], 298 | "patching_rect" : [ 268.920319, 327.0, 125.0, 22.0 ], 299 | "presentation_rect" : [ 103.920326, 328.0, 125.0, 22.0 ], 300 | "style" : "", 301 | "text" : "OSC-route /fromTidal" 302 | } 303 | 304 | } 305 | , { 306 | "box" : { 307 | "angle" : 270.0, 308 | "bgcolor" : [ 0.337303, 0.352808, 0.54972, 1.0 ], 309 | "bordercolor" : [ 0.901961, 0.8, 0.392157, 1.0 ], 310 | "id" : "obj-1", 311 | "maxclass" : "panel", 312 | "mode" : 0, 313 | "numinlets" : 1, 314 | "numoutlets" : 0, 315 | "patching_rect" : [ 249.0, 358.5, 787.0, 277.5 ], 316 | "proportion" : 0.39, 317 | "style" : "" 318 | } 319 | 320 | } 321 | ], 322 | "lines" : [ { 323 | "patchline" : { 324 | "color" : [ 0.65, 0.65, 0.65, 0.9 ], 325 | "destination" : [ "obj-38", 1 ], 326 | "midpoints" : [ 535.002747, 500.5, 535.920288, 500.5 ], 327 | "source" : [ "obj-10", 0 ] 328 | } 329 | 330 | } 331 | , { 332 | "patchline" : { 333 | "destination" : [ "obj-38", 2 ], 334 | "source" : [ "obj-11", 0 ] 335 | } 336 | 337 | } 338 | , { 339 | "patchline" : { 340 | "destination" : [ "obj-38", 2 ], 341 | "midpoints" : [ 793.585205, 499.0, 793.420288, 499.0 ], 342 | "source" : [ "obj-35", 1 ] 343 | } 344 | 345 | } 346 | , { 347 | "patchline" : { 348 | "destination" : [ "obj-12", 1 ], 349 | "source" : [ "obj-38", 1 ] 350 | } 351 | 352 | } 353 | , { 354 | "patchline" : { 355 | "destination" : [ "obj-9", 0 ], 356 | "source" : [ "obj-38", 0 ] 357 | } 358 | 359 | } 360 | , { 361 | "patchline" : { 362 | "destination" : [ "obj-40", 0 ], 363 | "source" : [ "obj-39", 0 ] 364 | } 365 | 366 | } 367 | , { 368 | "patchline" : { 369 | "destination" : [ "obj-38", 0 ], 370 | "midpoints" : [ 278.420319, 457.5, 278.420319, 457.5 ], 371 | "source" : [ "obj-40", 0 ] 372 | } 373 | 374 | } 375 | , { 376 | "patchline" : { 377 | "destination" : [ "obj-10", 0 ], 378 | "source" : [ "obj-5", 0 ] 379 | } 380 | 381 | } 382 | , { 383 | "patchline" : { 384 | "destination" : [ "obj-35", 0 ], 385 | "source" : [ "obj-6", 0 ] 386 | } 387 | 388 | } 389 | ], 390 | "parameters" : { 391 | "obj-35" : [ "Source1", "Source 1", 0 ] 392 | } 393 | , 394 | "dependency_cache" : [ { 395 | "name" : "tidal-osc-parse.maxpat", 396 | "bootpath" : "~/Desktop/scripts/max/tidal-max-example/tidal-maxmsp/tidal-maxmsp/patchers", 397 | "patcherrelativepath" : ".", 398 | "type" : "JSON", 399 | "implicit" : 1 400 | } 401 | , { 402 | "name" : "OSC-route.mxo", 403 | "type" : "iLaX" 404 | } 405 | ], 406 | "autosave" : 0, 407 | "styles" : [ { 408 | "name" : "AudioStatus_Menu", 409 | "default" : { 410 | "bgfillcolor" : { 411 | "type" : "color", 412 | "color" : [ 0.294118, 0.313726, 0.337255, 1 ], 413 | "color1" : [ 0.454902, 0.462745, 0.482353, 0.0 ], 414 | "color2" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 415 | "angle" : 270.0, 416 | "proportion" : 0.39, 417 | "autogradient" : 0 418 | } 419 | 420 | } 421 | , 422 | "parentstyle" : "", 423 | "multi" : 0 424 | } 425 | , { 426 | "name" : "Luca", 427 | "default" : { 428 | "accentcolor" : [ 0.32549, 0.345098, 0.372549, 1.0 ], 429 | "elementcolor" : [ 0.786675, 0.801885, 0.845022, 1.0 ], 430 | "selectioncolor" : [ 0.720698, 0.16723, 0.080014, 1.0 ], 431 | "color" : [ 0.475135, 0.293895, 0.251069, 1.0 ], 432 | "textcolor_inverse" : [ 0.239216, 0.254902, 0.278431, 1.0 ], 433 | "bgcolor" : [ 0.904179, 0.895477, 0.842975, 0.56 ], 434 | "bgfillcolor" : { 435 | "type" : "gradient", 436 | "color" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 437 | "color1" : [ 0.862745, 0.870588, 0.878431, 1.0 ], 438 | "color2" : [ 0.65098, 0.666667, 0.662745, 1.0 ], 439 | "angle" : 270.0, 440 | "proportion" : 0.39, 441 | "autogradient" : 0 442 | } 443 | , 444 | "fontname" : [ "Open Sans Semibold" ] 445 | } 446 | , 447 | "parentstyle" : "", 448 | "multi" : 0 449 | } 450 | , { 451 | "name" : "Matt", 452 | "default" : { 453 | "fontface" : [ 1 ], 454 | "fontsize" : [ 10.0 ] 455 | } 456 | , 457 | "parentstyle" : "", 458 | "multi" : 0 459 | } 460 | , { 461 | "name" : "WTF", 462 | "default" : { 463 | "accentcolor" : [ 0.50764, 0.065317, 0.112129, 1.0 ], 464 | "elementcolor" : [ 0.461105, 0.492646, 0.591878, 1.0 ], 465 | "fontsize" : [ 18.0 ], 466 | "color" : [ 0.113725, 0.580392, 0.737255, 1.0 ], 467 | "patchlinecolor" : [ 0.231373, 0.121569, 0.305882, 0.9 ], 468 | "bgcolor" : [ 0.163647, 0.174699, 0.17409, 1.0 ], 469 | "bgfillcolor" : { 470 | "type" : "gradient", 471 | "color" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 472 | "color1" : [ 0.32549, 0.345098, 0.372549, 1.0 ], 473 | "color2" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 474 | "angle" : 270.0, 475 | "proportion" : 0.39, 476 | "autogradient" : 0 477 | } 478 | , 479 | "fontname" : [ "HydrogenType" ] 480 | } 481 | , 482 | "parentstyle" : "", 483 | "multi" : 0 484 | } 485 | , { 486 | "name" : "classic", 487 | "default" : { 488 | "accentcolor" : [ 0.498039, 0.498039, 0.498039, 1.0 ], 489 | "fontsize" : [ 9.0 ], 490 | "color" : [ 0.498039, 0.498039, 0.498039, 1.0 ], 491 | "textcolor_inverse" : [ 0.0, 0.0, 0.0, 1.0 ], 492 | "patchlinecolor" : [ 0.0, 0.0, 0.0, 1.0 ], 493 | "bgcolor" : [ 0.83978, 0.839941, 0.839753, 1.0 ], 494 | "bgfillcolor" : { 495 | "type" : "color", 496 | "color1" : [ 0.83978, 0.839941, 0.839753, 1.0 ], 497 | "color2" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 498 | "color" : [ 0.839216, 0.839216, 0.839216, 1.0 ], 499 | "angle" : 270.0, 500 | "proportion" : 0.39 501 | } 502 | , 503 | "fontname" : [ "Geneva" ] 504 | } 505 | , 506 | "parentstyle" : "", 507 | "multi" : 0 508 | } 509 | , { 510 | "name" : "classicButton", 511 | "default" : { 512 | "color" : [ 1.0, 0.890196, 0.090196, 1.0 ] 513 | } 514 | , 515 | "parentstyle" : "", 516 | "multi" : 0 517 | } 518 | , { 519 | "name" : "classicDial", 520 | "default" : { 521 | "color" : [ 1.0, 0.890196, 0.090196, 1.0 ] 522 | } 523 | , 524 | "parentstyle" : "", 525 | "multi" : 0 526 | } 527 | , { 528 | "name" : "classicGain~", 529 | "default" : { 530 | "color" : [ 0.380392, 0.380392, 0.380392, 1.0 ] 531 | } 532 | , 533 | "parentstyle" : "", 534 | "multi" : 0 535 | } 536 | , { 537 | "name" : "classicGswitch", 538 | "default" : { 539 | "accentcolor" : [ 1.0, 1.0, 1.0, 1.0 ] 540 | } 541 | , 542 | "parentstyle" : "", 543 | "multi" : 0 544 | } 545 | , { 546 | "name" : "classicGswitch2", 547 | "default" : { 548 | "accentcolor" : [ 1.0, 1.0, 1.0, 1.0 ] 549 | } 550 | , 551 | "parentstyle" : "", 552 | "multi" : 0 553 | } 554 | , { 555 | "name" : "classicKslider", 556 | "default" : { 557 | "elementcolor" : [ 0.498039, 0.498039, 0.498039, 1.0 ], 558 | "selectioncolor" : [ 0.498039, 0.498039, 0.498039, 1.0 ], 559 | "color" : [ 1.0, 1.0, 1.0, 1.0 ], 560 | "bgcolor" : [ 0.0, 0.0, 0.0, 1.0 ] 561 | } 562 | , 563 | "parentstyle" : "", 564 | "multi" : 0 565 | } 566 | , { 567 | "name" : "classicLed", 568 | "default" : { 569 | "elementcolor" : [ 0.6, 0.0, 0.0, 1.0 ], 570 | "color" : [ 1.0, 0.0, 0.0, 1.0 ] 571 | } 572 | , 573 | "parentstyle" : "", 574 | "multi" : 0 575 | } 576 | , { 577 | "name" : "classicMatrixctrl", 578 | "default" : { 579 | "color" : [ 1.0, 0.0, 0.0, 1.0 ] 580 | } 581 | , 582 | "parentstyle" : "", 583 | "multi" : 0 584 | } 585 | , { 586 | "name" : "classicMeter~", 587 | "default" : { 588 | "elementcolor" : [ 0.498039, 0.498039, 0.498039, 1.0 ], 589 | "bgcolor" : [ 0.380392, 0.380392, 0.380392, 1.0 ] 590 | } 591 | , 592 | "parentstyle" : "", 593 | "multi" : 0 594 | } 595 | , { 596 | "name" : "classicNodes", 597 | "default" : { 598 | "elementcolor" : [ 0.498039, 0.498039, 0.498039, 1.0 ], 599 | "fontsize" : [ 9.0 ], 600 | "color" : [ 0.839216, 0.839216, 0.839216, 1.0 ] 601 | } 602 | , 603 | "parentstyle" : "", 604 | "multi" : 0 605 | } 606 | , { 607 | "name" : "classicNslider", 608 | "default" : { 609 | "color" : [ 0.0, 0.0, 0.0, 1.0 ] 610 | } 611 | , 612 | "parentstyle" : "", 613 | "multi" : 0 614 | } 615 | , { 616 | "name" : "classicNumber", 617 | "default" : { 618 | "selectioncolor" : [ 1.0, 0.890196, 0.0, 1.0 ] 619 | } 620 | , 621 | "parentstyle" : "", 622 | "multi" : 0 623 | } 624 | , { 625 | "name" : "classicPictslider", 626 | "default" : { 627 | "elementcolor" : [ 0.498039, 0.498039, 0.498039, 1.0 ] 628 | } 629 | , 630 | "parentstyle" : "", 631 | "multi" : 0 632 | } 633 | , { 634 | "name" : "classicPreset", 635 | "default" : { 636 | "color" : [ 1.0, 0.890196, 0.090196, 1.0 ] 637 | } 638 | , 639 | "parentstyle" : "", 640 | "multi" : 0 641 | } 642 | , { 643 | "name" : "classicScope~", 644 | "default" : { 645 | "color" : [ 0.462745, 0.933333, 0.0, 1.0 ], 646 | "bgcolor" : [ 0.498039, 0.498039, 0.498039, 1.0 ] 647 | } 648 | , 649 | "parentstyle" : "", 650 | "multi" : 0 651 | } 652 | , { 653 | "name" : "classicTab", 654 | "default" : { 655 | "elementcolor" : [ 0.839216, 0.839216, 0.839216, 1.0 ], 656 | "color" : [ 0.498039, 0.498039, 0.498039, 1.0 ] 657 | } 658 | , 659 | "parentstyle" : "", 660 | "multi" : 0 661 | } 662 | , { 663 | "name" : "classicTextbutton", 664 | "default" : { 665 | "accentcolor" : [ 0.0, 0.0, 0.0, 1.0 ], 666 | "color" : [ 1.0, 1.0, 1.0, 1.0 ] 667 | } 668 | , 669 | "parentstyle" : "", 670 | "multi" : 0 671 | } 672 | , { 673 | "name" : "classicToggle", 674 | "default" : { 675 | "elementcolor" : [ 0.376471, 0.384314, 0.4, 0.0 ], 676 | "color" : [ 0.380392, 0.380392, 0.380392, 1.0 ] 677 | } 678 | , 679 | "parentstyle" : "", 680 | "multi" : 0 681 | } 682 | , { 683 | "name" : "classicUmenu", 684 | "default" : { 685 | "color" : [ 1.0, 1.0, 1.0, 1.0 ] 686 | } 687 | , 688 | "parentstyle" : "", 689 | "multi" : 0 690 | } 691 | , { 692 | "name" : "classicWaveform~", 693 | "default" : { 694 | "selectioncolor" : [ 0.498039, 0.498039, 0.498039, 0.5 ], 695 | "color" : [ 0.380392, 0.380392, 0.380392, 1.0 ] 696 | } 697 | , 698 | "parentstyle" : "", 699 | "multi" : 0 700 | } 701 | , { 702 | "name" : "dark-night-patch", 703 | "default" : { 704 | "accentcolor" : [ 0.952941, 0.564706, 0.098039, 1.0 ], 705 | "patchlinecolor" : [ 0.439216, 0.74902, 0.254902, 0.898039 ], 706 | "bgfillcolor" : { 707 | "type" : "gradient", 708 | "color1" : [ 0.376471, 0.384314, 0.4, 1.0 ], 709 | "color2" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 710 | "color" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 711 | "angle" : 270.0, 712 | "proportion" : 0.39 713 | } 714 | , 715 | "textcolor" : [ 0.862745, 0.870588, 0.878431, 1.0 ] 716 | } 717 | , 718 | "parentstyle" : "", 719 | "multi" : 0 720 | } 721 | , { 722 | "name" : "jpatcher001", 723 | "parentstyle" : "", 724 | "multi" : 0 725 | } 726 | , { 727 | "name" : "jpatcher002", 728 | "default" : { 729 | "fontsize" : [ 9.5 ], 730 | "patchlinecolor" : [ 0.65098, 0.65098, 0.65098, 0.0 ], 731 | "clearcolor" : [ 0.32549, 0.345098, 0.372549, 0.0 ], 732 | "bgfillcolor" : { 733 | "type" : "color", 734 | "color1" : [ 0.32549, 0.345098, 0.372549, 0.0 ], 735 | "color2" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 736 | "color" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 737 | "angle" : 270.0, 738 | "proportion" : 0.39 739 | } 740 | , 741 | "fontname" : [ "Ableton Sans Book" ] 742 | } 743 | , 744 | "parentstyle" : "", 745 | "multi" : 0 746 | } 747 | , { 748 | "name" : "jpink", 749 | "default" : { 750 | "accentcolor" : [ 0.619608, 0.0, 0.360784, 1.0 ], 751 | "elementcolor" : [ 0.619608, 0.0, 0.360784, 1.0 ], 752 | "selectioncolor" : [ 0.619608, 0.0, 0.360784, 1.0 ], 753 | "color" : [ 0.619608, 0.0, 0.360784, 1.0 ], 754 | "patchlinecolor" : [ 0.65, 0.65, 0.65, 1.0 ], 755 | "clearcolor" : [ 0.113725, 0.607843, 0.607843, 1.0 ], 756 | "bgcolor" : [ 0.862745, 0.870588, 0.878431, 1.0 ], 757 | "bgfillcolor" : { 758 | "type" : "color", 759 | "color" : [ 0.619608, 0.0, 0.360784, 1.0 ], 760 | "color1" : [ 0.376471, 0.384314, 0.4, 1.0 ], 761 | "color2" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 762 | "angle" : 270.0, 763 | "proportion" : 0.39, 764 | "autogradient" : 0 765 | } 766 | , 767 | "textcolor" : [ 0.619608, 0.0, 0.360784, 1.0 ] 768 | } 769 | , 770 | "parentstyle" : "", 771 | "multi" : 0 772 | } 773 | , { 774 | "name" : "ksliderWhite", 775 | "default" : { 776 | "color" : [ 1.0, 1.0, 1.0, 1.0 ] 777 | } 778 | , 779 | "parentstyle" : "", 780 | "multi" : 0 781 | } 782 | , { 783 | "name" : "lightbutton", 784 | "default" : { 785 | "elementcolor" : [ 0.654902, 0.572549, 0.376471, 1.0 ], 786 | "bgcolor" : [ 0.309495, 0.299387, 0.299789, 1.0 ] 787 | } 788 | , 789 | "parentstyle" : "", 790 | "multi" : 0 791 | } 792 | , { 793 | "name" : "newobjBlue-1", 794 | "default" : { 795 | "accentcolor" : [ 0.317647, 0.654902, 0.976471, 1.0 ] 796 | } 797 | , 798 | "parentstyle" : "", 799 | "multi" : 0 800 | } 801 | , { 802 | "name" : "newobjBrown-1", 803 | "default" : { 804 | "accentcolor" : [ 0.654902, 0.572549, 0.376471, 1.0 ] 805 | } 806 | , 807 | "parentstyle" : "", 808 | "multi" : 0 809 | } 810 | , { 811 | "name" : "newobjCyan-1", 812 | "default" : { 813 | "accentcolor" : [ 0.029546, 0.773327, 0.821113, 1.0 ] 814 | } 815 | , 816 | "parentstyle" : "", 817 | "multi" : 0 818 | } 819 | , { 820 | "name" : "newobjGreen-1", 821 | "default" : { 822 | "accentcolor" : [ 0.0, 0.533333, 0.168627, 1.0 ] 823 | } 824 | , 825 | "parentstyle" : "", 826 | "multi" : 0 827 | } 828 | , { 829 | "name" : "newobjRed-1", 830 | "default" : { 831 | "accentcolor" : [ 0.784314, 0.145098, 0.023529, 1.0 ] 832 | } 833 | , 834 | "parentstyle" : "", 835 | "multi" : 0 836 | } 837 | , { 838 | "name" : "newobjYellow-1", 839 | "default" : { 840 | "accentcolor" : [ 0.82517, 0.78181, 0.059545, 1.0 ], 841 | "fontsize" : [ 12.059008 ] 842 | } 843 | , 844 | "parentstyle" : "", 845 | "multi" : 0 846 | } 847 | , { 848 | "name" : "newobjYellow-2", 849 | "default" : { 850 | "accentcolor" : [ 0.82517, 0.78181, 0.059545, 1.0 ], 851 | "fontsize" : [ 12.059008 ] 852 | } 853 | , 854 | "parentstyle" : "", 855 | "multi" : 0 856 | } 857 | , { 858 | "name" : "numberGold-1", 859 | "default" : { 860 | "accentcolor" : [ 0.764706, 0.592157, 0.101961, 1.0 ] 861 | } 862 | , 863 | "parentstyle" : "", 864 | "multi" : 0 865 | } 866 | , { 867 | "name" : "purple", 868 | "default" : { 869 | "textcolor_inverse" : [ 0.701961, 0.415686, 0.886275, 1.0 ], 870 | "bgcolor" : [ 0.304029, 0.250694, 0.285628, 1.0 ] 871 | } 872 | , 873 | "parentstyle" : "", 874 | "multi" : 0 875 | } 876 | , { 877 | "name" : "receives", 878 | "default" : { 879 | "accentcolor" : [ 0.870588, 0.415686, 0.062745, 1.0 ] 880 | } 881 | , 882 | "parentstyle" : "", 883 | "multi" : 0 884 | } 885 | , { 886 | "name" : "rsliderGold", 887 | "default" : { 888 | "color" : [ 0.646639, 0.821777, 0.854593, 1.0 ], 889 | "bgcolor" : [ 0.764706, 0.592157, 0.101961, 1.0 ] 890 | } 891 | , 892 | "parentstyle" : "", 893 | "multi" : 0 894 | } 895 | , { 896 | "name" : "sends", 897 | "default" : { 898 | "accentcolor" : [ 0.0, 0.533333, 0.168627, 1.0 ] 899 | } 900 | , 901 | "parentstyle" : "", 902 | "multi" : 0 903 | } 904 | , { 905 | "name" : "tap", 906 | "default" : { 907 | "fontname" : [ "Lato Light" ] 908 | } 909 | , 910 | "parentstyle" : "", 911 | "multi" : 0 912 | } 913 | , { 914 | "name" : "tastefulltoggle", 915 | "default" : { 916 | "color" : [ 0.941176, 0.690196, 0.196078, 1.0 ], 917 | "bgcolor" : [ 0.185512, 0.263736, 0.260626, 1.0 ] 918 | } 919 | , 920 | "parentstyle" : "", 921 | "multi" : 0 922 | } 923 | , { 924 | "name" : "tastefultoggle", 925 | "default" : { 926 | "elementcolor" : [ 0.654902, 0.572549, 0.376471, 1.0 ], 927 | "color" : [ 0.941176, 0.690196, 0.196078, 1.0 ], 928 | "bgcolor" : [ 0.287863, 0.333333, 0.329398, 1.0 ] 929 | } 930 | , 931 | "parentstyle" : "", 932 | "multi" : 0 933 | } 934 | , { 935 | "name" : "test", 936 | "default" : { 937 | "fontface" : [ 1 ], 938 | "fontsize" : [ 10.0 ] 939 | } 940 | , 941 | "parentstyle" : "", 942 | "multi" : 0 943 | } 944 | , { 945 | "name" : "whitey", 946 | "default" : { 947 | "selectioncolor" : [ 0.011765, 0.396078, 0.752941, 1.0 ], 948 | "fontsize" : [ 36.0 ], 949 | "textcolor_inverse" : [ 0.65098, 0.666667, 0.662745, 1.0 ], 950 | "patchlinecolor" : [ 0.199068, 0.062496, 0.060031, 0.9 ], 951 | "fontname" : [ "Dirty Ego" ] 952 | } 953 | , 954 | "parentstyle" : "", 955 | "multi" : 0 956 | } 957 | ] 958 | } 959 | 960 | } 961 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/patchers/tidal-osc-parse.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 7, 6 | "minor" : 3, 7 | "revision" : 4, 8 | "architecture" : "x86", 9 | "modernui" : 1 10 | } 11 | , 12 | "rect" : [ 59.0, 103.0, 640.0, 480.0 ], 13 | "bglocked" : 0, 14 | "openinpresentation" : 0, 15 | "default_fontsize" : 12.0, 16 | "default_fontface" : 0, 17 | "default_fontname" : "Arial", 18 | "gridonopen" : 1, 19 | "gridsize" : [ 15.0, 15.0 ], 20 | "gridsnaponopen" : 1, 21 | "objectsnaponopen" : 1, 22 | "statusbarvisible" : 2, 23 | "toolbarvisible" : 1, 24 | "lefttoolbarpinned" : 0, 25 | "toptoolbarpinned" : 0, 26 | "righttoolbarpinned" : 0, 27 | "bottomtoolbarpinned" : 0, 28 | "toolbars_unpinned_last_save" : 0, 29 | "tallnewobj" : 0, 30 | "boxanimatetime" : 200, 31 | "enablehscroll" : 1, 32 | "enablevscroll" : 1, 33 | "devicewidth" : 0.0, 34 | "description" : "", 35 | "digest" : "", 36 | "tags" : "", 37 | "style" : "", 38 | "subpatcher_template" : "", 39 | "boxes" : [ { 40 | "box" : { 41 | "id" : "obj-29", 42 | "maxclass" : "comment", 43 | "numinlets" : 1, 44 | "numoutlets" : 0, 45 | "patching_rect" : [ 277.0, 449.0, 150.0, 20.0 ], 46 | "presentation_rect" : [ 277.0, 449.0, 150.0, 20.0 ], 47 | "style" : "", 48 | "text" : "tidal parameter" 49 | } 50 | 51 | } 52 | , { 53 | "box" : { 54 | "annotation" : "tidal parameter (symbol)", 55 | "comment" : "tidal parameter (symbol)", 56 | "hint" : "tidal parameter (symbol)", 57 | "id" : "obj-26", 58 | "index" : 3, 59 | "maxclass" : "inlet", 60 | "numinlets" : 0, 61 | "numoutlets" : 1, 62 | "outlettype" : [ "" ], 63 | "patching_rect" : [ 744.0, 107.0, 30.0, 30.0 ], 64 | "presentation_rect" : [ 744.0, 107.0, 30.0, 30.0 ], 65 | "style" : "" 66 | } 67 | 68 | } 69 | , { 70 | "box" : { 71 | "annotation" : "raw", 72 | "comment" : "raw", 73 | "hint" : "raw", 74 | "id" : "obj-17", 75 | "index" : 2, 76 | "maxclass" : "outlet", 77 | "numinlets" : 1, 78 | "numoutlets" : 0, 79 | "patching_rect" : [ 625.0, 574.0, 30.0, 30.0 ], 80 | "presentation_rect" : [ 625.0, 574.0, 30.0, 30.0 ], 81 | "style" : "" 82 | } 83 | 84 | } 85 | , { 86 | "box" : { 87 | "id" : "obj-20", 88 | "maxclass" : "newobj", 89 | "numinlets" : 1, 90 | "numoutlets" : 1, 91 | "outlettype" : [ "" ], 92 | "patching_rect" : [ 399.0, 214.0, 79.0, 22.0 ], 93 | "presentation_rect" : [ 399.0, 214.0, 79.0, 22.0 ], 94 | "style" : "", 95 | "text" : "loadmess #2" 96 | } 97 | 98 | } 99 | , { 100 | "box" : { 101 | "annotation" : "stream no (int)", 102 | "comment" : "stream no (int)", 103 | "hint" : "stream no (int)", 104 | "id" : "obj-19", 105 | "index" : 2, 106 | "maxclass" : "inlet", 107 | "numinlets" : 0, 108 | "numoutlets" : 1, 109 | "outlettype" : [ "" ], 110 | "patching_rect" : [ 334.0, 111.0, 30.0, 30.0 ], 111 | "presentation_rect" : [ 334.0, 111.0, 30.0, 30.0 ], 112 | "style" : "" 113 | } 114 | 115 | } 116 | , { 117 | "box" : { 118 | "id" : "obj-44", 119 | "maxclass" : "comment", 120 | "numinlets" : 1, 121 | "numoutlets" : 0, 122 | "patching_rect" : [ 394.5, 255.0, 150.0, 20.0 ], 123 | "presentation_rect" : [ 394.5, 255.0, 150.0, 20.0 ], 124 | "style" : "", 125 | "text" : "stream number from tidal" 126 | } 127 | 128 | } 129 | , { 130 | "box" : { 131 | "id" : "obj-40", 132 | "maxclass" : "newobj", 133 | "numinlets" : 1, 134 | "numoutlets" : 1, 135 | "outlettype" : [ "" ], 136 | "patching_rect" : [ 334.0, 294.0, 67.0, 22.0 ], 137 | "presentation_rect" : [ 334.0, 294.0, 67.0, 22.0 ], 138 | "style" : "", 139 | "text" : "sprintf /%d" 140 | } 141 | 142 | } 143 | , { 144 | "box" : { 145 | "id" : "obj-35", 146 | "maxclass" : "number", 147 | "numinlets" : 1, 148 | "numoutlets" : 2, 149 | "outlettype" : [ "", "bang" ], 150 | "parameter_enable" : 0, 151 | "patching_rect" : [ 334.0, 255.0, 50.0, 22.0 ], 152 | "presentation_rect" : [ 334.0, 255.0, 50.0, 22.0 ], 153 | "style" : "" 154 | } 155 | 156 | } 157 | , { 158 | "box" : { 159 | "id" : "obj-5", 160 | "maxclass" : "newobj", 161 | "numinlets" : 2, 162 | "numoutlets" : 2, 163 | "outlettype" : [ "", "" ], 164 | "patching_rect" : [ 205.5, 327.0, 51.0, 22.0 ], 165 | "presentation_rect" : [ 205.5, 327.0, 51.0, 22.0 ], 166 | "style" : "", 167 | "text" : "route /1" 168 | } 169 | 170 | } 171 | , { 172 | "box" : { 173 | "annotation" : "cps", 174 | "comment" : "cps", 175 | "hint" : "cps", 176 | "id" : "obj-2", 177 | "index" : 1, 178 | "maxclass" : "outlet", 179 | "numinlets" : 1, 180 | "numoutlets" : 0, 181 | "patching_rect" : [ 205.5, 557.0, 30.0, 30.0 ], 182 | "presentation_rect" : [ 205.5, 557.0, 30.0, 30.0 ], 183 | "style" : "" 184 | } 185 | 186 | } 187 | , { 188 | "box" : { 189 | "annotation" : "osc stream as list (everything after /)", 190 | "comment" : "osc stream as list (everything after /)", 191 | "hint" : "osc stream as list (everything after /)", 192 | "id" : "obj-1", 193 | "index" : 1, 194 | "maxclass" : "inlet", 195 | "numinlets" : 0, 196 | "numoutlets" : 1, 197 | "outlettype" : [ "" ], 198 | "patching_rect" : [ 205.5, 111.0, 30.0, 30.0 ], 199 | "presentation_rect" : [ 205.5, 111.0, 30.0, 30.0 ], 200 | "style" : "" 201 | } 202 | 203 | } 204 | , { 205 | "box" : { 206 | "format" : 6, 207 | "id" : "obj-64", 208 | "maxclass" : "flonum", 209 | "numinlets" : 1, 210 | "numoutlets" : 2, 211 | "outlettype" : [ "", "bang" ], 212 | "parameter_enable" : 0, 213 | "patching_rect" : [ 205.5, 494.0, 50.0, 22.0 ], 214 | "presentation_rect" : [ 205.5, 494.0, 50.0, 22.0 ], 215 | "style" : "" 216 | } 217 | 218 | } 219 | , { 220 | "box" : { 221 | "id" : "obj-62", 222 | "linecount" : 2, 223 | "maxclass" : "newobj", 224 | "numinlets" : 2, 225 | "numoutlets" : 2, 226 | "outlettype" : [ "", "" ], 227 | "patching_rect" : [ 205.5, 449.0, 55.0, 22.0 ], 228 | "presentation_linecount" : 2, 229 | "presentation_rect" : [ 205.5, 449.0, 55.0, 22.0 ], 230 | "style" : "", 231 | "text" : "route #1" 232 | } 233 | 234 | } 235 | , { 236 | "box" : { 237 | "id" : "obj-61", 238 | "linecount" : 2, 239 | "maxclass" : "comment", 240 | "numinlets" : 1, 241 | "numoutlets" : 0, 242 | "patching_rect" : [ 277.0, 365.0, 190.0, 33.0 ], 243 | "presentation_linecount" : 2, 244 | "presentation_rect" : [ 277.0, 365.0, 190.0, 33.0 ], 245 | "style" : "", 246 | "text" : "break the message down to lists of size 2 (parameter + value)" 247 | } 248 | 249 | } 250 | , { 251 | "box" : { 252 | "id" : "obj-56", 253 | "maxclass" : "newobj", 254 | "numinlets" : 2, 255 | "numoutlets" : 2, 256 | "outlettype" : [ "", "" ], 257 | "patching_rect" : [ 205.5, 365.0, 49.0, 22.0 ], 258 | "presentation_rect" : [ 205.5, 365.0, 49.0, 22.0 ], 259 | "style" : "", 260 | "text" : "zl iter 2" 261 | } 262 | 263 | } 264 | ], 265 | "lines" : [ { 266 | "patchline" : { 267 | "destination" : [ "obj-5", 0 ], 268 | "source" : [ "obj-1", 0 ] 269 | } 270 | 271 | } 272 | , { 273 | "patchline" : { 274 | "destination" : [ "obj-35", 0 ], 275 | "midpoints" : [ 343.5, 197.5, 343.5, 197.5 ], 276 | "source" : [ "obj-19", 0 ] 277 | } 278 | 279 | } 280 | , { 281 | "patchline" : { 282 | "destination" : [ "obj-35", 0 ], 283 | "midpoints" : [ 408.5, 245.0, 343.5, 245.0 ], 284 | "source" : [ "obj-20", 0 ] 285 | } 286 | 287 | } 288 | , { 289 | "patchline" : { 290 | "destination" : [ "obj-62", 1 ], 291 | "midpoints" : [ 753.5, 418.5, 251.0, 418.5 ], 292 | "source" : [ "obj-26", 0 ] 293 | } 294 | 295 | } 296 | , { 297 | "patchline" : { 298 | "destination" : [ "obj-40", 0 ], 299 | "source" : [ "obj-35", 0 ] 300 | } 301 | 302 | } 303 | , { 304 | "patchline" : { 305 | "destination" : [ "obj-5", 1 ], 306 | "midpoints" : [ 343.5, 321.0, 247.0, 321.0 ], 307 | "source" : [ "obj-40", 0 ] 308 | } 309 | 310 | } 311 | , { 312 | "patchline" : { 313 | "destination" : [ "obj-17", 0 ], 314 | "midpoints" : [ 215.0, 357.0, 634.5, 357.0 ], 315 | "order" : 0, 316 | "source" : [ "obj-5", 0 ] 317 | } 318 | 319 | } 320 | , { 321 | "patchline" : { 322 | "destination" : [ "obj-56", 0 ], 323 | "order" : 1, 324 | "source" : [ "obj-5", 0 ] 325 | } 326 | 327 | } 328 | , { 329 | "patchline" : { 330 | "destination" : [ "obj-62", 0 ], 331 | "midpoints" : [ 215.0, 426.0, 215.0, 426.0 ], 332 | "source" : [ "obj-56", 0 ] 333 | } 334 | 335 | } 336 | , { 337 | "patchline" : { 338 | "destination" : [ "obj-64", 0 ], 339 | "source" : [ "obj-62", 0 ] 340 | } 341 | 342 | } 343 | , { 344 | "patchline" : { 345 | "destination" : [ "obj-2", 0 ], 346 | "source" : [ "obj-64", 0 ] 347 | } 348 | 349 | } 350 | ] 351 | } 352 | 353 | } 354 | -------------------------------------------------------------------------------- /Tidal-MaxMsp/tidal-maxmsp.maxproj: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "tidal-maxmsp", 3 | "version" : 1, 4 | "creationdate" : -695672096, 5 | "modificationdate" : -695629165, 6 | "viewrect" : [ 25.0, 69.0, 300.0, 500.0 ], 7 | "autoorganize" : 1, 8 | "hideprojectwindow" : 0, 9 | "showdependencies" : 1, 10 | "autolocalize" : 0, 11 | "contents" : { 12 | "patchers" : { 13 | "tidal-maxmsp.maxpat" : { 14 | "kind" : "patcher", 15 | "local" : 1, 16 | "toplevel" : 1 17 | } 18 | 19 | } 20 | , 21 | "externals" : { 22 | 23 | } 24 | 25 | } 26 | , 27 | "layout" : { 28 | 29 | } 30 | , 31 | "searchpath" : { 32 | 33 | } 34 | , 35 | "detailsvisible" : 1, 36 | "amxdtype" : 1633771873, 37 | "readonly" : 0, 38 | "devpathtype" : 0, 39 | "devpath" : ".", 40 | "sortmode" : 0 41 | } 42 | -------------------------------------------------------------------------------- /tidal/MaxMspOsc/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Author name here (c) 2018 2 | 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 11 | * Redistributions in binary form must reproduce the above 12 | copyright notice, this list of conditions and the following 13 | disclaimer in the documentation and/or other materials provided 14 | with the distribution. 15 | 16 | * Neither the name of Author name here nor the names of other 17 | contributors may be used to endorse or promote products derived 18 | from this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /tidal/MaxMspOsc/MaxMspOsc.cabal: -------------------------------------------------------------------------------- 1 | name: MaxMspOsc 2 | version: 0.1.0.0 3 | -- synopsis: 4 | -- description: 5 | homepage: https://github.com/githubuser/MaxMspOsc#readme 6 | license: BSD3 7 | license-file: LICENSE 8 | author: Author name here 9 | maintainer: example@example.com 10 | copyright: 2018 Author name here 11 | category: Web 12 | build-type: Simple 13 | extra-source-files: README.md 14 | cabal-version: >=1.10 15 | 16 | library 17 | hs-source-dirs: src 18 | exposed-modules: Sound.Tidal.MaxMspOsc 19 | build-depends: base >= 4.7 && < 5, tidal 20 | default-language: Haskell2010 21 | default-extensions: OverloadedStrings 22 | 23 | source-repository head 24 | type: git 25 | location: https://github.com/githubuser/MaxMspOsc 26 | -------------------------------------------------------------------------------- /tidal/MaxMspOsc/README.md: -------------------------------------------------------------------------------- 1 | # MaxMspOsc 2 | -------------------------------------------------------------------------------- /tidal/MaxMspOsc/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.dyn_hi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.dyn_hi -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.dyn_o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.dyn_o -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.hi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.hi -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.o -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.p_hi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.p_hi -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.p_o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/build/Sound/Tidal/MaxMspOsc.p_o -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/build/autogen/Paths_MaxMspOsc.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE CPP #-} 2 | {-# OPTIONS_GHC -fno-warn-missing-import-lists #-} 3 | {-# OPTIONS_GHC -fno-warn-implicit-prelude #-} 4 | module Paths_MaxMspOsc ( 5 | version, 6 | getBinDir, getLibDir, getDataDir, getLibexecDir, 7 | getDataFileName, getSysconfDir 8 | ) where 9 | 10 | import qualified Control.Exception as Exception 11 | import Data.Version (Version(..)) 12 | import System.Environment (getEnv) 13 | import Prelude 14 | 15 | #if defined(VERSION_base) 16 | 17 | #if MIN_VERSION_base(4,0,0) 18 | catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a 19 | #else 20 | catchIO :: IO a -> (Exception.Exception -> IO a) -> IO a 21 | #endif 22 | 23 | #else 24 | catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a 25 | #endif 26 | catchIO = Exception.catch 27 | 28 | version :: Version 29 | version = Version [0,1,0,0] [] 30 | bindir, libdir, datadir, libexecdir, sysconfdir :: FilePath 31 | 32 | bindir = "/Users/madskjeldgaard/Library/Haskell/bin" 33 | libdir = "/Users/madskjeldgaard/Library/Haskell/ghc-8.0.1-x86_64/lib/MaxMspOsc-0.1.0.0" 34 | datadir = "/Users/madskjeldgaard/Library/Haskell/share/ghc-8.0.1-x86_64/MaxMspOsc-0.1.0.0" 35 | libexecdir = "/Users/madskjeldgaard/Library/Haskell/libexec" 36 | sysconfdir = "/Users/madskjeldgaard/Library/Haskell/etc" 37 | 38 | getBinDir, getLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath 39 | getBinDir = catchIO (getEnv "MaxMspOsc_bindir") (\_ -> return bindir) 40 | getLibDir = catchIO (getEnv "MaxMspOsc_libdir") (\_ -> return libdir) 41 | getDataDir = catchIO (getEnv "MaxMspOsc_datadir") (\_ -> return datadir) 42 | getLibexecDir = catchIO (getEnv "MaxMspOsc_libexecdir") (\_ -> return libexecdir) 43 | getSysconfDir = catchIO (getEnv "MaxMspOsc_sysconfdir") (\_ -> return sysconfdir) 44 | 45 | getDataFileName :: FilePath -> IO FilePath 46 | getDataFileName name = do 47 | dir <- getDataDir 48 | return (dir ++ "/" ++ name) 49 | -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/build/autogen/cabal_macros.h: -------------------------------------------------------------------------------- 1 | /* DO NOT EDIT: This file is automatically generated by Cabal */ 2 | 3 | /* package MaxMspOsc-0.1.0.0 */ 4 | #define VERSION_MaxMspOsc "0.1.0.0" 5 | #define MIN_VERSION_MaxMspOsc(major1,major2,minor) (\ 6 | (major1) < 0 || \ 7 | (major1) == 0 && (major2) < 1 || \ 8 | (major1) == 0 && (major2) == 1 && (minor) <= 0) 9 | 10 | /* package base-4.9.0.0 */ 11 | #define VERSION_base "4.9.0.0" 12 | #define MIN_VERSION_base(major1,major2,minor) (\ 13 | (major1) < 4 || \ 14 | (major1) == 4 && (major2) < 9 || \ 15 | (major1) == 4 && (major2) == 9 && (minor) <= 0) 16 | 17 | /* package tidal-0.9.6 */ 18 | #define VERSION_tidal "0.9.6" 19 | #define MIN_VERSION_tidal(major1,major2,minor) (\ 20 | (major1) < 0 || \ 21 | (major1) == 0 && (major2) < 9 || \ 22 | (major1) == 0 && (major2) == 9 && (minor) <= 6) 23 | 24 | /* tool cpphs-1.20.2 */ 25 | #define TOOL_VERSION_cpphs "1.20.2" 26 | #define MIN_TOOL_VERSION_cpphs(major1,major2,minor) (\ 27 | (major1) < 1 || \ 28 | (major1) == 1 && (major2) < 20 || \ 29 | (major1) == 1 && (major2) == 20 && (minor) <= 2) 30 | 31 | /* tool gcc-4.2.1 */ 32 | #define TOOL_VERSION_gcc "4.2.1" 33 | #define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\ 34 | (major1) < 4 || \ 35 | (major1) == 4 && (major2) < 2 || \ 36 | (major1) == 4 && (major2) == 2 && (minor) <= 1) 37 | 38 | /* tool ghc-8.0.1 */ 39 | #define TOOL_VERSION_ghc "8.0.1" 40 | #define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\ 41 | (major1) < 8 || \ 42 | (major1) == 8 && (major2) < 0 || \ 43 | (major1) == 8 && (major2) == 0 && (minor) <= 1) 44 | 45 | /* tool ghc-pkg-8.0.1 */ 46 | #define TOOL_VERSION_ghc_pkg "8.0.1" 47 | #define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\ 48 | (major1) < 8 || \ 49 | (major1) == 8 && (major2) < 0 || \ 50 | (major1) == 8 && (major2) == 0 && (minor) <= 1) 51 | 52 | /* tool haddock-2.17.2 */ 53 | #define TOOL_VERSION_haddock "2.17.2" 54 | #define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\ 55 | (major1) < 2 || \ 56 | (major1) == 2 && (major2) < 17 || \ 57 | (major1) == 2 && (major2) == 17 && (minor) <= 2) 58 | 59 | /* tool happy-1.19.5 */ 60 | #define TOOL_VERSION_happy "1.19.5" 61 | #define MIN_TOOL_VERSION_happy(major1,major2,minor) (\ 62 | (major1) < 1 || \ 63 | (major1) == 1 && (major2) < 19 || \ 64 | (major1) == 1 && (major2) == 19 && (minor) <= 5) 65 | 66 | /* tool hpc-0.67 */ 67 | #define TOOL_VERSION_hpc "0.67" 68 | #define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\ 69 | (major1) < 0 || \ 70 | (major1) == 0 && (major2) < 67 || \ 71 | (major1) == 0 && (major2) == 67 && (minor) <= 0) 72 | 73 | /* tool hsc2hs-0.68 */ 74 | #define TOOL_VERSION_hsc2hs "0.68" 75 | #define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\ 76 | (major1) < 0 || \ 77 | (major1) == 0 && (major2) < 68 || \ 78 | (major1) == 0 && (major2) == 68 && (minor) <= 0) 79 | 80 | /* tool hscolour-1.24 */ 81 | #define TOOL_VERSION_hscolour "1.24" 82 | #define MIN_TOOL_VERSION_hscolour(major1,major2,minor) (\ 83 | (major1) < 1 || \ 84 | (major1) == 1 && (major2) < 24 || \ 85 | (major1) == 1 && (major2) == 24 && (minor) <= 0) 86 | 87 | /* tool pkg-config-0.29.2 */ 88 | #define TOOL_VERSION_pkg_config "0.29.2" 89 | #define MIN_TOOL_VERSION_pkg_config(major1,major2,minor) (\ 90 | (major1) < 0 || \ 91 | (major1) == 0 && (major2) < 29 || \ 92 | (major1) == 0 && (major2) == 29 && (minor) <= 2) 93 | 94 | #define CURRENT_COMPONENT_ID "MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH" 95 | 96 | #define CURRENT_PACKAGE_KEY "MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH" 97 | 98 | -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/build/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH-ghc8.0.1.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/build/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH-ghc8.0.1.dylib -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/build/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/build/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH.a -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/build/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH_p.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/build/libHSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH_p.a -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/MaxMspOsc.haddock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/MaxMspOsc.haddock -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/Sound-Tidal-MaxMspOsc.html: -------------------------------------------------------------------------------- 1 | Sound.Tidal.MaxMspOsc

    MaxMspOsc-0.1.0.0

    Safe HaskellNone
    LanguageHaskell2010

    Sound.Tidal.MaxMspOsc

    Documentation

    maxmspSlang :: Show a => a -> OscSlang #

    maxmspStream :: Show a => String -> Int -> a -> IO (ParamPattern -> IO ()) #

    -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/doc-index.html: -------------------------------------------------------------------------------- 1 | MaxMspOsc-0.1.0.0 (Index)

    MaxMspOsc-0.1.0.0

    Index

    filterenvSound.Tidal.MaxMspOsc
    foldSound.Tidal.MaxMspOsc
    lfo1Sound.Tidal.MaxMspOsc
    lfo2Sound.Tidal.MaxMspOsc
    lfo3Sound.Tidal.MaxMspOsc
    maxmspShapeSound.Tidal.MaxMspOsc
    maxmspSlangSound.Tidal.MaxMspOsc
    maxmspStreamSound.Tidal.MaxMspOsc
    param1Sound.Tidal.MaxMspOsc
    param2Sound.Tidal.MaxMspOsc
    param3Sound.Tidal.MaxMspOsc
    param4Sound.Tidal.MaxMspOsc
    param5Sound.Tidal.MaxMspOsc
    param6Sound.Tidal.MaxMspOsc
    param7Sound.Tidal.MaxMspOsc
    param8Sound.Tidal.MaxMspOsc
    pitchenvSound.Tidal.MaxMspOsc
    warpSound.Tidal.MaxMspOsc
    -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/frames.html: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/haddock-util.js: -------------------------------------------------------------------------------- 1 | // Haddock JavaScript utilities 2 | 3 | var rspace = /\s\s+/g, 4 | rtrim = /^\s+|\s+$/g; 5 | 6 | function spaced(s) { return (" " + s + " ").replace(rspace, " "); } 7 | function trim(s) { return s.replace(rtrim, ""); } 8 | 9 | function hasClass(elem, value) { 10 | var className = spaced(elem.className || ""); 11 | return className.indexOf( " " + value + " " ) >= 0; 12 | } 13 | 14 | function addClass(elem, value) { 15 | var className = spaced(elem.className || ""); 16 | if ( className.indexOf( " " + value + " " ) < 0 ) { 17 | elem.className = trim(className + " " + value); 18 | } 19 | } 20 | 21 | function removeClass(elem, value) { 22 | var className = spaced(elem.className || ""); 23 | className = className.replace(" " + value + " ", " "); 24 | elem.className = trim(className); 25 | } 26 | 27 | function toggleClass(elem, valueOn, valueOff, bool) { 28 | if (bool == null) { bool = ! hasClass(elem, valueOn); } 29 | if (bool) { 30 | removeClass(elem, valueOff); 31 | addClass(elem, valueOn); 32 | } 33 | else { 34 | removeClass(elem, valueOn); 35 | addClass(elem, valueOff); 36 | } 37 | return bool; 38 | } 39 | 40 | 41 | function makeClassToggle(valueOn, valueOff) 42 | { 43 | return function(elem, bool) { 44 | return toggleClass(elem, valueOn, valueOff, bool); 45 | } 46 | } 47 | 48 | toggleShow = makeClassToggle("show", "hide"); 49 | toggleCollapser = makeClassToggle("collapser", "expander"); 50 | 51 | function toggleSection(id) 52 | { 53 | var b = toggleShow(document.getElementById("section." + id)); 54 | toggleCollapser(document.getElementById("control." + id), b); 55 | rememberCollapsed(id, b); 56 | return b; 57 | } 58 | 59 | var collapsed = {}; 60 | function rememberCollapsed(id, b) 61 | { 62 | if(b) 63 | delete collapsed[id] 64 | else 65 | collapsed[id] = null; 66 | 67 | var sections = []; 68 | for(var i in collapsed) 69 | { 70 | if(collapsed.hasOwnProperty(i)) 71 | sections.push(i); 72 | } 73 | // cookie specific to this page; don't use setCookie which sets path=/ 74 | document.cookie = "collapsed=" + escape(sections.join('+')); 75 | } 76 | 77 | function restoreCollapsed() 78 | { 79 | var cookie = getCookie("collapsed"); 80 | if(!cookie) 81 | return; 82 | 83 | var ids = cookie.split('+'); 84 | for(var i in ids) 85 | { 86 | if(document.getElementById("section." + ids[i])) 87 | toggleSection(ids[i]); 88 | } 89 | } 90 | 91 | function setCookie(name, value) { 92 | document.cookie = name + "=" + escape(value) + ";path=/;"; 93 | } 94 | 95 | function clearCookie(name) { 96 | document.cookie = name + "=;path=/;expires=Thu, 01-Jan-1970 00:00:01 GMT;"; 97 | } 98 | 99 | function getCookie(name) { 100 | var nameEQ = name + "="; 101 | var ca = document.cookie.split(';'); 102 | for(var i=0;i < ca.length;i++) { 103 | var c = ca[i]; 104 | while (c.charAt(0)==' ') c = c.substring(1,c.length); 105 | if (c.indexOf(nameEQ) == 0) { 106 | return unescape(c.substring(nameEQ.length,c.length)); 107 | } 108 | } 109 | return null; 110 | } 111 | 112 | 113 | 114 | var max_results = 75; // 50 is not enough to search for map in the base libraries 115 | var shown_range = null; 116 | var last_search = null; 117 | 118 | function quick_search() 119 | { 120 | perform_search(false); 121 | } 122 | 123 | function full_search() 124 | { 125 | perform_search(true); 126 | } 127 | 128 | 129 | function perform_search(full) 130 | { 131 | var text = document.getElementById("searchbox").value.toLowerCase(); 132 | if (text == last_search && !full) return; 133 | last_search = text; 134 | 135 | var table = document.getElementById("indexlist"); 136 | var status = document.getElementById("searchmsg"); 137 | var children = table.firstChild.childNodes; 138 | 139 | // first figure out the first node with the prefix 140 | var first = bisect(-1); 141 | var last = (first == -1 ? -1 : bisect(1)); 142 | 143 | if (first == -1) 144 | { 145 | table.className = ""; 146 | status.innerHTML = "No results found, displaying all"; 147 | } 148 | else if (first == 0 && last == children.length - 1) 149 | { 150 | table.className = ""; 151 | status.innerHTML = ""; 152 | } 153 | else if (last - first >= max_results && !full) 154 | { 155 | table.className = ""; 156 | status.innerHTML = "More than " + max_results + ", press Search to display"; 157 | } 158 | else 159 | { 160 | // decide what you need to clear/show 161 | if (shown_range) 162 | setclass(shown_range[0], shown_range[1], "indexrow"); 163 | setclass(first, last, "indexshow"); 164 | shown_range = [first, last]; 165 | table.className = "indexsearch"; 166 | status.innerHTML = ""; 167 | } 168 | 169 | 170 | function setclass(first, last, status) 171 | { 172 | for (var i = first; i <= last; i++) 173 | { 174 | children[i].className = status; 175 | } 176 | } 177 | 178 | 179 | // do a binary search, treating 0 as ... 180 | // return either -1 (no 0's found) or location of most far match 181 | function bisect(dir) 182 | { 183 | var first = 0, finish = children.length - 1; 184 | var mid, success = false; 185 | 186 | while (finish - first > 3) 187 | { 188 | mid = Math.floor((finish + first) / 2); 189 | 190 | var i = checkitem(mid); 191 | if (i == 0) i = dir; 192 | if (i == -1) 193 | finish = mid; 194 | else 195 | first = mid; 196 | } 197 | var a = (dir == 1 ? first : finish); 198 | var b = (dir == 1 ? finish : first); 199 | for (var i = b; i != a - dir; i -= dir) 200 | { 201 | if (checkitem(i) == 0) return i; 202 | } 203 | return -1; 204 | } 205 | 206 | 207 | // from an index, decide what the result is 208 | // 0 = match, -1 is lower, 1 is higher 209 | function checkitem(i) 210 | { 211 | var s = getitem(i).toLowerCase().substr(0, text.length); 212 | if (s == text) return 0; 213 | else return (s > text ? -1 : 1); 214 | } 215 | 216 | 217 | // from an index, get its string 218 | // this abstracts over alternates 219 | function getitem(i) 220 | { 221 | for ( ; i >= 0; i--) 222 | { 223 | var s = children[i].firstChild.firstChild.data; 224 | if (s.indexOf(' ') == -1) 225 | return s; 226 | } 227 | return ""; // should never be reached 228 | } 229 | } 230 | 231 | function setSynopsis(filename) { 232 | if (parent.window.synopsis && parent.window.synopsis.location) { 233 | if (parent.window.synopsis.location.replace) { 234 | // In Firefox this avoids adding the change to the history. 235 | parent.window.synopsis.location.replace(filename); 236 | } else { 237 | parent.window.synopsis.location = filename; 238 | } 239 | } 240 | } 241 | 242 | function addMenuItem(html) { 243 | var menu = document.getElementById("page-menu"); 244 | if (menu) { 245 | var btn = menu.firstChild.cloneNode(false); 246 | btn.innerHTML = html; 247 | menu.appendChild(btn); 248 | } 249 | } 250 | 251 | function adjustForFrames() { 252 | var bodyCls; 253 | 254 | if (parent.location.href == window.location.href) { 255 | // not in frames, so add Frames button 256 | addMenuItem("Frames"); 257 | bodyCls = "no-frame"; 258 | } 259 | else { 260 | bodyCls = "in-frame"; 261 | } 262 | addClass(document.body, bodyCls); 263 | } 264 | 265 | function reframe() { 266 | setCookie("haddock-reframe", document.URL); 267 | window.location = "frames.html"; 268 | } 269 | 270 | function postReframe() { 271 | var s = getCookie("haddock-reframe"); 272 | if (s) { 273 | parent.window.main.location = s; 274 | clearCookie("haddock-reframe"); 275 | } 276 | } 277 | 278 | function styles() { 279 | var i, a, es = document.getElementsByTagName("link"), rs = []; 280 | for (i = 0; a = es[i]; i++) { 281 | if(a.rel.indexOf("style") != -1 && a.title) { 282 | rs.push(a); 283 | } 284 | } 285 | return rs; 286 | } 287 | 288 | function addStyleMenu() { 289 | var as = styles(); 290 | var i, a, btns = ""; 291 | for(i=0; a = as[i]; i++) { 292 | btns += "
  • " 294 | + a.title + "
  • " 295 | } 296 | if (as.length > 1) { 297 | var h = "
    " 298 | + "Style ▾" 299 | + "" 300 | + "
    "; 301 | addMenuItem(h); 302 | } 303 | } 304 | 305 | function setActiveStyleSheet(title) { 306 | var as = styles(); 307 | var i, a, found; 308 | for(i=0; a = as[i]; i++) { 309 | a.disabled = true; 310 | // need to do this always, some browsers are edge triggered 311 | if(a.title == title) { 312 | found = a; 313 | } 314 | } 315 | if (found) { 316 | found.disabled = false; 317 | setCookie("haddock-style", title); 318 | } 319 | else { 320 | as[0].disabled = false; 321 | clearCookie("haddock-style"); 322 | } 323 | styleMenu(false); 324 | } 325 | 326 | function resetStyle() { 327 | var s = getCookie("haddock-style"); 328 | if (s) setActiveStyleSheet(s); 329 | } 330 | 331 | 332 | function styleMenu(show) { 333 | var m = document.getElementById('style-menu'); 334 | if (m) toggleShow(m, show); 335 | } 336 | 337 | 338 | function pageLoad() { 339 | addStyleMenu(); 340 | adjustForFrames(); 341 | resetStyle(); 342 | restoreCollapsed(); 343 | } 344 | 345 | -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/hslogo-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/hslogo-16.png -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/index-frames.html: -------------------------------------------------------------------------------- 1 | MaxMspOsc-0.1.0.0

    Modules

    -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/index.html: -------------------------------------------------------------------------------- 1 | MaxMspOsc-0.1.0.0

    MaxMspOsc-0.1.0.0

    MaxMspOsc-0.1.0.0

     

    Modules

    -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/mini_Sound-Tidal-MaxMspOsc.html: -------------------------------------------------------------------------------- 1 | Sound.Tidal.MaxMspOsc

    Sound.Tidal.MaxMspOsc

    maxmspShape

    maxmspSlang

    maxmspStream

    warp

    fold

    filterenv

    pitchenv

    lfo1

    lfo2

    lfo3

    param1

    param2

    param3

    param4

    param5

    param6

    param7

    param8

    -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/minus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/minus.gif -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/ocean.css: -------------------------------------------------------------------------------- 1 | /* @group Fundamentals */ 2 | 3 | * { margin: 0; padding: 0 } 4 | 5 | /* Is this portable? */ 6 | html { 7 | background-color: white; 8 | width: 100%; 9 | height: 100%; 10 | } 11 | 12 | body { 13 | background: white; 14 | color: black; 15 | text-align: left; 16 | min-height: 100%; 17 | position: relative; 18 | } 19 | 20 | p { 21 | margin: 0.8em 0; 22 | } 23 | 24 | ul, ol { 25 | margin: 0.8em 0 0.8em 2em; 26 | } 27 | 28 | dl { 29 | margin: 0.8em 0; 30 | } 31 | 32 | dt { 33 | font-weight: bold; 34 | } 35 | dd { 36 | margin-left: 2em; 37 | } 38 | 39 | a { text-decoration: none; } 40 | a[href]:link { color: rgb(196,69,29); } 41 | a[href]:visited { color: rgb(171,105,84); } 42 | a[href]:hover { text-decoration:underline; } 43 | 44 | a[href].def:link, a[href].def:visited { color: black; } 45 | a[href].def:hover { color: rgb(78, 98, 114); } 46 | 47 | /* @end */ 48 | 49 | /* @group Fonts & Sizes */ 50 | 51 | /* Basic technique & IE workarounds from YUI 3 52 | For reasons, see: 53 | http://yui.yahooapis.com/3.1.1/build/cssfonts/fonts.css 54 | */ 55 | 56 | body { 57 | font:13px/1.4 sans-serif; 58 | *font-size:small; /* for IE */ 59 | *font:x-small; /* for IE in quirks mode */ 60 | } 61 | 62 | h1 { font-size: 146.5%; /* 19pt */ } 63 | h2 { font-size: 131%; /* 17pt */ } 64 | h3 { font-size: 116%; /* 15pt */ } 65 | h4 { font-size: 100%; /* 13pt */ } 66 | h5 { font-size: 100%; /* 13pt */ } 67 | 68 | select, input, button, textarea { 69 | font:99% sans-serif; 70 | } 71 | 72 | table { 73 | font-size:inherit; 74 | font:100%; 75 | } 76 | 77 | pre, code, kbd, samp, tt, .src { 78 | font-family:monospace; 79 | *font-size:108%; 80 | line-height: 124%; 81 | } 82 | 83 | .links, .link { 84 | font-size: 85%; /* 11pt */ 85 | } 86 | 87 | #module-header .caption { 88 | font-size: 182%; /* 24pt */ 89 | } 90 | 91 | .info { 92 | font-size: 85%; /* 11pt */ 93 | } 94 | 95 | #table-of-contents, #synopsis { 96 | /* font-size: 85%; /* 11pt */ 97 | } 98 | 99 | 100 | /* @end */ 101 | 102 | /* @group Common */ 103 | 104 | .caption, h1, h2, h3, h4, h5, h6 { 105 | font-weight: bold; 106 | color: rgb(78,98,114); 107 | margin: 0.8em 0 0.4em; 108 | } 109 | 110 | * + h1, * + h2, * + h3, * + h4, * + h5, * + h6 { 111 | margin-top: 2em; 112 | } 113 | 114 | h1 + h2, h2 + h3, h3 + h4, h4 + h5, h5 + h6 { 115 | margin-top: inherit; 116 | } 117 | 118 | ul.links { 119 | list-style: none; 120 | text-align: left; 121 | float: right; 122 | display: inline-table; 123 | margin: 0 0 0 1em; 124 | } 125 | 126 | ul.links li { 127 | display: inline; 128 | border-left: 1px solid #d5d5d5; 129 | white-space: nowrap; 130 | padding: 0; 131 | } 132 | 133 | ul.links li a { 134 | padding: 0.2em 0.5em; 135 | } 136 | 137 | .hide { display: none; } 138 | .show { display: inherit; } 139 | .clear { clear: both; } 140 | 141 | .collapser { 142 | background-image: url(minus.gif); 143 | background-repeat: no-repeat; 144 | } 145 | .expander { 146 | background-image: url(plus.gif); 147 | background-repeat: no-repeat; 148 | } 149 | .collapser, .expander { 150 | padding-left: 14px; 151 | margin-left: -14px; 152 | cursor: pointer; 153 | } 154 | p.caption.collapser, 155 | p.caption.expander { 156 | background-position: 0 0.4em; 157 | } 158 | 159 | .instance.collapser, .instance.expander { 160 | margin-left: 0px; 161 | background-position: left center; 162 | min-width: 9px; 163 | min-height: 9px; 164 | } 165 | 166 | 167 | pre { 168 | padding: 0.25em; 169 | margin: 0.8em 0; 170 | background: rgb(229,237,244); 171 | overflow: auto; 172 | border-bottom: 0.25em solid white; 173 | /* white border adds some space below the box to compensate 174 | for visual extra space that paragraphs have between baseline 175 | and the bounding box */ 176 | } 177 | 178 | .src { 179 | background: #f0f0f0; 180 | padding: 0.2em 0.5em; 181 | } 182 | 183 | .keyword { font-weight: normal; } 184 | .def { font-weight: bold; } 185 | 186 | @media print { 187 | #footer { display: none; } 188 | } 189 | 190 | /* @end */ 191 | 192 | /* @group Page Structure */ 193 | 194 | #content { 195 | margin: 0 auto; 196 | padding: 0 2em 6em; 197 | } 198 | 199 | #package-header { 200 | background: rgb(41,56,69); 201 | border-top: 5px solid rgb(78,98,114); 202 | color: #ddd; 203 | padding: 0.2em; 204 | position: relative; 205 | text-align: left; 206 | } 207 | 208 | #package-header .caption { 209 | background: url(hslogo-16.png) no-repeat 0em; 210 | color: white; 211 | margin: 0 2em; 212 | font-weight: normal; 213 | font-style: normal; 214 | padding-left: 2em; 215 | } 216 | 217 | #package-header a:link, #package-header a:visited { color: white; } 218 | #package-header a:hover { background: rgb(78,98,114); } 219 | 220 | #module-header .caption { 221 | color: rgb(78,98,114); 222 | font-weight: bold; 223 | border-bottom: 1px solid #ddd; 224 | } 225 | 226 | table.info { 227 | float: right; 228 | padding: 0.5em 1em; 229 | border: 1px solid #ddd; 230 | color: rgb(78,98,114); 231 | background-color: #fff; 232 | max-width: 40%; 233 | border-spacing: 0; 234 | position: relative; 235 | top: -0.5em; 236 | margin: 0 0 0 2em; 237 | } 238 | 239 | .info th { 240 | padding: 0 1em 0 0; 241 | } 242 | 243 | div#style-menu-holder { 244 | position: relative; 245 | z-index: 2; 246 | display: inline; 247 | } 248 | 249 | #style-menu { 250 | position: absolute; 251 | z-index: 1; 252 | overflow: visible; 253 | background: #374c5e; 254 | margin: 0; 255 | text-align: center; 256 | right: 0; 257 | padding: 0; 258 | top: 1.25em; 259 | } 260 | 261 | #style-menu li { 262 | display: list-item; 263 | border-style: none; 264 | margin: 0; 265 | padding: 0; 266 | color: #000; 267 | list-style-type: none; 268 | } 269 | 270 | #style-menu li + li { 271 | border-top: 1px solid #919191; 272 | } 273 | 274 | #style-menu a { 275 | width: 6em; 276 | padding: 3px; 277 | display: block; 278 | } 279 | 280 | #footer { 281 | background: #ddd; 282 | border-top: 1px solid #aaa; 283 | padding: 0.5em 0; 284 | color: #666; 285 | text-align: center; 286 | position: absolute; 287 | bottom: 0; 288 | width: 100%; 289 | height: 3em; 290 | } 291 | 292 | /* @end */ 293 | 294 | /* @group Front Matter */ 295 | 296 | #table-of-contents { 297 | float: right; 298 | clear: right; 299 | background: #faf9dc; 300 | border: 1px solid #d8d7ad; 301 | padding: 0.5em 1em; 302 | max-width: 20em; 303 | margin: 0.5em 0 1em 1em; 304 | } 305 | 306 | #table-of-contents .caption { 307 | text-align: center; 308 | margin: 0; 309 | } 310 | 311 | #table-of-contents ul { 312 | list-style: none; 313 | margin: 0; 314 | } 315 | 316 | #table-of-contents ul ul { 317 | margin-left: 2em; 318 | } 319 | 320 | #description .caption { 321 | display: none; 322 | } 323 | 324 | #synopsis { 325 | display: none; 326 | } 327 | 328 | .no-frame #synopsis { 329 | display: block; 330 | position: fixed; 331 | right: 0; 332 | height: 80%; 333 | top: 10%; 334 | padding: 0; 335 | max-width: 75%; 336 | } 337 | 338 | #synopsis .caption { 339 | float: left; 340 | width: 29px; 341 | color: rgba(255,255,255,0); 342 | height: 110px; 343 | margin: 0; 344 | font-size: 1px; 345 | padding: 0; 346 | } 347 | 348 | #synopsis p.caption.collapser { 349 | background: url(synopsis.png) no-repeat -64px -8px; 350 | } 351 | 352 | #synopsis p.caption.expander { 353 | background: url(synopsis.png) no-repeat 0px -8px; 354 | } 355 | 356 | #synopsis ul { 357 | height: 100%; 358 | overflow: auto; 359 | padding: 0.5em; 360 | margin: 0; 361 | } 362 | 363 | #synopsis ul ul { 364 | overflow: hidden; 365 | } 366 | 367 | #synopsis ul, 368 | #synopsis ul li.src { 369 | background-color: #faf9dc; 370 | white-space: nowrap; 371 | list-style: none; 372 | margin-left: 0; 373 | } 374 | 375 | /* @end */ 376 | 377 | /* @group Main Content */ 378 | 379 | #interface div.top { margin: 2em 0; } 380 | #interface h1 + div.top, 381 | #interface h2 + div.top, 382 | #interface h3 + div.top, 383 | #interface h4 + div.top, 384 | #interface h5 + div.top { 385 | margin-top: 1em; 386 | } 387 | #interface .src .selflink, 388 | #interface .src .link { 389 | float: right; 390 | color: #919191; 391 | background: #f0f0f0; 392 | padding: 0 0.5em 0.2em; 393 | margin: 0 -0.5em 0 0; 394 | } 395 | #interface .src .selflink { 396 | border-left: 1px solid #919191; 397 | margin: 0 -0.5em 0 0.5em; 398 | } 399 | 400 | #interface span.fixity { 401 | color: #919191; 402 | border-left: 1px solid #919191; 403 | padding: 0.2em 0.5em 0.2em 0.5em; 404 | margin: 0 -1em 0 1em; 405 | } 406 | 407 | #interface span.rightedge { 408 | border-left: 1px solid #919191; 409 | padding: 0.2em 0 0.2em 0; 410 | margin: 0 0 0 1em; 411 | } 412 | 413 | #interface table { border-spacing: 2px; } 414 | #interface td { 415 | vertical-align: top; 416 | padding-left: 0.5em; 417 | } 418 | #interface td.src { 419 | white-space: nowrap; 420 | } 421 | #interface td.doc p { 422 | margin: 0; 423 | } 424 | #interface td.doc p + p { 425 | margin-top: 0.8em; 426 | } 427 | 428 | .clearfix:after { 429 | clear: both; 430 | content: " "; 431 | display: block; 432 | height: 0; 433 | visibility: hidden; 434 | } 435 | 436 | .subs ul { 437 | list-style: none; 438 | display: table; 439 | margin: 0; 440 | } 441 | 442 | .subs ul li { 443 | display: table-row; 444 | } 445 | 446 | .subs ul li dfn { 447 | display: table-cell; 448 | font-style: normal; 449 | font-weight: bold; 450 | margin: 1px 0; 451 | white-space: nowrap; 452 | } 453 | 454 | .subs ul li > .doc { 455 | display: table-cell; 456 | padding-left: 0.5em; 457 | margin-bottom: 0.5em; 458 | } 459 | 460 | .subs ul li > .doc p { 461 | margin: 0; 462 | } 463 | 464 | /* Render short-style data instances */ 465 | .inst ul { 466 | height: 100%; 467 | padding: 0.5em; 468 | margin: 0; 469 | } 470 | 471 | .inst, .inst li { 472 | list-style: none; 473 | margin-left: 1em; 474 | } 475 | 476 | /* Workaround for bug in Firefox (issue #384) */ 477 | .inst-left { 478 | float: left; 479 | } 480 | 481 | .top p.src { 482 | border-top: 1px solid #ccc; 483 | } 484 | 485 | .subs, .doc { 486 | /* use this selector for one level of indent */ 487 | padding-left: 2em; 488 | } 489 | 490 | .warning { 491 | color: red; 492 | } 493 | 494 | .arguments { 495 | margin-top: -0.4em; 496 | } 497 | .arguments .caption { 498 | display: none; 499 | } 500 | 501 | .fields { padding-left: 1em; } 502 | 503 | .fields .caption { display: none; } 504 | 505 | .fields p { margin: 0 0; } 506 | 507 | /* this seems bulky to me 508 | .methods, .constructors { 509 | background: #f8f8f8; 510 | border: 1px solid #eee; 511 | } 512 | */ 513 | 514 | /* @end */ 515 | 516 | /* @group Auxillary Pages */ 517 | 518 | 519 | .extension-list { 520 | list-style-type: none; 521 | margin-left: 0; 522 | } 523 | 524 | #mini { 525 | margin: 0 auto; 526 | padding: 0 1em 1em; 527 | } 528 | 529 | #mini > * { 530 | font-size: 93%; /* 12pt */ 531 | } 532 | 533 | #mini #module-list .caption, 534 | #mini #module-header .caption { 535 | font-size: 125%; /* 15pt */ 536 | } 537 | 538 | #mini #interface h1, 539 | #mini #interface h2, 540 | #mini #interface h3, 541 | #mini #interface h4 { 542 | font-size: 109%; /* 13pt */ 543 | margin: 1em 0 0; 544 | } 545 | 546 | #mini #interface .top, 547 | #mini #interface .src { 548 | margin: 0; 549 | } 550 | 551 | #mini #module-list ul { 552 | list-style: none; 553 | margin: 0; 554 | } 555 | 556 | #alphabet ul { 557 | list-style: none; 558 | padding: 0; 559 | margin: 0.5em 0 0; 560 | text-align: center; 561 | } 562 | 563 | #alphabet li { 564 | display: inline; 565 | margin: 0 0.25em; 566 | } 567 | 568 | #alphabet a { 569 | font-weight: bold; 570 | } 571 | 572 | #index .caption, 573 | #module-list .caption { font-size: 131%; /* 17pt */ } 574 | 575 | #index table { 576 | margin-left: 2em; 577 | } 578 | 579 | #index .src { 580 | font-weight: bold; 581 | } 582 | #index .alt { 583 | font-size: 77%; /* 10pt */ 584 | font-style: italic; 585 | padding-left: 2em; 586 | } 587 | 588 | #index td + td { 589 | padding-left: 1em; 590 | } 591 | 592 | #module-list ul { 593 | list-style: none; 594 | margin: 0 0 0 2em; 595 | } 596 | 597 | #module-list li { 598 | clear: right; 599 | } 600 | 601 | #module-list span.collapser, 602 | #module-list span.expander { 603 | background-position: 0 0.3em; 604 | } 605 | 606 | #module-list .package { 607 | float: right; 608 | } 609 | 610 | /* @end */ 611 | -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/plus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/plus.gif -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/synopsis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/doc/html/MaxMspOsc/synopsis.png -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/package.conf.inplace/MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH.conf: -------------------------------------------------------------------------------- 1 | name: MaxMspOsc 2 | version: 0.1.0.0 3 | id: MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH 4 | key: MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH 5 | license: BSD3 6 | copyright: 2018 Author name here 7 | maintainer: example@example.com 8 | homepage: https://github.com/githubuser/MaxMspOsc#readme 9 | category: Web 10 | author: Author name here 11 | exposed: True 12 | exposed-modules: 13 | Sound.Tidal.MaxMspOsc 14 | abi: 15 | trusted: False 16 | import-dirs: /Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/build 17 | library-dirs: /Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/build 18 | data-dir: /Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc 19 | hs-libraries: HSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH 20 | depends: 21 | base-4.9.0.0 tidal-0.9.6-KGZzHkkaZ4355BtcG1PTOw 22 | haddock-interfaces: /Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOsc/MaxMspOsc.haddock 23 | haddock-html: /Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOsc 24 | -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/package.conf.inplace/package.cache: -------------------------------------------------------------------------------- 1 | ghcpkgMaxMspOsc-0.1.0.0 MaxMspOsc(MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH base-4.9.0.0"tidal-0.9.6-KGZzHkkaZ4355BtcG1PTOwI/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/build*HSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkHI/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/buildh/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOsc/MaxMspOsc.haddockV/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOscSound.Tidal.MaxMspOsc MaxMspOsc(MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH(MaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH2018 Author name hereexample@example.comAuthor name here.https://github.com/githubuser/MaxMspOsc#readmeWebSoundTidal MaxMspOscI/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/buildI/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/build>/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc*HSMaxMspOsc-0.1.0.0-CK6siUG6FC5HHsg7Bo0rkH base-4.9.0.0"tidal-0.9.6-KGZzHkkaZ4355BtcG1PTOwh/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOsc/MaxMspOsc.haddockV/Users/madskjeldgaard/Desktop/scripts/tidal/Packages/MaxMspOsc/dist/doc/html/MaxMspOsc -------------------------------------------------------------------------------- /tidal/MaxMspOsc/dist/setup-config: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madskjeldgaard/tidal-maxmsp/4feb314d494ac1a17cf776897466c036b1862956/tidal/MaxMspOsc/dist/setup-config -------------------------------------------------------------------------------- /tidal/MaxMspOsc/src/Sound/Tidal/MaxMspOsc.hs: -------------------------------------------------------------------------------- 1 | module Sound.Tidal.MaxMspOsc where 2 | 3 | import Sound.Tidal.Context 4 | import Sound.Tidal.Scales 5 | import Sound.Tidal.Chords 6 | import Sound.Tidal.OscStream 7 | -- 8 | -- Send OSC via TIDAL 9 | -- taken from: http://ask.tidalcycles.org/question/367/how-to-define-a-custom-osc-message/ 10 | -- 11 | 12 | maxmspShape = Shape { 13 | -- Define the parameters. The first bit is the type - S for 14 | -- string, F for float, I for integer. The second part is the 15 | -- name of the parameter. The third is the default value for the 16 | -- parameter (only used if 'namedParams' defined below is set to 17 | -- 'False', so set to Nothing here). 18 | params = [ 19 | I "note" Nothing, 20 | F "param1" Nothing, 21 | F "velocity" (Just 1), 22 | F "param2" Nothing, 23 | F "param3" Nothing, 24 | F "param4" Nothing, 25 | F "param5" Nothing, 26 | F "param6" Nothing, 27 | F "param7" Nothing, 28 | F "param8" Nothing, 29 | F "warp" Nothing, 30 | F "fold" Nothing, 31 | F "filterenv" Nothing, 32 | F "pitchenv" Nothing, 33 | F "lfo1" Nothing, 34 | F "lfo2" Nothing, 35 | F "lfo3" Nothing 36 | ], 37 | -- Whether to add the current cycles per second to the message 38 | cpsStamp = True, 39 | -- How far ahead of time to send the message 40 | latency = 0 41 | } 42 | -- 43 | maxmspSlang streamNo = OscSlang { 44 | -- the OSC 'path' 45 | path = "/fromTidal/" ++ (show streamNo), -- Will become something like /fromTidal/1 or /fromTidal/2 etc 46 | -- Whether to timestamp the message with 47 | -- its logical time - can be 'BundleStamp' 48 | -- (put in a timestamped bundle), 49 | -- 'MessageStamp' (put in the message 50 | -- parameters), or 'NoStamp' (don't timestamp) 51 | timestamp = NoStamp, 52 | -- Whether to interleave the parameter 53 | -- names in the message. If this isn't 54 | -- set, all parameters will be sent, using 55 | -- defaults set above if they're not 56 | -- given in a tidal pattern 57 | namedParams = True, 58 | -- Parameters to stick on the beginning of 59 | -- a message 60 | preamble = [] 61 | } 62 | -- a function to start your OSC stream, where "127.0.0.1" is the 63 | -- target host and 7000 the port number 64 | maxmspStream targetip targetport streamNo = do 65 | s <- makeConnection targetip targetport (maxmspSlang streamNo) 66 | stream (Backend s $ (\_ _ _ -> return ())) maxmspShape 67 | -- pattern parameter functions, where makeS is for string, makeF for floats, and so on. 68 | -- Many parameter functions are already defined and don't need re-defining, see here: 69 | -- https://github.com/tidalcycles/Tidal/blob/master/Sound/Tidal/Params.hs 70 | -- 71 | warp = makeF maxmspShape "warp" 72 | fold = makeF maxmspShape "fold" 73 | filterenv = makeF maxmspShape "filterenv" 74 | pitchenv = makeF maxmspShape "pitchenv" 75 | lfo1 = makeF maxmspShape "lfo1" 76 | lfo2 = makeF maxmspShape "lfo2" 77 | lfo3 = makeF maxmspShape "lfo3" 78 | -- 79 | param1 = makeF maxmspShape "param1" 80 | param2 = makeF maxmspShape "param2" 81 | param3 = makeF maxmspShape "param3" 82 | param4 = makeF maxmspShape "param4" 83 | param5 = makeF maxmspShape "param5" 84 | param6 = makeF maxmspShape "param6" 85 | param7 = makeF maxmspShape "param7" 86 | param8 = makeF maxmspShape "param8" 87 | -------------------------------------------------------------------------------- /tidal/tidal-maxmsp-example.tidal: -------------------------------------------------------------------------------- 1 | -- 1. Import the Max Msp module which defines an osc stream and what to send + how 2 | -- It basically sends data off as a list of pairs (parameter, value) to the url /fromTidal/ 3 | import Sound.Tidal.MaxMspOsc 4 | 5 | -- 2. Open up a connection 6 | -- 7 | -- You can make as many of these connections as you want, just remember to 8 | -- choose an unused stream (or port) when you make a new one 9 | max1 <- maxmspStream "127.0.0.1" 8020 1 -- Destination ip (default is your own computer), port and streamNumber 10 | 11 | max2 <- maxmspStream "127.0.0.1" 8020 2 12 | 13 | max3 <- maxmspStream "127.0.0.1" 8020 3 14 | 15 | -- 3. Start live coding 16 | max1 $ velocity "0 0.25 0.5 1.0" 17 | --------------------------------------------------------------------------------