diff --git a/checkpoint.py b/checkpoint.py index 1c6e878..2b6b068 100644 --- a/checkpoint.py +++ b/checkpoint.py @@ -219,3 +219,280 @@ def restore( if params_only: state = state.params return state +import React from "react"; +import { Canvas } from "@react-three/fiber"; +import { OrbitControls, Stars } from "@react-three/drei"; +import { useState, useEffect } from "react"; +import * as THREE from "three"; + +const LumoraCity = () => { + const [frequencyData, setFrequencyData] = useState([]); + + useEffect(() => { + const analyser = new (window.AudioContext || window.webkitAudioContext)(); + navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => { + const source = analyser.createMediaStreamSource(stream); + const analyserNode = analyser.createAnalyser(); + source.connect(analyserNode); + analyserNode.fftSize = 256; + const bufferLength = analyserNode.frequencyBinCount; + const dataArray = new Uint8Array(bufferLength); + + const updateFrequency = () => { + analyserNode.getByteFrequencyData(dataArray); + setFrequencyData([...dataArray]); + requestAnimationFrame(updateFrequency); + }; + + updateFrequency(); + }); + }, []); + + return ( + + + + + + {frequencyData.map((freq, index) => ( + + + + + ))} + + ); +}; + +export default LumoraCity; +import React from "react"; +import { Canvas } from "@react-three/fiber"; +import { OrbitControls, Stars } from "@react-three/drei"; +import { useState, useEffect } from "react"; +import * as THREE from "three"; +import { VRButton } from "@react-three/xr"; +import { XR } from "@react-three/xr"; + +const LumoraCity = () => { + const [frequencyData, setFrequencyData] = useState([]); + + useEffect(() => { + const analyser = new (window.AudioContext || window.webkitAudioContext)(); + navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => { + const source = analyser.createMediaStreamSource(stream); + const analyserNode = analyser.createAnalyser(); + source.connect(analyserNode); + analyserNode.fftSize = 256; + const bufferLength = analyserNode.frequencyBinCount; + const dataArray = new Uint8Array(bufferLength); + + const updateFrequency = () => { + analyserNode.getByteFrequencyData(dataArray); + setFrequencyData([...dataArray]); + requestAnimationFrame(updateFrequency); + }; + + updateFrequency(); + }); + }, []); + + return ( + <> + + + + + + + + {frequencyData.map((freq, index) => ( + + + + + ))} + + + + ); +}; + +export default LumoraCity; +import React, { useState, useEffect } from "react"; +import { Canvas } from "@react-three/fiber"; +import { OrbitControls, Stars, Html } from "@react-three/drei"; +import * as THREE from "three"; +import { VRButton } from "@react-three/xr"; +import { XR } from "@react-three/xr"; + +const AIHelper = ({ position, text }) => { + return ( + + + + +
+ {text} +
+ +
+ ); +}; + +const LumoraCity = () => { + const [frequencyData, setFrequencyData] = useState([]); + const [aiMessage, setAiMessage] = useState("Bienvenue à Lumora. Parle, et la ville écoutera."); + + useEffect(() => { + const analyser = new (window.AudioContext || window.webkitAudioContext)(); + navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => { + const source = analyser.createMediaStreamSource(stream); + const analyserNode = analyser.createAnalyser(); + source.connect(analyserNode); + analyserNode.fftSize = 256; + const bufferLength = analyserNode.frequencyBinCount; + const dataArray = new Uint8Array(bufferLength); + + const updateFrequency = () => { + analyserNode.getByteFrequencyData(dataArray); + setFrequencyData([...dataArray]); + + const avgFreq = dataArray.reduce((sum, val) => sum + val, 0) / dataArray.length; + if (avgFreq > 100) { + setAiMessage("Les vibrations sont fortes. Lumora répond."); + } else { + setAiMessage("Le silence est aussi une réponse. Écoute."); + } + + requestAnimationFrame(updateFrequency); + }; + + updateFrequency(); + }); + }, []); + + return ( + <> + + + + + + + + + {frequencyData.map((freq, index) => ( + + + + + ))} + + + + ); +}; + +export default LumoraCity; +import React, { useState, useEffect } from "react"; +import { Canvas } from "@react-three/fiber"; +import { OrbitControls, Stars, Html } from "@react-three/drei"; +import * as THREE from "three"; +import { VRButton } from "@react-three/xr"; +import { XR } from "@react-three/xr"; + +const AIHelper = ({ position, text }) => { + return ( + + + + +
+ {text} +
+ +
+ ); +}; + +const Pathway = ({ points }) => { + return ( + + {points.map((point, index) => ( + + + + + ))} + + ); +}; + +const LumoraCity = () => { + const [frequencyData, setFrequencyData] = useState([]); + const [aiMessage, setAiMessage] = useState("Bienvenue à Lumora. Parle, et la ville écoutera."); + const pathwayPoints = [ + [0, 0, -5], [1, 0, -4], [2, 0, -3], [3, 0, -2], [4, 0, -1], + [5, 0, 0], [4, 0, 1], [3, 0, 2], [2, 0, 3], [1, 0, 4], [0, 0, 5] + ]; + + useEffect(() => { + const analyser = new (window.AudioContext || window.webkitAudioContext)(); + navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => { + const source = analyser.createMediaStreamSource(stream); + const analyserNode = analyser.createAnalyser(); + source.connect(analyserNode); + analyserNode.fftSize = 256; + const bufferLength = analyserNode.frequencyBinCount; + const dataArray = new Uint8Array(bufferLength); + + const updateFrequency = () => { + analyserNode.getByteFrequencyData(dataArray); + setFrequencyData([...dataArray]); + + const avgFreq = dataArray.reduce((sum, val) => sum + val, 0) / dataArray.length; + if (avgFreq > 100) { + setAiMessage("Les vibrations sont fortes. Lumora répond."); + } else { + setAiMessage("Le silence est aussi une réponse. Écoute."); + } + + requestAnimationFrame(updateFrequency); + }; + + updateFrequency(); + }); + }, []); + + return ( + <> + + + + + + + + + + {frequencyData.map((freq, index) => ( + + + + + ))} + + + + ); +}; + +export default LumoraCity;