Application avec interface fonctionnelle pour audio et video
This commit is contained in:
parent
cb0fd97661
commit
cf042571d0
2 changed files with 117 additions and 2 deletions
115
main.py
115
main.py
|
@ -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():
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
streamlit~=1.20.0
|
||||
streamlit~=1.20.0
|
||||
requests~=2.28.2
|
||||
pydantic~=1.10.7
|
Loading…
Reference in a new issue