import React, { useEffect, useRef, useState } from 'react'; import { Canvas, useFrame } from '@react-three/fiber'; import { OrbitControls } from '@react-three/drei'; import * as THREE from 'three'; // --- Komponen 3D: Biomechanical Audio Sphere --- function ResonanceSphere({ analyser }) { const meshRef = useRef(); const materialRef = useRef(); // Buffer untuk memuat data frekuensi audio const dataArray = useRef(new Uint8Array(64)); useFrame((state, delta) => { if (!meshRef.current || !analyser) return; // Menarik data frekuensi mutakhir (Real-Time) analyser.getByteFrequencyData(dataArray.current); // Hitung rata-rata frekuensi (Bass/Mid) untuk denyut ukuran let sum = 0; for (let i = 0; i < dataArray.current.length; i++) { sum += dataArray.current[i]; } const average = sum / dataArray.current.length; // Normalisasi skala denyut (Scale Pulsing) const scale = 1 + (average / 255) * 1.5; // Terapkan ke Mesh secara halus menggunakan Lerp meshRef.current.scale.lerp(new THREE.Vector3(scale, scale, scale), 0.2); // Rotasi konstan ala Sci-Fi meshRef.current.rotation.x += delta * 0.5; meshRef.current.rotation.y += delta * 0.8; // Reaktivitas Warna: Semakin keras, merah semakin meradang if (materialRef.current) { const redIntensity = average / 255; materialRef.current.emissive.setRGB(redIntensity + 0.2, 0, 0); materialRef.current.emissiveIntensity = 1 + (redIntensity * 3); } }); return ( ); } export default function M44ResonanceAudio() { const [engineStatus, setEngineStatus] = useState('OFFLINE'); const [bitrate, setBitrate] = useState('0 kbps'); const audioContextRef = useRef(null); const analyserRef = useRef(null); const mediaStreamRef = useRef(null); const sourceRef = useRef(null); useEffect(() => { setEngineStatus('BOOTING RESONANCE...'); async function initAudio() { try { if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) { throw new Error("Web Audio API / MediaDevices tidak didukung."); } const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: false }); mediaStreamRef.current = stream; // Inisialisasi Kuantum Audio Engine audioContextRef.current = new (window.AudioContext || window.webkitAudioContext)(); analyserRef.current = audioContextRef.current.createAnalyser(); // Konfigurasi presisi pembedahan frekuensi analyserRef.current.fftSize = 128; // Ringan namun cukup detail untuk visual analyserRef.current.smoothingTimeConstant = 0.8; sourceRef.current = audioContextRef.current.createMediaStreamSource(stream); sourceRef.current.connect(analyserRef.current); setEngineStatus('VOCAL TRACT SYNTHESIS ENGAGED'); // Simulasi kalkulasi ekstrim ke 3kbps (menyesuaikan frekuensi suara) setInterval(() => { if(analyserRef.current) { const data = new Uint8Array(analyserRef.current.frequencyBinCount); analyserRef.current.getByteFrequencyData(data); let activity = data.reduce((a,b)=>a+b, 0); if(activity > 500) { setBitrate((2.5 + Math.random()).toFixed(2) + ' kbps'); } else { setBitrate('0.00 kbps (VAD Active)'); } } }, 500); } catch (err) { console.error("Resonance Audio Error:", err); setEngineStatus('MICROPHONE ACCESS DENIED'); } } initAudio(); return () => { // Protokol Pembersihan Memori (Zero Error) if (mediaStreamRef.current) { mediaStreamRef.current.getTracks().forEach(track => track.stop()); } if (audioContextRef.current && audioContextRef.current.state !== 'closed') { audioContextRef.current.close(); } }; }, []); return (
{/* UI Overlay */}

M44: The Resonance Matrix

Biomechanical Vocal Tract Synthesis. Bypassing Opus codec.
SYNTHESIS STATUS
{engineStatus}
{/* 3D WebGL Audio Environment */}
{/* Holographic grid UI overlay */}
VOCAL TENSION: DYNAMIC
CODEC: RESONANCE WASM (PHASE 44)
REAL-TIME BITRATE: {bitrate}
); }