{"id":923,"date":"2021-06-21T03:47:58","date_gmt":"2021-06-20T18:47:58","guid":{"rendered":"https:\/\/machiaworx.net\/?p=923"},"modified":"2021-06-21T03:52:02","modified_gmt":"2021-06-20T18:52:02","slug":"%e5%8a%a0%e7%ae%97%e5%90%88%e6%88%90%e3%82%b7%e3%83%b3%e3%82%bb%e3%81%ab%e9%96%a2%e3%81%99%e3%82%8b%e3%83%a1%e3%83%a2%e3%80%82","status":"publish","type":"post","link":"https:\/\/machiaworx.net\/?p=923","title":{"rendered":"\u52a0\u7b97\u5408\u6210\u30b7\u30f3\u30bb\u306b\u95a2\u3059\u308b\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u30e1\u30e2\u3002"},"content":{"rendered":"<p><a href=\"http:\/\/paste.dy.fi\/ZGH\">pastebin<\/a><\/p>\n<p>\u30b7\u30f3\u30bb\u306b\u95a2\u3059\u308b\u60c5\u5831\u304c\u30b3\u30f3\u30d1\u30af\u30c8\u306b\u307e\u3068\u307e\u3063\u3066\u3044\u3066\u3044\u3044\u8cc7\u6599\u3060\u3063\u305f\u306e\u3067\u3001<br \/>\n\u4fdd\u5b88\u306e\u610f\u5473\u5408\u3044\u3067\u5225\u9014\u6b8b\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<p>\u8a00\u8a9e\u306fGLSL\u3067\u3059\u3002<\/p>\n<p>\u30d9\u30fc\u30b9\u306b\u306a\u308b\u30d7\u30ec\u30bc\u30f3\u8cc7\u6599\u306f\u3053\u308c\u3002<br \/>\n<a href=\"http:\/\/www.graffathon.fi\/2016\/presentations\/additive_slides.pdf\">additive_slides.pdf (graffathon.fi)<\/a><\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n#define RATE (44100.0)\r\n#define NOTEMAGIC (1.059460646483)\r\n#define TAU (2.0*PI)\r\n#define NOTEFREQ(pitch) (pow(NOTEMAGIC, pitch) * 440.0)\r\n#define PI (3.14159265358979323846)\r\n#define FBO_WIDTH (4096.0)\r\n#define EVENT_MAX (64)\r\n\r\n#define SHRT_MAX   32767\r\n#define BUF_WIDTH 1024\r\n\r\n\r\nuniform int framesRendered;\r\n \r\n#ifdef VERTEX\r\nin vec2 position;\t\r\nvoid main()\r\n{\r\n\tgl_Position = vec4(position, 0.0, 1.0);\r\n}\r\n#endif\r\n\r\n#ifdef FRAGMENT\r\n\/\/layout(location=0) out vec4 out_Color;\r\nlayout(location=0) out vec4 out_Value;\r\n\r\nfloat saw(float t) {\r\n    return fract(t)*2.0-1.0;\r\n}\r\n\r\nfloat softsaw(float t, float s) {\r\n    return mix(fract(t)*2-1, -sin(t*2.0*PI), s);\r\n}\r\n\r\n\/\/ Range: [-1, 1]\r\nfloat rand(float t) {\r\n    return sin(1e5*sin(t*100.));\r\n}\r\n\r\nfloat phatsaw(float t, float form) {\r\n    float w = 0.0;\r\n    const int COUNT = 5;\r\n    for (int i=0;i&lt;COUNT;i++) {\r\n    w+= softsaw(t + sin(0.4*i)*0.2, form) * (1.0\/COUNT);\r\n    }\r\n    return w;\r\n}\r\n\r\nfloat arp_pattern(float t) {\r\n    \/\/int[](0,4,9,7,2,4,7,9);\r\n    int tones[16] = int[](0,4,9,7,2,4,7,9, -1,4,9,7,-5,4,7,9);\r\n    float arp = 0.0;\r\n    float at = t;\r\n    int arpind = int(at*4) % 16;\r\n    float arpnote = tones[arpind] + 0.31;\r\n    arp = pow(phatsaw(t*NOTEFREQ(arpnote), 0.7 + sin(t*.2)*0.1), 3.0);\r\n    arp *= 0.7*(0.4 + sin(arpind*3.0)*0.1)*max(0.4, -softsaw(at*6.0, 0.8));\r\n    return arp;\r\n}\r\n\r\nvec2 smallsyn(float t, float f) {\r\n    float basstime = t\/8.0;\r\n    return  0.5*\r\n        ((1.0-fract(basstime*8.0)) \r\n            * (fract(basstime*12.0))\r\n            * abs(sin(basstime*9.0*PI)))\r\n        *vec2(softsaw(t*f*12., 0.7+.3*fract(basstime*2.0)));\r\n}\r\n\r\nvec2 percussion(float t) {\r\n    float b = (t-0.20)*0.5;\r\n    \/\/float perc = 0.07*sin(b*2*PI*0.5) * clamp((sin(b*2*PI*8)-0.55)*40.0, 0.0, 1.0) * rand(t);\r\n    float perc = 0.04*sin(b*2*PI*0.5) * clamp((sin(b*2*PI*8)-(1.8-t*0.013))*40.0, 0.0, 1.0) * rand(t) * clamp((t-32)*0.018, 0.0, 1.0)\r\n;\r\n    float tt = 20+mod(t, 30.);\r\n    perc += 0.6 * clamp((-0.8-softsaw((b+0.6)*1.0, 0.05)), 0.0, 1.0) * sin(tt*tt*tt*1e4);\r\n\r\n    return vec2(perc);\r\n}\r\n\r\nfloat bd(float t) {\r\n    float tt = (1.0-min(1.0, t*0.6));\r\n    tt *= tt * tt;\r\n    float amp = 1.0;\r\n    amp = clamp(tt - 0.3, 0.0, 1.0);\r\n\r\n    float f = 40.0 + tt*50.0;\r\n    float w = sin(2.0*PI*t*f);\r\n    return w*0.5 *amp;\r\n}\r\n\r\n\/\/ thanks iq\r\nfloat impulse(float k, float x)\r\n{\r\n    float h = k*x;\r\n    return h*exp(1.0-h);\r\n}\r\n\r\nvec2 synth(float t, out vec2 out_bass)  {\r\n\tfloat volume = 0.4;\r\n\tvec2 wave = vec2(0.0f);\/\/sin(t*2.0*PI*(1000.0) + chn) * volume;\r\n\r\n    int count = 150;\r\n    float mult = t*2.0*PI;\r\n    float vol = 1.0\/count;\r\n\r\n    \/\/int tones[8] = int[](0,2,4,5,7,9,10,3);\r\n    int tones[8] = int[](0,4,9,7,2,4,7,9);\r\n\r\n    int bass_range = 2;\r\n    if (t &gt; 32) {\r\n        bass_range = 4;\r\n    }\r\n    float basstime = t\/8.0;\r\n    int bass_index = (int(basstime) % bass_range);\r\n    float bassfreq = NOTEFREQ(1.0*tones[bass_index] - 12*3 + 0.2);\r\n    \/\/float bassenv = min(1., pow(t*0.025, 2.0)) * max(0.6, pow(1. - fract(basstime*1.0), 1.0));\r\n    float bassenv = min(1., pow(t*0.025, 2.0))\r\n            * min(fract(basstime)*150.0, 1.0)\r\n            * min((1.0-fract(basstime))*100.0, 1.0)\r\n            * max(0.6, pow(1. - fract(basstime*1.0), 1.0));\r\n\r\n    out_bass = vec2(0.3 * bassenv * softsaw(t*bassfreq, max(0.9, 1.0-t*0.0025)));\r\n\r\n    float soft = (1.0 + sin(t*0.1))*0.5;\r\n\r\n    for (int i=0;i&lt;count;i++) {\r\n        \/\/int add = int(t*4.0) % 5;\r\n        \/\/int add = int(t\/2) % 4;\r\n        \/\/float amp = clamp((sin(t*PI*9.0 + i*20.0)-0.5)*(10.+sin(1.*i)*9.), 0.0, 1.0);\r\n        float amp = 3.0;\r\n        \/\/float amp = 3.0 * max(0.3, fract(t*2.0 - i*0.001));\r\n        \/\/float amp = clamp((1.0-saw(i*1.0)), 0.0, 1.0);\r\n        \/\/float amp = 0.5f;\r\n        int index = (i) % 8;\r\n        int oct = (i\/12) % 4;\r\n        float note = -12*2 +  (tones[index] + oct*12) % (12*6) + sin(0.001*i)*3.0;\r\n        float hz = NOTEFREQ(note);\r\n        float p = 0.5 + sin(i*1.)*0.2; \/\/ ::: STEREO SOUND :::\r\n        wave += vec2(softsaw(t*hz, soft))*vol*amp*vec2(p, 1.0-p);\r\n    }\r\n\r\n    \/\/wave *= max(0.3, fract(t*2.0));\r\n\r\n    vec2 perc = vec2(1.0, 1.0) * percussion(t) + vec2(0.2, 0.3) * percussion(t-0.1) \r\n        + vec2(0.2, 0.1) * percussion(t-0.18) + vec2(0.1, 0.2) * percussion(t-0.22);\r\n    wave *= clamp(t, 0.0, 1.0);\r\n    float synth_fadeout = clamp(1.0-(t-115)*0.04, 0.0, 1.0);\r\n    wave *= max(0.5, synth_fadeout); \/\/ fade out \r\n    out_bass *= synth_fadeout;\r\n    perc *= clamp((t-32)*0.08, 0.0, 1.0); \/\/ start fade in at 32s\r\n    perc *= clamp(1.0-(t-110)*0.05, 0.0, 1.0); \/\/ fade out \r\n\r\n    vec2 audio;\r\n    audio = wave + perc;\r\n\r\n    vec2 arp = vec2(arp_pattern(t), arp_pattern(t-0.03)*0.8);\r\n    arp += vec2(arp_pattern(t-0.3)*0.3, arp_pattern(t-0.6)*0.2);\r\n    arp *= clamp((t-60)*0.1, 0.0, 1.0);\r\n\r\n    vec2 syn = vec2(0.7, 1.0) * smallsyn(t, bassfreq)\r\n             + vec2(0.6, 0.3) * smallsyn(t-0.05, bassfreq-0.1);\r\n    syn += 0.1*smallsyn(t*4.0, bassfreq);\r\n    syn *= clamp((t-122)*0.1, 0.0, 0.4);\r\n    audio += syn;\r\n\r\n    audio += arp;\r\n    out_bass += vec2(bd(fract(t))) * float[](1., 0., 0., 0.5)[int(floor(t))%4]\r\n            * clamp(1.0-(t-120)*0.1, 0.0, 1.0) * clamp((t-80)*0.1, 0.0, 1.0);\r\n    float fadeout = clamp(1.0-(t-125)*0.035, 0.0, 1.0);\r\n    audio *= fadeout;\r\n\r\n    \/\/ Noise mat peak.\r\n    audio += vec2(rand(t*.9), rand(t*.8)) * 0.04 * impulse(0.4, sqrt(10.0*max(0.0, t-96.0)));\r\n\r\n    return audio;\r\n}\r\n\r\n\r\n\r\nvoid main(void) {\r\n\tint pos = framesRendered + (int(gl_FragCoord.x)) + (int(gl_FragCoord.y))*BUF_WIDTH;\r\n    int tpos = pos\/2;\r\n\tfloat t = float(pos)\/RATE;\r\n    t*=0.93; \/\/ for vaporwave\r\n    \/\/t += sin(t)*0.01; \/\/ LOL detune\r\n    \/\/int chan = pos % 2;\r\n\r\n    vec2 bass;\r\n    vec2 wave = synth(t, bass);\r\n    vec2 dummy;\r\n    vec2 reverb = vec2(0.0f);\r\n    const int REV = 3;\r\n    const float REV_LENGTH = 0.1f;\r\n    for (int i=1;i&lt;REV;i++) {\r\n        reverb += synth(t - i*(REV_LENGTH\/REV), dummy) * 0.03*(REV\/i);\r\n    }\r\n\r\n    wave += bass;\r\n    wave += vec2(-reverb.x, reverb.y);\r\n    \/\/wave = clamp(sign(wave)*sqrt(wave * sign(wave) * 1.4), -0.99, 0.99); \/\/ clamping not strictly necessary\r\n    wave = clamp(wave * 1.4, -0.99, 0.99); \/\/ clamping not strictly necessary\r\n\t\r\n\tint left = int((wave.x)*SHRT_MAX);\r\n    int right = int((wave.y)*SHRT_MAX);\r\n    \/\/ STEREO SOUND\r\n    \/*\r\n    if (chan == 1) {\r\n        left = right;\r\n    }*\/\r\n\tout_Value = vec4(float(left &amp; 0xFF)\/256.0, ((left&gt;&gt;8) &amp; 0xFF)\/256.0, \r\n                     float(right &amp; 0xFF)\/256.0, ((right&gt;&gt;8) &amp; 0xFF)\/256.0);\r\n}\r\n#endif\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>pastebin \u30b7\u30f3\u30bb\u306b\u95a2\u3059\u308b\u60c5\u5831\u304c\u30b3\u30f3\u30d1\u30af\u30c8\u306b\u307e\u3068\u307e\u3063\u3066\u3044\u3066\u3044\u3044\u8cc7\u6599\u3060\u3063\u305f\u306e\u3067\u3001 \u4fdd\u5b88\u306e\u610f\u5473\u5408\u3044\u3067\u5225\u9014\u6b8b\u3057\u3066\u304a\u304d\u307e\u3059\u3002 \u8a00\u8a9e\u306fGLSL\u3067\u3059\u3002 \u30d9\u30fc\u30b9\u306b\u306a\u308b\u30d7\u30ec\u30bc\u30f3\u8cc7\u6599\u306f\u3053\u308c\u3002 additive_slides.pdf &hellip; <span class=\"clear\"><\/span><a href=\"https:\/\/machiaworx.net\/?p=923\" class=\"more-link read-more\" rel=\"bookmark\"><span class=\"screen-reader-text\">\u52a0\u7b97\u5408\u6210\u30b7\u30f3\u30bb\u306b\u95a2\u3059\u308b\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u30e1\u30e2\u3002<\/span><i class=\"fa fa-arrow-right\"><\/i> \u306e\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,15,4],"tags":[],"class_list":["post-923","post","type-post","status-publish","format-standard","hentry","category-synth-dev","category-gpu","category-pgm"],"_links":{"self":[{"href":"https:\/\/machiaworx.net\/index.php?rest_route=\/wp\/v2\/posts\/923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/machiaworx.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/machiaworx.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/machiaworx.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/machiaworx.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=923"}],"version-history":[{"count":7,"href":"https:\/\/machiaworx.net\/index.php?rest_route=\/wp\/v2\/posts\/923\/revisions"}],"predecessor-version":[{"id":2174,"href":"https:\/\/machiaworx.net\/index.php?rest_route=\/wp\/v2\/posts\/923\/revisions\/2174"}],"wp:attachment":[{"href":"https:\/\/machiaworx.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=923"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/machiaworx.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=923"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/machiaworx.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}