
    +hb                        S SK r S SKrS SKrS SKJrJrJrJrJrJ	r	J
r
JrJr  S SKrS SKrS SKJs  Jr  SSKJr  SSKJr  \" 5       (       a  S SKrO\" S5      eSrS	rS
r\" \\-  5      rSrSr Sr!0 SS _SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_S#S$_S%S&_S'S(_S)S*_S+S,_0 S-S._S/S0_S1S2_S3S4_S5S6_S7S8_S9S:_S;S<_S=S>_S?S@_SASB_SCSD_SESF_SGSH_SISJ_SKSL_SMSN_Er"\ RF                   " SO SP5      5       r$\ RF                   " SQ SR5      5       r%\ RF                   " SS ST5      5       r&\ RF                   " SU SV5      5       r'\ RF                   " SW SX5      5       r( " SY SZ5      r) " S[ S\5      r*\ RF                   " S] S^5      5       r+S_\*4S` jr,Sa r-\+" \,Sb Sc9\+" \-Sd Sc9\+" Se Sf Sc9Sg.r.SSh jr/Si r0Sj\Sk\Sl\\
\
\      \Rb                  4   4Sm jr2Sn\Rf                  Sl\\
\4   \
\%   4   4So jr5S_\*4Sp jr6Sq r7Sr r8Ss\	\&   St\%S_\*Sl\
\(   4Su jr9Ss\&Sl\
\(   4Sv jr: SSw jr;SSx jr< SS_\*Sy\=Sz\=Sl\\=\4   4S{ jjr>  SS_\*Sz\=S|\
\=   Sl\\\=\4   /\\=\4   4   4S} jjr?S_\*S~\$4S jr@ " S S5      rAg)    N)	AnyCallableListMappingMutableMappingOptionalSequenceTupleUnion   )is_note_seq_available   )TARGET_FEATURE_LENGTHz2Please install note-seq via `pip install note-seq`i   i>  i@  d   
   zAcoustic PianozElectric PianozChromatic Percussion   Organ   zAcoustic Guitar   zClean Electric Guitar   zDistorted Electric Guitar   zAcoustic Bass    zElectric Bass!   Violin(   Viola)   Cello*   
Contrabass+   zOrchestral Harp.   Timpani/   zString Ensemble0   zSynth Strings2   zChoir and Voice4   zOrchestral Hit7   Trumpet8   Trombone9   Tuba:   zFrench Horn<   zBrass Section=   zSoprano/Alto Sax@   z	Tenor SaxB   zBaritone SaxC   OboeD   zEnglish HornE   BassoonF   ClarinetG   PipeI   z
Synth LeadP   z	Synth PadX   c                   .    \ rS rSr% Sr\\S'   \\S'   Srg)NoteRepresentationConfigS   z#Configuration note representations.onsets_onlyinclude_ties N)__name__
__module____qualname____firstlineno____doc__bool__annotations____static_attributes__rD       y/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/pipelines/deprecated/spectrogram_diffusion/midi_utils.pyr@   r@   S   s    -rM   r@   c                   p    \ rS rSr% \\S'   Sr\\   \S'   Sr\\   \S'   Sr	\\
   \S'   Sr\\   \S'   Srg)	NoteEventData[   pitchNvelocityprogramis_drum
instrumentrD   )rE   rF   rG   rH   intrK   rS   r   rT   rU   rJ   rV   rL   rD   rM   rN   rP   rP   [   s?    J"Hhsm"!GXc]!"GXd^" $J$rM   rP   c                   X    \ rS rSr% Sr\R                  " \S9r\	\
\\4   \4   \S'   Srg)NoteEncodingStater   zGEncoding state for note transcription, keeping track of active pitches.)default_factoryactive_pitchesrD   N)rE   rF   rG   rH   rI   dataclassesfielddictr[   r   r
   rW   rK   rL   rD   rM   rN   rY   rY   d   s0    Q <G;L;L]a;bNN5c?C#78brM   rY   c                   4    \ rS rSr% \\S'   \\S'   \\S'   Srg)
EventRangel   type	min_value	max_valuerD   NrE   rF   rG   rH   strrK   rW   rL   rD   rM   rN   r`   r`   l   s    
INNrM   r`   c                   *    \ rS rSr% \\S'   \\S'   Srg)Events   rb   valuerD   Nre   rD   rM   rN   rh   rh   s   s    
IJrM   rh   c                   (    \ rS rSrS\4S jrS rSrg)	Tokenizery   regular_idsc                     SU l         Xl        g )N   )_num_special_tokens_num_regular_tokens)selfrn   s     rN   __init__Tokenizer.__init__z   s    #$ #. rM   c                    / nU HU  nSUs=::  a  U R                   :  d  O  [        SU SU R                    S35      eUR                  X0R                  -   5        MW     UR                  S5        US/[        [        U5      -
  -  -   nU$ )Nr   z	token_id z) does not fall within valid range of [0, )r   )rr   
ValueErrorappendrq   INPUT_FEATURE_LENGTHlen)rs   	token_idsencodedtoken_ids       rN   encodeTokenizer.encode   s    !H;4#;#;; z)RSWSkSkRllmn  NN8&>&>>? " 	q QC#7#g,#FGGrM   )rr   rq   N)rE   rF   rG   rH   rW   rt   r   rL   rD   rM   rN   rl   rl   y   s    /C /
rM   rl   c                       \ rS rSrSrS\S\S\\   4S jr	\
S\4S j5       rS	\S\4S
 jr\
S\4S j5       rS\S\4S jrS\S\\\4   4S jrS	\S\4S jrSrg)Codec   a  Encode and decode events.

Useful for declaring what certain ranges of a vocabulary should be used for. This is intended to be used from
Python before encoding or after decoding with GenericTokenVocabulary. This class is more lightweight and does not
include things like EOS or UNK token handling.

To ensure that 'shift' events are always the first block of the vocab and start at 0, that event type is required
and specified separately.
max_shift_stepssteps_per_secondevent_rangesc                     X l         [        SSUS9U l        U R                  /U-   U l        [	        U R                  5      [	        U R                   Vs1 s H  oDR
                  iM     sn5      :X  d   egs  snf )a  Define Codec.

Args:
  max_shift_steps: Maximum number of shift steps that can be encoded.
  steps_per_second: Shift steps will be interpreted as having a duration of
      1 / steps_per_second.
  event_ranges: Other supported event types and their ranges.
shiftr   )rb   rc   rd   N)r   r`   _shift_range_event_rangesr{   rb   )rs   r   r   r   ers        rN   rt   Codec.__init__   sk     !1&GqO\"//0<?4%%&#ASAS.TAS2wwAS.T*UUUU.Ts   A5
returnc                 :    [        S U R                   5       5      $ )Nc              3   X   #    U  H   oR                   UR                  -
  S -   v   M"     g7f)r   N)rd   rc   ).0r   s     rN   	<genexpr>$Codec.num_classes.<locals>.<genexpr>   s"     P=Or<<",,.2=Os   (*)sumr   rs   s    rN   num_classesCodec.num_classes   s    PT=O=OPPPrM   indexc                 r    U R                   R                  U:*  =(       a    XR                   R                  :*  $ N)r   rc   rd   )rs   r   s     rN   is_shift_event_indexCodec.is_shift_event_index   s-    !!++u4`5DUDUD_D_;_`rM   c                 .    U R                   R                  $ r   )r   rd   r   s    rN   r   Codec.max_shift_steps   s      ***rM   eventc                    SnU R                    H  nUR                  UR                  :X  a  UR                  UR                  s=::  a  UR                  ::  dA  O  [        SUR                   SUR                   SUR                   SUR                   35      eX!R                  -   UR                  -
  s  $ X#R                  UR                  -
  S-   -  nM     [        SUR                   35      e)zEncode an event to an index.r   zEvent value z is not within valid range [z, z] for type r   Unknown event type: )r   rb   rc   rj   rd   rx   )rs   r   offsetr   s       rN   encode_eventCodec.encode_event   s    $$BzzRWW$||u{{BbllB$&u{{m 4LL>BLL>UZZLR  +bll::llR\\1A55F % /

|<==rM   
event_typec                     SnU R                    HO  nXR                  :X  a  X"UR                  UR                  -
  -   4s  $ X#R                  UR                  -
  S-   -  nMQ     [	        SU 35      e)z*Return [min_id, max_id] for an event type.r   r   r   )r   rb   rd   rc   rx   )rs   r   r   r   s       rN   event_type_rangeCodec.event_type_range   sk    $$BWW$)DEEEllR\\1A55F %
 /
|<==rM   c                     SnU R                    Ho  nX!s=::  a  X#R                  -   UR                  -
  ::  a)  O  O&[        UR                  UR                  U-   U-
  S9s  $ X#R                  UR                  -
  S-   -  nMq     [        SU 35      e)z"Decode an event index to an Event.r   rb   rj   r   zUnknown event index: )r   rd   rc   rh   rb   rx   )rs   r   r   r   s       rN   decode_event_indexCodec.decode_event_index   s    $$BF&<<"7",,"FF"''1E1NOOllR\\1A55F %
 0899rM   )r   r   r   N)rE   rF   rG   rH   rI   rW   floatr   r`   rt   propertyr   rJ   r   r   rh   r   rf   r
   r   r   rL   rD   rM   rN   r   r      s    V Vu VTXYcTd V QS Q Qa# a$ a + + +>% >C >>3 >5c? >: : :rM   r   c                   P    \ rS rSr% \\\   \/\\   4   \S'   \\/\4   \S'   Sr	g)ProgramGranularity   tokens_map_fnprogram_map_fnrD   N)
rE   rF   rG   rH   r   r	   rW   r   rK   rL   rD   rM   rN   r   r      s2     Xc]E2HSMABBcUCZ((rM   r   codecc                 @    UR                  S5      u  p#X U:  X:  -     $ )z2Drops program change events from a token sequence.rT   r   )tokensr   min_program_idmax_program_ids       rN   drop_programsr      s+    %*%;%;I%F"NN*v/FGHHrM   c                 ~    UR                  S5      u  p#X:  X:*  -  n[        R                  " XBSX-
  S-  -  -   U 5      $ )zBModifies program events to be the first program in the MIDI class.rT   r   )r   npwhere)r   r   r   r   
is_programs        rN   programs_to_midi_classesr      sJ    %*%;%;I%F"N*v/GHJ88Jv7NST6T1U UW]^^rM   c                     gNr   rD   rT   s    rN   <lambda>r      s    [\rM   )r   r   c                     SU S-  -  $ )Nr   rD   r   s    rN   r   r      s    qT[_`T`OarM   c                     U $ r   rD   )r   r   s     rN   r   r      s    6rM   c                     U $ r   rD   r   s    rN   r   r      s    jqrM   )flat
midi_classfullc                 >   U R                   U   nU(       at  X-
  n[        R                  " Xg-
  5      [        R                  " X-
  5      -  n[        X-
  5      n	U	S:w  a,  S/U R                  -  n
XU'   [
        R                  " X
SU5      n U R                  XQU5      nU$ )z
equivalent of tf.signal.frame
r   constant)shaper   absrW   ndimFpadunfold)signalframe_length
frame_steppad_end	pad_valueaxissignal_lengthframes_overlaprest_samplespad_sizepad_axisframess               rN   framer      s     LL&M%2vvm<=|Gd@ee|23q=sV[[(H%TNUU6ZCF]]4z:FMrM   c                 \    [        [        R                  5       SS9 H  nX:  d  M
  Us  $    g )NT)reverse)sortedSLAKH_CLASS_PROGRAMSvalues)rT   slakh_programs     rN   program_to_slakh_programr     s*     4 ; ; =tL#   MrM   hop_size
frame_rater   c                    Un[         R                  " U SU[        U 5      U-  -
  /SS9n [        [        R
                  " U 5      R                  S5      UUSS9n[        U 5      U-  n[         R                  " U5      U-  nXF4$ )z@Convert audio samples to non-overlapping frames and frame times.r   r   )modeF)r   r   r   )r   r   r{   r   torchTensor	unsqueezearange)samplesr   r   
frame_sizer   
num_framestimess          rN   audio_to_framesr     s     JffWq*s7|j/H"HIPZ[G W''*	F W+JIIj!J.E=rM   nsc                    [        U R                  S S9nU Vs/ s H!  o"R                  (       a  M  UR                  PM#     snU Vs/ s H  o"R                  PM     sn-   nU Vs/ s H6  nUR                  (       a  M  [        UR                  SUR                  SS9PM8     snU Vs/ s H7  n[        UR                  UR                  UR                  UR                  S9PM9     sn-   nX44$ s  snf s  snf s  snf s  snf )ac  Extract onset & offset times and pitches & programs from a NoteSequence.

The onset & offset times will not necessarily be in sorted order.

Args:
  ns: NoteSequence from which to extract onsets and offsets.

Returns:
  times: A list of note onset and offset times. values: A list of NoteEventData objects where velocity is zero for
  note
      offsets.
c                 H    U R                   U R                  U R                  4$ r   )rU   rT   rR   )notes    rN   r   Bnote_sequence_to_onsets_and_offsets_and_programs.<locals>.<lambda>?  s    t||T\\4::.VrM   keyr   F)rR   rS   rT   rU   )	r   notesrU   end_time
start_timerP   rR   rT   rS   )r   r   r   r   r   s        rN   0note_sequence_to_onsets_and_offsets_and_programsr   .  s    " 288!VWE',AutLL]T]]uAafDgafY]__afDggE D|| 	YDJJDLLRWX 	D 	DJJ^b^j^jk		F = BDg	s"   C/C/C4&C9?$C9)>C>c                 0    U R                  S5      u  pX!-
  $ )z-Get number of velocity bins from event codec.rS   r   )r   lohis      rN   num_velocity_bins_from_codecr   L  s    ##J/FB7NrM   c                 b    [        S[        U 5      U5       Vs/ s H	  o X"U-    PM     sn$ s  snf r   )ranger{   )anis      rN   segmentr  S  s/    "'3q61"56"5Qaa%L"5666s   ,c                 b    U S:X  a  g[         R                  " X-  [        R                  -  5      $ r   )mathceilnote_seqMAX_MIDI_VELOCITY)rS   num_velocity_binss     rN   velocity_to_binr  W  s*    1}yy*58R8RRSSrM   staterj   c                 F   UR                   c  [        SUR                  5      /$ [        U5      n[	        UR                   U5      nUR
                  c?  U b  X@R                  UR                  S4'   [        SU5      [        SUR                  5      /$ UR                  (       a"  [        SU5      [        SUR                  5      /$ U b$  X@R                  UR                  UR
                  4'   [        SUR
                  5      [        SU5      [        SUR                  5      /$ )z0Convert note event data to a sequence of events.rR   r   rS   drumrT   )rS   rh   rR   r   r  rT   r[   rU   )r  rj   r   r  velocity_bins        rN   note_event_data_to_eventsr  ^  s     ~~gu{{+,,8?&u~~7HI==  9E$$ekk1%56*l3U7EKK5PQQ}}j,7vu{{9STT $IU((%++u}})EF)U]]3*l3'5;;/ rM   c                     / n[        U R                  R                  5       S S9 H7  u  p#U R                  X#4   (       d  M  U[        SU5      [        SU5      /-  nM9     UR	                  [        SS5      5        U$ )zHOutput program and pitch events for active notes plus a final tie event.c                     U S S S2   $ )NrD   )ks    rN   r   /note_encoding_state_to_events.<locals>.<lambda>  s    AdPRdGrM   r   rT   rR   tier   )r   r[   keysrh   ry   )r  eventsrR   rT   s       rN   note_encoding_state_to_eventsr  ~  su    F !5!5!:!:!<BST 011uY0%2GHHF U MM%q/"MrM   c           
      X  ^^^^^^^ [         R                  " USS9nU Vs/ s H  n[        X   TR                  -  5      PM     n	nU Vs/ s H  oU   PM	     nn/ n
/ n/ m/ mSmSmSmUUUUUUU4S jn[	        X5       H  u  pUT:  aR  U
R                  TR                  [        SSS95      5        TS-  mU" 5         [        U
5      m[        U5      mUT:  a  MR  U(       a/  U" U 5       H#  nUR                  TR                  U5      5        M%     U" XT5       H#  nU
R                  TR                  U5      5        M%     M     TTR                  -  TS   ::  aW  U
R                  TR                  [        SSS95      5        TS-  mU" 5         [        U
5      mTTR                  -  TS   ::  a  MW  TSS	 [        U
5      /-   n[         R                  " U
5      R                  [         R                  5      n
[         R                  " U5      R                  [         R                  5      n[        [         R                  " T5      R                  [         R                  5      [        5      m[        [         R                  " U5      R                  [         R                  5      [        5      n[        [         R                  " T5      R                  [         R                  5      [        5      m/ n[	        TUT5       H  u  nnnUR                  U
UUUUS
.5        M      U$ s  snf s  snf )a<  Encode a sequence of timed events and index to audio frame times.

Encodes time shifts as repeated single step shifts for later run length encoding.

Optionally, also encodes a sequence of "state events", keeping track of the current encoding state at each audio
frame. This can be used e.g. to prepend events representing the current state to a targets segment.

Args:
  state: Initial event encoding state.
  event_times: Sequence of event times.
  event_values: Sequence of event values.
  encode_event_fn: Function that transforms event value into a sequence of one
      or more Event objects.
  codec: An Codec object that maps Event objects to indices.
  frame_times: Time for every audio frame.
  encoding_state_to_events_fn: Function that transforms encoding state into a
      sequence of one or more Event objects.

Returns:
  events: Encoded events and shifts. event_start_indices: Corresponding start event index for every audio frame.
      Note: one event can correspond to multiple audio indices due to sampling rate differences. This makes
      splitting sequences tricky because the same event can appear at the end of one sequence and the beginning of
      another.
  event_end_indices: Corresponding end event index for every audio frame. Used
      to ensure when slicing that one chunk ends where the next begins. Should always be true that
      event_end_indices[i] = event_start_indices[i + 1].
  state_events: Encoded "state" events representing the encoding state before
      each event.
  state_event_indices: Corresponding state event index for every audio frame.
stable)kindr   c                  0  > [        T5      [        T5      :  a}  T[        T5         TT R                  -  :  a]  TR                  T5        TR                  T5        [        T5      [        T5      :  a"  T[        T5         TT R                  -  :  a  M[  g g g g r   )r{   r   ry   )r   cur_event_idxcur_state_event_idxcur_stepevent_start_indicesframe_timesstate_event_indicess   rN   $fill_event_start_indices_to_cur_stepEencode_and_index_events.<locals>.fill_event_start_indices_to_cur_step  s    #$s;'77C 3455CYCY8YY&&}5&&':;	 #$s;'77C 3455CYCY8YY 8Y 8rM   r   r   r   r  N)inputsr#  event_end_indicesstate_eventsr%  )r   argsortroundr   zipry   r   rh   r{   arrayastypeint32r  r   )r  event_timesevent_valuesr   r$  encode_event_fnencoding_state_to_events_fnindicesr  event_stepsr  r*  r&  
event_stepevent_valueer)  outputsstart_indicesend_indicesevent_indicesr   r!  r"  r#  r%  s      ``                @@@@@rN   encode_and_index_eventsr>    s   B jj84GKRS7a5%*@*@@A7KS-45WOWL5FLHM< < $'{#A
8#MM%,,Uq-IJKMH02KM"%l"3 8# ' 17##E$6$6q$9: 8 !U;AMM%,,Q/0 < $B( U++
+{2
>e((G1)EFGA,.F	 U++
+{2
> ,AB/3v;-?XXf$$RXX.F88L)00:L!"((+>"?"F"Frxx"PRgh): ; B B288 LNcd!"((+>"?"F"Frxx"PRghG589LN_at5u1{M '4%0 ,'4	
 6v NK T5s   $L"L'c                     U R                  5       n U S   S   nU S   S   nX   X4 X'   UbR  U S   S   nUS-   nU S   US-
     U:w  a  US-  nU S   US-
     U:w  a  M  [        R                  " U S   XV X   /SS9X'   U $ )	z=Extract target sequence corresponding to audio token segment.r#  r   r)  r  r%  r   r*  r   )copyr   concatenate)featuresstate_events_end_tokenfeature_key	start_idxend_idxstate_event_start_idxstate_event_end_idxs          rN   extract_sequence_with_indicesrJ    s    }}H./2I*+B/G$1)DH) !))> ? B3a7~&':Q'>?CYY1$ ~&':Q'>?CYY "()>S% !
 OrM   granularity_typerE  c                 D    [         U   nUR                  X   U5      X'   U $ )z*Apply MIDI program map to token sequences.)PROGRAM_GRANULARITIESr   )featurer   rK  rE  granularitys        rN   map_midi_programsrP    s,     ((89K&44W5I5QGNrM   state_change_event_typesc                    ^^^ U Vs/ s H  nTR                  U5      PM     snmS[        [        [        4   S[        [        [        4   4UUU4S jjnU" U 5      $ s  snf )a  Return a function that run-length encodes shifts for a given codec.

Args:
  codec: The Codec to use for shift events.
  feature_key: The feature key for which to run-length encode shifts.
  state_change_event_types: A list of event types that represent state
      changes; tokens corresponding to these event types will be interpreted as state changes and redundant ones
      will be removed.

Returns:
  A preprocessing function that run-length encodes single-step shifts.
rC  r   c                 d  > U T   nSnSn[         R                  " / [         R                  S9n[         R                  " [	        T5      [         R                  S9nU H  nTR                  U5      (       a  US-  nUS-  nM%  Sn[        T5       H$  u  nu  pX::  d  M  Xj::  d  M  XX   U:X  a  SnXeU'   M&     U(       a  Mc  US:  aL  UnUS:  aD  [         R                  " TR                  U5      n[         R                  " XK//SS9nX+-  nUS:  a  MD  [         R                  " XF//SS9nM     X@T'   U $ )zCombine leading/interior shifts, trim trailing shifts.

Args:
  features: Dict of features to process.

Returns:
  A dict of features.
r   )dtyper   FTr@  )
r   r.  r0  zerosr{   r   	enumerateminimumr   rB  )rC  r  shift_stepstotal_shift_stepsoutputcurrent_stater   is_redundantr  	min_index	max_indexoutput_stepsr   rE  state_change_event_rangess               rN   run_length_encode_shifts=run_length_encode_shifts_fn.<locals>.run_length_encode_shifts*  s:    +&"BHH-%>!?rxxPE))%00q !Q&!
  %1:;T1U-A-	!*1C(+u4+/L+0a(	 2V
   ?"3K%/')zz%2G2G'U!#0Hq!Q#3 &/ (9B3 6 !'rM   )r   r   rf   r   r   )rC  r   rE  rQ  r   ra  r`  s    ``   @rN   run_length_encode_shifts_fnrc    sk    $ Wo oVn
!7!7
!CVn o->#s(+C -PSUXPXHY - -^ $H--c !ps   Anote_representation_configc                     UR                  [        SS5      5      nUR                  (       a  UOS n[        XSS9n [	        X5      n [        XSS/S9n U $ )Nr  r   r(  )rD  rE  rS   rT   )rQ  )r   rh   rC   rJ  rP  rc  )rC  r   rd  	tie_tokenrD  s        rN   #note_representation_processor_chainrg  \  s\    ""5?3I*D*Q*QYW[,XH !1H*8V`bkUlmHOrM   c                   H    \ rS rSrS rS\\\R                  \	4   4S jr
Srg)MidiProcessorik  c                    [        [        [        -  [        [        S[        R
                  [        R                  5      [        SS[        5      [        SSS5      [        S[        R                  [        R                  5      [        S[        R
                  [        R                  5      /S9U l
        [        U R                  R                  5      U l        [        SS	S
9U l        g )NrR   rS   r   r  rT   r  )r   r   r   FT)rB   rC   )r   DEFAULT_MAX_SHIFT_SECONDSDEFAULT_STEPS_PER_SECONDr`   r
  MIN_MIDI_PITCHMAX_MIDI_PITCHDEFAULT_NUM_VELOCITY_BINSMIN_MIDI_PROGRAMMAX_MIDI_PROGRAMr   rl   r   	tokenizerr@   rd  r   s    rN   rt   MidiProcessor.__init__l  s    58PP57H$;$;X=T=TU:q*CD5!Q'9h&?&?AZAZ[68#:#:H<S<ST


 #4::#9#9:*Bucg*h'rM   midic           
      >   [        U[        5      (       d%  [        US5       nUR                  5       nS S S 5        [        R
                  " U5      n[        R                  " U5      nUR                   H0  nUR                  (       a  M  [        UR                  5      Ul
        M2     [        R                  " [        UR                  [        -  5      5      n[!        U["        [$        5      u  px['        U5      u  p[)        [+        5       U	U
UU R,                  [.        [0        S9nU Vs/ s H#  n[3        XR,                  U R4                  5      PM%     nnU Vs/ s H   oR6                  R9                  US   5      PM"     nnU$ ! , (       d  f       GNW= fs  snf s  snf )Nrb)r  r1  r2  r$  r   r3  r4  r(  )
isinstancebytesopenreadr
  midi_to_note_sequenceapply_sustain_control_changesr   rU   r   rT   r   rU  rW   
total_timeSAMPLE_RATEr   HOP_SIZE
FRAME_RATEr   r>  rY   r   r  r  rg  rd  rr  r   )rs   rt  fr   ns_susr   r   _r$  r   r   r  r   input_tokenss                 rN   __call__MidiProcessor.__call__{  sL   $&&dD!Qvvx " ++D177;LLD<<<7E ! ((3v00;>?@((JGHP(#%#**5(E
 rx
qwhm/zz4CbCbcqw 	 
 MSSF5--eHo>FS= "!2
 Ts   F(*F'F
F)r   rd  rr  N)rE   rF   rG   rH   rt   r   rx  osPathLikerf   r  rL   rD   rM   rN   ri  ri  k  s$    i U5"++s#:;  rM   ri  )Fr   r  r   )Nr(  )r   r(  )r(  rD   )Br\   r  r  typingr   r   r   r   r   r   r	   r
   r   numpyr   r   torch.nn.functionalnn
functionalr   utilsr   pipeline_spectrogram_diffusionr   r
  ImportErrorrz   r~  r  rW   r  rl  rk  ro  r   	dataclassr@   rP   rY   r`   rh   rl   r   r   r   r   rM  r   r   r   r   NoteSequencer   r   r   r  r  r  r  r>  rJ  rf   rP  rc  rg  ri  rD   rM   rN   <module>r     s      	 a a a     + A 
J
KK  ()
   #a#a# A# R	#
 r# R#  # R# R# b# R# R# "# r# r#  r!#" R##$ r%#& b'#( r)#* +#, B-#. 2/#0 R1#2 3#4 5#6 B7#8 B9#: B;#< r=#> ?#@ BA#B "C#D E# L    % % % c c c      
 0I: I:X ) ) )I I_ ]K\]$.?a -IZqr
 $!  8HSM"ELL01	.
8E?H]334< 7T%&  e_	@): x  hlgT6 OW-0HKS#X  .0	C.C. C. 'sm	C.
 wsCx !738#445C.L \t 0 0rM   