
    g                     h    d dl m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 e G d de	             Zy)	    )	dataclassN)Clip)audio_video_effect)Effect)convert_to_secondsc                   H    e Zd ZU dZeed<   d Zd Zd Ze	de
de
fd       Zy	)
AudioFadeOuta  Return a sound clip where the sound fades out progressively
    over ``duration`` seconds at the end of the clip.

    Parameters
    ----------

    duration : float
      How long does it take for the sound to reach the zero level at the end
      of the clip.

    Examples
    --------

    .. code:: python

        clip = VideoFileClip("media/chaplin.mp4")
        clip.with_effects([afx.AudioFadeOut("00:00:06")])
    durationc                 8    t        | j                        | _        y N)r   r
   )selfs    f/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/moviepy/audio/fx/AudioFadeOut.py__post_init__zAudioFadeOut.__post_init__"   s    *4==9    c                     fdS )Nc                 B    t        j                  d| z
  z  |z  d      S Ng      ?   )npminimum)tr
   clip_durations     r   <lambda>z2AudioFadeOut._mono_factor_getter.<locals>.<lambda>&   s"    2::c]Q5F.G(.RTU#V r    )r   r   s    `r   _mono_factor_getterz AudioFadeOut._mono_factor_getter%   s	    VVr   c                     fd}|S )Nc                     t        j                  d| z
  z  |z  d      }t        j                  t              D cg c]  }| c}      j                  S c c}w r   )r   r   arrayrangeT)r   r
   factor_r   	nchannelss       r   getterz2AudioFadeOut._stereo_factor_getter.<locals>.getter)   sJ    ZZ}q'8 9H DaHF88U9-=>V>?AAA>s   	Ar   )r   r   r#   r$   s    `` r   _stereo_factor_getterz"AudioFadeOut._stereo_factor_getter(   s    	B r   clipreturnc                     |j                   t        d      |j                  dk(  r j                  |j                         n% j	                  |j                   |j                        |j                   fdd      S )zApply the effect to the clip.zAttribute 'duration' not setr   c                 <     |j                          | |      z  S r   )r
   )	get_framer   
get_factorr   s     r   r   z$AudioFadeOut.apply.<locals>.<lambda><   s    At}}!=	!!L r   T)keep_duration)r
   
ValueErrorr#   r   r%   	transform)r   r&   r+   s   ` @r   applyzAudioFadeOut.apply/   sx     == ;<< ~~" $$T]]3++DMM4>>J 	 ~~L  
 	
r   N)__name__
__module____qualname____doc__float__annotations__r   r   r%   r   r   r/   r   r   r   r	   r	      s@    & O:W 
$ 
4 
 
r   r	   )dataclassesr   numpyr   moviepy.Clipr   moviepy.decoratorsr   moviepy.Effectr   moviepy.toolsr   r	   r   r   r   <module>r<      s2    !   1 ! , 2
6 2
 2
r   