Ë
    ÿÍ:jÚ5  ã                   óT  — d Z ddlZddlmZmZmZmZ ddlZ	 	 	 	 	 	 	 ddeeeej                  f   de
de
deded	ee   d
e
dee   deej                  e
f   fd„Z	 	 	 	 	 	 	 ddeeej                  f   dej                  de
ded	ee   dee   dee
   d
e
dee   deeee
f      ddfd„Zy)z&TorchCodec integration for TorchAudio.é    N)ÚBinaryIOÚOptionalÚTupleÚUnionÚuriÚframe_offsetÚ
num_framesÚ	normalizeÚchannels_firstÚformatÚbuffer_sizeÚbackendÚreturnc                 ó"  — 	 ddl m} |sddl}
|
j	                  dt
        d¬«       |dk7  rddl}
|
j	                  d	t
        d¬«       |�ddl}
|
j	                  d
t
        d¬«       |�ddl}
|
j	                  dt
        d¬«       	  || «      }|j                  j                  }|€t        d«      ‚	 |j                  «       }|j                  }|dkD  rh||j                  d   k\  rK|r|j                  d   dfnd|j                  d   f}t        j                  |t        j                  ¬«      |fS |dd…|d…f   }|dk(  rK|r|j                  d   dfnd|j                  d   f}t        j                  |t        j                  ¬«      |fS |dkD  r|dd…d|…f   }|s|j!                  dd«      }||fS # t        $ r}	t        d«      |	‚d}	~	ww xY w# t        $ r}	t        d| › d|	› �«      |	‚d}	~	ww xY w# t        $ r}	t        d|	› �«      |	‚d}	~	ww xY w)ae  Load audio data from source using TorchCodec's AudioDecoder.
    
    .. note::
        
        This function supports the same API as :func:`~torchaudio.load`, and
        relies on TorchCodec's decoding capabilities under the hood. It is
        provided for convenience, but we do recommend that you port your code to
        natively use ``torchcodec``'s ``AudioDecoder`` class for better
        performance:
        https://docs.pytorch.org/torchcodec/stable/generated/torchcodec.decoders.AudioDecoder.
        In TorchAudio 2.9, :func:`~torchaudio.load` will be relying on
        :func:`~torchaudio.load_with_torchcodec`. Note that some parameters of
        :func:`~torchaudio.load`, like ``normalize``, ``buffer_size``, and
        ``backend``, are ignored by :func:`~torchaudio.load_with_torchcodec`.
    
    
    Args:
        uri (path-like object or file-like object):
            Source of audio data. The following types are accepted:
            
            * ``path-like``: File path or URL.
            * ``file-like``: Object with ``read(size: int) -> bytes`` method.
            
        frame_offset (int, optional):
            Number of samples to skip before start reading data.
        num_frames (int, optional):
            Maximum number of samples to read. ``-1`` reads all the remaining samples,
            starting from ``frame_offset``.
        normalize (bool, optional):
            TorchCodec always returns normalized float32 samples. This parameter
            is ignored and a warning is issued if set to False.
            Default: ``True``.
        channels_first (bool, optional):
            When True, the returned Tensor has dimension `[channel, time]`.
            Otherwise, the returned Tensor's dimension is `[time, channel]`.
        format (str or None, optional):
            Format hint for the decoder. May not be supported by all TorchCodec
            decoders. (Default: ``None``)
        buffer_size (int, optional):
            Not used by TorchCodec AudioDecoder. Provided for API compatibility.
        backend (str or None, optional):
            Not used by TorchCodec AudioDecoder. Provided for API compatibility.
            
    Returns:
        (torch.Tensor, int): Resulting Tensor and sample rate.
        Always returns float32 tensors. If ``channels_first=True``, shape is
        `[channel, time]`, otherwise `[time, channel]`.
        
    Raises:
        ImportError: If torchcodec is not available.
        ValueError: If unsupported parameters are used.
        RuntimeError: If TorchCodec fails to decode the audio.
        
    Note:
        - TorchCodec always returns normalized float32 samples, so the ``normalize``
          parameter has no effect.
        - The ``buffer_size`` and ``backend`` parameters are ignored.
        - Not all audio formats supported by torchaudio backends may be supported
          by TorchCodec.
    r   )ÚAudioDecoderz`TorchCodec is required for load_with_torchcodec. Please install torchcodec to use this function.NznTorchCodec AudioDecoder always returns normalized float32 samples. The 'normalize=False' parameter is ignored.é   ©Ú
stacklevelé   zCThe 'buffer_size' parameter is not used by TorchCodec AudioDecoder.z?The 'backend' parameter is not used by TorchCodec AudioDecoder.zCThe 'format' parameter is not supported by TorchCodec AudioDecoder.z"Failed to create AudioDecoder for ú: z3Unable to determine sample rate from audio metadataz Failed to decode audio samples: é   )Údtype)Útorchcodec.decodersr   ÚImportErrorÚwarningsÚwarnÚUserWarningÚ	ExceptionÚRuntimeErrorÚmetadataÚsample_rateÚget_all_samplesÚdataÚshapeÚtorchÚzerosÚfloat32Ú	transpose)r   r   r	   r
   r   r   r   r   r   Úer   Údecoderr!   Úaudio_samplesr#   Úempty_shapes                   úk/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchaudio/_torchcodec.pyÚload_with_torchcodecr.   	   s^  € ðNÝ4ñ ÛØ�‰ð:äØð	 	ô 	
ð �dÒÛØ�‰ØQÜØð 	ô 	
ð ÐÛØ�‰ØMÜØð 	ô 	
ð ÐÛØ�‰ØQÜØð 	ô 	
ðSÙ˜sÓ#ˆð
 ×"Ñ"×.Ñ.€KØÐÜÐPÓQÐQðJØ×/Ñ/Ó1ˆð ×Ñ€Dð �aÒØ˜4Ÿ:™: a™=Ò(á0>˜4Ÿ:™: a™=¨!Ñ,ÀQÈÏ
É
ÐSTÉÐDVˆKÜ—;‘;˜{´%·-±-Ô@À+ÐMÐMØ’A�|‘}Ð$Ñ%ˆà�Q‚á,:�t—z‘z !‘} aÑ(ÀÀDÇJÁJÈqÁMÐ@RˆÜ�{‰{˜;¬e¯m©mÔ<¸kÐIÐIØ	�aŠØ’A�{˜
�{�NÑ#ˆñ Ø�~‰~˜a Ó#ˆà�ÐÐøôa ò Üð>ó
ð ð	ûðûôV ò SÜÐ?À¸uÀBÀqÀcÐJÓKÐQRÐRûðSûô ò JÜÐ=¸a¸SÐAÓBÈÐIûðJúsG   ‚F1 ÂG Â0G1 Æ1	GÆ:GÇGÇ	G.ÇG)Ç)G.Ç1	HÇ:H	È	HÚsrcr!   ÚencodingÚbits_per_sampleÚcompressionc
                 óÌ  — 	 ddl m}
 |�ddl}|j	                  dt
        d¬«       |�ddl}|j	                  dt
        d¬«       |�ddl}|j	                  d	t
        d¬«       |d
k7  rddl}|j	                  dt
        d¬«       |�ddl}|j	                  dt
        d¬«       t        |t        j                  «      st        dt        |«      › �«      ‚|j                  t        j                  k7  r|j                  «       }|dk  rt        d|› �«      ‚|j                  dk(  r6|r|j                  d«      }nb|j                  d«      j!                  dd«      }n@|j                  dk(  r|r|}n,|j!                  dd«      }nt        d|j                  › d�«      ‚	  |
||¬«      }d}|	�Kt        |	t&        t        f«      rt'        |	«      }n)ddl}|j	                  dt        |	«      › d�t
        d¬«       	 |j)                  | |¬«       y# t        $ r}t        d«      |‚d}~ww xY w# t"        $ r}t%        d|› �«      |‚d}~ww xY w# t"        $ r}t%        d| › d|› �«      |‚d}~ww xY w)aù  Save audio data to file using TorchCodec's AudioEncoder.

    .. note::
        
        This function supports the same API as :func:`~torchaudio.save`, and
        relies on TorchCodec's encoding capabilities under the hood. It is
        provided for convenience, but we do recommend that you port your code to
        natively use ``torchcodec``'s ``AudioEncoder`` class for better
        performance:
        https://docs.pytorch.org/torchcodec/stable/generated/torchcodec.encoders.AudioEncoder.
        In TorchAudio 2.9, :func:`~torchaudio.save` will be relying on
        :func:`~torchaudio.save_with_torchcodec`. Note that some parameters of
        :func:`~torchaudio.save`, like ``format``, ``encoding``,
        ``bits_per_sample``, ``buffer_size``, and ``backend``, are ignored by
        are ignored by :func:`~torchaudio.save_with_torchcodec`.
    
    This function provides a TorchCodec-based alternative to torchaudio.save
    with the same API. TorchCodec's AudioEncoder provides efficient encoding
    with FFmpeg under the hood.
    
    Args:
        uri (path-like object):
            Path to save the audio file. The file extension determines the format.
            
        src (torch.Tensor):
            Audio data to save. Must be a 1D or 2D tensor with float32 values
            in the range [-1, 1]. If 2D, shape should be [channel, time] when
            channels_first=True, or [time, channel] when channels_first=False.
            
        sample_rate (int):
            Sample rate of the audio data.
            
        channels_first (bool, optional):
            Indicates whether the input tensor has channels as the first dimension.
            If True, expects [channel, time]. If False, expects [time, channel].
            Default: True.
            
        format (str or None, optional):
            Audio format hint. Not used by TorchCodec (format is determined by
            file extension). A warning is issued if provided.
            Default: None.
            
        encoding (str or None, optional):
            Audio encoding. Not fully supported by TorchCodec AudioEncoder.
            A warning is issued if provided. Default: None.
            
        bits_per_sample (int or None, optional):
            Bits per sample. Not directly supported by TorchCodec AudioEncoder.
            A warning is issued if provided. Default: None.
            
        buffer_size (int, optional):
            Not used by TorchCodec AudioEncoder. Provided for API compatibility.
            A warning is issued if not default value. Default: 4096.
            
        backend (str or None, optional):
            Not used by TorchCodec AudioEncoder. Provided for API compatibility.
            A warning is issued if provided. Default: None.
            
        compression (float, int or None, optional):
            Compression level or bit rate. Maps to bit_rate parameter in
            TorchCodec AudioEncoder. Default: None.
            
    Raises:
        ImportError: If torchcodec is not available.
        ValueError: If input parameters are invalid.
        RuntimeError: If TorchCodec fails to encode the audio.
        
    Note:
        - TorchCodec AudioEncoder expects float32 samples in [-1, 1] range.
        - Some parameters (format, encoding, bits_per_sample, buffer_size, backend)
          are not used by TorchCodec but are provided for API compatibility.
        - The output format is determined by the file extension in the uri.
        - TorchCodec uses FFmpeg under the hood for encoding.
    r   )ÚAudioEncoderz`TorchCodec is required for save_with_torchcodec. Please install torchcodec to use this function.NzjThe 'format' parameter is not used by TorchCodec AudioEncoder. Format is determined by the file extension.r   r   zKThe 'encoding' parameter is not fully supported by TorchCodec AudioEncoder.zUThe 'bits_per_sample' parameter is not directly supported by TorchCodec AudioEncoder.r   zCThe 'buffer_size' parameter is not used by TorchCodec AudioEncoder.z?The 'backend' parameter is not used by TorchCodec AudioEncoder.z'Expected src to be a torch.Tensor, got z"sample_rate must be positive, got r   zExpected 1D or 2D tensor, got zD tensor)r!   zFailed to create AudioEncoder: zUnsupported compression type z<. TorchCodec AudioEncoder expects int or float for bit_rate.)Úbit_ratezFailed to save audio to r   )Útorchcodec.encodersr4   r   r   r   r   Ú
isinstancer%   ÚTensorÚ
ValueErrorÚtyper   r'   ÚfloatÚndimÚ	unsqueezer(   r   r   ÚintÚto_file)r   r/   r!   r   r   r0   r1   r   r   r2   r4   r)   r   r#   Úencoderr5   s                   r-   Úsave_with_torchcodecrA   ¥   sž  € ðnÝ4ð ÐÛØ�‰ð:äØð	 	ô 	
ð ÐÛØ�‰ØYÜØð 	ô 	
ð Ð"ÛØ�‰ØcÜØð 	ô 	
ð �dÒÛØ�‰ØQÜØð 	ô 	
ð ÐÛØ�‰ØMÜØð 	ô 	
ô �cœ5Ÿ<™<Ô(ÜÐBÄ4ÈÃ9À+ÐNÓOÐOà
‡y�y”E—M‘MÒ!Ø�i‰i‹kˆà�aÒÜÐ=¸k¸]ÐKÓLÐLð ‡x�x�1‚}áØ—=‘= Ó#‰Dð —=‘= Ó#×-Ñ-¨a°Ó3‰DØ	�‰�QŠÙØ‰Dà—=‘=  AÓ&‰DäÐ9¸#¿(¹(¸À8ÐLÓMÐMðIÙ˜t°Ô=ˆð
 €HØÐÜ�k¤C¬ <Ô0Ü˜;Ó'‰HãØ�M‰MØ/´°[Ó0AÐ/Bð CMð MäØð	 ô ðIØ�‰˜ hˆÕ/øôA ò Üð>ó
ð ð	ûðûôZ ò IÜÐ<¸Q¸CÐ@ÓAÀqÐHûðIûô( ò IÜÐ5°c°U¸"¸Q¸CÐ@ÓAÀqÐHûðIúsG   ‚H Æ
H# Ç2I È	H ÈHÈH È#	I È,H;È;I É	I#ÉIÉI#)r   éÿÿÿÿTTNr   N)TNNNr   NN)Ú__doc__ÚosÚtypingr   r   r   r   r%   ÚstrÚPathLiker>   Úboolr8   r.   r;   rA   © ó    r-   ú<module>rK      s…  ðÙ ,ã 	ß 3Ó 3ã ð
 ØØØØ ØØ!ñYØ	ˆx˜˜bŸk™kÐ)Ñ	*ðYàðYð ðYð ð	Yð
 ðYð �S‰MðYð ðYð �c‰]ðYð ˆ5�<‰<˜ÐÑóYð@  Ø Ø"Ø%)ØØ!Ø/3ñ{IØ	ˆs�B—K‘KÐÑ	 ð{Ià	�‰ð{Ið ð{Ið ð	{Ið
 �S‰Mð{Ið �s‰mð{Ið ˜c‘]ð{Ið ð{Ið �c‰]ð{Ið ˜%  s 
Ñ+Ñ,ð{Ið 
ô{IrJ   