Upload TMIDIX.py
Browse files
TMIDIX.py
CHANGED
|
@@ -51,7 +51,7 @@ r'''############################################################################
|
|
| 51 |
|
| 52 |
###################################################################################
|
| 53 |
|
| 54 |
-
__version__ = "25.5.
|
| 55 |
|
| 56 |
print('=' * 70)
|
| 57 |
print('TMIDIX Python module')
|
|
@@ -11193,13 +11193,17 @@ def escore_notes_core(escore_notes, core_len=128):
|
|
| 11193 |
|
| 11194 |
###################################################################################
|
| 11195 |
|
| 11196 |
-
def multiprocessing_wrapper(function, data_list):
|
| 11197 |
|
| 11198 |
with multiprocessing.Pool() as pool:
|
| 11199 |
|
| 11200 |
results = []
|
| 11201 |
|
| 11202 |
-
for result in tqdm.tqdm(pool.imap_unordered(function, data_list),
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11203 |
results.append(result)
|
| 11204 |
|
| 11205 |
return results
|
|
@@ -12973,7 +12977,7 @@ def ordered_groups(data, key_index):
|
|
| 12973 |
|
| 12974 |
###################################################################################
|
| 12975 |
|
| 12976 |
-
def merge_melody_notes(escore_notes, pitches_idx=4, max_dur=255):
|
| 12977 |
|
| 12978 |
groups = ordered_groups_unsorted(escore_notes, pitches_idx)
|
| 12979 |
|
|
@@ -12994,7 +12998,16 @@ def merge_melody_notes(escore_notes, pitches_idx=4, max_dur=255):
|
|
| 12994 |
g[0][4],
|
| 12995 |
g[0][5],
|
| 12996 |
g[0][6]
|
| 12997 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12998 |
|
| 12999 |
return merged_melody_notes
|
| 13000 |
|
|
@@ -13002,10 +13015,13 @@ def merge_melody_notes(escore_notes, pitches_idx=4, max_dur=255):
|
|
| 13002 |
|
| 13003 |
def add_expressive_melody_to_enhanced_score_notes(escore_notes,
|
| 13004 |
melody_start_chord=0,
|
|
|
|
|
|
|
| 13005 |
melody_channel=3,
|
| 13006 |
melody_patch=40,
|
| 13007 |
melody_notes_max_duration=255,
|
| 13008 |
-
|
|
|
|
| 13009 |
melody_max_velocity=120,
|
| 13010 |
acc_max_velocity=90,
|
| 13011 |
return_melody=False
|
|
@@ -13018,26 +13034,28 @@ def add_expressive_melody_to_enhanced_score_notes(escore_notes,
|
|
| 13018 |
|
| 13019 |
cscore = chordify_score([1000, score])
|
| 13020 |
|
| 13021 |
-
melody_pitches = [
|
| 13022 |
|
| 13023 |
for i, c in enumerate(cscore[melody_start_chord:]):
|
| 13024 |
|
| 13025 |
-
|
| 13026 |
-
|
| 13027 |
-
|
| 13028 |
-
|
| 13029 |
-
|
|
|
|
|
|
|
| 13030 |
|
| 13031 |
song_f = []
|
| 13032 |
mel_f = []
|
| 13033 |
|
| 13034 |
idx = 1
|
| 13035 |
|
| 13036 |
-
for i, c in enumerate(cscore[:-
|
| 13037 |
pitches = [e[4] for e in c if e[3] != 9]
|
| 13038 |
|
| 13039 |
-
if pitches and i >= melody_start_chord:
|
| 13040 |
-
dur = min(cscore[i+
|
| 13041 |
|
| 13042 |
mel_f.append(['note',
|
| 13043 |
c[0][1],
|
|
@@ -13050,19 +13068,24 @@ def add_expressive_melody_to_enhanced_score_notes(escore_notes,
|
|
| 13050 |
idx += 1
|
| 13051 |
|
| 13052 |
song_f.extend(c)
|
| 13053 |
-
|
| 13054 |
-
song_f.extend(cscore[-
|
| 13055 |
|
| 13056 |
-
if
|
| 13057 |
for e in mel_f:
|
| 13058 |
-
if e[2] >=
|
| 13059 |
-
e[2] =
|
| 13060 |
|
| 13061 |
adjust_score_velocities(mel_f, melody_max_velocity)
|
| 13062 |
|
| 13063 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13064 |
key=lambda x: x[1]
|
| 13065 |
-
|
| 13066 |
|
| 13067 |
if return_melody:
|
| 13068 |
return mel_f
|
|
|
|
| 51 |
|
| 52 |
###################################################################################
|
| 53 |
|
| 54 |
+
__version__ = "25.5.6"
|
| 55 |
|
| 56 |
print('=' * 70)
|
| 57 |
print('TMIDIX Python module')
|
|
|
|
| 11193 |
|
| 11194 |
###################################################################################
|
| 11195 |
|
| 11196 |
+
def multiprocessing_wrapper(function, data_list, verbose=True):
|
| 11197 |
|
| 11198 |
with multiprocessing.Pool() as pool:
|
| 11199 |
|
| 11200 |
results = []
|
| 11201 |
|
| 11202 |
+
for result in tqdm.tqdm(pool.imap_unordered(function, data_list),
|
| 11203 |
+
total=len(data_list),
|
| 11204 |
+
disable=not verbose
|
| 11205 |
+
):
|
| 11206 |
+
|
| 11207 |
results.append(result)
|
| 11208 |
|
| 11209 |
return results
|
|
|
|
| 12977 |
|
| 12978 |
###################################################################################
|
| 12979 |
|
| 12980 |
+
def merge_melody_notes(escore_notes, pitches_idx=4, max_dur=255, last_dur=128):
|
| 12981 |
|
| 12982 |
groups = ordered_groups_unsorted(escore_notes, pitches_idx)
|
| 12983 |
|
|
|
|
| 12998 |
g[0][4],
|
| 12999 |
g[0][5],
|
| 13000 |
g[0][6]
|
| 13001 |
+
])
|
| 13002 |
+
|
| 13003 |
+
merged_melody_notes.append(['note',
|
| 13004 |
+
groups[-1][1][0][1],
|
| 13005 |
+
last_dur,
|
| 13006 |
+
groups[-1][1][0][3],
|
| 13007 |
+
groups[-1][1][0][4],
|
| 13008 |
+
groups[-1][1][0][5],
|
| 13009 |
+
groups[-1][1][0][6]
|
| 13010 |
+
])
|
| 13011 |
|
| 13012 |
return merged_melody_notes
|
| 13013 |
|
|
|
|
| 13015 |
|
| 13016 |
def add_expressive_melody_to_enhanced_score_notes(escore_notes,
|
| 13017 |
melody_start_chord=0,
|
| 13018 |
+
melody_prime_pitch=60,
|
| 13019 |
+
melody_step=1,
|
| 13020 |
melody_channel=3,
|
| 13021 |
melody_patch=40,
|
| 13022 |
melody_notes_max_duration=255,
|
| 13023 |
+
melody_last_note_dur=128,
|
| 13024 |
+
melody_clip_max_min_durs=[],
|
| 13025 |
melody_max_velocity=120,
|
| 13026 |
acc_max_velocity=90,
|
| 13027 |
return_melody=False
|
|
|
|
| 13034 |
|
| 13035 |
cscore = chordify_score([1000, score])
|
| 13036 |
|
| 13037 |
+
melody_pitches = [melody_prime_pitch]
|
| 13038 |
|
| 13039 |
for i, c in enumerate(cscore[melody_start_chord:]):
|
| 13040 |
|
| 13041 |
+
if i % melody_step == 0:
|
| 13042 |
+
|
| 13043 |
+
pitches = [e[4] for e in c if e[3] != 9]
|
| 13044 |
+
|
| 13045 |
+
if pitches:
|
| 13046 |
+
cptc = find_closest_value(mult_pitches(pitches), melody_pitches[-1])[0]
|
| 13047 |
+
melody_pitches.append(cptc)
|
| 13048 |
|
| 13049 |
song_f = []
|
| 13050 |
mel_f = []
|
| 13051 |
|
| 13052 |
idx = 1
|
| 13053 |
|
| 13054 |
+
for i, c in enumerate(cscore[:-melody_step]):
|
| 13055 |
pitches = [e[4] for e in c if e[3] != 9]
|
| 13056 |
|
| 13057 |
+
if pitches and i >= melody_start_chord and i % melody_step == 0:
|
| 13058 |
+
dur = min(cscore[i+melody_step][0][1] - c[0][1], melody_notes_max_duration)
|
| 13059 |
|
| 13060 |
mel_f.append(['note',
|
| 13061 |
c[0][1],
|
|
|
|
| 13068 |
idx += 1
|
| 13069 |
|
| 13070 |
song_f.extend(c)
|
| 13071 |
+
|
| 13072 |
+
song_f.extend(flatten(cscore[-melody_step:]))
|
| 13073 |
|
| 13074 |
+
if len(melody_clip_max_min_durs) == 2:
|
| 13075 |
for e in mel_f:
|
| 13076 |
+
if e[2] >= melody_clip_max_min_durs[0]:
|
| 13077 |
+
e[2] = melody_clip_max_min_durs[1]
|
| 13078 |
|
| 13079 |
adjust_score_velocities(mel_f, melody_max_velocity)
|
| 13080 |
|
| 13081 |
+
merged_melody_notes = merge_melody_notes(mel_f,
|
| 13082 |
+
max_dur=melody_notes_max_duration,
|
| 13083 |
+
last_dur=melody_last_note_dur
|
| 13084 |
+
)
|
| 13085 |
+
|
| 13086 |
+
song_f = sorted(merged_melody_notes + song_f,
|
| 13087 |
key=lambda x: x[1]
|
| 13088 |
+
)
|
| 13089 |
|
| 13090 |
if return_melody:
|
| 13091 |
return mel_f
|