File size: 2,520 Bytes
b5a0b86
29f9ef3
 
df19981
 
 
29f9ef3
 
 
f3e5312
29f9ef3
f3e5312
29f9ef3
b5a0b86
29f9ef3
f3e5312
 
a2ae10d
b5a0b86
a2ae10d
f3e5312
 
6ffdbaf
2a860fb
 
f3e5312
29f9ef3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f3e5312
29f9ef3
 
 
 
 
 
 
 
 
df19981
 
 
 
 
 
 
 
 
 
29f9ef3
 
df19981
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from flask import Flask, request, jsonify, render_template
import base64
import os
import string
import random
from datetime import datetime

app = Flask(__name__)

# トップページ(GET/POSTどちらにも対応)
@app.route('/')
@app.route('/index', methods=['GET', 'POST'])
def index():
    return render_template('index.html')

# フィードバック画面(GET/POSTどちらにも対応)
@app.route('/feedback', methods=['GET', 'POST'])
def feedback():
    return render_template("feedback.html")

# 会話詳細画面(GET/POSTどちらにも対応)
@app.route('/talk_detail', methods=['GET', 'POST'])
def talk_detail():
    return render_template("talkDetail.html")

# 音声データアップロード用エンドポイント
@app.route('/upload_audio', methods=['POST'])
def upload_audio():
    try:
        data = request.get_json()
        if not data:
            return jsonify({"error": "JSONが送信されていません"}), 400

        audio_data = data.get('audio_data')
        if not audio_data:
            return jsonify({"error": "音声データが送信されていません"}), 400

        # Base64デコード
        try:
            audio_binary = base64.b64decode(audio_data)
        except Exception as decode_err:
            return jsonify({"error": "Base64デコードに失敗しました", "details": str(decode_err)}), 400

        # 書き込み用ディレクトリとして /tmp/data を使用(/tmp は書き込み可能)
        persist_dir = "/tmp/data"
        os.makedirs(persist_dir, exist_ok=True)

        filepath = os.path.join(persist_dir, generate_filename(6))  # ここだけ変更しました
        with open(filepath, 'wb') as f:
            f.write(audio_binary)

        return jsonify({"message": "音声が正常に保存されました", "filepath": filepath}), 200

    except Exception as e:
        app.logger.error("エラー: %s", str(e))
        return jsonify({"error": "サーバー内部エラー", "details": str(e)}), 500

def generate_random_string(length):
    letters = string.ascii_letters + string.digits
    return ''.join(random.choice(letters) for i in range(length))

def generate_filename(random_length):
    random_string = generate_random_string(random_length)
    current_time = datetime.now().strftime("%Y%m%d%H%M%S")
    filename = f"{current_time}_{random_string}.wav"
    return filename

if __name__ == '__main__':
    port = int(os.environ.get("PORT", 7860))
    app.run(debug=True, host="0.0.0.0", port=port)