import streamlit as st
from pydub import AudioSegment
from aift.multimodal import textqa
from aift import setting
import configparser
import requests
import json
import subprocess
st.set_page_config(layout="wide")
st.markdown(
"""
""",
unsafe_allow_html=True
)
setting.set_api_key('T69FqnYgOdreO5G0nZaM8gHcjo1sifyU')
# Create two columns
col1, col2= st.columns(2)
with col1:
def text_to_speech(text, filename="audio_file.mp3", speaker=1, language="th", volume=1, speed=1):
url = "https://api-voice.botnoi.ai/openapi/v1/generate_audio"
payload = {
"text": text,
"speaker": speaker,
"volume": volume,
"speed": speed,
"type_media": "mp3",
"save_file": "true",
"language": language
}
headers = {
'Botnoi-Token': 'ZHBaNlR4WEI3dWgyZGVRajRMaGt5S3NXeUVZMjU2MTg5NA==',
'Content-Type': 'application/json'
}
try:
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
data = response.json()
audio_url = data.get("audio_url")
if audio_url:
audio_response = requests.get(audio_url)
audio_response.raise_for_status()
with open(filename, "wb") as file:
file.write(audio_response.content)
print(f"Audio downloaded successfully as '{filename}'.")
else:
print("Audio URL not found in the response.")
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
# Code in the left column
st.markdown(
"
Choose Your Country
",
unsafe_allow_html=True
)
col4, col5, col6 = st.columns(3)
# Display flags in the respective columns
list = ["thailand","english","chinese"]
with col4:
st.image("Thai.jpg", use_container_width=True)
if st.button("ประเทศไทย (ภาษากลาง)",use_container_width=True):
config = configparser.ConfigParser()
config.read("config.ini")
config["DEFAULT"]["_server_port"] = "27016"
config["SERVER"]["_server_port"] = "27016"
country = "Thailand"
open("country.txt", "w").write("Thailand")
with open("config.ini", "w") as configfile:
config.write(configfile)
with col5:
st.image("UK.png", use_container_width=True)
if st.button("English",use_container_width=True):
open("country.txt", "w").write("English")
with col6:
st.image("China.png", use_container_width=True)
if st.button("Chinese",use_container_width=True):
country = "Chinese"
open("country.txt", "w").write("Chinese")
text_var = st.text_input("Enter text value:", value="")
if text_var is not None:
if (country := open("country.txt").read().strip()) == "Chinese":
url = "https://api.aiforthai.in.th/xiaofan-zh-th"
payload = json.dumps({
"input": f"{text_var}",
"src": "zh",
"trg": "th"
})
headers = {
'apikey': 'T69FqnYgOdreO5G0nZaM8gHcjo1sifyU',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
back = eval(response.text)["output"]
text_to_speech(f'{back}', filename="greeting_audio.mp3", speaker=6, language="th")
st.audio("greeting_audio.mp3", format="audio/mp3", loop=False, autoplay=False)
elif (country := open("country.txt").read().strip()) == "English":
url = "https://api.aiforthai.in.th/xiaofan-en-th/en2th"
payload = json.dumps({
"input": f"{text_var}"
})
headers = {
'apikey': 'T69FqnYgOdreO5G0nZaM8gHcjo1sifyU',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
st.write("English now is broken ⛓️💥")
with col2:
# Code in the left column
st.markdown("เลือกภาษาถิ่น
", unsafe_allow_html=True)
land = ["< โปรดเลือกภาษาถิ่นของคุณ >", "อีสาน", "เหนือ", "ใต้"]
selected_region = st.selectbox("Select Region:", land, index=0)
region_ports = {
"อีสาน": 27020,
"เหนือ": 27021,
"ใต้": 27022
}
def text_to_speech(text, filename="audio_file.mp3", speaker=1, language="th", volume=1, speed=1):
url = "https://api-voice.botnoi.ai/openapi/v1/generate_audio"
payload = {
"text": text,
"speaker": speaker,
"volume": volume,
"speed": speed,
"type_media": "mp3",
"save_file": "true",
"language": language
}
headers = {
'Botnoi-Token': 'ZHBaNlR4WEI3dWgyZGVRajRMaGt5S3NXeUVZMjU2MTg5NA==',
'Content-Type': 'application/json'
}
try:
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
data = response.json()
audio_url = data.get("audio_url")
if audio_url:
audio_response = requests.get(audio_url)
audio_response.raise_for_status()
with open(filename, "wb") as file:
file.write(audio_response.content)
print(f"Audio downloaded successfully as '{filename}'.")
else:
print("Audio URL not found in the response.")
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
config = configparser.ConfigParser()
config.read("config.ini")
new_port = str(region_ports.get(selected_region, config["DEFAULT"].get("_server_port", "27021")))
config["DEFAULT"]["_server_port"] = new_port
config["SERVER"]["_server_port"] = new_port
with open("config.ini", "w") as configfile:
config.write(configfile)
audio_value = st.audio_input("Record a voice message",key=2)
if audio_value is not None:
st.audio(audio_value)
audio_bytes = audio_value.getvalue()
file_path = "./recorded_audio.wav"
with open(file_path, "wb") as file:
file.write(audio_bytes)
audio = AudioSegment.from_wav(file_path)
audio = audio.set_frame_rate(16000).set_channels(1)
output_file = "recorded_audio.wav"
audio.export(output_file, format="wav")
st.success(f"Audio saved and modified as {output_file}")
command = ["python", "partii-client-process-wav-file.py", output_file, "T69FqnYgOdreO5G0nZaM8gHcjo1sifyU"]
result = subprocess.run(command, capture_output=True, text=True)
output_list = [line for line in result.stdout.strip().split('\n') if line.startswith("transcript")]
if (country := open("country.txt").read().strip()) == "English":
if output_list:
speech_t = output_list[-1].replace("transcript", "").strip()
st.write(f"Transcript: {speech_t}")
answer = textqa.generate(f'{selected_region} คำว่า "{speech_t}" แปลว่าอะไรภาษาไทย (ตอบแค่คำแปล)', return_json=False)
url = "https://api.aiforthai.in.th/xiaofan-en-th/th2en"
payload = json.dumps({"text": answer})
headers = {
'apikey': 'T69FqnYgOdreO5G0nZaM8gHcjo1sifyU',
'Content-Type': 'application/json'
}
response = requests.post(url, headers=headers, data=payload)
Outt = eval(response.text)["translated_text"]
text_to_speech(f'{Outt}', filename="greeting_audio.mp3", speaker=100, language="en")
st.audio("greeting_audio.mp3", format="audio/mp3", loop=False, autoplay=True)
else:
st.error("Failed to extract transcript.")
elif (country := open("country.txt").read().strip()) == "Chinese":
if output_list:
speech_t = output_list[-1].replace("transcript", "").strip()
st.write(f"Transcript: {speech_t}")
answer = textqa.generate(f'{selected_region} คำว่า "{speech_t}" แปลว่าอะไรภาษาไทย (ตอบแค่คำแปล)', return_json=False)
url = "https://api.aiforthai.in.th/xiaofan-zh-th"
payload = json.dumps({
"input": "ฉันจะซื้อคอมพิวเตอร์เครื่องใหม่ให้คุณ",
"src": "th",
"trg": "zh"
})
headers = {
'apikey': 'T69FqnYgOdreO5G0nZaM8gHcjo1sifyU',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
Outt = eval(response.text)["output"]
text_to_speech(f'{Outt}', filename="greeting_audio.mp3", speaker=60, language="zh")
st.audio("greeting_audio.mp3", format="audio/mp3", loop=False, autoplay=True)
else:
st.error("Failed to extract transcript.")
elif (country := open("country.txt").read().strip()) == "Thailand":
if output_list:
speech_t = output_list[-1].replace("transcript", "").strip()
st.write(f"Transcript: {speech_t}")
answer = textqa.generate(f'{selected_region} คำว่า "{speech_t}" แปลว่าอะไรภาษาไทย (ตอบแค่คำแปล)', return_json=False)
text_to_speech(f'{answer}', filename="greeting_audio.mp3", speaker=6, language="th")
st.audio("greeting_audio.mp3", format="audio/mp3", loop=False, autoplay=True)
else:
st.error("Failed to extract transcript.")
else:
st.warning("Please select your dialect before recording.")