Spaces:
Running
Running
from flask import Blueprint, request, jsonify | |
import os | |
import base64 | |
from pydub import AudioSegment | |
record_bp = Blueprint('record', __name__) | |
# 録音データの保存先ディレクトリ | |
record_data_dir = "record_data" | |
os.makedirs(record_data_dir, exist_ok=True) | |
def upload_audio(): | |
try: | |
data = request.get_json() | |
if not data or 'audio_data' not in data or 'user_name' not in data: | |
return jsonify({"error": "音声データまたはユーザー名がありません"}), 400 | |
user_name = data['user_name'].replace(" ", "_") # 空白をアンダースコアに変換 | |
audio_binary = base64.b64decode(data['audio_data']) | |
# 保存先のファイルパス | |
audio_path = os.path.join(record_data_dir, f"{user_name}.wav") | |
# 一時ファイルとして保存 | |
temp_audio_path = os.path.join(record_data_dir, "temp_audio") | |
with open(temp_audio_path, 'wb') as f: | |
f.write(audio_binary) | |
# pydub を使って WAV に変換 | |
try: | |
audio = AudioSegment.from_file(temp_audio_path, format="webm") | |
except Exception: | |
audio = AudioSegment.from_file(temp_audio_path) | |
audio.export(audio_path, format="wav") | |
os.remove(temp_audio_path) | |
return jsonify({"success": True, "message": f"音声が {audio_path} に保存されました"}), 200 | |
except Exception as e: | |
print("Error in /upload_audio:", str(e)) | |
return jsonify({"error": "サーバーエラー", "details": str(e)}), 500 | |