{"id":7672,"date":"2014-08-25T22:49:49","date_gmt":"2014-08-25T13:49:49","guid":{"rendered":"http:\/\/leavebehind.iobb.net\/wordpress\/?p=7672"},"modified":"2020-01-29T00:18:23","modified_gmt":"2020-01-28T15:18:23","slug":"euclidean-rhythm","status":"publish","type":"post","link":"http:\/\/leavebehind.mydns.jp\/wordpress\/2014\/08\/25\/euclidean-rhythm\/","title":{"rendered":"Euclidean Rhythm"},"content":{"rendered":"<p>Basic paper: <a href=\"http:\/\/cgm.cs.mcgill.ca\/~godfried\/publications\/banff.pdf\">The Euclidean Algorithm Generates Traditional Musical Rhythms<\/a><\/p>\n<p><a href=\"http:\/\/leavebehind.iobb.net\/wordpress\/img_0469\/\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9026\" src=\"http:\/\/leavebehind.iobb.net\/wordpress\/wp-content\/uploads\/2017\/07\/IMG_0469.jpg\" alt=\"\" width=\"1280\" height=\"493\" srcset=\"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-content\/uploads\/2017\/07\/IMG_0469.jpg 1280w, http:\/\/leavebehind.mydns.jp\/wordpress\/wp-content\/uploads\/2017\/07\/IMG_0469-300x116.jpg 300w, http:\/\/leavebehind.mydns.jp\/wordpress\/wp-content\/uploads\/2017\/07\/IMG_0469-768x296.jpg 768w, http:\/\/leavebehind.mydns.jp\/wordpress\/wp-content\/uploads\/2017\/07\/IMG_0469-1024x394.jpg 1024w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><\/p>\n<p>Python code<\/p>\n<pre class=\"lang:python decode:true \" title=\"Making Euclidean Rhythm with Bjorklund's distribution by hTaka\"># Making Euclidean Rhythm with Bjorklund's distribution\n# by hTaka\nimport sys\n\nclass EuclideanRhythm:\n    def getRhythm(self,steps,hit,shift):\n        self.result = \"\"\n        if hit &gt; steps:\n            raise NameError(\"Number of hit must less than steps\")\n        pause = steps - hit\n        leftUnit = \"X\"\n        rightUnit = \".\"\n        print \"process&gt;{0}|{1} \/ left:{2} right:{3}\".format((\"[\"+leftUnit+\"]\") * hit , (\"[\"+rightUnit+\"]\") * pause , hit , pause)\n        self.makeEuclidRhythm(hit,pause,leftUnit,rightUnit)\n        if abs(shift)%steps != 0:\n            print \"Result&gt; Steps:{0} hit:{1} shift:{2} [{3}] (before shift)\".format(steps,hit,shift,self.result)\n            self.shiftRhythm(steps,shift)\n        return self.result\n    \n    def makeEuclidRhythm(self,numL,numR,leftUnit,rightUnit):\n        unitBuffer = leftUnit\n        if numR==0 or numR == 1:\n            self.result = leftUnit * numL+ rightUnit * numR\n            return\n        if numR &gt; numL:\n            m,k = numR,numL\n            isRightRemain = True\n            leftUnit += (rightUnit * (m \/\/ k))\n        else:\n            m,k = numL,numR\n            isRightRemain = False\n            leftUnit += rightUnit\n        if isRightRemain:\n            print \"process&gt;{0}|{1}  \/ left:{2} right:{3} {4} {5}\".format((\"[\"+leftUnit+\"]\") * k, (\"[\"+rightUnit+\"]\") * (m % k), k , m%k ,\"RightUnit Remain with\" , \"[\" + rightUnit + \"]\")\n            self.makeEuclidRhythm(k,m%k,leftUnit,rightUnit)\n        else:\n            print \"process&gt;{0}|{1}  \/ left:{2} right:{3} {4} {5}\".format((\"[\"+leftUnit+\"]\") * k, (\"[\"+unitBuffer+\"]\") * (m - k), k, m-k,\"RightUnit Replace with Left\" , \"[\" + unitBuffer + \"]\")\n            self.makeEuclidRhythm(k,m-k,leftUnit,unitBuffer)\n\n    def shiftRhythm(self,steps,shift):\n        if shift &gt; 0:\n            shift = shift % steps\n            self.result = \"{0}{1}\".format(self.result[steps - shift :],self.result[0 : -1 * shift])\n        if shift &lt; 0:\n            shift = (abs(shift) % steps)\n            self.result = \"{0}{1}\".format(self.result[shift :],self.result[0 : shift])\n        return\n\n\ndef main(arg):\n    try:\n        steps = int(arg[1])\n        hit = int(arg[2])\n        shift = int(arg[3])\n    except:\n        print \"Args error! usage: python EuclideanRhythms.py &lt;STEPS&gt; &lt;HIT&gt; &lt;SHIFT&gt;\"\n        print \"using hard coded params.\"\n        steps,hit,shift = 16,7,0\n    rhythm = EuclideanRhythm()\n    print \"Result&gt; Steps:{0} hit:{1} shift:{2} [{3}]\".format(steps,hit,shift,rhythm.getRhythm(steps,hit,shift))\n\nif __name__ == '__main__':\n    main(sys.argv)<\/pre>\n<p>Result<\/p>\n<pre class=\"lang:default mark:5 decode:true \">process&gt;[X][X][X][X][X][X][X]|[.][.][.][.][.][.][.][.][.] \/ left:7 right:9\nprocess&gt;[X.][X.][X.][X.][X.][X.][X.]|[.][.]  \/ left:7 right:2 RightUnit Remain with [.]\nprocess&gt;[X..][X..]|[X.][X.][X.][X.][X.]  \/ left:2 right:5 RightUnit Replace with Left [X.]\nprocess&gt;[X..X.X.][X..X.X.]|[X.]  \/ left:2 right:1 RightUnit Remain with [X.]\nResult&gt; Steps:16 hit:7 shift:0 [X..X.X.X..X.X.X.]<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Basic paper: The Euclidean Algorithm Generates Traditional Musical Rhythms Python code # Making Euclidean Rhyt [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":7693,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[18],"tags":[124,230],"class_list":["post-7672","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-generative","tag-python"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p8YSE4-1ZK","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-json\/wp\/v2\/posts\/7672","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-json\/wp\/v2\/comments?post=7672"}],"version-history":[{"count":2,"href":"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-json\/wp\/v2\/posts\/7672\/revisions"}],"predecessor-version":[{"id":9767,"href":"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-json\/wp\/v2\/posts\/7672\/revisions\/9767"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-json\/"}],"wp:attachment":[{"href":"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-json\/wp\/v2\/media?parent=7672"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-json\/wp\/v2\/categories?post=7672"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/leavebehind.mydns.jp\/wordpress\/wp-json\/wp\/v2\/tags?post=7672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}