awacke1 commited on
Commit
f4b2df9
1 Parent(s): dcf97a7

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +91 -0
app.py ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # EZ-Voice-Clone-From-Long-Text
2
+
3
+ import gradio as gr
4
+ import torch
5
+ from pathlib import Path
6
+ from pytube import YouTube
7
+ from pydub import AudioSegment
8
+ from TTS.api import TTS
9
+ import uuid
10
+ import os
11
+
12
+ test_audio="./shufflin.wav"
13
+
14
+ uid = uuid.uuid4()
15
+
16
+ device = "cuda" if torch.cuda.is_available() else "cpu"
17
+
18
+ def custom_bark(inp, in_aud=None, trim_aud=None, in_aud_mic=None):
19
+ if in_aud_mic != None:
20
+ speaker_wav=in_aud_mic
21
+ if in_aud !=None and trim_aud==None:
22
+ speaker_wav=in_aud
23
+ #speaker_wav=Path(f"{uid}-tmp_aud.mp4")
24
+ if trim_aud != None:
25
+ speaker_wav=Path(f"{uid}-trim.wav")
26
+ tts = TTS(model_name="tts_models/multilingual/multi-dataset/your_tts", progress_bar=False).to(device)
27
+ tts.tts_to_file(inp, speaker_wav=speaker_wav, language="en", file_path=f"{uid}-output.wav")
28
+ return (f"{uid}-output.wav")
29
+
30
+ def load_video_yt(vid):
31
+ yt = YouTube(vid)
32
+ vid = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first().download(filename=f"{uid}-tmp.mp4")
33
+ vid_aud = yt.streams.filter(only_audio=True)[0].download(filename=f"{uid}-tmp_aud.mp4")
34
+ print (f'Video Length: {yt.length}')
35
+ return vid, vid_aud, f"{uid}-tmp_aud.mp4"
36
+
37
+ def trim_clip(clip, start_t, end_t):
38
+ clip = Path(f"{clip}")
39
+ song = AudioSegment.from_file(f"{clip}", format="mp4")
40
+ #song = AudioSegment.from_file(Path(f"{clip}"), format="mp4")
41
+ start_min = int(start_t.split(":",1)[0])
42
+ start_sec = int(start_t.split(":",1)[1])
43
+ end_min = int(end_t.split(":",1)[0])
44
+ end_sec = int(end_t.split(":",1)[1])
45
+ start = ((start_min*60)+start_sec)*1000
46
+ end = ((end_min*60)+end_sec)*1000
47
+ song_clip = song[start: end]
48
+ song_clip.export(f"{uid}-trim.wav", format="wav")
49
+ print("New Audio file is created and saved")
50
+ return f"{uid}-trim.wav"
51
+
52
+ def pre_aud(inp):
53
+ print(inp)
54
+ song = AudioSegment.from_file(Path(f'{inp}'), format="mp4")
55
+ song.export(f"{uid}-tmp_aud.mp4", format="mp4")
56
+ print(f'pre_aud:: {f"{uid}-tmp_aud.mp4"}')
57
+ return inp
58
+
59
+ with gr.Blocks() as app:
60
+ with gr.Group():
61
+ with gr.Row():
62
+ in_text = gr.Textbox(lines = 6, max_lines = 20)
63
+ with gr.Column():
64
+ alt_go_btn = gr.Button()
65
+ out_audio = gr.Audio(interactive=False)
66
+
67
+ with gr.Group():
68
+ with gr.Row():
69
+ gr.Markdown('''<H1> Audio Source:''')
70
+ with gr.Row():
71
+
72
+ with gr.Column():
73
+ #in_aud_mic = gr.Audio(source='microphone')
74
+ in_aud_file = gr.Audio(label = 'Audio Source', sources=['microphone','upload'], interactive = True,type='filepath', value=test_audio)
75
+ aud_file = gr.File(interactive=False,visible=True)
76
+ with gr.Row():
77
+ start_time = gr.Textbox(label = "Start", value = "0:00", placeholder = "0:23")
78
+ end_time = gr.Textbox(label = "End", value = "0:01", placeholder = "1:12")
79
+ trim_clip_btn = gr.Button("Trim Clip")
80
+ trim_aud = gr.Audio(label = 'Trimmed Audio Source', sources=['upload'], interactive = False)
81
+ with gr.Column():
82
+ in_aud_yt = gr.Textbox(label="YouTube URL")
83
+ load_yt_btn = gr.Button("Load URL")
84
+ yt_vid = gr.Video(interactive=False)
85
+
86
+ #in_aud_file.change(pre_aud,in_aud_file,aud_file)
87
+ load_yt_btn.click(load_video_yt, in_aud_yt, [yt_vid,in_aud_file,aud_file])
88
+ trim_clip_btn.click(trim_clip,[in_aud_file, start_time, end_time],trim_aud)
89
+ alt_go_btn.click(custom_bark, [in_text,in_aud_file,trim_aud], out_audio)
90
+
91
+ app.launch()