o e@s|ddlZddlZddlZddlZddlmZdddZdd d Zdd dZ dddZ dddZ dej dej effddZdS)N)have_pyrubberband]cCsvddl}t}||d}||||||||Wdn1s-wY|d| S)Nrwb) waveioBytesIOopen setnchannels setsampwidth setframerate writeframesseekread) frame_inputchannels sample_width sample_raterwav_bufvfoutr/h2ogpt/src/tts_utils.pyget_wave_header s     rcCs t|dS)N)r)rsrrrrprepare_speechs rTFcCs2|rdS|rdS|dusJ|tgtjfS)Nr)nparrayastypeint16)return_as_bytereturn_nonbyte_as_filerrrr get_no_audio"s  r$c s&t|dtfdd|Dp|ddfv}|sS|s|r|}|r.|t|dttfO}|r9|t|ttfO}|dusFt|ttfsFJddlm}|} |D]} | durl|r_t | n| } | |j | |||d7} qR|dur|rxt |n|} | |j | |||d7} |r| j dd  } | S|S) Nrc3s|] }|ddfvVqdS)Nr).0xno_audiorr /sz!combine_audios..r%r AudioSegmentr frame_raterraw)format) r$any isinstancebytes bytearraypydubr,emptyr r from_rawexportr) audiosaudiorrr expect_bytes have_audiois_bytesr, combined_wavr'srr(rcombine_audios-s2 $ r@?c Cs|dkr|Strddl}||||}|dtj}|S|dkr#|Sddlm}ddlm }t |}d}d}|j ||||d} t || |d }|S) NrArir+)speeduprrr-)r pyrubberband time_stretchr rr!r5r, pydub.effectsrBr r r7 pydub_to_np) chunkr tts_speedpyrbr,rBr?rrr:rrrchunk_speed_changeJs"   rKr:returncCs tj|tjdd|jfS)zj Converts pydub audio segment into np.int16 of shape [duration_in_seconds*sample_rate, channels], )dtype)rrget_array_of_samplesr!reshaper)r:rrrrGls rG)rrrr)r)TFN)NrrrT)rA)r librosanumpyrr5 src.utilsrrrr$r@rKr,ndarrayintrGrrrrs     "