Spaces:
Running
Running
Upload TMIDIX.py
Browse files
TMIDIX.py
CHANGED
@@ -9677,16 +9677,41 @@ def escore_notes_to_text_description(escore_notes,
|
|
9677 |
elif escore_averages[2] > 70:
|
9678 |
tone = 'treble'
|
9679 |
|
9680 |
-
if escore_averages[3] <
|
9681 |
dynamics = 'quiet'
|
9682 |
|
9683 |
-
elif
|
9684 |
dynamics = 'average'
|
9685 |
|
9686 |
-
elif escore_averages[3] >
|
9687 |
dynamics = 'loud'
|
9688 |
|
9689 |
#==============================================================================
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9690 |
|
9691 |
description = ''
|
9692 |
|
@@ -9770,12 +9795,96 @@ def escore_notes_to_text_description(escore_notes,
|
|
9770 |
if instruments[0] != dominant_instrument:
|
9771 |
description += 'The song opens with ' + instruments[0]
|
9772 |
|
9773 |
-
description += ' and performed on ' + dominant_instrument + '.'
|
9774 |
-
|
9775 |
-
description += '\n'
|
9776 |
|
9777 |
else:
|
9778 |
description += 'The song opens with and performed on ' + instruments[0] + '.'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9779 |
|
9780 |
if drums_present and most_common_drums:
|
9781 |
|
@@ -10933,8 +11042,57 @@ ALL_MOOD_TYPES_LABELS = ['Happy Major',
|
|
10933 |
'Sad Minor'
|
10934 |
]
|
10935 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10936 |
###################################################################################
|
10937 |
#
|
10938 |
# This is the end of the TMIDI X Python module
|
10939 |
#
|
10940 |
-
###################################################################################
|
|
|
9677 |
elif escore_averages[2] > 70:
|
9678 |
tone = 'treble'
|
9679 |
|
9680 |
+
if escore_averages[3] < 64:
|
9681 |
dynamics = 'quiet'
|
9682 |
|
9683 |
+
elif 64 <= escore_averages[3] <= 96:
|
9684 |
dynamics = 'average'
|
9685 |
|
9686 |
+
elif escore_averages[3] > 96:
|
9687 |
dynamics = 'loud'
|
9688 |
|
9689 |
#==============================================================================
|
9690 |
+
|
9691 |
+
mono_melodies = escore_notes_monoponic_melodies([e for e in escore_notes if e[6] < 88])
|
9692 |
+
|
9693 |
+
lead_melodies = []
|
9694 |
+
base_melodies = []
|
9695 |
+
|
9696 |
+
if mono_melodies:
|
9697 |
+
|
9698 |
+
for mel in mono_melodies:
|
9699 |
+
|
9700 |
+
escore_avgs = escore_notes_pitches_range(escore_notes, range_patch = mel[0])
|
9701 |
+
|
9702 |
+
if mel[0] in LEAD_INSTRUMENTS and escore_avgs[3] > 60:
|
9703 |
+
lead_melodies.append([Number2patch[mel[0]], mel[1]])
|
9704 |
+
|
9705 |
+
elif mel[0] in BASE_INSTRUMENTS and escore_avgs[3] <= 60:
|
9706 |
+
base_melodies.append([Number2patch[mel[0]], mel[1]])
|
9707 |
+
|
9708 |
+
if lead_melodies:
|
9709 |
+
lead_melodies.sort(key=lambda x: x[1], reverse=True)
|
9710 |
+
|
9711 |
+
if base_melodies:
|
9712 |
+
base_melodies.sort(key=lambda x: x[1], reverse=True)
|
9713 |
+
|
9714 |
+
#==============================================================================
|
9715 |
|
9716 |
description = ''
|
9717 |
|
|
|
9795 |
if instruments[0] != dominant_instrument:
|
9796 |
description += 'The song opens with ' + instruments[0]
|
9797 |
|
9798 |
+
description += ' and primarily performed on ' + dominant_instrument + '.'
|
|
|
|
|
9799 |
|
9800 |
else:
|
9801 |
description += 'The song opens with and performed on ' + instruments[0] + '.'
|
9802 |
+
|
9803 |
+
description += '\n'
|
9804 |
+
|
9805 |
+
if lead_melodies or base_melodies:
|
9806 |
+
|
9807 |
+
tm_count = len(lead_melodies + base_melodies)
|
9808 |
+
|
9809 |
+
if tm_count == 1:
|
9810 |
+
|
9811 |
+
if lead_melodies:
|
9812 |
+
description += 'The song has one distinct lead melody played on ' + lead_melodies[0][0] + '.'
|
9813 |
+
|
9814 |
+
else:
|
9815 |
+
description += 'The song has one distinct base melody played on ' + base_melodies[0][0] + '.'
|
9816 |
+
|
9817 |
+
description += '\n'
|
9818 |
+
|
9819 |
+
else:
|
9820 |
+
|
9821 |
+
if lead_melodies and not base_melodies:
|
9822 |
+
|
9823 |
+
if len(lead_melodies) == 1:
|
9824 |
+
mword = 'melody'
|
9825 |
+
|
9826 |
+
else:
|
9827 |
+
mword = 'melodies'
|
9828 |
+
|
9829 |
+
description += 'The song has ' + NUMERALS[len(lead_melodies)-1] + ' distinct lead ' + mword + ' played on '
|
9830 |
+
|
9831 |
+
if len(lead_melodies) > 1:
|
9832 |
+
description += ', '.join(lead_melodies[:-1][0]) + ' and ' + lead_melodies[-1][0] + '.'
|
9833 |
+
|
9834 |
+
else:
|
9835 |
+
description += lead_melodies[0][0] + '.'
|
9836 |
+
|
9837 |
+
description += '\n'
|
9838 |
+
|
9839 |
+
elif base_melodies and not lead_melodies:
|
9840 |
+
|
9841 |
+
if len(base_melodies) == 1:
|
9842 |
+
mword = 'melody'
|
9843 |
+
|
9844 |
+
else:
|
9845 |
+
mword = 'melodies'
|
9846 |
+
|
9847 |
+
description += 'The song has ' + NUMERALS[len(base_melodies)-1] + ' distinct base ' + mword + ' played on '
|
9848 |
+
|
9849 |
+
if len(base_melodies) > 1:
|
9850 |
+
description += ', '.join(base_melodies[:-1][0]) + ' and ' + base_melodies[-1][0] + '.'
|
9851 |
+
|
9852 |
+
else:
|
9853 |
+
description += base_melodies[0][0] + '.'
|
9854 |
+
|
9855 |
+
description += '\n'
|
9856 |
+
|
9857 |
+
elif lead_melodies and base_melodies:
|
9858 |
+
|
9859 |
+
if len(lead_melodies) == 1:
|
9860 |
+
lmword = 'melody'
|
9861 |
+
|
9862 |
+
else:
|
9863 |
+
lmword = 'melodies'
|
9864 |
+
|
9865 |
+
description += 'The song has ' + NUMERALS[len(lead_melodies)-1] + ' distinct lead ' + lmword + ' played on '
|
9866 |
+
|
9867 |
+
if len(lead_melodies) > 1:
|
9868 |
+
description += ', '.join(lead_melodies[:-1][0]) + ' and ' + lead_melodies[-1][0] + '.'
|
9869 |
+
|
9870 |
+
else:
|
9871 |
+
description += lead_melodies[0][0] + '.'
|
9872 |
+
|
9873 |
+
if len(base_melodies) == 1:
|
9874 |
+
bmword = 'melody'
|
9875 |
+
|
9876 |
+
else:
|
9877 |
+
bmword = 'melodies'
|
9878 |
+
|
9879 |
+
description += ' And ' + NUMERALS[len(base_melodies)-1] + ' distinct base ' + bmword + ' played on '
|
9880 |
+
|
9881 |
+
if len(base_melodies) > 1:
|
9882 |
+
description += ', '.join(base_melodies[:-1][0]) + ' and ' + base_melodies[-1][0] + '.'
|
9883 |
+
|
9884 |
+
else:
|
9885 |
+
description += base_melodies[0][0] + '.'
|
9886 |
+
|
9887 |
+
description += '\n'
|
9888 |
|
9889 |
if drums_present and most_common_drums:
|
9890 |
|
|
|
11042 |
'Sad Minor'
|
11043 |
]
|
11044 |
|
11045 |
+
###################################################################################
|
11046 |
+
|
11047 |
+
LEAD_INSTRUMENTS = [0, 1, 2, 3, 4, 5, 6, 7, # Piano
|
11048 |
+
8, 9, 10, 11, 12, 13, 14, 15, # Chromatic Percussion
|
11049 |
+
16, 17, 18, 19, 20, 21, 22, 23, # Organ
|
11050 |
+
24, 25, 26, 27, 28, 29, 30, 31, # Guitar
|
11051 |
+
40, 41, # Strings
|
11052 |
+
52, 53, 54, # Ensemble
|
11053 |
+
56, 57, 59, 60, # Brass
|
11054 |
+
64, 65, 66, 67, 68, 69, 70, 71, # Reed
|
11055 |
+
72, 73, 74, 75, 76, 77, 78, 79, # Pipe
|
11056 |
+
80, 81, 87 # Synth Lead
|
11057 |
+
]
|
11058 |
+
|
11059 |
+
###################################################################################
|
11060 |
+
|
11061 |
+
BASE_INSTRUMENTS = [32, 33, 34, 35, 36, 37, 38, 39, # Bass
|
11062 |
+
42, 43, # Strings
|
11063 |
+
58, 61, 62, 63, # Brass
|
11064 |
+
87 # Synth Lead
|
11065 |
+
]
|
11066 |
+
|
11067 |
+
###################################################################################
|
11068 |
+
|
11069 |
+
def escore_notes_pitches_range(escore_notes,
|
11070 |
+
range_patch=-1,
|
11071 |
+
pitches_idx=4,
|
11072 |
+
patches_idx=6
|
11073 |
+
):
|
11074 |
+
|
11075 |
+
pitches = []
|
11076 |
+
|
11077 |
+
if -1 < range_patch < 129:
|
11078 |
+
pitches = [e[pitches_idx] for e in escore_notes if e[patches_idx] == range_patch]
|
11079 |
+
|
11080 |
+
else:
|
11081 |
+
pitches = [e[pitches_idx] for e in escore_notes]
|
11082 |
+
|
11083 |
+
if pitches:
|
11084 |
+
min_pitch = min(pitches)
|
11085 |
+
avg_pitch = sum(pitches) / len(pitches)
|
11086 |
+
mode_pitch = statistics.mode(pitches)
|
11087 |
+
max_pitch = max(pitches)
|
11088 |
+
|
11089 |
+
return [max_pitch-min_pitch, min_pitch, max_pitch, avg_pitch, mode_pitch]
|
11090 |
+
|
11091 |
+
else:
|
11092 |
+
return [ -1] * 6
|
11093 |
+
|
11094 |
###################################################################################
|
11095 |
#
|
11096 |
# This is the end of the TMIDI X Python module
|
11097 |
#
|
11098 |
+
###################################################################################
|