【python】【転送】pythonプログラムで簡易スペクトル転送を実現
18759 ワード
一、任務
pythonで指定したメロディーをあるトーンからあるトーンに変換する機能を実現します.
二、原理
X調をY調に回し、Xリットル(X-Y)個の半音注:ここでX-Yは半音関係を表し、以下のtrans_に対応するmap辞書注意:入力された音階は、8度より大きい音域を表すことができます.ここで採用する戦略は、音符の前にある場合である.(点)は最初の8度を表す、音符の後ろにあれば.8度高いことを表します.
三、コード
pythonで指定したメロディーをあるトーンからあるトーンに変換する機能を実現します.
二、原理
X調をY調に回し、Xリットル(X-Y)個の半音注:ここでX-Yは半音関係を表し、以下のtrans_に対応するmap辞書注意:入力された音階は、8度より大きい音域を表すことができます.ここで採用する戦略は、音符の前にある場合である.(点)は最初の8度を表す、音符の後ろにあれば.8度高いことを表します.
三、コード
#trans_map: , 1
trans_map = {'C':0,'bD':1,'D':2,'bE':3,'E':4,'F':5,'bG':6,'G':7,'bA':8,'A':9,'bB':10,'B':11}
#C_scale:C
C_scale = ['1','#1','2','#2','3','4','#4','5','#5','6','#6','7']
# : , ,
def trans_tonality(Tune,Tune_Tonality,Aim_Tonality):
tune = [] #
minus = trans_map[Tune_Tonality]-trans_map[Aim_Tonality] #
at = C_scale[minus:]+C_scale[:minus] #
for t in list(Tune.split(',')): #
position = [i.start() for i in re.finditer('\.', t)] # .
if position == []: # .
low_num = 0
high_num = 0
elif position[0]==0: # .
low_num = len(position)
high_num = 0
else: # .
high_num = len(position)
low_num = 0
if minus>0:
high_num += 1
low_num -= 1
t = t.translate(str.maketrans('','','.')) #. ,
if len(t)==1: #
ori = int(t)
if int(t)<4: #do re mi
new_tune = at[int(t)*2-2]
elif int(t)<8: #fa sol la ti
new_tune = at[int(t)*2-3]
else:
new_tune = 'Error'
elif len(t)==2: #
ori = int(t[1]) #
if 'b' in t: # b, #, ; b6 #5
t = '#'+str(int(t[1])-1)
if int(t[1])<3: # #do #re
print(t[1])
new_tune = str(at[int(t[1])*2-1])
elif int(t[1])<7: # #fa #sol #la
new_tune = str(at[int(t[1])*2-2])
else:
new_tune = 'Error'
else:
new_tune = 'Error'
try: # . , .
if int(new_tune[-1]) > ori:
if high_num > 0:
high_num -= 1
else:
low_num += 1
for i in range(low_num):
new_tune = '.' + new_tune
for i in range(high_num):
new_tune = new_tune + '.'
tune.append(new_tune)
except:
tune.append('Error')
print(tune)
# :trans_tonality(Tune,Tune_Tonality,Aim_Tonality) , ,
trans_tonality('1,1,5,5,6,6,5,4,4,3,3,2,2,1','C','D')
trans_tonality('1,1,5,5,6,6,5,4,4,3,3,2,2,1','D','C')
# :
#['.#6', '.#6', '4', '4', '5', '5', '4', '#2', '#2', '2', '2', '1', '1', '.#6']
#['2', '2', '6', '6', '7', '7', '6', '5', '5', '#4', '#4', '3', '3', '2']