• 23-04-2026, 15:32:22
    #1
    <!DOCTYPE html>
    <html lang="tr">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>O Ses Türkiye Simülatörü</title>
        <style>
            body {
                font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
                background-color: #111;
                color: white;
                text-align: center;
                margin: 0;
                padding: 20px;
                overflow-x: hidden;
            }
    
            h1 {
                color: #e50914;
                text-transform: uppercase;
                letter-spacing: 2px;
                text-shadow: 0 0 10px rgba(229, 9, 20, 0.5);
            }
    
            .jury-container {
                display: flex;
                justify-content: center;
                gap: 20px;
                margin-top: 50px;
                flex-wrap: wrap;
                perspective: 1000px;
            }
    
            .chair {
                width: 120px;
                height: 160px;
                background-color: #333;
                border: 5px solid #555;
                border-radius: 10px;
                display: flex;
                flex-direction: column;
                align-items: center;
                justify-content: center;
                font-weight: bold;
                font-size: 1.2rem;
                transition: all 0.8s cubic-bezier(0.25, 0.8, 0.25, 1);
                box-shadow: 0 10px 20px rgba(0,0,0,0.5);
                position: relative;
            }
    
            .chair::after {
                content: "O SES";
                position: absolute;
                bottom: 10px;
                font-size: 0.8rem;
                color: #888;
            }
    
            /* Jüri döndüğünde uygulanacak sınıf */
            .chair.turned {
                background-color: #e50914;
                border-color: #ff3333;
                transform: rotateY(180deg);
                box-shadow: 0 0 30px rgba(229, 9, 20, 0.8);
            }
    
            .chair.turned .name, 
            .chair.selected .name {
                transform: rotateY(180deg);
            }
            
            .chair.turned::after {
                content: "SANA DÖNDÜ";
                color: white;
                transform: rotateY(180deg);
            }
    
            /* Jüri seçilebilir olduğunda */
            .chair.choosable {
                cursor: pointer;
                animation: pulse 1.5s infinite;
            }
    
            .chair.choosable:hover {
                transform: rotateY(180deg) scale(1.05);
                border-color: #fff;
            }
    
            /* Kullanıcı jüriyi seçtiğinde */
            .chair.selected {
                background-color: #28a745;
                border-color: #1e7e34;
                transform: rotateY(180deg) scale(1.1);
                box-shadow: 0 0 40px rgba(40, 167, 69, 0.9);
                z-index: 10;
            }
    
            .chair.selected::after {
                content: "TAKIMINDASIN";
                color: white;
                transform: rotateY(180deg);
                font-size: 0.7rem;
            }
    
            /* Seçilmeyen jüriler kararır */
            .chair.not-selected {
                opacity: 0.4;
                transform: rotateY(180deg) scale(0.9);
            }
    
            @keyframes pulse {
                0% { box-shadow: 0 0 20px rgba(229, 9, 20, 0.6); }
                50% { box-shadow: 0 0 40px rgba(229, 9, 20, 1); }
                100% { box-shadow: 0 0 20px rgba(229, 9, 20, 0.6); }
            }
    
            .stage {
                margin-top: 60px;
                padding: 30px;
                background: radial-gradient(circle, #2a2a2a 0%, #111 70%);
                border-radius: 50%;
                display: inline-block;
                box-shadow: 0 0 50px rgba(255, 255, 255, 0.1);
            }
    
            button {
                background-color: #e50914;
                color: white;
                border: none;
                padding: 15px 30px;
                font-size: 1.2rem;
                border-radius: 50px;
                cursor: pointer;
                font-weight: bold;
                transition: 0.3s;
                margin: 10px;
                box-shadow: 0 5px 15px rgba(229, 9, 20, 0.4);
            }
    
            button:hover {
                background-color: #ff1a1a;
                transform: scale(1.05);
            }
    
            button:disabled {
                background-color: #555;
                cursor: not-allowed;
                transform: none;
                box-shadow: none;
            }
    
            canvas {
                display: block;
                margin: 20px auto;
                background-color: #000;
                border-radius: 10px;
                border: 2px solid #333;
            }
    
            #feedback {
                margin-top: 30px;
                font-size: 1.3rem;
                min-height: 60px;
                line-height: 1.5;
                color: #ddd;
            }
        </style>
    </head>
    <body>
    
        <h1>O Ses Simülatörü</h1>
        <p>Mikrofon izni ver, sahnede şarkını söyle ve jürileri etkile!</p>
    
        <div class="jury-container">
            <div class="chair" id="jury1" data-name="Muro"><span class="name">Muro</span></div>
            <div class="chair" id="jury2" data-name="Hado"><span class="name">Hado</span></div>
            <div class="chair" id="jury3" data-name="Ebo"><span class="name">Ebo</span></div>
            <div class="chair" id="jury4" data-name="Beyo"><span class="name">Beyo</span></div>
        </div>
    
        <div class="stage">
            <canvas id="visualizer" width="300" height="100"></canvas>
            <button id="startBtn">🎤 Şarkıya Başla</button>
            <button id="stopBtn" disabled>⏹️ Performansı Bitir</button>
        </div>
    
        <div id="feedback">Sahnede yerini al ve şarkıya başla...</div>
    
        <script>
            let audioContext;
            let analyser;
            let microphone;
            let animationId;
            let isRecording = false;
    
            // Ses seviyesi ölçümü için değişkenler
            let totalVolume = 0;
            let volumeChecks = 0;
    
            const startBtn = document.getElementById('startBtn');
            const stopBtn = document.getElementById('stopBtn');
            const canvas = document.getElementById('visualizer');
            const ctx = canvas.getContext('2d');
            const feedback = document.getElementById('feedback');
            const chairs = document.querySelectorAll('.chair');
    
            // Mikrofonu başlat ve sesi görselleştir
            async function startPerformance() {
                try {
                    const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
                    audioContext = new (window.AudioContext || window.webkitAudioContext)();
                    analyser = audioContext.createAnalyser();
                    microphone = audioContext.createMediaStreamSource(stream);
                    
                    microphone.connect(analyser);
                    analyser.fftSize = 256;
                    const bufferLength = analyser.frequencyBinCount;
                    const dataArray = new Uint8Array(bufferLength);
    
                    isRecording = true;
                    totalVolume = 0;
                    volumeChecks = 0;
    
                    startBtn.disabled = true;
                    stopBtn.disabled = false;
                    feedback.innerHTML = "Harika söylüyorsun! Ses dalgaların ekranda...<br><em>Ne kadar güçlü söylersen dönme ihtimalleri o kadar artar!</em>";
                    
                    // Jürileri ve tıklama olaylarını sıfırla
                    chairs.forEach(chair => {
                        chair.className = 'chair'; // Sadece chair sınıfı kalsın
                        chair.onclick = null;
                    });
    
                    function draw() {
                        if (!isRecording) return;
                        animationId = requestAnimationFrame(draw);
                        analyser.getByteFrequencyData(dataArray);
    
                        ctx.fillStyle = '#000';
                        ctx.fillRect(0, 0, canvas.width, canvas.height);
    
                        const barWidth = (canvas.width / bufferLength) * 2.5;
                        let barHeight;
                        let x = 0;
                        let sumVolume = 0;
    
                        for (let i = 0; i < bufferLength; i++) {
                            barHeight = dataArray[i] / 2;
                            sumVolume += dataArray[i]; // Toplam sesi hesapla
                            
                            ctx.fillStyle = `rgb(${barHeight + 100}, 20, 20)`;
                            ctx.fillRect(x, canvas.height - barHeight, barWidth, barHeight);
                            x += barWidth + 1;
                        }
    
                        // Anlık sesin ortalamasını al ve performansa kaydet
                        let currentAvgVolume = sumVolume / bufferLength;
                        totalVolume += currentAvgVolume;
                        volumeChecks++;
                    }
                    draw();
    
                } catch (err) {
                    alert("Mikrofonuna erişilemedi! Oyunu oynamak için mikrofon izni vermelisin.");
                    console.error(err);
                }
            }
    
            // Performansı bitir ve jüri kararını hesapla
            function stopPerformance() {
                isRecording = false;
                cancelAnimationFrame(animationId);
                startBtn.disabled = false;
                stopBtn.disabled = true;
                
                if (audioContext) {
                    audioContext.close();
                }
                
                ctx.clearRect(0, 0, canvas.width, canvas.height);
                ctx.fillStyle = '#000';
                ctx.fillRect(0, 0, canvas.width, canvas.height);
    
                feedback.innerText = "Şarkı bitti... Jüriler düşünüyor...";
                
                setTimeout(evaluatePerformance, 1500);
            }
    
            function evaluatePerformance() {
                // Şarkı boyunca çıkan ortalama ses seviyesini hesapla
                let averageSessionVolume = volumeChecks > 0 ? (totalVolume / volumeChecks) : 0;
                
                // Eğer ortalama ses seviyesi 10'un altındaysa (sessizlik veya çok kısık ortam sesi)
                let didSing = averageSessionVolume > 10; 
    
                let turnedCount = 0;
                const turnedChairs = [];
    
                chairs.forEach((chair, index) => {
                    let willTurn = false;
    
                    if (didSing) {
                        // Şarkı söylendiyse ses yüksekliğine göre dönme şansı hesapla (%40 taban + sese göre bonus)
                        let turnChance = 0.4 + (averageSessionVolume / 150);
                        willTurn = Math.random() < turnChance; 
                    } else {
                        // Şarkı söylenmediyse dönme şansı %0
                        willTurn = false;
                    }
    
                    if (willTurn) {
                        setTimeout(() => {
                            chair.classList.add('turned');
                            turnedChairs.push(chair);
                        }, index * 500);
                        turnedCount++;
                    }
                });
    
                setTimeout(() => {
                    if (turnedCount > 1) {
                        feedback.innerHTML = `<strong>TEBRİKLER! ${turnedCount} JÜRİ BİRDEN DÖNDÜ!</strong><br> Şimdi dönen jürilerin üzerine tıklayarak <strong>takımını seç</strong>!`;
                        enableJurySelection(turnedChairs);
                    } else if (turnedCount === 1) {
                        feedback.innerHTML = `<strong>Tebrikler! ${turnedChairs[0].getAttribute('data-name')} sana döndü!</strong><br> Otomatik olarak onun takımına katıldın.`;
                        turnedChairs[0].classList.add('selected');
                        dimOtherChairs(turnedChairs[0]);
                    } else {
                        if (!didSing) {
                            feedback.innerHTML = "<strong>Hiç ses gelmedi!</strong><br> Şarkı söylemediğin için jüriler dönmedi. Biraz daha yüksek sesle tekrar dene.";
                        } else {
                            feedback.innerHTML = "<strong>Maalesef kimse dönmedi...</strong><br> Sesin duyuldu ama jürileri ikna edemedin. Pes etme, tekrar dene!";
                        }
                    }
                }, 2500);
            }
    
            // Dönen jürileri tıklanabilir yap
            function enableJurySelection(turnedChairs) {
                turnedChairs.forEach(chair => {
                    chair.classList.add('choosable');
                    
                    chair.onclick = function() {
                        // Seçim yapıldıktan sonra tüm tıklama olaylarını kaldır
                        chairs.forEach(c => c.onclick = null);
                        
                        // Seçileni vurgula
                        this.classList.remove('choosable');
                        this.classList.add('selected');
                        
                        dimOtherChairs(this);
    
                        let juriName = this.getAttribute('data-name');
                        feedback.innerHTML = `<strong>Mükemmel Seçim!</strong><br> Artık <strong>${juriName}</strong>'nun takımındasın! Şampiyonluğa giden yol açıldı!`;
                    };
                });
            }
    
            // Seçilmeyen jürileri soluklaştır
            function dimOtherChairs(selectedChair) {
                chairs.forEach(c => {
                    if (c !== selectedChair) {
                        c.classList.remove('choosable');
                        if (c.classList.contains('turned')) {
                            c.classList.add('not-selected');
                        }
                    }
                });
            }
    
            startBtn.addEventListener('click', startPerformance);
            stopBtn.addEventListener('click', stopPerformance);
    
        </script>
    </body>
    </html>







    Selamlar şarkıya başla diyin mikrofonunuz ile kendiniz şarkınızı söyleyin jüri dönsün sizi seçsin geliştirmek size kalmış yapay zeka yapımıdır iyi forumlar
  • 23-04-2026, 15:34:55
    #2
    emeğine sağlık, eğlence için güzel düşünmüşsün.
  • 23-04-2026, 15:36:53
    #3
    klasweb adlı üyeden alıntı: mesajı görüntüle
    emeğine sağlık, eğlence için güzel düşünmüşsün.
    az önce aklıma geldi yapayım dedim gemini ile teşekkürler iyi forumlar
  • 23-04-2026, 15:53:23
    #4
    Yetenek sizsiniz Türkiye