Last active
January 31, 2017 12:55
-
-
Save stockedge/3713792dc3ce66310b28bb07f4df6287 to your computer and use it in GitHub Desktop.
マルコフ連鎖で作曲
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
trans = {'A': {'A': 0.28385866546540767, | |
'B': 0.24039029254446773, | |
'C': 0.00022086254477386737, | |
'D': 0.020802627608255447, | |
'E': 0.011895962807622163, | |
'F': 0.10198601349666957, | |
'G': 0.15754715743344602, | |
'a': 0.011517653696276825, | |
'b': 0.0003476945011786625, | |
'c': 0.05216073545040652, | |
'd': 0.06721875013667236, | |
'e': 0.02704363456651899, | |
'f': 0.017187916850718788, | |
'g': 0.007822032897585382}, | |
'B': {'A': 0.2771188892102979, | |
'B': 0.22058967671295754, | |
'C': 0.0002079861916293925, | |
'D': 0.007872396885466546, | |
'E': 0.017528215598008115, | |
'F': 0.00737753318814144, | |
'G': 0.10933858000415972, | |
'a': 0.00362900044705078, | |
'b': 0.001310073942677093, | |
'c': 0.17432828827364288, | |
'd': 0.12248235105678501, | |
'e': 0.031912731862767364, | |
'f': 0.011085424949258542, | |
'g': 0.015218851677157618}, | |
'C': {'A': 0.020522388059701493, | |
'B': 0.008323765786452353, | |
'C': 0.330654420206659, | |
'D': 0.20020091848450058, | |
'E': 0.18828932261768083, | |
'F': 0.0371699196326062, | |
'G': 0.02468427095292767, | |
'a': 0.0008610792192881745, | |
'b': 0.00014351320321469576, | |
'c': 0.09629735935706085, | |
'd': 0.007032146957520092, | |
'e': 0.006458094144661309, | |
'f': 0.07936280137772675}, | |
'D': {'A': 0.0628326536254925, | |
'B': 0.04909449091034769, | |
'C': 0.013548074929149098, | |
'D': 0.3528461325775904, | |
'E': 0.20859542406856985, | |
'F': 0.14082912836109768, | |
'G': 0.11463157530932468, | |
'a': 0.0012787723785166241, | |
'b': 6.048247736227276e-05, | |
'c': 0.011336144328471694, | |
'd': 0.02972281744660261, | |
'e': 0.004337457662265847, | |
'f': 0.006428423308218705, | |
'g': 0.004458422616990392}, | |
'E': {'A': 0.06681146354123979, | |
'B': 0.0477829686091304, | |
'C': 0.016439909297052153, | |
'D': 0.19937573422943475, | |
'E': 0.30749528727153513, | |
'F': 0.18727973116957627, | |
'G': 0.12154741414638144, | |
'a': 0.0009357156517225364, | |
'b': 0.00012977078381553423, | |
'c': 0.023201650137966833, | |
'd': 0.013284430237958637, | |
'e': 0.010736824850422096, | |
'f': 0.002199273283610633, | |
'g': 0.0027798267901538126}, | |
'F': {'A': 0.23432698979086133, | |
'B': 0.031178759044503915, | |
'C': 0.0012761423332342155, | |
'D': 0.12524159976211716, | |
'E': 0.18465036178015662, | |
'F': 0.16471528397264348, | |
'G': 0.2253320448012687, | |
'a': 0.0005513430468827436, | |
'b': 4.9558925562493803e-05, | |
'c': 0.005829368619288334, | |
'd': 0.021626276142333235, | |
'e': 0.0023602438299137676, | |
'f': 0.002211567053226286, | |
'g': 0.0006504608980077312}, | |
'G': {'A': 0.22458874158395226, | |
'B': 0.1349448184910113, | |
'C': 0.0005032275976955647, | |
'D': 0.029537724717151385, | |
'E': 0.10087110432428681, | |
'F': 0.1224127160408135, | |
'G': 0.31503435829804954, | |
'a': 0.001075865898521552, | |
'b': 0.00043034635940862083, | |
'c': 0.021715138474352746, | |
'd': 0.027240230443534394, | |
'e': 0.009606441313250504, | |
'f': 0.001988616644686611, | |
'g': 0.010050669813285208}, | |
'a': {'A': 0.020298824153478914, | |
'B': 0.008513836088763152, | |
'D': 9.725046414994254e-05, | |
'E': 0.00034479710016797806, | |
'F': 0.00031827424630890286, | |
'G': 0.0005835027848996552, | |
'a': 0.2788082397665989, | |
'b': 0.08956767748209707, | |
'c': 0.01909645477853417, | |
'd': 0.02394129608345858, | |
'e': 0.08393599151268677, | |
'f': 0.22152771638228275, | |
'g': 0.25296613915657323}, | |
'b': {'A': 0.0024639959216619226, | |
'B': 0.013254598751008964, | |
'C': 0.00021241344152257954, | |
'D': 8.496537660903183e-05, | |
'E': 0.0002973788181316114, | |
'F': 0.0002973788181316114, | |
'G': 0.001486894090658057, | |
'a': 0.43051956327796426, | |
'b': 0.16440800373847658, | |
'c': 0.007307022388376737, | |
'd': 0.018310038659246356, | |
'e': 0.051234122095246186, | |
'f': 0.05344322188708101, | |
'g': 0.2566804027358851}, | |
'c': {'A': 0.18731832969664505, | |
'B': 0.23348326466950775, | |
'C': 0.0002481350484848007, | |
'D': 0.0018669208409808817, | |
'E': 0.010480751809810394, | |
'F': 0.004517633343048674, | |
'G': 0.014253980007404665, | |
'a': 0.00997660440971429, | |
'b': 0.000708957281385145, | |
'c': 0.16858610286182424, | |
'd': 0.25081727019937455, | |
'e': 0.10188897728973509, | |
'f': 0.01134331650216232, | |
'g': 0.0045097560399221725}, | |
'd': {'A': 0.050852683302823005, | |
'B': 0.19688553810579054, | |
'C': 0.00013007033432893341, | |
'D': 0.004386260718759033, | |
'E': 0.0021196647075826186, | |
'F': 0.009056749205125735, | |
'G': 0.016827247326332017, | |
'a': 0.008069178148183833, | |
'b': 0.001929376625879179, | |
'c': 0.15077078716639367, | |
'd': 0.24823682435687447, | |
'e': 0.20388524906060315, | |
'f': 0.06303112053184315, | |
'g': 0.04381925040948068}, | |
'e': {'A': 0.04516940069619686, | |
'B': 0.021247285789738665, | |
'C': 5.250819282243891e-05, | |
'D': 0.00048183988707649827, | |
'E': 0.0015752457846731674, | |
'F': 0.0007351146995141448, | |
'G': 0.0036817509320204228, | |
'a': 0.03941203178907768, | |
'b': 0.0024617076282049304, | |
'c': 0.10173307923486297, | |
'd': 0.30124567965678173, | |
'e': 0.19861687242671247, | |
'f': 0.22248339042312337, | |
'g': 0.061104092859194645}, | |
'f': {'A': 0.022028136557735355, | |
'B': 0.020554903228359962, | |
'C': 8.795422861942646e-06, | |
'D': 0.00029904437730604995, | |
'E': 0.0002330787058414801, | |
'F': 0.00083116746045358, | |
'G': 0.0009938827833995188, | |
'a': 0.0813532637615385, | |
'b': 0.007731176695647585, | |
'c': 0.009362727636537945, | |
'd': 0.15799218086907574, | |
'e': 0.3006495419783545, | |
'f': 0.1751564485841568, | |
'g': 0.2228056519387311}, | |
'g': {'A': 0.006752134866170921, | |
'B': 0.027725677971711646, | |
'D': 0.00040821730400052955, | |
'E': 0.000314437653081489, | |
'F': 0.00034201990335179505, | |
'G': 0.006189456960656679, | |
'a': 0.14696926234029878, | |
'b': 0.02829938877733401, | |
'c': 0.009995807497958914, | |
'd': 0.07537677353869238, | |
'e': 0.21314459718881706, | |
'f': 0.24760034422648336, | |
'g': 0.23688188177144245}} | |
import random | |
def choice(pos): | |
r = random.random() | |
total = 0 | |
for k, v in trans[pos].items(): | |
if total <= r and r <= total + v: | |
return k | |
total += v | |
pos = 'c' | |
for i in range(4 * 8): | |
print(pos, end = '') | |
pos = choice(pos) | |
print() | |
# カノンコードにメロディを付けてみる | |
chords = { | |
'C': ['C', 'E', 'G'], | |
'D': ['D', 'F', 'A'], | |
'Em': ['E', 'G', 'B'], | |
'F': ['F', 'A', 'c'], | |
'G': ['G', 'B', 'd'], | |
'Am': ['A', 'c', 'e'], | |
'B': ['B', 'd', 'f'], | |
} | |
kanon_chords = [ | |
'C', 'G', 'Am', 'Em', 'F', 'C', 'F', 'G' | |
] | |
pos = 'E' | |
for i in range(8): | |
chord = kanon_chords[i] | |
print([chord], end = '') | |
for j in range(2): | |
while True: | |
next_pos = choice(pos) | |
if next_pos in chords[chord]: | |
pos = next_pos | |
break | |
print(pos, end = '') | |
print() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment