o
    pi                     @   s@   d dl mZ d dlZd dlmZ d dlmZ G dd deZdS )    )OptionalN)Tensor)Mixc                       s   e Zd ZdZddh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 de
f fddZ								ddee dee dee dee fddZ  ZS )MixSpeakerDiarizationa  
    Create a new sample by mixing it with another random sample from the same batch

    Signal-to-noise ratio (where "noise" is the second random sample) is selected
    randomly between `min_snr_in_db` and `max_snr_in_db`.

    Parameters
    ----------
    min_snr_in_db : float, optional
        Defaults to 0.0
    max_snr_in_db : float, optional
        Defaults to 5.0
    max_num_speakers: int, optional
        Maximum number of speakers in mixtures.  Defaults to actual maximum number
        of speakers in each batch.
    per_exampleper_channelTF              @      ?Ntensormin_snr_in_dbmax_snr_in_dbmodepp_modesample_ratetarget_ratemax_num_speakersoutput_typec
           
   
      s&   t  j||||||||	d || _d S )N)r   r   r   r   r   r   r   r   )super__init__r   )
selfr   r   r   r   r   r   r   r   r   	__class__ S/home/ubuntu/.local/lib/python3.10/site-packages/pyannote/audio/augmentation/mix.pyr   9   s   

zMixSpeakerDiarization.__init__samplestargetsc                 C   s  |j \}}}tjjtj| jtj|jdtj| jtj|jddd}|j	|fd| j
d< tjtj|dddd}	| jp>t|	}
tj|tjd	| j
d
< t|
d D ]<}t|	|kd }t|}|dkrdqPt|	| |
kd }t|}|dkrxqP|tjd||f|jd }|| j
d
 |< qPd S )N)dtypedeviceT)lowhighvalidate_args)sample_shape	snr_in_db)dim)r   
sample_idx   r   )r   )shapetorchdistributionsUniformr   r   float32r   r   sampletransform_parameterssumanyr   maxarangeint64rangewherelenrandint)r   r   r   r   r   
batch_sizenum_channelsnum_samplessnr_distributionnum_speakersr   nsamples_with_n_speakersnum_samples_with_n_speakers
candidatesnum_candidatesselected_candidatesr   r   r   randomize_parametersQ   sX   
z*MixSpeakerDiarization.randomize_parameters)	r   r	   r   r
   NNNNr   )NNNN)__name__
__module____qualname____doc__supported_modessupports_multichannelrequires_sample_ratesupports_targetrequires_targetfloatstrr   intr   r   rE   __classcell__r   r   r   r   r      s`    	
r   )typingr   r+   r   'torch_audiomentations.augmentations.mixr   r   r   r   r   r   <module>   s
   