MatrixCoder0101 commited on
Commit
41964f0
·
1 Parent(s): 8b2f773

Add application file

Browse files
Files changed (3) hide show
  1. Dockerfile +16 -0
  2. app.py +72 -0
  3. requirements.txt +3 -0
Dockerfile ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.9-slim
2
+
3
+ WORKDIR /app
4
+
5
+ # ffmpeg install karo — pydub ke liye zaroori
6
+ RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/*
7
+
8
+ COPY requirements.txt .
9
+ RUN pip install --no-cache-dir -r requirements.txt
10
+
11
+ COPY app.py ./
12
+
13
+ EXPOSE 7860
14
+ ENV FLASK_APP=app.py
15
+
16
+ CMD ["python", "app.py"]
app.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, send_file
2
+ import os
3
+ from gtts import gTTS
4
+ from pydub import AudioSegment
5
+
6
+ app = Flask(__name__)
7
+
8
+ BASE_DIR = os.path.dirname(os.path.abspath(__file__))
9
+ TMP_DIR = os.path.join(BASE_DIR, "tts_tmp")
10
+ os.makedirs(TMP_DIR, exist_ok=True)
11
+
12
+
13
+ def text_to_wav(text, lang, wav_path):
14
+ mp3_path = os.path.join(TMP_DIR, "temp.mp3")
15
+
16
+ # gTTS se MP3
17
+ tts = gTTS(text, lang=lang)
18
+ tts.save(mp3_path)
19
+ print(f"[gTTS] MP3 ready")
20
+
21
+ # pydub se convert — 44100Hz, Stereo, 16-bit (original jaisa exactly)
22
+ audio = AudioSegment.from_mp3(mp3_path)
23
+ audio = audio.set_frame_rate(44100).set_channels(2).set_sample_width(2)
24
+ audio.export(wav_path, format="wav")
25
+ print(f"[WAV] 44100Hz Stereo 16-bit ready")
26
+
27
+ if os.path.exists(mp3_path):
28
+ os.remove(mp3_path)
29
+
30
+ return wav_path
31
+
32
+
33
+ @app.route("/tts", methods=["GET"])
34
+ def tts_get():
35
+ text = request.args.get("text", "Hello")
36
+ lang = request.args.get("lang", "en")
37
+ print(f"\n[TTS] Text: \"{text}\" | Lang: {lang}")
38
+
39
+ wav_path = os.path.join(TMP_DIR, "response.wav")
40
+ try:
41
+ text_to_wav(text, lang, wav_path)
42
+ except Exception as e:
43
+ print(f"[ERROR] {e}")
44
+ return f"Error: {e}", 500
45
+
46
+ return send_file(wav_path, mimetype="audio/wav")
47
+
48
+
49
+ @app.route("/tts", methods=["POST"])
50
+ def tts_post():
51
+ data = request.get_json(silent=True) or {}
52
+ text = data.get("text", "Hello")
53
+ lang = data.get("lang", "en")
54
+ print(f"\n[TTS] Text: \"{text}\" | Lang: {lang}")
55
+
56
+ wav_path = os.path.join(TMP_DIR, "response.wav")
57
+ try:
58
+ text_to_wav(text, lang, wav_path)
59
+ except Exception as e:
60
+ print(f"[ERROR] {e}")
61
+ return f"Error: {e}", 500
62
+
63
+ return send_file(wav_path, mimetype="audio/wav")
64
+
65
+
66
+ @app.route("/ping")
67
+ def ping():
68
+ return {"status": "ok", "server": "ESP32 TTS Server"}
69
+
70
+
71
+ if __name__ == "__main__":
72
+ app.run(host="0.0.0.0", port=7860, debug=False)
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ flask
2
+ gtts
3
+ pydub