
    #)diP0                     ~   d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ 	 d dlZn# e$ r d dlZY nw xY wej        dk    reZd	d
ddZddddZddddZd Zd,dZd Zd-dZd,dZd.dZ d/dZ!d Z"d Z#d Z$d Z%d  Z&d! Z'd" Z(d0d$Z)d% Z*d& Z+e+d'             Z,d( Z-d) Z.d* Z/d+ Z0dS )1    )divisionN)PopenPIPE)logceil)TemporaryFile)warnwraps)   r            )          bhi)i   )i i  )i   ic                     t           |          S N)FRAME_WIDTHS	bit_depths    R/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/pydub/utils.pyget_frame_widthr   &       	""    Tc                 L    t           |          }|s|                                }|S r   )ARRAY_TYPESupper)r   signedts      r   get_array_typer%   *   s&    IA GGIIHr   c                     t           |          S r   )ARRAY_RANGESr   s    r   get_min_max_valuer(   1   r   r   w+bc                    d}| |rt          |          } d}t          | t                    rt          | |          } d}	 t          | t          j                  rt          | |          } d}n# t          $ r Y nw xY w| |fS )NF)modeT)r   
isinstance
basestringopenosPathLikeAttributeError)fdr+   tempfileclose_fds       r   _fd_or_path_or_tempfiler5   5   s    H	zhz%%%"j!! "4   b"+&& 	bt$$$BH    	
 x<s   -A0 0
A=<A=c                 D    t          |           } |rd| dz  z  S d| dz  z  S )z_
    Converts the input db to a float, which represents the equivalent
    ratio in power.
    
      )float)dbusing_amplitudes     r   db_to_floatr<   K   s3    
 
rB b2gb2gr   c                     t          |           } || |z  } | dk    rt          d           S |rdt          | d          z  S dt          | d          z  S )z
    Converts the input float to db, which represents the equivalent
    to the ratio in power represented by the multiplier passed in.
    Nr   infr8   r7   )r9   r   )ratioval2r;   s      r   ratio_to_dbrA   W   sg    
 %LLE  zze} #CrNN""CrNN""r   c                     t          | t                    r| fdS | j        ddlm} t          ||            | S )a>  
    decorator for adding pydub effects to the AudioSegment objects.
    example use:
        @register_pydub_effect
        def normalize(audio_segment):
            ...
    or you can specify a name:
        @register_pydub_effect("normalize")
        def normalize_audio_segment(audio_segment):
            ...
    c                 $    t          |           S r   )register_pydub_effect)fnnames    r   <lambda>z'register_pydub_effect.<locals>.<lambda>z   s    /D99 r   Nr   )AudioSegment)r,   r-   __name__audio_segmentrH   setattr)rE   rF   rH   s    ` r   rD   rD   l   s`     "j!! :99999|{++++++L$###Ir   c                      t          t                     t                    z            } fdt          t	          |                    D             S )z
    Breaks an AudioSegment into chunks that are <chunk_length> milliseconds
    long.
    if chunk_length is 50 then you'll get a list of 50 millisecond long audio
    segments back (except the last one, which can be shorter)
    c                 6    g | ]}|z  |d z   z           S )r    ).0r   rJ   chunk_lengths     r   
<listcomp>zmake_chunks.<locals>.<listcomp>   sA     3 3 3 !l*AE\+AAB 3 3 3r   )r   lenr9   rangeint)rJ   rP   number_of_chunkss   `` r   make_chunksrV      sj     C..|1D1DDEE3 3 3 3 33/00113 3 3 3r   c                    t           j        dk    r|                     d          s| dz  } t           j        gt           j        d                             t           j                  z   }|D ]d}t           j                            ||           }t           j        	                    |          r#t          j
        |t           j                  r|c S edS )z0
    Mimics behavior of UNIX which command.
    ntz.exePATHN)r/   rF   endswithcurdirenvironsplitpathseppathjoinisfileaccessX_OK)programenvdir_listenvdirprogram_paths       r   whichrh      s    
 
w$w//7769+
6 2 8 8 D DDK    w||FG447>>,'' 	 BIlBG,L,L 	    r   c                  t    t          d          rdS t          d          rdS t          dt                     dS )Q
    Return enconder default application for system, either avconv or ffmpeg
    avconvffmpegzGCouldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not workrh   r	   RuntimeWarningrN   r   r   get_encoder_namero      C     X x	x x 	VXfgggxr   c                  t    t          d          rdS t          d          rdS t          dt                     dS )rj   avplayffplayzGCouldn't find ffplay or avplay - defaulting to ffplay, but may not workrm   rN   r   r   get_player_namert      rp   r   c                  t    t          d          rdS t          d          rdS t          dt                     dS )z;
    Return probe application, either avconv or ffmpeg
    avprobeffprobezJCouldn't find ffprobe or avprobe - defaulting to ffprobe, but may not workrm   rN   r   r   get_prober_namerx      sG     Y y	y		 y 	Y[ijjjyr   c                    t           j        dk    rSt          t          f}t           j        dk    r|t          j        fz  }t          | |          rt	          j        |           S nRt          | t                    r&|                     t          j	                              S t          | t                    r| S t          d                    t          |                               )z<Wrapper for os.fsdecode which was introduced in python 3.2 .)r   r   )r      z!type {0} not accepted by fsdecode)sysversion_infor-   bytesr/   r0   r,   fsdecodedecodegetfilesystemencoding	TypeErrorformattype)filenamePathLikeTypess     r   r~   r~      s     6!!#U+v%%bk^+Mh.. 	);x(((	) h&& 	@??3#<#>#>???h
++ 	O
7>>tH~~NN
O
OOr   c                 "   i }d}t          j        ||           D ]}|                    d          t          |                    d                    t          |                    d                    k    r>d                    |                    d          |                    d          g          }n|                    d          }d t          j        d	|          D             }||t          |                    d
                    <   |S )a|  
    avprobe sometimes gives more information on stderr than
    on the json output. The information has to be extracted
    from stderr of the format of:
    '    Stream #0:0: Audio: flac, 88200 Hz, stereo, s32 (24 bit)'
    or (macOS version):
    '    Stream #0:0: Audio: vorbis'
    '      44100 Hz, stereo, fltp, 320 kb/s'

    :type stderr: str
    :rtype: list of dict
    z}(?P<space_start> +)Stream #0[:\.](?P<stream_id>([0-9]+))(?P<content_0>.+)\n?(?! *Stream)((?P<space_end> +)(?P<content_1>.+))?	space_endNspace_start,	content_0	content_1c                 :    g | ]}||                                 S rN   )striprO   xs     r   rQ   z"get_extra_info.<locals>.<listcomp>   s%    IIIqI!''))IIIr   z[:,]	stream_id)refinditergrouprR   r`   r]   rT   )stderr
extra_info	re_streamr   content_linetokenss         r   get_extra_infor      s    J QI[F++ 7 777;+AGGM4J4J0K0Ks$$P& P& 1& 1&88QWW[%9%9177;;O;O$PQQLL77;//LIIRXfl%C%CIII06
3qww{++,,--r   c           
      `   t                      }g d}	 |t          |           gz  }d}d}n# t          $ r |dk    r|dt          |          dgz  }n|dgz  }t          }t          | dd	          \  }}|                    d
           |                                }|r|                                 Y nw xY w|ddg|z   }t          ||t          t                    }	|	
                    |          \  }
}|
                    dd          }
|                    dd          }t          j        |
          }|s|S t          |          }d |d         D             }t          |          d
k    r|S |d
         }d }||d                  D ]}t!          j        d|          }t!          j        d|          }|r{ ||d|                    d                      ||dt'          |                    d                                ||dt'          |                    d                               |r| ||d|                    d                      ||dt'          |                    d                                ||dt'          |                    d                               (t!          j        d|          r) ||d|            ||dd            ||dd           ft!          j        d|          r' ||d|            ||dd             ||dd            |S )!z\Return json dictionary with media info(codec, duration, size, bitrate...) from filepath
    )-vinfo-show_format-show_streamsNrw   z-read_ahead_limitzcache:pipe:0-rbF)r3   r   -ofjson)stdinstdoutr   )inpututf-8ignorec                 *    g | ]}|d          dk    |S )
codec_typeaudiorN   r   s     r   rQ   z"mediainfo_json.<locals>.<listcomp>   s&    NNN11\?g3M3MQ3M3M3Mr   streamsc                 4    || vs| |         dk    r|| |<   d S d S Nr   rN   )streampropvalues      r   set_propertyz$mediainfo_json.<locals>.set_property'  s0    v!2!2 F4LLL "3!2r   indexz*([su]([0-9]{1,2})p?) \(([0-9]{1,2}) bit\)$z$([su]([0-9]{1,2})p?)( \(default\))?$
sample_fmtr   bits_per_sampler   bits_per_raw_sampler   z(flt)p?( \(default\))?$r   z(dbl)p?( \(default\))?$@   )rx   r~   r   strr   r5   seekreadcloser   communicater   r   loadsr   rR   r   matchr   rT   )filepathread_ahead_limitprobercommand_argsstdin_parameter
stdin_datafile
close_filecommandresoutputr   r   r   audio_streamsr   r   tokenmm2s                       r   mediainfo_jsonr      s    F  L
(++,,

   Y0#6F2G2G+- -LL SE!L28TERRRj		!YY[[
 	JJLLL uf%4G
tD
I
I
IC__:_66NFF]]7H--F]]7H--F:fD  ''JNNYNNNM
=Q 1F! ! ! F7O, < <HA5IIX<eDD 	<Lqwwqzz:::L!2C

OODDDL!6AGGAJJHHHH 	<Lrxx{{;;;L!2C4D4DEEEL!6BHHQKK8H8HIIIIX/77 	<Lu555L!2B777L!6;;;;X/77 	<Lu555L!2B777L!6;;;Ks   , BB65B6c                    t                      }dddd| g}|ddg|z   }t          |t                    }|                                d                             d	          }|j        dk    rG|g|z   }t          |t                                                    d                             d	          }t          j        d
          }i }t          j	        dk    r|
                    dd          }|                    d          D ]c}|                    |          }	|	rJ|	                                \  }
}}|
r+	 ||
          n# t          $ r i ||
<   Y nw xY w|||
         |<   ^|||<   d|S )zWReturn dictionary with media info(codec, duration, size, bitrate...) from filepath
    r   quietr   r   r   old)r   r   r   z6(?:(?P<inner_dict>.*?):)?(?P<key>.*?)\=(?P<value>.*?)$win32 
)rx   r   r   r   r   
returncoder   compiler{   platformreplacer]   r   groupsKeyError)r   r   r   r   r   r   rgxr   linemobj
inner_dictkeyr   s                r   	mediainfor   A  s    Fg	L ue$|3G

%
%
%C__q!((11F
~(\)wt,,,88::1=DDWMM
*N
O
OCD
|wb))T"" " "yy 	"%)[[]]"JU "*$$$ * * *')D$$$*(-Z %%!S	Ks   8EEEc                 D     i t                      fd            }|S )Nc                  N    	  d         S #                d<    d         cY S xY wr   rN   )cachefunctions   r   wrapperzcache_codecs.<locals>.wrapperr  s6    	8O	xzzE!H8OOOs    $r
   )r   r   r   s   ` @r   cache_codecsr   o  s>    E
8__     _ Nr   c                     t                      } | dg}t          |t          t                    }|                                d                             d          }|j        dk    rg S t          j        dk    r|                    dd          }t          j
        d          }t                      }t                      }|                    d	          D ]}|                    |                                          }|s,|                                \  }	}
}|	d         d
k    r|                    |
           |	d         dk    r|                    |
           ||fS )Nz-codecs)r   r   r   r   r   r   r   z)^([D.][E.][AVS.][I.][L.][S.]) (\w*) +(.*)r   Dr   E)ro   r   r   r   r   r   r{   r   r   r   r   setr]   r   r   r   add)encoderr   r   r   r   decodersencodersr   r   flagscodecrF   s               r   get_supported_codecsr   }  s@     G	"G
T
2
2
2C__q!((11F
~	
|wb)) *A
B
BCuuHuuHT"" 
  
 		$**,,'' 	"\\^^ud8s??LL8s??LLhr   c                  *    t                      d         S r   r   rN   r   r   get_supported_decodersr         !!!$$r   c                  *    t                      d         S )Nr   r   rN   r   r   get_supported_encodersr     r   r   c                     |                                  }|d                             |d                   |d                             |d                                                   g}t                              |d         |d                   S )z
	Left-Right -> Mid-Side
	r   r   split_to_monooverlayinvert_phaserH   from_mono_audiosegmentsrJ   channels     r   stereo_to_msr    su     &&((AJwqz**GAJ,>,>wqz?V?V?X?X,Y,YZ,,WQZDDDr   c                 ,   |                                  }|d                             |d                   dz
  |d                             |d                                                   dz
  g}t                              |d         |d                   S )z
	Mid-Side -> Left-Right
	r   r   r   r   r   s     r   ms_to_stereor    s     &&((AJwqz**Q.
0B0B71:CZCZC\C\0]0]`a0ab,,WQZDDDr   )T)r)   T)NTr   )r   )1
__future__r   r   r/   r   r{   
subprocessr   r   mathr   r   r3   r   warningsr	   	functoolsr   audioopImportError	pyaudioopr|   r   r-   r   r!   r'   r   r%   r(   r5   r<   rA   rD   rV   rh   ro   rt   rx   r~   r   r   r   r   r   r   r   r  r  rN   r   r   <module>r     s          				 				 



 " " " " " " " "         " " " " " "             NNNN        vJ 			    ! # # #   # # #   ,	 	 	 	# # # #*   0	3 	3 	3            P P P$  6G G G GT+ + +\        <% % %% % %E E EE E E E Es   ? 	A
A