{"id":1281,"date":"2011-05-10T16:43:58","date_gmt":"2011-05-10T08:43:58","guid":{"rendered":"http:\/\/www.ccttours.com\/blog\/?p=1281"},"modified":"2011-05-10T16:43:58","modified_gmt":"2011-05-10T08:43:58","slug":"sc%ef%bc%9apbind-%e5%8f%98%e5%bc%82-pfunc-prand-pwrand-pseries-pseq-%e5%ba%8f%e5%88%97%e5%8c%96","status":"publish","type":"post","link":"https:\/\/learn.travelchinawith.me\/?p=1281","title":{"rendered":"SC\uff1aPbind, \u53d8\u5f02, Pfunc, Prand, Pwrand, Pseries, Pseq, \u5e8f\u5217\u5316"},"content":{"rendered":"<p><em>Pbind<\/em>\u5c06\u97f3\u4e50\u4e8b\u4ef6\u7684\u4e0d\u540c\u53c2\u6570\u8054\u7cfb\u5728\u4e00\u8d77\u3002\u5b83\u4f7f\u7528\u4e00\u4e2a\u6a21\u5f0f\u5c06\u90a3\u4e9b\u503c\u6d41\u5316\uff08stream\uff09\u5230\u5f53\u524d\u7684\u73af\u5883\u3002\u73af\u5883\uff08Environment\uff09\u662f\u53e6\u4e00\u4e2a\u6211\u4eec\u4e4b\u524d\u65e0\u9700\u8003\u8651\u7684\u5e55\u540e\u7ed3\u6784\u3002\u5b83\u5305\u542b\u4e86\u4e00\u7ec4\u9644\u5c5e\u4e8e\u7b26\u53f7\uff08symbol\uff09\u7684\u5168\u5c40\u9ed8\u8ba4\u503c\u3002\u4e0b\u8fb9\u662f\u4e00\u4e2a\u4e0d\u5b8c\u6574\u7684\u5217\u8868\u3002\u4f60\u4f1a\u53d1\u73b0\u5b83\u4eec\u5e38\u662f\u4ee5\u4e0d\u540c\u65b9\u5f0f\u8868\u8ff0\u7684\u540c\u6837\u7684\u503c\uff1afreq\u548cmidinote\uff0camp\u548cdb\u3002<br \/>\n<!--more--><\/p>\n<p>\\amp = 0.1, \\db = -20, \\degree = 0, \\dur = 1, \\freq = 261.62, \\legato = 0.8, \\midinote = 60, \\note = 0, \\octave = 5, \\out = 0, \\pan = 0, \\root = 0, \\scale = [0, 2, 4, 5, 7, 9, 11], \\server =default, \\velocity = 64, \\instrument = default, \\out = 0, \\group = 0 <\/p>\n<p>\u7528<em>Pblind<\/em>\u901a\u8fc7\u5339\u914d\u4e00\u4e2a\u7b26\u53f7\uff08\u6bd4\u5982 \\freq\uff09\u5230\u4e00\u4e2a\u503c\uff08\u6bd4\u5982400\uff09\uff0c\u6216\u4e00\u4e2a\u8fd4\u56de\u4e00\u4e2a\u503c\u7684\u51fd\u6570\uff08\u6bd4\u5982rrand(400, 900)\uff09\uff0c\u53ef\u4ee5\u5c06\u503c\u4f20\u9012\u5230\u73af\u5883\u3002\u5982\u679c\u4ec0\u4e48\u4e5f\u4e0d\u63d0\u4f9b\uff0c\u90a3\u4e48\u5c06\u4f7f\u7528\u9ed8\u8ba4\u503c\u3002\u9ed8\u8ba4\u503c\u5f88\u6709\u6709\uff0c\u56e0\u4e3a\u5b83\u4eec\u5141\u8bb8\u4f60\u96c6\u4e2d\u4e8e\u4f60\u521b\u4f5c\u7684\u4e00\u4e2a\u6216\u4e24\u4e2a\u5143\u7d20\u4e0a\u3002\u5982\u679c\u4f60\u60f3\u5728\u97f3\u9ad8\u4e0a\u505a\u6587\u7ae0\uff0c\u4fbf\u6ca1\u6709\u5fc5\u8981\u6307\u5b9a\u632f\u5e45\u3001\u6301\u7eed\u65f6\u95f4\u6216\u4e50\u5668\uff0c\u7b49\u7b49\uff1a\u7528\u9ed8\u8ba4\u503c\u5c31\u884c\u4e86\u3002 <\/p>\n<p>\u5728\u4f7f\u7528<em>Pbind<\/em>\u524d\uff0c\u9700\u8981\u8f7d\u5165\u5408\u6210\u5668\u63cf\u8ff0\u5e93\uff08synth description library\uff09\u3002\u56e0\u6b64\u5bf9\u4e8e\u672c\u7ae0\u7684\u4f8b\u5b50\u4eec\u6765\u8bf4\uff0c\u6211\u5047\u8bbe\u4f60\u5df2\u8fd0\u884c\u8fc7\u4e0b\u8fb9\u7684\u4ee3\u7801\u3002 <\/p>\n<p><strong>26.1. \u8bfb\u53d6\u5168\u5c40\u5e93<\/strong> <\/p>\n<pre class=\"brush:jfx\">SynthDescLib.global.read<\/pre>\n<p>\u6700\u666e\u901a\u7684<em>Pbind<\/em>\u53ea\u8bbe\u7f6e\u4e00\u4e2a\u503c\u3002\u6bd4\u5982\u4e0b\u4f8b\u4e2d\u7684\u9891\u7387\u3002 \u7b26\u53f7\u662f\\freq\uff0c\u503c\u662f600\u3002<\/p>\n<p><strong>26.2. \u57fa\u7840Pbind<\/strong> <\/p>\n<pre class=\"brush:jfx\">Pbind(\\freq, 600).play<\/pre>\n<p>\u5f53\u4f60\u4f7f\u7528\u5176\u4ed6\u63a7\u5236\u6d41\u7a0b\u540e\u4f1a\u53d8\u5f97\u66f4\u6709\u8da3\u3002\u7b2c\u4e00\u4f8b\u7528<em>Pfunc<\/em>\u8bc4\u4f30\u4efb\u610f\u51fd\u6570\uff0c\u5728\u8fd9\u91cc\u662f\u97f3\u9ad8\u968f\u673a\u503c\u3002\u7b2c\u4e8c\u4f8b\u589e\u52a0\u6301\u7eed\u65f6\u95f4\u3002\u7b2c\u4e09\u4f8b\u7528\u7b26\u53f7 \\degree\u548c \\octave\u7684\u65b9\u5f0f\u4f20\u9012MIDI\u97f3\u3002degree\u662f\u97f3\u7a0b\u5ea6\uff0coctave\u662f8\u5ea6\uff0c5\u662fC4\u516b\u5ea6\u3002 <\/p>\n<p><strong>26.3. Pbind\u4e0e\u9891\u7387\u51fd\u6570<\/strong> <\/p>\n<pre class=\"brush:jfx\">Pbind(\\freq, Pfunc({rrand(100, 900)})).play; \r\n\r\nPbind( \r\n   \\freq, Pfunc({rrand(100, 900)}), \r\n   \\dur, Pfunc({rrand(0.1, 1.5)})).play \r\n\r\nPbind( \r\n   \\degree, Pfunc({8.rand}), \r\n   \\oct, Pfunc({rrand(3, 7)}), \/\/\u6216\u8005\u8bd5\u8bd5 \\octave? \r\n   \\dur, 0.2).play \r\n\r\nPbind( \r\n   \\scale, [0, 2, 4, 6, 8, 10], \r\n   \\degree, Pfunc({6.rand}), \r\n   \\oct, Pfunc({rrand(3, 7)}), \/\/\u6216\u8005\u8bd5\u8bd5 \\octave \r\n   \\dur, 0.2).play \r\n\r\nPbind( \r\n   \\scale, [0, 2, 3, 5, 6, 8, 10, 11], \r\n   \\degree, Pfunc({8.rand}), \r\n   \\oct, Pfunc({rrand(3, 7)}), \/\/\u6216\u8005\u8bd5\u8bd5 \\octave \r\n   \\dur, 0.2).play<\/pre>\n<p>\u76ee\u524d\u4e3a\u6b62\uff0c\u4f60\u8bbe\u8ba1\u7684\u6240\u6709\u4e50\u5668\u5728\u73af\u5883\u4e2d\u90fd\u662f\u53ef\u7528\u7684\u3002\u6240\u6709\u4e0e\u90a3\u4e9b\u4e50\u5668\u7ed3\u5408\u521b\u5efa\u7684\u5f15\u6570\u90fd\u662f\u53ef\u4ee5\u4e0e\u503c\u76f8\u642d\u914d\u7684\u7b26\u53f7\u3002\u5982\u679c\u78b0\u5de7\u4f60\u4f7f\u7528\u4e86\u50cfmidinote\u8fd9\u6837\u7684\u5f15\u6570\uff0c\u5b83\u4eec\u5c06\u6b63\u597d\u4e0e\u73b0\u5b58\u73af\u5883\u76f8\u5408\u3002\u5982\u679c\u4f60\u5c06\u5b83\u4eec\u547d\u540d\u4e3a\u5176\u4ed6\u540d\u5b57\uff0c\u6bd4\u5982midiPitch\uff0c\u4e3a\u7ed3\u5408\uff08articulation\uff09\u4f7f\u7528art\uff0c\u4f60\u53ea\u9700\u8981\u4f7f\u7528\u90a3\u4e9b\u7b26\u53f7\u3002 <\/p>\n<p><strong>26.4. Pbind\u4e0e\u5148\u524d\u7684\u4e50\u5668\u5b9a\u4e49<\/strong> <\/p>\n<pre class=\"brush:jfx\">Pbind( \r\n   \\instrument, \"KSpluck3\", \r\n   \\midiPitch, Pfunc({rrand(34, 72)}), \r\n   \\art, Pfunc({rrand(1.0, 2.0)}), \r\n   \\dur, 0.1 \r\n).play<\/pre>\n<h3>dur, legato, nextEnvent<\/h3>\n<p>\u6211\u5e38\u5c06\u4e00\u4e2a\u4e8b\u4ef6\u6301\u7eed\u7684\u65f6\u95f4\u4e0e\u5230\u4e0b\u4e00\u4e2a\u4e8b\u4ef6\u7684\u6301\u7eed\u65f6\u95f4\u52a0\u4ee5\u533a\u5206\u3002<em>Pbind<\/em>\u4e2d\u9ed8\u8ba4\u7684\\dur\u88ab\u7528\u4e8e\u4e24\u8005\uff0c\u4f46\u771f\u6b63\u610f\u5473\u7684\u662f\u5230\u4e0b\u4e00\u4e2a\u4e8b\u4ef6\u7684\u6301\u7eed\u65f6\u95f4\u3002\u4e00\u4e2a\u4e8b\u4ef6\u5b9e\u9645\u7684\u6301\u7eed\u65f6\u95f4\u7531legato\u51b3\u5b9a\uff0c\u5b83\u662fdur\u7684\u767e\u5206\u6bd4\u3002\u9ed8\u8ba4\u503c\u662f0.8\u3002\u56e0\u6b64\uff0c\u5982\u679c\u4e24\u4e2a\u4e8b\u4ef6\u95f4\u7684\u6301\u7eed\u65f6\u95f4\u4e3a4\uff0c\u90a3\u8fd9\u4e2a\u4e8b\u4ef6\u7684\u5b9e\u9645\u6301\u7eed\u65f6\u95f4\u5c06\u662f0.8\u00d74 = 3.2\u3002\u56e0\u6b64legato\uff08\u8fde\u594f\uff09\u53ef\u88ab\u7528\u4e8e\u5b9e\u9645\u7684\u6301\u7eed\u65f6\u95f4\uff082.5\u8fde\u594f + 4 \u6301\u7eed\u65f6\u95f4 = 10 \u5b9e\u9645\u6301\u7eed\u65f6\u95f4\uff09\u3002 <\/p>\n<p>\u5728\u6211\u521b\u5efaKSpluck3\u65f6\uff0c\u5f15\u6570art\uff08\u7ed3\u5408\uff09\u771f\u6b63\u610f\u5473\u6301\u7eed\u65f6\u95f4\uff0c\u4f46\u4e5f\u4ee3\u8868\u7ed3\u5408\u3002\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\\dur\u610f\u5473\u7740\u4e24\u4e2a\u4e8b\u4ef6\u95f4\u7684\u6301\u7eed\u65f6\u95f4\u3002\u563f\uff0c\u5b83\u4eec\u53ea\u662f\u53d8\u91cf\u548c\u5f15\u6570\u3002\u968f\u610f\u547d\u540d\u5b83\u4eec\u5c31\u597d\u3002 <\/p>\n<p>\u4f60\u53ef\u4ee5\u4f7f\u7528<em>Pbind<\/em>\u8f7d\u5165\u4e00\u4e2a\u6548\u679c\u3002\u4f46\u56e0\u4e3a\u8fd9\u662f\u4e00\u4e2a\u5355\u4e00\u4e8b\u4ef6\uff0c\u6240\u4ee5\u5b9e\u9645\u6ca1\u6709\u5fc5\u8981\uff1a\u9996\u5148\u8fd0\u884c\u5b83\uff08\u8bb0\u4f4f\uff0c\u5148\u8f93\u5165\u540e\u8f93\u51fa\uff09\uff0c\u7136\u540e\u5728<em>Pbind<\/em>\u91cc\u8fd0\u884c\u4e00\u4e2a\u8def\u7531\u5230\u5b83\u7684\u5408\u6210\u5668\u3002 <\/p>\n<p><strong>26.5. Pbind\u4e0e\u4e4b\u524d\u7684\u6548\u679c<\/strong> <\/p>\n<pre class=\"brush:jfx\">Synth(\"delay1\"); \r\n\r\nPbind( \r\n   \\instrument, \"bells\", \r\n   \\freq, Pseq([100, 400, 1000, 1500, 2000]) \r\n).play;<\/pre>\n<p><em>Pbind<\/em>\u5728\u7be1\u6539\uff08interplotion\uff09\u4e2d\u5f88\u6709\u7528\uff1a\u7528\u5c11\u91cf\u7684\u8c03\u6574\u8f6c\u5316\u4e00\u4e2a\u73b0\u5b58\u7684\u98ce\u683c\uff08style\uff09\u6216\u6a21\u5f0f\uff08pattern\uff09\u3002\u6211\u9996\u5148\u5b9a\u4e49\u4e00\u4e2a\u6709\u7740\u9002\u4e8e\u8fde\u7eed\u5b66\u4e60\uff08serial studies\uff09\u7684\u7b80\u5355\u4e50\u5668\u3002\u8bb0\u4f4f\uff0c\u6211\u4eec\u4e0d\u5173\u6ce8\u4e50\u5668\u7684\u7279\u8d28\u3002\u6211\u4eec\u7684\u7126\u70b9\u5728\u97f3\u9ad8\u3001\u6301\u7eed\u65f6\u95f4\u3001\u632f\u5e45&#8230;\u4e0a\u3002\u8bb0\u4f4f\u4f60\u6bcf\u65b0\u5efa\u4e00\u4e2a\u4e50\u5668\uff0c\u5fc5\u987b\u91cd\u8bfb<em>DescLib<\/em>\u3002 <\/p>\n<p><strong>26.6. \u7b80\u5355\u4e32\u884c\u4e50\u5668<\/strong> <\/p>\n<pre class=\"brush:jfx\">( \r\nSynthDef(\"SimpleTone\", \r\n{arg midinote = 60, amp = 0.9, dur = 1, pan = 0, legato = 0.8; \r\n   Out.ar(0, \r\n      Pan2.ar( \r\n         SinOsc.ar(midinote.midicps, mul: amp) \r\n         * \r\n         EnvGen.kr(Env.perc(0, dur*legato), doneAction: 2), \r\n         pan \r\n) \r\n) \r\n}).load(s); \r\n\r\nSynthDescLib.global.read \r\n)<\/pre>\n<p>\u63a5\u4e0b\u6765\u662f\u5728\u97f3\u9ad8\u7be1\u6539\u7814\u7a76\u4e2d\u8d77\u4f5c\u7528\u7684\u4e00\u4e2a\u6a21\u578b\u3002MIDI\u97f3\u7b26\u7531\u4e00\u4e2a\u4f8b\u7a0b\uff08routine\uff09\u51b3\u5b9a\uff1a\u4e00\u4e2a\u80fd\u8bb0\u5f55\u4e4b\u524d\u72b6\u6001\u7684\u51fd\u6570\uff0c\u6bd4\u5982\u8ba1\u6570\u5668\u3002\u65cb\u5f8b\u662f\u5df4\u8d6b\u7684\u3002\u5982\u679c\u4f60\u719f\u6089\u539f\u4f5c\u7684\u8bdd\uff0c\u6211\u60f3\u8981\u6307\u51fa\u4ee5\u4e0b\u51e0\u70b9\uff1a\u65cb\u5f8b\u88ab\u79fb\u8c03\u5230\u4e00\u4e2a\u516b\u5ea6\u4e0a\uff08\u5f53\u6211\u4eec\u719f\u6089\u4e86\u8fd9\u4e2a\u8f6c\u53d8\uff0c\u6548\u679c\u662f\u4e00\u6837\u7684\uff09\uff0c\u6211\u91cd\u590d\u4e86\u4e00\u4e9b\u97f3\u7b26\u4ee5\u95ea\u907f\u8282\u594f\u503c\u3002\u540c\u6837\u7684\uff0c\u6548\u679c\u662f\u4e00\u6837\u7684\u3002 <\/p>\n<p>\u76f8\u6bd4\u76f4\u63a5\u8f93\u5165MIDI\u503c\u7684\u505a\u6cd5\uff0c\u6211\u9009\u62e9\u4f7f\u7528degree\u548cscale\u6570\u7ec4\uff0c\u5b83\u4eec\u534f\u540c\u5de5\u4f5c\u3002Scale\u662f\u548c\u58f0\u5c0f\u8c03\u7684\u6574\/\u534a\u97f3\u7ea7\u65b9\u5411\u3002Degree\u662fscale\u4f7f\u7528\u7684\u97f3\u7ea7\uff08scale step\uff09\u3002\u4e8c\u8005\u7ed3\u5408\u4f7f\u7528\u7684\u597d\u5904\u662f\uff0c\u5b83\u5141\u8bb8\u6211\u5728\u4e0d\u6253\u65ad\u6f14\u594f\u91cd\u65b0\u8f93\u5165\u6240\u6709\u97f3\u7b26\u7684\u524d\u63d0\u4e0b\u6539\u53d8\u6a21\u5f0f\uff08\u4f8b\u5982\uff0c\u4ece\u548c\u58f0\u5c0f\u8c03\u5230\u91cc\u5e95\u5b89\u8c03\u5f0f\uff08Lydian\uff09\uff09\u3002\u6570\u7ec4degree\u4fdd\u6301\u539f\u6837\uff0c\u6211\u53ef\u4ee5\u6539\u53d8\u97f3\u9636\u3002 <\/p>\n<p>degree\u6570\u7ec4\u88ab-1\u8c03\u6574\uff0c\u4ec5\u4e3a\u8fce\u5408\u672c\u4eba\u7684\u53e3\u5473\u3002\u6211\u5e38\u4e3a\u97f3\u9636\u6570\u7ec4\u4f7f\u75280\uff0c1\uff0c2\uff0c\u4e3a\u97f3\u7ea7\u4f7f\u75281\uff0c2\uff0c3\u3002\u4f46\u5982\u679c\u7528\u4e50\u7406\u601d\u8003\u7684\u8bdd\uff0c\u6539\u5199\u65cb\u5f8b\u7684\u97f3\u7b26\u5c06\u66f4\u7b80\u5355\uff0c\u5373\uff0c1\u662f\u97f3\u9636\u7684\u7b2c\u4e00\u7ea7\uff0c[1, 3, 5]\u662f\u4e3b\u97f3\u7436\u97f3\uff0c[1, 4, 6]\u662f\u7b2c\u4e00\u8f6c\u4f4d\uff08inversion\uff09\u3002 <\/p>\n<p><strong>26.7. \u53d8\u5316\u97f3\u9ad8\u6a21\u578b<\/strong> <\/p>\n<pre class=\"brush:jfx\">( \r\nvar degreeSeq, nextPitch, scale; \r\n\r\nscale = [0, 2, 3, 5, 7, 8, 11]; \r\n\r\ndegreeSeq = [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, \r\n   3, 3, 5, 5, 1, 1, 4, 4, 7, 7, 2, 2] - 1; \r\n\r\nnextPitch = Routine({ \r\n   inf.do({arg count; \r\n      scale.wrapAt(degreeSeq.wrapAt(count)).yield; \r\n   }) \r\n}); \r\n\r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, nextPitch + 60, \r\n   \\dur, 0.1 \r\n   ).play \r\n)<\/pre>\n<p>\u6b64\u5904\uff0c\u4f60\u53ef\u4ee5\u7528\u5b9e\u9645\u56de\u653e\u5feb\u901f\u6ee1\u8db3\u4f60\u521b\u4f5c\u7684\u597d\u5947\u5fc3\u3002\u5982\u679c\u53cd\u5411\uff08count.neg\uff09\u6f14\u594f\u7684\u8bdd\u4f1a\u600e\u6837\u5462\uff1f\u6bcf\u9694\u4e00\u4e2a\u97f3\u5462\uff08count*2\uff09\uff1f\u6bcf\u9694\u4e24\u4e2a\uff0c\u9694\u4e09\u4e2a\uff0c\u7b49\u7b49\u3002\u4e00\u4e2a\u8f6c\u4f4d\u4f1a\u600e\u6837\uff0812 \u2014 scale.wrapetc.\uff09\uff1f\u5747\u5206\u95f4\u9694\uff08scale = [etc.]\/2\uff09\uff0c\u4e24\u500d\u95f4\u9694\uff0c\u4e0d\u540c\u7684\u6a21\u5f0f\uff08scale = [0, 2, 3, 5, 7, 8, 9])\uff09\uff1f <\/p>\n<p><strong>26.8. \u5b9e\u9a8c<\/strong> <\/p>\n<pre class=\"brush:jfx\">\/\/ \u589e\u52a0\u500d\u6570 \r\n   var mul = 1; \r\n   inf.do({arg count; \r\n      if(count%20 == 19, {mul = mul + 1}); \r\n\r\n\/\/ \u5076\u53d1\u968f\u673a\u503c \r\n   inf.do({arg count; \r\n      if(count%6 == 5, {12.rand.yield}, \r\n      {(scale.wrapAt(degreeSeq.wrapAt(count*mul))).yield}); \r\n\r\n\/\/ \u5076\u53d1\u95ea\u907f\u97f3\u5e8f \r\n   if(count%6 == 5, {scale.choose.yield}, \r\n   {(scale.wrapAt(degreeSeq.wrapAt(count*mul))).yield}); \r\n\r\n\/\/ \u9010\u6e10\u8f6c\u53d8\u97f3\u9636 \r\n   if(count%6 == 5, {scale.put(scale.size.rand, 12.rand)}); \r\n   (scale.wrapAt(degreeSeq.wrapAt(count))).yield;<\/pre>\n<h3>Prand, Pseries, Pseq<\/h3>\n<p>\u5176\u5b9e\u6709\u4e00\u5806\u6709\u7528\u7684\u6a21\u5f0f\uff08\u770b<em>Streams<\/em>\u7684\u5e2e\u52a9\u6587\u6863\uff09\u53ef\u7528\u3002\u6211\u5c06\u5728\u6b64\u5c55\u793a\u4e09\u4e2a\u3002Prand\u4ece\u4e00\u4e2a\u6570\u7ec4\u8fd4\u56de\u4e00\u4e2a\u968f\u673a\u9009\u53d6\uff08\u53e6\u8bf7\u53c2\u9605<em>Pwrand<\/em>\uff0c\u6216\u8005\u52a0\u6743\u968f\u673a\u6a21\u5f0f\uff09\uff0c<em>Pseries<\/em>\u8fd4\u56de\u4e00\u7ec4\u5177\u5907\u5f15\u6570start\uff0cstep\u548clength\u7684\u503c\u3002<em>Pseq<\/em>\u770b\u8d77\u6765\u88ab\u4f7f\u7528\u7684\u6700\u591a\u3002\u5b83\u904d\u5386\u6570\u7ec4\u7684\u503c\u3002\u5b83\u4eec\u53ef\u4ee5\u5168\u90e8\u88ab\u5d4c\u5957\uff0c\u5982\u4e0b\u4f8b\u6240\u793a\u3002 <\/p>\n<p><strong>26.9. \u6a21\u5f0f<\/strong> <\/p>\n<pre class=\"brush:jfx\">( \r\nf = 100; \r\n\r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Pfunc({ \r\n      f = ([3\/2, 4\/3].choose) * f; \r\n      if(f > 1000, {f = f\/8}); \/\/.fold \u6216 .wrap \u6ca1\u6709\u505a\u5230\u6211\u60f3\u505a\u7684 \r\n      f.cpsmidi \r\n      }), \r\n   \\dur, 0.2 \r\n   ).play \r\n) \r\n\r\n( \r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Prand([60, 62, 64, 65, 67, 69, 70], inf), \r\n   \\dur, 0.1 \r\n   ).play \r\n) \r\n\r\n( \r\n\/\/ \u6570\u7ec4dur\u7531\u591a\u4e2a1\u548c2\u7ec4\u6210, \u4ee3\u8868\u516b\u5206\u97f3\u7b26. \r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Pseq([70, 58, 60, 62, 60, 58, 65, 62, 70, \r\n      65, 62, 65, 63, 62, 63, 65, 58, 62, 65, 69], inf), \r\n   \\dur, Pseq([2, 1, 1, 1, 1, 2, 2, 2, 2, 2, \r\n      2, 1, 1, 1, 1, 2, 2, 2, 2, 2] * 0.2, inf) \r\n   ).play \r\n)<\/pre>\n<p>\u5f53\u7136\uff0c\u4f60\u53ef\u4ee5\u8fd0\u884c\u82e5\u5e72\u4e2a<em>Pbind<\/em>\uff08\u5df4\u8d6b\u53ef\u80fd\u4f1a\u60f3\u8981\u8fd9\u4e48\u5e72\uff09\u3002\u4e3adur 2\u548c3\u5c1d\u8bd5\u4ee51\u62160.5\u66ff\u4ee3\u3002<em>Pbind<\/em>\u540c\u6837\u54cd\u5e94mute\uff08\u9759\u97f3\uff09\u548cunmute\uff08\u53d6\u6d88\u9759\u97f3\uff09\u3002\u8046\u542c\u4e0b\u4f8b\u8db3\u591f\u957f\u65f6\u95f4\uff0c\u4ee5\u542c\u5230\u76f8\u79fb\uff1a <\/p>\n<p><strong>26.10. \u5e73\u884cPbind<\/strong> <\/p>\n<pre class=\"brush:jfx\">( \r\na = Pbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Pseq([70, 58, 60, 62, 60, 58, 65, 62, 70, \r\n      65, 62, 65, 63, 62, 63, 65, 58, 62, 65, 69], inf), \r\n   \\dur, Pseq([2, 1, 1, 1, 1, 2, 2, 2, 2, 2, \r\n      2, 1, 1, 1, 1, 2, 2, 2, 2, 2] * 0.1, inf), \r\n   \\pan, -1 \r\n   ).play; \r\n\r\nb = Pbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Pseq([70, 58, 60, 62, 60, 58, 65, 62, 70, \r\n      65, 62, 65, 63, 62, 63, 65, 58, 62, 65, 69, 0], inf), \r\n   \\dur, Pseq([2, 1, 1, 1, 1, 2, 2, 2, 2, 2, \r\n      2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2] * 0.1, inf), \r\n   \\pan, 0 \r\n   ).play; \r\n\r\nc = Pbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Pseq([70, 58, 60, 62, 60, 58, 65, 62, 70, \r\n      65, 62, 65, 63, 62, 63, 65, 58, 62, 65, 69, 0, 0], inf), \r\n   \\dur, Pseq([2, 1, 1, 1, 1, 2, 2, 2, 2, 2, \r\n      2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2] * 0.1, inf), \r\n   \\pan, 1 \r\n   ).play; \r\n) \r\n\r\na.mute; \r\nb.mute; \r\na.unmute; \r\nc.mute; \r\nb.unmute; \r\nc.unmute;<\/pre>\n<pre class=\"brush:jfx\">\/\/ Riley? \r\n( \r\np = Array.fill(20, {[0, 2, 4, 7, 9].choose + [60, 72].choose}).postln; \r\nq = p.copyRange(0, p.size - 2).postln; \r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Pseq([Pseq(p), Pseq(p), Pseq(p)], inf), \r\n   \\dur, 0.1, \r\n   \\pan, -1 \r\n   ).play; \r\n\r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Pseq([Pseq(p), Pseq(p), Pseq(q)], inf), \r\n   \\dur, 0.1, \r\n   \\pan, 1 \r\n   ).play; \r\n)<\/pre>\n<pre class=\"brush:jfx\">\/\/ \u6216\u5e73\u7f13\u76f8\u4f4d \r\n( \r\np = Array.fill(20, {[0, 2, 4, 7, 9].choose + [60, 72].choose}).postln; \r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Pseq(p, inf), \r\n   \\dur, 0.1, \r\n   \\pan, -1 \r\n   ).play; \r\n\r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Pseq(p, inf), \r\n   \\dur, 0.101, \r\n   \\pan, 1 \r\n   ).play; \r\n\r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Pseq(p, inf), \r\n   \\dur, 0.102, \r\n   \\pan, 0 \r\n   ).play; \r\n)<\/pre>\n<p>\u8fd9\u513f\u662f\u4e00\u4e9b\u5d4c\u5957\u7684\u6a21\u5f0f\u3002<em>Pbind<\/em>\u662f\u4e00\u4e2a\u505a\u5e8f\u5217\u5316\uff08serialization\uff09\u7684\u4f18\u79c0\u5de5\u5177\u3002\u4e0b\u8fb9\u5c31\u662f\u4e00\u4e2a\u90e8\u5206\u8282\u594f\u88ab\u5e8f\u5217\u5316\uff08\u5373\u5174\u7f29\u6df7\uff09\u768412\u97f3\u4f8b\u5b50\uff0c\u52a8\u6001\u7ea7\uff08dynamic levels\uff09\u540c\u6837\u662f\u534a\u5e8f\u5217\u5316\u534a\u968f\u673a\u7684\u3002 <\/p>\n<p><strong>26.11. \u5e8f\u5217\u4e3b\u4e49\uff08Serialism\uff09<\/strong> <\/p>\n<pre class=\"brush:jfx\">( \r\na = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].scramble.postln; \r\nr = [0.1, 0.1, 1.0, 0.2, 0.3, 0.166, 0.166]; \r\no = [48, 60, 72]; \r\n\r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\midinote, Prand( \r\n      [ \/\/P, R, I, IR \r\n         Pseq(a) + o.choose, \r\n         Pseq(a.reverse) + o.choose, \r\n         Pseq(12 - a) + o.choose, \r\n         Pseq((12 - a).reverse) + o.choose \r\n      ], inf), \r\n   \\dur, Pseq([Prand([0.1, 0.2, 0.5, 1.0], 7), \r\n            Prand([Pseq(r), Pseq(r.reverse)], 1)], inf), \r\n   \\amp, Prand([ \r\n            Pseries(0.1, 0.1, 5), \/\/ \u6e10\u5f3a \r\n            Pseries(0.9, -0.1, 6), \/\/ \u51cf\u5f31 \r\n            Prand([0.1, 0.3, 0.5, 0.7], 5) \r\n            ], inf) \r\n).play; \r\n)<\/pre>\n<pre class=\"brush:jfx\">( \r\n\/\/ \u6069\uff0c\u5f53\u7136, \u4e5f\u53ef\u4ee5\u4e00\u6b21\u4e09\u4e2a \r\n\/\/ \u5982\u679c\u662f\u96640\u5916\u7684\u79cd\u5b50\uff0c\u90a3\u7c92\u79cd\u5b50\u5c06\u88ab\u4f7f\u7528\u3002 \r\n\/\/ \u5982\u679c\u662f0, \u4e00\u4e2a\u968f\u673a\u7684\u79cd\u5b50\u5c06\u88ab\u9009\u53d6\u548c\u5217\u5370\u3002 \r\n\/\/ \u7528\u5b83\u91cd\u590d\u4e00\u4e2a\u6f14\u594f \r\n\r\nvar seed = 0; \r\n\r\nif(seed !=0, {thisThread.randSeed = seed}, \r\n   {thisThread.randSeed = Date.seed.postln}); \r\n\r\na = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].scramble.postln; \r\nr = [0.1, 0.1, 1.0, 0.2, 0.3, 0.166, 0.166]; \r\no = [48, 60, 72]; \r\n\r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\pan, -1, \r\n   \\midinote, Prand( \r\n      [ \/\/P, R, I, IR \r\n         Pseq(a) + o.choose, \r\n         Pseq(a.reverse) + o.choose, \r\n         Pseq(12 - a) + o.choose, \r\n         Pseq((12 - a).reverse) + o.choose \r\n      ], inf), \r\n   \\dur, Pseq([Prand([0.1, 0.2, 0.5, 1.0], 7), \r\n            Prand([Pseq(r), Pseq(r.reverse)], 1)], inf), \r\n   \\amp, Prand([ \r\n            Pseries(0.1, 0.1, 5), \/\/ \u6e10\u5f3a \r\n            Pseries(0.9, -0.1, 6), \/\/ \u51cf\u5f31 \r\n            Prand([0.1, 0.3, 0.5, 0.7], 5) \r\n            ], inf) \r\n).play; \r\n\r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\pan, 0, \r\n   \\midinote, Prand( \r\n      [ \/\/P, R, I, IR \r\n         Pseq(a) + o.choose, \r\n         Pseq(a.reverse) + o.choose, \r\n         Pseq(12 - a) + o.choose, \r\n         Pseq((12 - a).reverse) + o.choose \r\n      ], inf), \r\n   \\dur, Pseq([Prand([0.1, 0.2, 0.5, 1.0], 7), \r\n            Prand([Pseq(r), Pseq(r.reverse)], 1)], inf), \r\n   \\amp, Prand([ \r\n            Pseries(0.1, 0.1, 5), \/\/ cresc \r\n            Pseries(0.9, -0.1, 6), \/\/ decresc \r\n            Prand([0.1, 0.3, 0.5, 0.7], 5) \r\n            ], inf) \r\n).play; \r\n\r\nPbind( \r\n   \\instrument, \"SimpleTone\", \r\n   \\pan, 1, \r\n   \\midinote, Prand( \r\n      [ \/\/P, R, I, IR \r\n         Pseq(a) + o.choose, \r\n         Pseq(a.reverse) + o.choose, \r\n         Pseq(12 - a) + o.choose, \r\n         Pseq((12 - a).reverse) + o.choose \r\n      ], inf), \r\n   \\dur, Pseq([Prand([0.1, 0.2, 0.5, 1.0], 7), \r\n            Prand([Pseq(r), Pseq(r.reverse)], 1)], inf), \r\n   \\amp, Prand([ \r\n            Pseries(0.1, 0.1, 5), \/\/ cresc \r\n            Pseries(0.9, -0.1, 6), \/\/ decresc \r\n            Prand([0.1, 0.3, 0.5, 0.7], 5) \r\n            ], inf) \r\n).play; \r\n)<\/pre>\n<p>\u597d\u5427\uff0c\u8fd9\u4e0d\u662f\u97e6\u4f2f\u6069\uff08Webern\uff09\u3002\u4f46\u7ecf\u8fc720\u5206\u949f\u7684\u4ee3\u7801\u8f93\u5165\u540e\u5df2\u7ecf\u975e\u5e38\u63a5\u8fd1\u4e86\u3002\u8981\u70b9\u662f\u8fd9\u4e2a\u6a21\u578b\u5177\u6709\u4e00\u5207\u4f60\u53ef\u4ee5\u7528\u624b\u5199\u51fa\u7684\u5e8f\u5217\u4f5c\u54c1\u7684\u6f5c\u529b\u3002\u50cf\u6211\u4e4b\u524d\u8bf4\u8fc7\u7684\uff0c\u4ee3\u7801\u65e0\u9700\u662f\u4f5c\u54c1\u672c\u8eab\uff08\u5c3d\u7ba1\u8fd9\u662f\u6211\u7684\u504f\u7231\uff09\u3002\u5b83\u53ef\u4ee5\u662f\u4e00\u4e2a\u6d4b\u8bd5\u573a\u3002\u4e00\u65e6\u4f60\u627e\u5230\u4e00\u4e2a\u4f60\u559c\u6b22\u7684\u53d8\u594f\uff08\u4e3a\u4e0d\u540c\u7684\u53d8\u594f\u6362\u968f\u673a\u7684\u79cd\u5b50\uff09\uff0c\u5c06\u5b83\u62f7\u8d1d\u51fa\u6765\u7136\u540e\u4ea4\u7ed9\u6f14\u594f\u8005\u3002<\/p>\n<h3>\u4f7f\u7528MIDIout\u800c\u4e0d\u662f\u5408\u6210\u4e0e\u670d\u52a1\u5668\u505a\u5e8f\u5217\u5316<\/h3>\n<p><em>Pbind<\/em>\u4e0e\u670d\u52a1\u5668\u4ea4\u6d41\u3002\u6211\u53d1\u73b0MIDI\u5728\u5e8f\u5217\u5316\u5b66\u4e60\u4e2d\u66f4\u6709\u7528\uff0c\u56e0\u4e3a\u90a3\u4e9b\u521b\u4f5c\u901a\u5e38\u662f\u88ab\u6307\u5b9a\u7ed9\u73b0\u573a\u6f14\u51fa\u8005\u7684\uff0c\u7528MIDI\u7684\u8bdd\uff0c\u6211\u53ef\u4ee5\u9009\u62e9\u65e0\u6570\u7684\u4e50\u5668\u3002MIDI\u4e5f\u66f4\u9ad8\u6548\uff0c\u56e0\u4e3a\u670d\u52a1\u5668\u4e0d\u9700\u8981\u4e3a\u4e50\u5668\u8bbe\u8ba1\u548c\u56de\u653e\u8fdb\u884c\u4efb\u4f55\u8ba1\u7b97\u3002\u4f60\u53ef\u4ee5\u4fdd\u6301\u670d\u52a1\u5668\u8fd0\u884c\uff0c\u6216\u4f7f\u7528quit\u505c\u6b62\u5b83\u4eec\u3002\u6216\u8005\u76f4\u63a5\u65e0\u9700\u5f00\u542f\u5b83\u4eec\u3002 <\/p>\n<p>\u4e0b\u4e00\u4e2a\u4f8b\u5b50\u4e0d\u662f\u6700\u4e25\u683c\u610f\u4e49\u4e0a\u7684\u5b8c\u5168\u5e8f\u5217\u5316\u3002\u4ec5\u4ec5\u662f\u97f3\u9ad8\u6570\u7ec4\u4f9d\u636e12\u97f3\u89c4\u8303\u88ab\u5e8f\u5217\u5316\u6389\uff1a\u5728\u6bcf\u4e2a\u5f15\u7528\uff0812\u4e2a\u97f3\u7b26\uff0c\u6216\u8005count%12\uff09\u540e\uff0c\u4e00\u4e2a\u65b0\u884c\u88ab\u9009\u4e2d\u3002\u5176\u4ed6\u7684\u5e8f\u5217\u8bbe\u7f6e\u88ab\u8ddf\u968f\u4e00\u9635\u5b50\u7136\u540e\u88ab\u6405\u62cc\uff0c\u5927\u7ea610%\u7684\u65f6\u95f4\uff080.1.coin\uff09\u3002\u6211\u6ca1\u6709\u5728\u6bcf\u4e2a\u7cfb\u5217\u4e2d\u52a0\u5165\u592a\u591a\u601d\u8003\uff0c\u4f46\u4f60\u61c2\u7684\u3002 <\/p>\n<p>\u5728r.stop\u4e4b\u540e\uff0c4.do\u5728\u56db\u6761\u901a\u9053\u5185\u505c\u6b62\u6211\u4eec\u6b63\u5728\u4f7f\u7528\u7684\u5168\u90e8\u97f3\u7b26\u3002 <\/p>\n<h3>\u7ec3\u4e60\uff1a\u4ec5\u4f7f\u7528MIDI\u7684\u5b8c\u5168\u5e8f\u5217\u5316<\/h3>\n<p><strong>26.12. \u5df4\u6bd4\u7279\uff08Babbitt\uff09: \u5b8c\u5168\u5e8f\u5217\u5316 (\u67d0\u79cd\u7a0b\u5ea6)<\/strong> <\/p>\n<pre class=\"brush:jfx\">( \r\nMIDIClient.init; \r\nm = MIDIOut(0, MIDIClient.destinations.at(0).uid); \r\n) \r\n\r\n( \r\nvar pitchSeries, octaveSeries, durationSeries, nextSeries, dynSeries, instSeries; \r\npitchSeries = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].scramble.postln; \r\noctaveSeries = Array.fill(6, {[36, 48, 60, 72].choose}).postln; \r\ndurationSeries = Array.fill(23, {rrand(0.1, 3.0).round(0.1)}).postln; \r\nnextSeries = Array.fill(30, {[0, 0, 0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.4, 0.4, \r\n2.0].choose}).postln; \r\ndynSeries = Array.fill(24, {rrand(40, 120).round(0.1)}).postln; \r\ninstSeries = Array.fill(20, {4.rand}).postln; \r\n\r\nr = Task({ \r\n   inf.do({arg count; \r\n   var note; \r\n   note = pitchSeries.wrapAt(count) + octaveSeries.wrapAt(count); \r\n   if(count%12 == 0, { \r\n      pitchSeries = \/\/ \u9009\u62e9\u4e00\u4e2a\u65b0\u884c \r\n         [pitchSeries.reverse, \/\/ \u5012\u9000 \r\n         (12 - pitchSeries).reverse, \/\/ \u53cd\u5411\u5012\u9000 \r\n         12 - pitchSeries, \/\/ \u53cd\u5411 \r\n         pitchSeries \/\/ \u540c\u7b49\u97f3\uff08prime\uff09 \r\n         ].choose; \r\n      \/\/ \u9009\u62e9\u4e00\u4e2a\u884c\u79fb\u8c03\uff08transposition of the row\uff09 \r\n      pitchSeries = (pitchSeries + 12.rand)%12; \r\n      pitchSeries.postln;}); \r\n   if(0.1.coin, { \r\n      durationSeries = durationSeries.scramble.postln; \r\n      nextSeries = nextSeries.scramble.postln; \r\n      dynSeries = dynSeries.scramble.postln; \r\n      instSeries = instSeries.scramble.postln; \r\n      }); \r\n   m.noteOn(instSeries.wrapAt(count), note, dynSeries.wrapAt(count)); \r\n   thisThread.clock.sched(durationSeries.wrapAt(count), \r\n      {m.noteOff(instSeries.wrapAt(count), note); nil}); \r\n   nextSeries.wrapAt(count).wait \r\n   }) \r\n}); \r\n\r\nr.start; \r\n) \r\n\r\nr.stop; 4.do({arg j; 127.do({arg i; m.noteOff(j, i, 0)})})<\/pre>\n<h3>\u4f7f\u7528Pbind\u7684MIDI<\/h3>\n<p><em>Pbind<\/em>\u76f8\u8f83<em>Task<\/em>\u63d0\u4f9b\u66f4\u591a\u7684\u529f\u80fd\u3002\u8981\u4e0e<em>Pbind<\/em>\u534f\u540c\u4f7f\u7528MIDI\uff0c\u4f60\u9996\u5148\u9700\u8981\u521b\u5236\u4e00\u4e2a\u53ef\u4ee5\u5904\u7406MIDI\u4e50\u5668\u7684\u73af\u5883\u3002\u8fd9\u4e2a\u6a21\u578b\u7531Julian Rohrhuber\u63d0\u4f9b\uff0c\u6211\u5e76\u672a\u5bf9\u5176\u8fdb\u884c\u4efb\u4f55\u6539\u52a8\u3002<\/p>\n<p><strong>26.13. Pbind \u548c MIDI, Julian Rohrhuber\u63d0\u4f9b<\/strong><\/p>\n<pre class=\"brush:jfx\">(\r\nvar f;\r\nf = (\r\n   noteOn: #{ arg chan, midinote, amp;\r\n               [chan, midinote, asInteger((amp * 255).clip(0, 255))]\r\n                 },\r\n   noteOff:#{ arg chan, midinote, amp;\r\n               [ chan, midinote, asInteger((amp * 255).clip(0, 255))]\r\n                 },\r\n   polyTouch: #{ arg chan, midinote, polyTouch=125;\r\n                         [ chan, midinote, polyTouch]\r\n                 },\r\n   control: #{ arg chan, ctlNum, control=125;\r\n                         [chan, ctlNum, control]\r\n                 },\r\n   program: #{ arg chan, progNum=1;\r\n                         [ chan, progNum]\r\n                 }\r\n     touch ( chan, val )\r\n   bend ( chan, val )\r\n   allNotesOff ( chan )\r\n   smpte ( frames, seconds, minutes, hours, frameRate )\r\n   songPtr ( songPtr )\r\n   songSelect ( song )\r\n   midiClock ( )\r\n   startClock ( )\r\n   continueClock ( )\r\n   stopClock ( )\r\n   reset ( )\r\n   sysex ( uid, Int8Array )\r\n\r\n   *\/\r\n);\r\n\r\n~midiEnv = (\r\n            chan: 1,\r\n            msgFuncs: f,\r\n            hasGate: true,\r\n            midicmd: \\noteOn,\r\n            play: #{\r\n               var freqs, lag, dur, sustain, strum;\r\n               var tempo, bndl, midiout, hasHate, midicmd;\r\n\r\n               freqs = ~freq = ~freq.value + ~detune;\r\n\r\n               tempo = ~tempo;\r\n               if (tempo.notNil) {\r\n                  thisThread.clock.tempo = tempo;\r\n               };\r\n\r\n               if (freqs.isKindOf(Symbol).not) {\r\n                  ~finish.value;\r\n                  ~amp = ~amp.value;\r\n                  strum = ~strum;\r\n                  lag = ~lag;\r\n                  sustain = ~sustain = ~sustain.value;\r\n                  midiout = ~midiout;\r\n                  hasHate = ~hasGate;\r\n                  midicmd = ~midicmd;\r\n                  bndl = ~msgFuncs[midicmd].valueEnvir;\r\n\r\n                  bndl = bndl.flop;\r\n\r\n                  bndl.do {|msgArgs, i|\r\n                        var latency;\r\n\r\n                        latency = i * strum + lag;\r\n\r\n                        midiout.performList(midicmd, msgArgs);\r\n                        if(hasHate and: { midicmd === \\noteOn }) {\r\n                           thisThread.clock.sched(sustain) {\r\n                              midiout.noteOff(*msgArgs)\r\n                           };\r\n                        };\r\n                  };\r\n                  }\r\n               }\r\n           ).putAll(\r\n              Event.partialEvents.pitchEvent,\r\n              Event.partialEvents.ampEvent,\r\n              Event.partialEvents.durEvent\r\n           )\r\n);\r\n\r\n\/\/ \u521d\u59cb\u5316midiout\r\n(\r\nMIDIClient.init;\r\nm = MIDIOut(0, MIDIClient.destinations.at(0).uid);\r\n)\r\n\r\n\/\/ \u6211\u4fee\u6539\u4e86Pbind\u4ee5\u663e\u793a\u66f4\u591a\u7684\u503c [\u5b83\u4eec\u4e0d\u662f\u975e\u5e38\u597d]\r\n(\r\nPbind(\r\n   \\parent, ~midiEnv,\r\n   \\midiout, m,\r\n   \\chan, Pseq([0, 1, 2, 3], 60), \/\/total number of events\r\n   \\amp, Prand([\r\n      Pseq([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]),\r\n      Pseq([0.8, 0.7, 0.5, 0.3, 0.1]),\r\n      Prand([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], 10)\r\n      ], inf),\r\n   \\dur, Prand([0.1, 0.1, 0.1, 0.2, 0.2,1.0, 2.0], inf),\r\n   \\sustain, Pfunc({rrand(0.1, 2.0)}),\r\n   \\midinote, Prand([36, 38, 40, 42, 43, 45, 47, 49, \/\/synthetic scale\r\n      50, 52, 54, 56, 57, 59, 61, 63, 64, 66, 68, 70], inf)\r\n).play;\r\n)<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Pbind\u5c06\u97f3\u4e50\u4e8b\u4ef6\u7684\u4e0d\u540c\u53c2\u6570\u8054\u7cfb\u5728\u4e00\u8d77\u3002\u5b83\u4f7f\u7528\u4e00\u4e2a\u6a21\u5f0f\u5c06\u90a3\u4e9b\u503c\u6d41\u5316\uff08stream\uff09\u5230\u5f53\u524d\u7684\u73af\u5883\u3002\u73af\u5883\uff08Environment\uff09\u662f\u53e6\u4e00\u4e2a\u6211\u4eec\u4e4b\u524d\u65e0\u9700\u8003\u8651\u7684\u5e55\u540e\u7ed3\u6784\u3002\u5b83\u5305\u542b\u4e86\u4e00\u7ec4\u9644\u5c5e\u4e8e\u7b26\u53f7\uff08symbol\uff09\u7684\u5168\u5c40\u9ed8\u8ba4\u503c\u3002\u4e0b\u8fb9\u662f\u4e00\u4e2a\u4e0d\u5b8c\u6574\u7684\u5217\u8868\u3002\u4f60\u4f1a\u53d1\u73b0\u5b83\u4eec\u5e38\u662f\u4ee5\u4e0d\u540c\u65b9\u5f0f\u8868\u8ff0\u7684\u540c\u6837\u7684\u503c\uff1afreq\u548cmidinote\uff0camp\u548cdb\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71],"tags":[72],"class_list":["post-1281","post","type-post","status-publish","format-standard","hentry","category-supercollider3","tag-sc"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/learn.travelchinawith.me\/index.php?rest_route=\/wp\/v2\/posts\/1281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/learn.travelchinawith.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/learn.travelchinawith.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/learn.travelchinawith.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/learn.travelchinawith.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1281"}],"version-history":[{"count":1,"href":"https:\/\/learn.travelchinawith.me\/index.php?rest_route=\/wp\/v2\/posts\/1281\/revisions"}],"predecessor-version":[{"id":1282,"href":"https:\/\/learn.travelchinawith.me\/index.php?rest_route=\/wp\/v2\/posts\/1281\/revisions\/1282"}],"wp:attachment":[{"href":"https:\/\/learn.travelchinawith.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learn.travelchinawith.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/learn.travelchinawith.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}