def analyze_user_rec(): """Analyze the user's recording, save the audio data and pitch data to database, and send pitch data back to page.""" # cut off first 22 chars ("data:audio/wav;base64,") user_b64 = request.form.get("user_rec")[22:] user_wav = base64.b64decode(user_b64) user_recording_path = os.path.abspath('./sounds/user-rec.wav') with open(user_recording_path, 'wb') as f: f.write(user_wav) user_pitch_data = analyze_pitch(user_recording_path) # store audio data (user_b64) and user_pitch_data in db ex_id = request.form.get("ex_id") attempts = Recording.query.filter_by(ex_id=ex_id).all() if attempts: attempt_num = max(attempt.attempt_num for attempt in attempts) + 1 else: attempt_num = 1 new_rec = Recording(ex_id=ex_id, attempt_num=attempt_num, audio_data=user_b64, pitch_data=user_pitch_data) db.session.add(new_rec) db.session.commit() return jsonify(attempt=new_rec.serialize())
def analyze_user_rec(): """Analyze the user's recording, save audio data and pitch data to the database if they're logged in, and send pitch data back to page.""" ex_id = request.form.get("ex_id") # cut off first 22 chars ("data:audio/wav;base64,") user_b64 = request.form.get("user_rec")[22:] user_wav = base64.b64decode(user_b64) user_recording_path = os.path.abspath('./static/sounds/user-rec-' + str(uuid.uuid4()) + '.wav') with open(user_recording_path, 'wb') as f: f.write(user_wav) user_pitch_data = analyze_pitch(user_recording_path) os.remove(user_recording_path) attempt = {} if 'user_id' in session: attempts = Recording.query.filter_by(user_id=session['user_id'], ex_id=ex_id).all() attempt_num = 1 if attempts: attempt_num += max(attempt.attempt_num for attempt in attempts) new_rec = Recording(user_id=session['user_id'], ex_id=ex_id, attempt_num=attempt_num, audio_data=user_b64, pitch_data=user_pitch_data, created_at=datetime.datetime.now()) db.session.add(new_rec) db.session.commit() attempt = new_rec.serialize() else: attempt = { "ex_id": ex_id, "audio_data": user_b64, "pitch_data": json.loads(user_pitch_data) } return jsonify(attempt=attempt)