asigalov61 commited on
Commit
a3c8685
·
verified ·
1 Parent(s): 2f31222

Upload TMIDIX.py

Browse files
Files changed (1) hide show
  1. TMIDIX.py +106 -16
TMIDIX.py CHANGED
@@ -51,7 +51,7 @@ r'''############################################################################
51
 
52
  ###################################################################################
53
 
54
- __version__ = "25.8.30"
55
 
56
  print('=' * 70)
57
  print('TMIDIX Python module')
@@ -14305,6 +14305,8 @@ def symmetric_match_ratio(list_a, list_b, threshold=0):
14305
 
14306
  def escore_notes_to_chords(escore_notes,
14307
  use_full_chords=False,
 
 
14308
  convert_pitches=True,
14309
  shift_chords=False,
14310
  return_tones_chords=False
@@ -14327,10 +14329,12 @@ def escore_notes_to_chords(escore_notes,
14327
 
14328
  tones_chord = sorted(set([p % 12 for p in pitches]))
14329
 
14330
- if tones_chord not in CHORDS:
14331
- tones_chord = check_and_fix_tones_chord(tones_chord,
14332
- use_full_chords=use_full_chords
14333
- )
 
 
14334
  if return_tones_chords:
14335
  if convert_pitches:
14336
  chords.append(tones_chord)
@@ -14343,24 +14347,41 @@ def escore_notes_to_chords(escore_notes,
14343
  chords.append([-pitches[0]])
14344
 
14345
  else:
14346
- cho_tok = CHORDS.index(tones_chord)
14347
- if convert_pitches:
14348
- if shift_chords:
14349
- if len(pitches) > 1:
14350
- chords.append(cho_tok+12)
14351
 
14352
- else:
14353
- chords.append(pitches[0] % 12)
14354
-
14355
  else:
 
 
 
14356
  chords.append(cho_tok)
14357
 
14358
  else:
14359
- if len(pitches) > 1:
14360
- chords.append(cho_tok+128)
14361
 
14362
  else:
14363
- chords.append(pitches[0])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14364
 
14365
  return chords
14366
 
@@ -14626,6 +14647,75 @@ def strings_dict(list_of_strings,
14626
 
14627
  ###################################################################################
14628
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14629
  print('Module loaded!')
14630
  print('=' * 70)
14631
  print('Enjoy! :)')
 
51
 
52
  ###################################################################################
53
 
54
+ __version__ = "25.8.31"
55
 
56
  print('=' * 70)
57
  print('TMIDIX Python module')
 
14305
 
14306
  def escore_notes_to_chords(escore_notes,
14307
  use_full_chords=False,
14308
+ repair_bad_chords=True,
14309
+ skip_pitches=False,
14310
  convert_pitches=True,
14311
  shift_chords=False,
14312
  return_tones_chords=False
 
14329
 
14330
  tones_chord = sorted(set([p % 12 for p in pitches]))
14331
 
14332
+ if repair_bad_chords:
14333
+ if tones_chord not in CHORDS:
14334
+ tones_chord = check_and_fix_tones_chord(tones_chord,
14335
+ use_full_chords=use_full_chords
14336
+ )
14337
+
14338
  if return_tones_chords:
14339
  if convert_pitches:
14340
  chords.append(tones_chord)
 
14347
  chords.append([-pitches[0]])
14348
 
14349
  else:
14350
+ if skip_pitches:
14351
+ if tones_chord in CHORDS:
14352
+ cho_tok = CHORDS.index(tones_chord)
 
 
14353
 
 
 
 
14354
  else:
14355
+ cho_tok = -1
14356
+
14357
+ if len(pitches) > 1:
14358
  chords.append(cho_tok)
14359
 
14360
  else:
14361
+ if tones_chord in CHORDS:
14362
+ cho_tok = CHORDS.index(tones_chord)
14363
 
14364
  else:
14365
+ cho_tok = -1
14366
+
14367
+ if cho_tok != -1:
14368
+ if convert_pitches:
14369
+ if shift_chords:
14370
+ if len(pitches) > 1:
14371
+ chords.append(cho_tok+12)
14372
+
14373
+ else:
14374
+ chords.append(pitches[0] % 12)
14375
+
14376
+ else:
14377
+ chords.append(cho_tok)
14378
+
14379
+ else:
14380
+ if len(pitches) > 1:
14381
+ chords.append(cho_tok+128)
14382
+
14383
+ else:
14384
+ chords.append(pitches[0])
14385
 
14386
  return chords
14387
 
 
14647
 
14648
  ###################################################################################
14649
 
14650
+ def chords_common_tones_chain(chords,
14651
+ use_full_chords=False
14652
+ ):
14653
+
14654
+ if use_full_chords:
14655
+ CHORDS = ALL_CHORDS_FULL
14656
+
14657
+ else:
14658
+ CHORDS = ALL_CHORDS_SORTED
14659
+
14660
+ tones_chords = [CHORDS[c] for c in chords if 0 <= c < len(CHORDS)]
14661
+
14662
+ n = len(tones_chords)
14663
+
14664
+ if not tones_chords:
14665
+ return []
14666
+
14667
+ if n < 2:
14668
+ return tones_chords
14669
+
14670
+ result = []
14671
+
14672
+ for i in range(n):
14673
+ if i == 0:
14674
+ common = set(tones_chords[0]) & set(tones_chords[1])
14675
+
14676
+ elif i == n - 1:
14677
+ common = set(tones_chords[n - 2]) & set(tones_chords[n - 1])
14678
+
14679
+ else:
14680
+ common = set(tones_chords[i - 1]) & set(tones_chords[i]) & set(tones_chords[i + 1])
14681
+
14682
+ result.append(min(common) if common else -1)
14683
+
14684
+ return result
14685
+
14686
+ ###################################################################################
14687
+
14688
+ def tones_chord_to_int(tones_chord,
14689
+ reverse_bits=True
14690
+ ):
14691
+
14692
+ cbits = tones_chord_to_bits(tones_chord,
14693
+ reverse=reverse_bits
14694
+ )
14695
+
14696
+ cint = bits_to_int(cbits)
14697
+
14698
+ return cint
14699
+
14700
+ ###################################################################################
14701
+
14702
+ def int_to_tones_chord(integer,
14703
+ reverse_bits=True
14704
+ ):
14705
+
14706
+ integer = integer % 4096
14707
+
14708
+ cbits = int_to_bits(integer)
14709
+
14710
+ if reverse_bits:
14711
+ cbits.reverse()
14712
+
14713
+ tones_chord = bits_to_tones_chord(cbits)
14714
+
14715
+ return tones_chord
14716
+
14717
+ ###################################################################################
14718
+
14719
  print('Module loaded!')
14720
  print('=' * 70)
14721
  print('Enjoy! :)')