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) @record_bp.route('/upload_audio', methods=['POST']) 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