Application avec interface fonctionnelle pour audio et video

This commit is contained in:
Francois Pelletier 2023-04-02 12:15:33 -04:00
parent cb0fd97661
commit cf042571d0
2 changed files with 117 additions and 2 deletions

115
main.py
View file

@ -1,4 +1,4 @@
import requests
# Copyright (C) 2023 François Pelletier - Je valide ça, service-conseil
#
# Licensed under the Apache License, Version 2.0 (the "License");
@ -14,11 +14,124 @@
# limitations under the License.
import streamlit as st
from pydantic import BaseModel
BACKEND_URL = "http://localhost:8000"
class AudioProperties(BaseModel):
"""
Audio properties
"""
main_frequency: int
lag_frequency: int
volume: float
breath_pattern_in: int
breath_pattern_out: int
bell_sound: str
class VideoProperties(BaseModel):
"""
Video properties
"""
main_frequency: int
breath_pattern_in: int
breath_pattern_out: int
color_scheme = str
def write_app():
st.title("Audio Respiration")
st.write("Cette application permet de générer des visualisation avec audio pour rythmer la respiration")
# Select main_frequency with a slider from 30 to 3000
main_frequency = st.sidebar.slider(
"Choisissez la fréquence de la portion gauche",
min_value=30,
max_value=3000,
value=3000,
step=10
)
# Select lag_frequency with a slider from 30 to 3000
lag_frequency = st.sidebar.slider(
"Choisissez la fréquence de la portion droite",
min_value=main_frequency - 100,
max_value=main_frequency + 100,
value=main_frequency,
step=1
)
# Select volume from 0 to 1 by 0.01 increments
volume = st.sidebar.slider(
"Choisissez le volume",
min_value=0.0,
max_value=1.0,
value=0.01,
step=0.01
)
# Select length of breathing in seconds with a slider from 0 to 30
breath_pattern_in = st.sidebar.slider(
"Choisissez la durée d'inspiration",
min_value=0,
max_value=30,
value=4,
step=1
)
# Select length of breathing out seconds with a slider from 0 to 30
breath_pattern_out = st.sidebar.slider(
"Choisissez la durée d'expiration",
min_value=0,
max_value=30,
value=4,
step=1
)
# Choisir le son de cloche parmi une liste
bell_sound = st.sidebar.selectbox(
"Choisissez le son de cloche",
options=["Cloche", "Bol tibétain"]
)
# Choisir la couleur principale de la visualisation
color_scheme = st.sidebar.selectbox(
"Choisissez la couleur principale de la visualisation",
options=["Rouge", "Orange", "Jaune", "Vert", "Bleu", "Indigo", "Violet"]
)
# Bouton pour générer l'audio
generate_audio = st.sidebar.button("Générer l'audio")
if generate_audio:
ap = AudioProperties(
main_frequency=main_frequency,
lag_frequency=lag_frequency,
volume=volume,
breath_pattern_in=breath_pattern_in,
breath_pattern_out=breath_pattern_out,
bell_sound=bell_sound
)
audio_response = requests.get(
BACKEND_URL + "/generate_audio",
json=ap.dict(),
headers={"Content-Type": "application/json"})
st.write(audio_response.reason)
# Save the generated audio to a file
with open("audio.wav", "wb") as audio_file:
audio_file.write(audio_response.content)
st.audio("audio.wav")
generate_video = st.sidebar.button("Générer la vidéo")
if generate_video:
vp = VideoProperties(
main_frequency=main_frequency,
breath_pattern_in=breath_pattern_in,
breath_pattern_out=breath_pattern_out,
color_scheme=color_scheme
)
video_response = requests.get(
BACKEND_URL + "/generate_video",
json=vp.dict(),
headers={"Content-Type": "application/json"})
st.write(video_response.reason)
# Save the generated video to a file
with open("video.gif", "wb") as video_file:
video_file.write(video_response.content)
st.image("video.gif")
st.sidebar.write("App réalisé par François Pelletier")
def main():

View file

@ -1 +1,3 @@
streamlit~=1.20.0
streamlit~=1.20.0
requests~=2.28.2
pydantic~=1.10.7