§
    nF§jA  ã                   ó\   — d dl Z d dlmZmZ d dlmZmZmZmZm	Z	m
Z
mZ  G d„ d¦  «        ZdS )é    N)ÚAnyÚCallable)ÚAUDIO_PROCESSOR_TYPE_AUDIO_EDITÚ&AUDIO_PROCESSOR_TYPE_VOICE_REPLACEMENTÚ1AUDIO_PROCESSOR_LABEL_CONTEXT_LATE_POSTPROCESSINGÚSEEDVC_ONE_SPEAKER_METHODÚSEEDVC_TWO_SPEAKERS_METHODÚmethod_metadataÚread_config_sectionc                   ó
  — e Zd Zdeeef         fd„Zedeeef         fd„¦   «         Zedeeef         fd„¦   «         Z	edeeef         deeef         fd„¦   «         Z
d!deeef         dz  ddfd	„Zdefd
„Zd"defd„Zd#dedeeeef                  fd„Zd"dedef         defd„Zd$dee         deee         ee         f         fd„Zd%defd„Zddœdeeef         defd„Zdeeef         deeef         defd„Zd&d „ZdS )'ÚSeedVCProcessorÚserver_configc                 óh   — ddl m} i | _         || j        |¦  «        | _        || _        || _        d S )Nr   ©ÚSeedVCBridge)Ú postprocessing.seedvc.wgp_bridger   Úbridge_configÚbridger   Úfiles_locator)Úselfr   r   r   s       ú>C:\Users\johnn\Wan2GP\postprocessing\seedvc\audio_processor.pyÚ__init__zSeedVCProcessor.__init__   sH   € ØAÐAÐAÐAÐAÐAàˆÔØ"�l 4Ô#5°}ÑEÔEˆŒØ*ˆÔØ*ˆÔÐÐó    Úreturnc                 óL  — dt           t          fdt          fdt          fgt          t           t          ft          t           t          fit          dt          dit          dit          dt          dit          dt          dit          t          dt          d	iid
dt          dt          didœS )NÚSeedVCzSeedVC - One SpeakerzSeedVC - Two SpeakersTé   é   zReplace Voicez$Replace voice (SeedVC) - One Speakerz%Replace voice (SeedVC) - Two SpeakersÚseedvcé   z8Replace one speaker's voice using a target voice sample.z<Replace two speakers' voices using two target voice samples.)ÚnameÚprocessor_typesÚmethodsÚmethod_typesÚneeds_voice_sampleÚneeds_voice_sample2Úspeaker_countÚstatusÚmethod_context_labelsÚ
config_keyÚposÚmethod_descriptions)r   r   r   r	   r   )Úclss    r   Úquery_audio_processor_defz)SeedVCProcessor.query_audio_processor_def   sÃ   € ð Ý FÕHgÐhØ/Õ1JÐKÐNeõ  hBð  NCð  Då)Õ,RÕTsÐ+tÝ*Õ-SÕUtÐ,uðõ $=¸dÕD^Ð`dÐ"eÝ$>ÀÐ#EÝ7¸Õ<VÐXYÐZÝ0°/ÕC]Ð_nÐoåAÝ-Ð/UÝ.Ð0WðDð&ð #Øå)Ð+eÝ*Ð,jð$ð)
ð 
ð 	
r   c                 ó    — ddl m} d|j        iS ©Nr   r   Úmode)r   r   ÚMODE_OFF)r-   r   s     r   Údefault_configzSeedVCProcessor.default_config4   s"   € àAÐAÐAÐAÐAÐAà˜Ô-Ð.Ð.r   Úconfigc                 óà   — ddl m} |                     d|j        ¦  «        }	 t	          |¦  «        }n# t
          t          f$ r
 |j        }Y nw xY w||j        vr||j        k    r|j        }d|iS r0   )r   r   Úgetr2   ÚintÚ	TypeErrorÚ
ValueErrorÚ	_VERSIONS)r-   r4   r   r1   s       r   Únormalize_config_sectionz(SeedVCProcessor.normalize_config_section:   s•   € àAÐAÐAÐAÐAÐAà�zŠz˜& ,Ô"7Ñ8Ô8ˆð	)Ý�t‘9”9ˆDˆDøÝ�:Ð&ð 	)ð 	)ð 	)ØÔ(ˆDˆDˆDð	)øøøà�|Ô-Ð-Ð-°$¸,Ô:OÒ2OÐ2OØÔ(ˆDØ˜ˆ~Ðs   £3 ³AÁANc                 óx  — ddl m} |€t          | j        | ¦  «        n|                      |¦  «        }| j                             ¦   «          |                     | j        ¦  «        r| j        j	        n| j        j
        }| j                             |d         |dœ¦  «         | j                             ¦   «          d S )Nr   )Úaudio_processorsr1   )Úseedvc_modeÚseedvc_persistence)Úpostprocessingr=   r   r   r;   r   ÚclearÚpersistent_modelsr   ÚPERSIST_RAMÚPERSIST_UNLOADÚupdateÚnormalize_config)r   r4   Úaudio_processor_apiÚvaluesÚpersistences        r   Ú_sync_bridge_configz#SeedVCProcessor._sync_bridge_configG   sÇ   € ØJÐJÐJÐJÐJÐJàBHÀ.Õ$ TÔ%7¸Ñ>Ô>Ð>ÐVZ×VsÒVsÐtzÑV{ÔV{ˆØÔ× Ò Ñ"Ô"Ð"Ø1D×1VÒ1VÐW[ÔWiÑ1jÔ1jð  K�d”kÔ-Ð-ÐptÔp{ô  qKˆØÔ×!Ò!°&¸´.ÐXcÐ"dÐ"dÑeÔeÐeØŒ×$Ò$Ñ&Ô&Ð&Ð&Ð&r   c                 ó\   — |                       ¦   «          | j                             ¦   «         S ©N)rJ   r   Úenabled©r   s    r   rM   zSeedVCProcessor.enabledP   s(   € Ø× Ò Ñ"Ô"Ð"ØŒ{×"Ò"Ñ$Ô$Ð$r   c                 óp   — |                       ¦   «         sdS |€dS t          |¦  «        }|d         r|€dS dS )Nz0SeedVC is disabled in Configuration > ExtensionszYou must provide a voice sampler&   z&You must provide a second voice sampleÚ )rM   r
   )r   ÚmethodÚvoice_sampleÚvoice_sample2Ú_kwargsÚmetadatas         r   Úvalidate_methodzSeedVCProcessor.validate_methodT   sP   € Ø�|Š|‰~Œ~ð 	FØEÐEØÐØ4Ð4Ý" 6Ñ*Ô*ˆØÐ)Ô*ð 	<¨}Ð/DØ;Ð;Øˆrr   TÚenabled_onlyc                 ó`   — |                       ¦   «          | j                             |¬¦  «        S )N)rW   )rJ   r   Úquery_download_def)r   rW   s     r   Úquery_download_defsz#SeedVCProcessor.query_download_defs^   s-   € Ø× Ò Ñ"Ô"Ð"ØŒ{×-Ò-¸<Ð-ÑHÔHÐHr   Úprocess_files.c                 ó¾   — |                       ¦   «          | j                             |||pd¬¦  «        }t          |¦  «        d         rddlm}  ||d¦  «         d}|S )Nz!Downloading SeedVC model files...)Úsend_cmdÚstatus_textr&   r   )Údownload_speaker_separatorz,Downloading speaker separator model files...T)rJ   r   Údownloadr
   Ú&preprocessing.speaker_separator.assetsr_   )r   rQ   r[   r]   r^   rT   Ú
downloadedr_   s           r   r`   zSeedVCProcessor.downloadb   sŒ   € Ø× Ò Ñ"Ô"Ð"Ø”[×)Ò)¨-À(ÐXcð  YKð  hKÐ)ñ  Lô  Lˆ
Ý˜6Ñ"Ô"Ð#8Ô9ð 	ØYÐYÐYÐYÐYÐYà&Ð& xÐ1_Ñ`Ô`Ð`ØˆJØÐr   rP   r   é   r   Úaudio_tracksc                 ó˜   — |                       ¦   «          | j                             ||||||||	|
t          |¦  «        d         ¬¦
  «
        S )Nr'   )r[   Ú
profile_noÚverbose_levelÚ	init_pipeÚvoice_sample2_pathr'   )rJ   r   Úreplace_audio_tracksr
   )r   rQ   rd   rR   Ú
output_dirÚprefixr[   rf   rg   rh   rS   rT   s               r   Úreplace_voice_tracksz$SeedVCProcessor.replace_voice_tracksl   s†   € Ø× Ò Ñ"Ô"Ð"ØŒ{×/Ò/°¸lÈJÐX^Ðn{ð  ISð  cpð  |Eð  Zgõ  wFð  GMñ  wNô  wNð  O^ô  w_Ð/ñ  `ô  `ð  	`r   c                 ó^  — |                       ¦   «          |
� |
t          |¦  «        d         ¦  «         | j                             ||||||||	t          |¦  «        d         dt          j                             t          j                             |¦  «        ¦  «        d         › �¬¦
  «
        S )Nr(   r'   Útmp_r   )r[   rf   rg   rh   ri   r'   rl   )rJ   r
   r   Úreplace_audio_fileÚosÚpathÚsplitextÚbasename)r   rQ   Úaudio_sourcerR   Úoutput_pathr[   rf   rg   rh   rS   Ústatus_callbackrT   s               r   Úprocess_audio_filez"SeedVCProcessor.process_audio_filep   s$  € Ø× Ò Ñ"Ô"Ð"ØÐ&ØˆO�O¨FÑ3Ô3°HÔ=Ñ>Ô>Ð>ØŒ{×-Ò-¨l¸LÈ+Ðerð  @Jð  Zgð  s|ð  Q^õ  n}ð  ~Dñ  nEô  nEð  FUô  nVð  _[õ  fhô  fm÷  fvò  fvõ  wyô  w~÷  wGò  wGð  HTñ  wUô  wUñ  fVô  fVð  WXô  fYð  _[ð  _[Ð-ñ  \ô  \ð  	\r   F)Úlock_configry   c          	      ó  — ddl m} ddlm}m} |                      |¦  «        }|                     |                     ¦   «          ||                     d|¦  «        |                     ¦   «         |¦  «        d| ¬¦  «        }d|fgS )Nr   r   )ÚSEEDVC_DEFAULT_MODEÚenabled_choice_valuer1   zSeedVC Voice Replacement)ÚchoicesÚvalueÚlabelÚinteractive)	r   r   Ú!shared.utils.wgp_config_migrationr{   r|   r;   ÚDropdownÚmode_choicesr6   )r   Úgrr4   ry   r   r{   r|   r1   s           r   Úcreate_config_uiz SeedVCProcessor.create_config_uiv   så   € ØAÐAÐAÐAÐAÐAØ_Ð_Ð_Ð_Ð_Ð_Ð_Ð_à×.Ò.¨vÑ6Ô6ˆØ�{Š{ <×#<Ò#<Ñ#>Ô#>ÐFZÐFZÐ[a×[eÒ[eÐflð  oBñ  \Cô  \Cð  EQ÷  E^ò  E^ñ  E`ô  E`ð  buñ  Gvô  Gvð  ~Xð  juð  fuˆ{ñ  vô  vˆØ˜�ÐÐr   Ú
old_configÚ
new_configc                 ó   — ||k    S rL   © )r   r†   r‡   Úchanged_keyss       r   Úconfig_requires_releasez'SeedVCProcessor.config_requires_release~   s   € Ø˜ZÒ'Ð'r   c                 ó8   — | j                              ¦   «          d S rL   )r   Úrelease_vramrN   s    r   r�   zSeedVCProcessor.release_vram�   s   € ØŒ× Ò Ñ"Ô"Ð"Ð"Ð"r   rL   )NN)T)NrP   r   Nrc   r   NN)NNNrc   r   NNN)r   N)Ú__name__Ú
__module__Ú__qualname__ÚdictÚstrr   r   Úclassmethodr.   r3   r;   rJ   ÚboolrM   rV   ÚlistrZ   r   r`   Útuplerm   rx   r…   r‹   r�   r‰   r   r   r   r      sÕ  € € € € € ð+ d¨3°¨8¤nð +ð +ð +ð +ð ð
¨$¨s°C¨x¬.ð 
ð 
ð 
ñ „[ð
ð6 ð/˜t C¨ Hœ~ð /ð /ð /ñ „[ð/ð
 ð
¨d°3¸°8¬nð 
ÀÀcÈ3ÀhÄð 
ð 
ð 
ñ „[ð
ð'ð '¨$¨s°C¨x¬.¸4Ñ*?ð 'È4ð 'ð 'ð 'ð 'ð%˜ð %ð %ð %ð %ðð Ð[^ð ð ð ð ðIð I°ð IÀÀTÈ#ÈsÈ(Ä^Ô@Tð Ið Ið Ið Iðð ¨h°s¸C°xÔ.@ð Ðquð ð ð ð ð`ð `¸¸c¼ð `ð  ]bð  cgð  hkô  clð  nrð  svô  nwð  cwô  ]xð `ð `ð `ð `ð\ð \ð  X[ð \ð \ð \ð \ð SXð  ð  ð  ¨4°°S°¬>ð  È4ð  ð  ð  ð  ð(°$°s¸C°x´.ð (ÈdÐSVÐX[ÐS[Ìnð (Ðosð (ð (ð (ð (ð#ð #ð #ð #ð #ð #r   r   )rq   Útypingr   r   Úpostprocessing.audio_processorsr   r   r   r   r	   r
   r   r   r‰   r   r   ú<module>r™      s¼   ðØ 	€	€	€	Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðs#ð s#ð s#ð s#ð s#ñ s#ô s#ð s#ð s#ð s#r   