
    NjO                         d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZmZ  e j                         Z G d d	ej"                        Zy)
    N)nn)pad_for_conv1d)DummyQuantizer)ProjectedTransformer)ConvDownsample1dConvTrUpsample1d)SEANetDecoderSEANetEncoderc                   V    e Zd Zdedededededededed	z  d
ed	z  dedef fdZ	e
defd       Zdej                  fdZdej                  dej                  fdZdej                  fdZdej                  dej                  fdZdej                  dej                  fdZ xZS )	MimiModelencoderdecoder	quantizer
frame_rateencoder_frame_ratesample_ratechannels	inner_dimN	outer_dimencoder_transformerdecoder_transformerc                 2   t         |           || _        || _        |
| _        || _        || _        || _        || _        || _	        || _
        |j                  }t        |t              sJ d| dt        |       d       || _        ||k7  r| j                  | j                  kD  sJ d       | j                  | j                  z  }|t        |      k(  s
J d|        t        t        |      ||      | _        t#        t        |      ||	      | _        y y )NzDimension should be int, got z	 of type .zCannot upsample with conv.z(Only integer strides are supported, got )	dimensionout_dimension)r   in_dimension)super__init__r   r   r   r   r   r   r   r   r   r   
isinstanceinttyper   
downsampler   upsample)selfr   r   r   r   r   r   r   r   r   r   r   r   downsample_stride	__class__s                 g/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/pocket_tts/models/mimi.pyr   zMimiModel.__init__   s5    	#6 #6 "$& "4 %%	)S) 	
+I;iY?PPQR	
) #+**T__<Z>ZZ< $ 7 7$// I$,=(>> :;L:MN>
 /%&)9DO -%&))DM ,    returnc                 F    t        | j                  | j                  z        S N)r    r   r   )r$   s    r'   
frame_sizezMimiModel.frame_size@   s    4##doo566r(   xc                     |j                   \  }}}| j                  }| j                  }||k(  r|S | j                  |d       S )Nmodel_state)shaper   r   r"   )r$   r-   _lengthr   new_frame_rates         r'   _to_frameratezMimiModel._to_framerateD   sE    ww1f,,
'Hqd33r(   c                     |j                   \  }}}| j                  }| j                  }||k(  r|S | j                  ||      S r+   )r1   r   r   r#   )r$   r-   
mimi_stater2   r3   r   r4   s          r'   _to_encoder_frameratezMimiModel._to_encoder_framerateM   sC    ww1f,,
'H}}Q
++r(   c                     t               r+   )NotImplementedError)r$   r-   s     r'   forwardzMimiModel.forwardV   s    !##r(   latentc                 v    | j                  ||      }| j                  ||      \  }| j                  ||      }|S r+   )r8   r   r   )r$   r<   r7   embouts        r'   decode_from_latentzMimiModel.decode_from_latentY   s=    ((<))#z:ll3
+
r(   c                     |j                         dk(  sJ d|j                          | j                  }t        |||      }| j	                  |d      }| j                  |d      \  }| j                  |      }|S )zProjects a batch of waveforms to unquantized latent space.

        Args:
            x (torch.Tensor): Float tensor of shape [B, C, T].

        Returns:
            Unquantized embeddings.
           zXCompressionModel._encode_to_unquantized_latent expects audio of shape [B, C, T] but got Nr/   )dimr1   r,   r   r   r   r5   )r$   r-   r,   r>   s       r'   encode_to_latentzMimiModel.encode_to_latent`   s     uuw!| 	
fghgngnfop	
| __

 1j*5ll1$l/))#4)@  %
r(   )__name__
__module____qualname__r
   r	   r   floatr    r   r   propertyr,   torchTensorr5   r8   r;   r@   rD   __classcell__)r&   s   @r'   r   r      s	   .. . "	.
 . ". . . :. :. 2. 2.` 7C 7 74u|| 4,u|| ,ELL ,$ $ ell %,, 5<< r(   r   )loggingrJ   r   pocket_tts.modules.convr   "pocket_tts.modules.dummy_quantizerr   #pocket_tts.modules.mimi_transformerr   pocket_tts.modules.resampler   r   pocket_tts.modules.seanetr	   r
   	getLoggerloggerModuler    r(   r'   <module>rW      s?       2 = D J B				h		 hr(   