TDN-M commited on
Commit
2c5ffe4
·
verified ·
1 Parent(s): af7bead

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -2
app.py CHANGED
@@ -9,10 +9,14 @@ import gradio as gr
9
  from docx import Document
10
  from content_generation import create_content, CONTENT_TYPES
11
  from openai import OpenAI
 
12
 
13
  # Khởi tạo client OpenAI với API key từ biến môi trường
14
  client = OpenAI(api_key=os.environ.get('OPENAI_API_KEY'))
15
 
 
 
 
16
  def create_docx(content, output_path):
17
  """
18
  Tạo file docx từ nội dung.
@@ -41,6 +45,24 @@ def process_docx(file_path):
41
  text += para.text
42
  return text
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  def interface():
45
  with gr.Blocks() as app:
46
  gr.Markdown("# Ứng dụng Tạo Nội dung và Video")
@@ -53,6 +75,8 @@ def interface():
53
  content_type = gr.Radio(label="Chọn loại nội dung",
54
  choices=CONTENT_TYPES,
55
  value=None) # Giá trị mặc định là không có gì được chọn
 
 
56
  content_button = gr.Button("Tạo Nội dung")
57
 
58
  with gr.Column():
@@ -60,6 +84,8 @@ def interface():
60
  confirm_button = gr.Button("Xác nhận nội dung")
61
  download_docx = gr.File(label="Tải xuống file DOCX", interactive=False)
62
  status_message = gr.Label(label="Trạng thái")
 
 
63
 
64
  def generate_content(prompt, file, content_type):
65
  try:
@@ -94,13 +120,22 @@ def interface():
94
  docx_path = "script.docx"
95
  create_docx(content, docx_path)
96
 
 
 
 
 
 
 
 
97
  content_button.click(generate_content,
98
  inputs=[prompt, file_upload, content_type],
99
  outputs=[content_output, download_docx, status_message])
100
 
101
- return app
102
-
 
103
 
 
104
 
105
  # Khởi chạy ứng dụng
106
  if __name__ == "__main__":
 
9
  from docx import Document
10
  from content_generation import create_content, CONTENT_TYPES
11
  from openai import OpenAI
12
+ from gradio_client import Client, handle_file # Thêm thư viện để gọi API
13
 
14
  # Khởi tạo client OpenAI với API key từ biến môi trường
15
  client = OpenAI(api_key=os.environ.get('OPENAI_API_KEY'))
16
 
17
+ # Đường dẫn đến thư mục chứa các file âm thanh
18
+ VOICES_DIR = "voices"
19
+
20
  def create_docx(content, output_path):
21
  """
22
  Tạo file docx từ nội dung.
 
45
  text += para.text
46
  return text
47
 
48
+ def text_to_speech(content, voice_file):
49
+ """
50
+ Chuyển đổi nội dung thành giọng nói bằng API.
51
+ """
52
+ try:
53
+ client = Client("thinhlpg/vixtts-demo")
54
+ result = client.predict(
55
+ prompt=content,
56
+ language="vi",
57
+ audio_file_pth=handle_file(voice_file), # Sử dụng file âm thanh được chọn
58
+ normalize_text=True,
59
+ api_name="/predict"
60
+ )
61
+ # Chỉ lấy phần tử đầu tiên (filepath) từ kết quả trả về
62
+ return result[0]
63
+ except Exception as e:
64
+ return f"Lỗi khi chuyển đổi văn bản thành giọng nói: {str(e)}"
65
+
66
  def interface():
67
  with gr.Blocks() as app:
68
  gr.Markdown("# Ứng dụng Tạo Nội dung và Video")
 
75
  content_type = gr.Radio(label="Chọn loại nội dung",
76
  choices=CONTENT_TYPES,
77
  value=None) # Giá trị mặc định là không có gì được chọn
78
+ voice_files = [os.path.join(VOICES_DIR, f) for f in os.listdir(VOICES_DIR) if f.endswith(".wav")]
79
+ voice_selector = gr.Dropdown(label="Chọn giọng đọc", choices=voice_files) # Dropdown để chọn file âm thanh
80
  content_button = gr.Button("Tạo Nội dung")
81
 
82
  with gr.Column():
 
84
  confirm_button = gr.Button("Xác nhận nội dung")
85
  download_docx = gr.File(label="Tải xuống file DOCX", interactive=False)
86
  status_message = gr.Label(label="Trạng thái")
87
+ convert_to_speech_button = gr.Button("Chuyển đổi thành giọng nói")
88
+ audio_output = gr.Audio(label="Synthesised Audio", autoplay=True) # Phát tự động
89
 
90
  def generate_content(prompt, file, content_type):
91
  try:
 
120
  docx_path = "script.docx"
121
  create_docx(content, docx_path)
122
 
123
+ def convert_content_to_speech(content, voice_file):
124
+ audio_path = text_to_speech(content, voice_file)
125
+ if os.path.exists(audio_path):
126
+ return audio_path # Chỉ trả về filepath để phát audio
127
+ else:
128
+ return None
129
+
130
  content_button.click(generate_content,
131
  inputs=[prompt, file_upload, content_type],
132
  outputs=[content_output, download_docx, status_message])
133
 
134
+ convert_to_speech_button.click(convert_content_to_speech,
135
+ inputs=[content_output, voice_selector],
136
+ outputs=[audio_output])
137
 
138
+ return app
139
 
140
  # Khởi chạy ứng dụng
141
  if __name__ == "__main__":