diff --git a/backend/app.py b/backend/app.py new file mode 100644 index 0000000..9d7d9bf --- /dev/null +++ b/backend/app.py @@ -0,0 +1,49 @@ +from flask import Flask, render_template, request, jsonify + +app = Flask(__name__) + +# Datos de ejemplo (reemplaza con una base de datos) +datos = { + "Línea 1": [ + "Zafra", "Julio Caro Baroja (Aqualon)", "Avda. Alemania (Esquina Ruiz de Alda)", + "Avda. Alemania (Plaza de Toros)", "Bda. Navidad", "Don Bosco", + "Plaza de los Dolores", "Barriada del Carmen", "Humilladero", "Cardeñas", + "Orden Baja", "Gonzalo de Berceo", "Plaza Niño Miguel", "Magnolia", + "Hospital JRJ", "Plaza las Amapolas", "Av. Andalucia (Castaño Robledo)", + "Monumento al Fútbol", "Relaciones Laborales (Universidad)", + "Vista Alegre-Universidad", "Centro Comercial Holea", "Cruce Romeralejo", + "Universidad. Avenida de las Artes", "Palacio de Deportes", + "Higueral (Fuerzas Armadas)", "Bda. José Antonio", "Isla Chica", + "Las Delicias", "El Árbol", "Gasolinera", "Estación de Ferrocarril", + "El punto", "Estación de Sevilla", "Nuevo Mercado" + ], + "Línea 2": [ + "Zafra", "Nuevo Mercado", "Villa de Madrid", "Avenida Italia", + "Estación de Sevilla", "El Punto", "Estación de Ferrocarril", "Juzgados", + "Barrio Obrero", "El Porvenir", "Las Delicias", "Isla Chica", + "Bda, José Antonio", "Fuerzas Armadas Los Rosales", "Palacio de Deporte", + "Ciencias de la Educación (Universidad)", "Biblioteca (Universidad)", + "Monumento al Fútbol", "Relaciones Laborales (Universidad)", + "Vista Alegre-Universidad", "Centro Comercial Holea", "Plaza las Amapolas", + "Hospital JRJ", "Magnolia", "Orden Alta", "Gonzalo de Berceo (Alto)", + "Gonzalo de Berceo (Bajo)", "Orden Baja", "Legión Española", "Cardeñas", + "Humilladero", "Bda. del Carmen", "Santa Lucía", "Santa Eulalia", + "Bda. Navidad", "Molino de la Vega", "Paseo de las Palmeras", + "Julio Caro Baroja (Aqualon)" + ], + "Línea 131": ["Puente de Vallecas"] +} + +@app.route("/") +def index(): + return render_template("index.html", datos=datos) + +@app.route("/paradas") +def obtener_paradas(): + linea = request.args.get("linea") + if linea and linea in datos: + return jsonify(datos[linea]) + return jsonify([]) + +if __name__ == "__main__": + app.run(debug=True) \ No newline at end of file diff --git a/public/audio/1-gonzalo_de_berceo.wav b/public/audio/1-gonzalo_de_berceo.wav index 5ff4f42..3f4df9a 100644 Binary files a/public/audio/1-gonzalo_de_berceo.wav and b/public/audio/1-gonzalo_de_berceo.wav differ diff --git a/public/audio/1-plaza_nino_miguel.wav b/public/audio/1-plaza_niño_miguel.wav similarity index 100% rename from public/audio/1-plaza_nino_miguel.wav rename to public/audio/1-plaza_niño_miguel.wav diff --git a/public/audio/T32-profesor_raúl_vázquez.wav b/public/audio/T32-profesor_raúl_vázquez.wav new file mode 100644 index 0000000..0073613 Binary files /dev/null and b/public/audio/T32-profesor_raúl_vázquez.wav differ diff --git a/public/audio/atencion_a_su_saldo.mp3 b/public/audio/atencion_a_su_saldo.mp3 new file mode 100644 index 0000000..517c321 Binary files /dev/null and b/public/audio/atencion_a_su_saldo.mp3 differ diff --git a/public/audio/hora_de_salida.mp3 b/public/audio/hora_de_salida.mp3 new file mode 100644 index 0000000..f8d16e7 Binary files /dev/null and b/public/audio/hora_de_salida.mp3 differ diff --git a/public/audio/saldo_insuficiente.mp3 b/public/audio/saldo_insuficiente.mp3 new file mode 100644 index 0000000..75c0ea4 Binary files /dev/null and b/public/audio/saldo_insuficiente.mp3 differ diff --git a/src/App.js b/src/App.js index f905ff2..60f0377 100644 --- a/src/App.js +++ b/src/App.js @@ -10,6 +10,7 @@ function App() { const [volume, setVolume] = useState(1); const audioRef = useRef(null); const [theme, setTheme] = useState('light'); + const [playing, setPlaying] = useState(false); const datos = { "Línea 1": [ @@ -39,9 +40,9 @@ function App() { "Bda. Navidad", "Molino de la Vega", "Paseo de las Palmeras", "Julio Caro Baroja (Aqualon)" ], - "Línea 131": ["Puente de Vallecas"] + "Línea 131": ["Puente de Vallecas"], + "Línea T32": ["Profesor Raúl Vázquez"] }; - const handleLineaChange = (event) => { setLineaSeleccionada(event.target.value); setParadaSeleccionada(''); @@ -63,21 +64,27 @@ function App() { }; const reproducirAudio = () => { - if (audio) { + if (audio && playing) { audio.pause(); - } - - if (lineaSeleccionada && paradaSeleccionada) { + setPlaying(false); + } else if (lineaSeleccionada && paradaSeleccionada) { const playAudio = (audioFile) => { const nuevoAudio = new Audio(audioFile); nuevoAudio.play().catch(error => { console.error("Error al reproducir audio:", error); }); + + nuevoAudio.onended = () => { + setPlaying(false); + }; + return nuevoAudio; }; + const lineaSinEspacios = lineaSeleccionada.split(" ")[1] || lineaSeleccionada.split(" ")[0]; + if (tipoParada === "noUsar") { - let paradaAudioFile = `/audio/${lineaSeleccionada.split(" ")[1]}-${paradaSeleccionada.toLowerCase().replace(/ /g, "_")}.wav`; + let paradaAudioFile = `/audio/${lineaSinEspacios}-${paradaSeleccionada.toLowerCase().replace(/ /g, "_")}.wav`; const paradaAudio = playAudio(paradaAudioFile); setAudio(paradaAudio); audioRef.current = paradaAudio; @@ -89,19 +96,21 @@ function App() { paradaTipoAudio.volume = volume; paradaTipoAudio.onended = () => { - let paradaAudioFile = `/audio/${lineaSeleccionada.split(" ")[1]}-${paradaSeleccionada.toLowerCase().replace(/ /g, "_")}.wav`; + let paradaAudioFile = `/audio/${lineaSinEspacios}-${paradaSeleccionada.toLowerCase().replace(/ /g, "_")}.wav`; const paradaAudio = playAudio(paradaAudioFile); setAudio(paradaAudio); audioRef.current = paradaAudio; paradaAudio.volume = volume; }; } + setPlaying(true); } else { console.log("Por favor, selecciona una línea y una parada."); alert("Para reproducir el audio, selecciona una línea y una parada."); } }; + const reproducirColision = () => { const audioColision = new Audio('/audio/colision.wav'); audioColision.play().catch(error => { @@ -116,7 +125,8 @@ function App() { for (const linea in datos) { datos[linea].forEach(parada => { - const audio = new Audio(`/audio/${parada.toLowerCase().replace(/ /g, "_")}.wav`); + const lineaSinEspacios = linea.split(" ")[1] || linea.split(" ")[0]; + const audio = new Audio(`/audio/${lineaSinEspacios}-${parada.toLowerCase().replace(/ /g, "_")}.wav`); }); } @@ -137,85 +147,96 @@ function App() { setTheme(theme === 'light' ? 'dark' : 'light'); }; + const reproducirCanceladora = (audioNombre) => { + const audioCanceladora = new Audio(`/audio/${audioNombre}.mp3`); + audioCanceladora.play().catch(error => { + console.error("Error al reproducir audio:", error); + }); + }; + return ( -
-

Aplicación de Megafonía

+
+

Aplicación de Megafonía

-
- - +
+
+
+ + +
+ +
+ + +
+
-
- - +
+
hora_de_salida.wav +
+
+ + + +
+
+ +
+ + +
+
-
- - - +
+ + +
-
- - + +
+
+
Canceladora
+
+ + + +
+
- - -
); }