Ë
    ÿÍ:j  ã                   ó^   — 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	  G d„ d	e«      Z
y)
é    N)ÚTensor)ÚOptionalé   )ÚBaseWaveformTransform)Ú#convert_decibels_to_amplitude_ratio)Ú
ObjectDictc                   óò   ‡ — e Zd ZdZh d£ZdZdZdZdZ	 	 	 	 	 	 	 	 dde	de	de
de	d	ee
   d
ee   dee   dee
   fˆ fd„Z	 	 	 	 dded
ee   dee   dee   fd„Z	 	 	 	 dded
ee   dee   dee   def
d„Zˆ xZS )ÚGainaÆ  
    Multiply the audio by a random amplitude factor to reduce or increase the volume. This
    technique can help a model become somewhat invariant to the overall gain of the input audio.

    Warning: This transform can return samples outside the [-1, 1] range, which may lead to
    clipping or wrap distortion, depending on what you do with the audio in a later stage.
    See also https://en.wikipedia.org/wiki/Clipping_(audio)#Digital_clipping
    >   Ú	per_batchÚper_channelÚper_exampleTFÚmin_gain_in_dbÚmax_gain_in_dbÚmodeÚpÚp_modeÚsample_rateÚtarget_rateÚoutput_typec	                 ó”   •— t         ‰	| �  ||||||¬«       || _        || _        | j                  | j                  k\  rt	        d«      ‚y )N)r   r   r   r   r   r   z1max_gain_in_db must be higher than min_gain_in_db)ÚsuperÚ__init__r   r   Ú
ValueError)
Úselfr   r   r   r   r   r   r   r   Ú	__class__s
            €ú}/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torch_audiomentations/augmentations/gain.pyr   zGain.__init__   s`   ø€ ô 	‰ÑØØØØ#Ø#Ø#ð 	ô 	
ð -ˆÔØ,ˆÔØ×Ñ $×"5Ñ"5Ò5ÜÐPÓQÐQð 6ó    ÚsamplesÚtargetsc                 óØ  — t         j                  j                  t        j                  | j                  t         j
                  |j                  ¬«      t        j                  | j                  t         j
                  |j                  ¬«      d¬«      }|j                  d«      }t        |j                  |f¬«      «      j                  d«      j                  d«      | j                  d<   y )N)ÚdtypeÚdeviceT)ÚlowÚhighÚvalidate_argsr   )Úsample_shapeé   Úgain_factors)ÚtorchÚdistributionsÚUniformÚtensorr   Úfloat32r"   r   Úsizer   ÚsampleÚ	unsqueezeÚtransform_parameters)r   r   r   r   r   ÚdistributionÚselected_batch_sizes          r   Úrandomize_parameterszGain.randomize_parameters4   s¹   € ô ×*Ñ*×2Ñ2Ü—‘Ø×#Ñ#¬5¯=©=ÀÇÁôô —‘Ø×#Ñ#¬5¯=©=ÀÇÁôð ð 3ó 
ˆð &Ÿl™l¨1›oÐä/Ø×#Ñ#Ð2EÐ1GÐ#ÓHó÷ ‰Y�q‹\ß‰Y�q‹\ð 	×!Ñ! .Ò1r   Úreturnc                 ó@   — t        || j                  d   z  |||¬«      S )Nr(   )r   r   r   r   )r   r1   )r   r   r   r   r   s        r   Úapply_transformzGain.apply_transformM   s-   € ô Ø˜d×7Ñ7¸ÑGÑGØ#ØØ#ô	
ð 	
r   )g      2Àg      @r   g      à?NNNN)NNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úsupported_modesÚsupports_multichannelÚrequires_sample_rateÚsupports_targetÚrequires_targetÚfloatÚstrr   Úintr   r   r4   r   r7   Ú__classcell__)r   s   @r   r
   r
   
   sB  ø„ ñò B€Oà ÐØ Ðà€OØ€Oð !&Ø #Ø!ØØ $Ø%)Ø%)Ø%)ñRàðRð ðRð ð	Rð
 ðRð ˜‘ðRð ˜c‘]ðRð ˜c‘]ðRð ˜c‘]õRð4 Ø%)Ø$(Ø%)ñ
àð
ð ˜c‘]ð
ð ˜&Ñ!ð	
ð
 ˜c‘]ó
ð6 Ø%)Ø$(Ø%)ñ
àð
ð ˜c‘]ð
ð ˜&Ñ!ð	
ð
 ˜c‘]ð
ð 
÷
r   r
   )r)   r   Útypingr   Úcore.transforms_interfacer   Ú	utils.dspr   Úutils.object_dictr   r
   © r   r   ú<module>rJ      s&   ðÛ Ý Ý å =Ý ;Ý *ôO
Ð õ O
r   