import numpy as np import IPython def play_all(freq): rate = 48000 duration = 0.5 x = np.zeros(int(rate * duration * 8)) for i in range(8): t = np.linspace(0., duration, int(rate * duration)) start = int(rate * duration * i) end = int(rate * duration * (i + 1)) x[start:end] = np.sin(2.0 * np.pi * freq[i] * t) return IPython.display.Audio(x, rate=rate, autoplay=True) while True: try: flag1 = int(input("flag (1:等差数列 2:3倍音 3:等比数列) = ")) if flag1 > 3: print("入力値は3以下の整数です。") continue if flag1 < 1: print("入力値は1以上の整数です。") continue break except ValueError: pass break scale1,scale2,scale3=[],[],[] rate1,rate2=[],[] dif1,dif2=[],[] index1=[0,2,4,5,7,9,11,12] wavelength=1 for i in range(13): scale1.append((24-i)/24) scale3.append((1/2)**(i/12)) wavelength=wavelength/3 while wavelength < 1/2: wavelength = wavelength *2 scale2.append(wavelength) scale2.append(0.5) del scale2[12] scale1=sorted(scale1,reverse=True) scale2=sorted(scale2,reverse=True) scale3=sorted(scale3,reverse=True) ratio1 = [1] * 8 ratio2 = [1] * 8 ratio3 = [1] * 8 for i in range(8): ratio1[i]=1/scale1[index1[i]] ratio2[i]=1/scale2[index1[i]] ratio3[i]=1/scale3[index1[i]] freq=[1] * 8 freq[1] = [440.0 * ratio1[i] for i in range(8)] freq[2] = [440.0 * ratio2[i] for i in range(8)] freq[3] = [440.0 * ratio3[i] for i in range(8)] play_all(freq[flag1])