Spaces:
Running
Running
Load sample from url
Browse files
app.py
CHANGED
@@ -5,11 +5,13 @@ import ssl
|
|
5 |
import base64
|
6 |
import urllib.request
|
7 |
import tempfile
|
8 |
-
import
|
|
|
9 |
from datetime import datetime
|
10 |
from typing import Dict, List, Optional, Tuple
|
11 |
import edge_tts
|
12 |
from langdetect import detect
|
|
|
13 |
|
14 |
|
15 |
# Custom CSS for better styling
|
@@ -185,24 +187,46 @@ Aqui estão os pensamentos:""",
|
|
185 |
}
|
186 |
}
|
187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
class VoiceNotesApp:
|
189 |
def __init__(self):
|
190 |
# Azure endpoint configuration
|
191 |
-
|
192 |
-
|
193 |
-
self.azure_url = "https://nguyenbach-9897-westus3-covns.westus3.inference.ml.azure.com/score"
|
194 |
-
self.api_key = "uABZxEGiK6iXlBWsvy7xOEJ1zCmeLkvSHuf6wEykfqtf4I7KbbWiJQQJ99BBAAAAAAAAAAAAINFRAZML2JhK"
|
195 |
|
196 |
-
# Initialize sample audio files
|
197 |
self.sample_audios = {
|
198 |
-
"English - Weekend Plan": "
|
199 |
-
"Chinese - Kids & Work": "
|
200 |
-
"German - Vacation Planning": "
|
201 |
-
"French - Random Thoughts": "
|
202 |
-
"Italian - Daily Life": "
|
203 |
-
"Japanese - Seattle Trip Report": "
|
204 |
-
"Spanish - Soccer Class": "
|
205 |
-
"Portuguese - Buying House & Friends": "
|
206 |
}
|
207 |
|
208 |
# Initialize storage
|
@@ -534,16 +558,9 @@ class VoiceNotesApp:
|
|
534 |
|
535 |
def create_interface(self):
|
536 |
"""Create an enhanced Gradio interface with improved styling and layout"""
|
537 |
-
|
538 |
default_audio_path = self.sample_audios["English - Weekend Plan"]
|
539 |
-
|
540 |
-
try:
|
541 |
-
audio_data, sample_rate = soundfile.read(default_audio_path)
|
542 |
-
default_audio = (sample_rate, audio_data)
|
543 |
-
except Exception as e:
|
544 |
-
print(f"Error loading default audio: {e}")
|
545 |
-
default_audio = None
|
546 |
-
|
547 |
# Create the layout with tabs
|
548 |
with gr.Blocks(
|
549 |
css=CUSTOM_CSS,
|
@@ -573,8 +590,7 @@ class VoiceNotesApp:
|
|
573 |
type="filepath",
|
574 |
label="",
|
575 |
interactive=True,
|
576 |
-
show_download_button=True
|
577 |
-
value=default_audio
|
578 |
)
|
579 |
|
580 |
with gr.Row():
|
@@ -622,9 +638,13 @@ class VoiceNotesApp:
|
|
622 |
if not sample_name:
|
623 |
return None
|
624 |
try:
|
625 |
-
|
626 |
-
|
627 |
-
|
|
|
|
|
|
|
|
|
628 |
except Exception as e:
|
629 |
print(f"Error loading sample audio: {e}")
|
630 |
return None
|
|
|
5 |
import base64
|
6 |
import urllib.request
|
7 |
import tempfile
|
8 |
+
import requests
|
9 |
+
import soundfile as sf
|
10 |
from datetime import datetime
|
11 |
from typing import Dict, List, Optional, Tuple
|
12 |
import edge_tts
|
13 |
from langdetect import detect
|
14 |
+
from io import BytesIO
|
15 |
|
16 |
|
17 |
# Custom CSS for better styling
|
|
|
187 |
}
|
188 |
}
|
189 |
|
190 |
+
|
191 |
+
def load_audio_from_url(url):
|
192 |
+
"""
|
193 |
+
Load audio from a URL using soundfile
|
194 |
+
|
195 |
+
Args:
|
196 |
+
url (str): URL of the audio file
|
197 |
+
|
198 |
+
Returns:
|
199 |
+
tuple: (audio_data, sample_rate) if successful, None otherwise
|
200 |
+
"""
|
201 |
+
try:
|
202 |
+
# Get the audio file from the URL
|
203 |
+
response = requests.get(url)
|
204 |
+
response.raise_for_status() # Raise exception for bad status codes
|
205 |
+
|
206 |
+
# For other formats that soundfile supports directly (WAV, FLAC, etc.)
|
207 |
+
audio_data, sample_rate = sf.read(BytesIO(response.content))
|
208 |
+
return sample_rate, audio_data
|
209 |
+
|
210 |
+
except Exception as e:
|
211 |
+
print(f"Error loading audio from URL: {e}")
|
212 |
+
return None
|
213 |
+
|
214 |
class VoiceNotesApp:
|
215 |
def __init__(self):
|
216 |
# Azure endpoint configuration
|
217 |
+
self.azure_url = os.getenv("AZURE_ENDPOINT")
|
218 |
+
self.api_key = os.getenv("AZURE_API_KEY")
|
|
|
|
|
219 |
|
220 |
+
# Initialize sample audio files - all using HTTPS URLs
|
221 |
self.sample_audios = {
|
222 |
+
"English - Weekend Plan": "https://diamondfan.github.io/audio_files/english.weekend.plan.wav",
|
223 |
+
"Chinese - Kids & Work": "https://diamondfan.github.io/audio_files/chinese.kid.work.wav",
|
224 |
+
"German - Vacation Planning": "https://diamondfan.github.io/audio_files/german.vacation.work.wav",
|
225 |
+
"French - Random Thoughts": "https://diamondfan.github.io/audio_files/french.random.vacation.wav",
|
226 |
+
"Italian - Daily Life": "https://diamondfan.github.io/audio_files/italian.daily.life.wav",
|
227 |
+
"Japanese - Seattle Trip Report": "https://diamondfan.github.io/audio_files/japanese.seattle.trip.report.wav",
|
228 |
+
"Spanish - Soccer Class": "https://diamondfan.github.io/audio_files/spanish.soccer.class.wav",
|
229 |
+
"Portuguese - Buying House & Friends": "https://diamondfan.github.io/audio_files/portugese.house.friends.wav"
|
230 |
}
|
231 |
|
232 |
# Initialize storage
|
|
|
558 |
|
559 |
def create_interface(self):
|
560 |
"""Create an enhanced Gradio interface with improved styling and layout"""
|
561 |
+
# Preload Chinese sample as default
|
562 |
default_audio_path = self.sample_audios["English - Weekend Plan"]
|
563 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
564 |
# Create the layout with tabs
|
565 |
with gr.Blocks(
|
566 |
css=CUSTOM_CSS,
|
|
|
590 |
type="filepath",
|
591 |
label="",
|
592 |
interactive=True,
|
593 |
+
show_download_button=True
|
|
|
594 |
)
|
595 |
|
596 |
with gr.Row():
|
|
|
638 |
if not sample_name:
|
639 |
return None
|
640 |
try:
|
641 |
+
audio_url = self.sample_audios[sample_name]
|
642 |
+
# Use the load_audio_from_url function to fetch the audio
|
643 |
+
result = load_audio_from_url(audio_url)
|
644 |
+
if result:
|
645 |
+
sample_rate, audio_data = result
|
646 |
+
return (sample_rate, audio_data)
|
647 |
+
return None
|
648 |
except Exception as e:
|
649 |
print(f"Error loading sample audio: {e}")
|
650 |
return None
|