o
    ॵi                     @   s   d dl Z d dlZd dlmZ d dlmZmZ d dlZd dl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 dd	lmZ dd
lmZ G dd deZdS )    N)Path)AnyDict)CompositeAudioFeatureTransform)S2TDataConfig)pre_chinese)ModeKeys   )OfaBasePreprocessor)
Text2Phonec                       s   e Zd Zejf fdd	Zdeeef deeef fddZ	deeef deeef fddZ
deeef deeef fd	d
Zdd Zdd Z  ZS )OfaASRPreprocessorc                    s   t t| j|||g|R i | tttj|d| _t	
| jdd| _t	
| jdd| _ttj|d| _| tj|d\| _| _dS )	zpreprocess the data

        Args:
            cfg(modelscope.utils.config.ConfigDict) : model config
            model_dir (str): model path,
            mode: preprocessor mode (model mode)
        zfbank_config.yamltrainTtestFztext2phone_dict.txtzphone_dict.txtN)superr   __init__r   r   ospathjoindata_cfgr   from_config_dictget_feature_transformstrain_audio_feature_transformstest_audio_feature_transformsr   text2phone_tokenizerbuild_phone_dictphone_to_idid_to_phone)selfcfg	model_dirmodeargskwargs	__class__ T/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/preprocessors/ofa/asr.pyr      s$   zOfaASRPreprocessor.__init__datareturnc                 C   s    | j tjkr| |S | |S )N)r    r   TRAIN_build_train_sample_build_infer_sample)r   r'   r%   r%   r&   __call__2   s   

zOfaASRPreprocessor.__call__c                 C   sH  t g d}| || jd  }tj|ddd\}}| jtj|gtj	d||ddd}tdg}|||| jd  d	}|d
 }	| j
dkrVt|	| j}	| j|	dd|d< n!|	| j }	|	  }
d|
d | j }	| j|	dd|d< | |	d }tdg}|d |d< ||d< ||d< t| j|d d d g|d< |S )N)g?      ?g?wav>  Tsrmonodtypetarget_sample_rateis_traintext)fbank
fbank_masklabelr;   zhF)add_bostarget r	      
phone_itemphone_target
phone_maskprev_output_tokens)randomchoiceget_audio_bytes
column_maplibrosaloadprepare_fbanktorchtensorfloat32languager   max_tgt_lengthtokenize_text	translatetranstabstripsplitr   to_phonecatbos_item)r   r'   speedaudio_bytesr.   r1   r9   r:   sampler>   target_token_listrA   rC   r%   r%   r&   r*   8   s@   
z&OfaASRPreprocessor._build_train_samplec           	      C   s   d}|  || jd  }tj|ddd\}}| jtj|gtjd||ddd}tdg}||d	}d
| jv rG| jd
 |v rG|| jd
  |d< tg d|d< tdg|d< |S )Nr-   r.   r/   Tr0   r3   Fr5   )r9   r:   r8   r;   )   r^   r^   rA   rC   )rH   rI   rJ   rK   rL   rM   rN   rO   )	r   r'   rZ   r[   r.   r1   r9   r:   r\   r%   r%   r&   r+   ^   s"   
z&OfaASRPreprocessor._build_infer_samplec                    s.    j |}t fdd|dD }|S )Nc                    s   g | ]} j | qS r%   )r   ).0xr   r%   r&   
<listcomp>w   s    z/OfaASRPreprocessor.to_phone.<locals>.<listcomp>r?   )r   transrM   rN   rV   )r   r8   phonesidsr%   ra   r&   rW   u   s   zOfaASRPreprocessor.to_phonec                 C   sx   t  }t  }t|d%}t|D ]\}}| dd }|||< |||< qW d    ||fS 1 s3w   Y  ||fS )Nrr?   r   )dictopen	enumeraterU   rV   )r   phone_dict_pathr   r   phone_dict_fileilinephoner%   r%   r&   r   z   s   

z#OfaASRPreprocessor.build_phone_dict)__name__
__module____qualname__r   	INFERENCEr   r   strr   r,   r*   r+   rW   r   __classcell__r%   r%   r#   r&   r      s    """&r   )r   rF   pathlibr   typingr   r   rJ   	soundfilesfrM   %fairseq.data.audio.feature_transformsr   )fairseq.data.audio.speech_to_text_datasetr   modelscope.utils.chinese_utilsr   modelscope.utils.constantr   baser
   utils.text2phoner   r   r%   r%   r%   r&   <module>   s   