Ejemplo n.º 1
0
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())
Ejemplo n.º 2
0
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)