이 글은 <원주율 음악 만들기: 소스코드, 결론>, <황금비 음악 만들기: 소스코드, 결론> 의 연재글입니다.
피보나치수열 음악은 이렇게 만듭니다.
파이썬 소스코드 (파이썬 3 입니다.)
import random
n_last = 100 # 피보나치수열 갯수
file2 = open("pibonachi_write.txt", "w")
#초기값 설정
data2 = "MML@t120"
file2.write(data2)
def fibo(n):
_curr, _next = 0, 1
for _ in range(n):
_curr, _next = _next, _curr + _next
return _curr
for i in range(1, n_last) :
fibo_num = fibo(i)
# print(fibo_num)
# data1 = round(fibo_num*10**(1-i))%10
data1 = fibo_num % 10
# print(data1)
while( fibo_num >= 10 ) :
data1 = fibo_num // 10
fibo_num = data1
data1 = fibo_num % 10
# print(data1)
if data1 == 0 :
data2 = "o3g#"
elif data1 == 1 :
data2 = "o3a"
elif data1 == 2:
data2 = "o3b"
elif data1 == 3 :
data2 = "o4c"
elif data1 == 4 :
data2 = "o4d"
elif data1 == 5:
data2 = "o4e"
elif data1 == 6:
data2 = "o4f"
elif data1 == 7 :
data2 = "o4g#"
elif data1 == 8 :
data2 = "o4a"
elif data1 == 9 :
data2 = "o4b"
file2.write(data2)
j = random.randint(1,24)
if 1 < j < 12 :
data3 = ""
elif 12 < j < 19 :
data3 = "8"
elif j == 20 :
data3 = "2"
elif 20 < j < 23 :
data3 = "."
elif j == 24:
data3 = "8."
else :
data3 = ""
file2.write(data3)
file2.close()
이번에는 10진수로 된 피보나치수열 수치가 들어 있는 부분이 없습니다.
대신 fibo 함수로 피보나치수열 수치를 만듭니다. 함수 내부에서 만들어지는 값이므로 숫자값이고,
그래서 if문에는 문자열 자료형이 아닌 숫자 자료형을 가지고 비교를 하게 됩니다.
문제는 fibo 함수는 반복할수록 계속 값이 커지게 되는데, 그래서 i = 8~10 정도가 되면 fibo에서 return하는 값이 10 이상인 값이 됩니다.
음악으로 맵핑할 값은 0부터 9까지 이므로, 10이 넘는 값이 들어오면 1자리수씩 짤라줘야 합니다.
그래서 이를 위한 while 문을 하나 더 만들고, 10으로 나눠서 몫과 나머지를 활용하여
if문을 돌려서 MML 음악을 맵핑, 구현해야 합니다.
이 부분의 프로그래밍 구현이 기존 원주율 음악 소스코드와 가장 큰 차이점이라 할 수 있습니다.
그 이외의 부분은 원주율 음악과 대동소이하니 별도로 설명하지 않겠습니다.
참고: 컴퓨터 프로그래밍을 통해 자동으로 생성된 음악이므로, 해당 음악에서 별도의 저작권은 없습니다.
답글 남기기