Skip to main content
Algılanabilir WCAG 1.2.9

1.2.9 Yalnızca Ses (Canlı)

Canlı yalnızca ses içerikleri için, sesi duyamayan kullanıcılara gerçek zamanlı eşdeğer bilgi sunan bir metin alternatifi sağlanmalıdır.

Level AAA Moderate WCAG 2.0 (new) WCAG 2.1 WCAG 2.2

Bu kural ne anlama gelir

WCAG 1.2.9, canlı yalnızca ses içeriklerinin — canlı radyo yayınları, gerçek zamanlı olarak yayınlanan yalnızca ses podcast'leri, konferans çağrı sesleri ve acil durum ses duyuruları gibi — gerçek zamanlı bir metin alternatifi sağlamasını gerektirir. Bu genellikle, konuşulan içeriği gerçekleştiği anda aktaran canlı altyazılar veya gerçek zamanlı bir metin akışı olarak sunulur.

Bu Seviye AAA kriteri, canlı altyazı kavramını (eşzamanlanmış medyayı kapsayan 1.2.4) yalnızca ses içeren canlı içeriğe genişletir. Temel fark, bir video bileşeninin olmamasıdır — yalnızca gerçek zamanlı olarak yayınlanan ses vardır.

Neden önemlidir

Canlı ses etkinlikleri, metin alternatifi olmadan işitme engelli kullanıcıları tamamen dışlar. Sonradan transkript sağlanabilecek önceden kaydedilmiş içeriğin aksine, canlı ses zamana duyarlıdır — bilgi, etkinlik sona erdiğinde azalan veya kaybolan anlık bir değere sahiptir.

Gerçek zamanlı metin alternatifleri, acil durum iletişimleri, canlı haber ses akışları ve katılımın içeriği anlamaya bağlı olduğu radyo aramalı programları gibi etkileşimli ses etkinlikleri için kritik öneme sahiptir.

Etkinlik sonrası transkript hiç yoktan iyidir, ancak bu kriteri karşılamaz. Gereksinim, canlı yayın sırasında gerçek zamanlı erişim içindir.

İlgili axe-core kuralları

Canlı yalnızca ses içeriğini ele alan axe-core kuralı yoktur. Otomatik araçlar, canlı ses akışlarını tespit edemez veya gerçek zamanlı metin alternatiflerinin sağlanıp sağlanmadığını doğrulayamaz. Bu kriter, gerçek canlı etkinlikler sırasında test gerektirir.

Nasıl test edilir

  1. Platformdaki tüm canlı yalnızca ses içeriklerini belirleyin (canlı radyo, ses akışları, konferans çağrıları).
  2. Canlı bir ses etkinliği sırasında, gerçek zamanlı bir metin alternatifinin görüntülenip görüntülenmediğini kontrol edin.
  3. Gecikmeyi değerlendirin — metin, konuşulan içerikten birkaç saniye içinde görünmelidir.
  4. Metnin, konuşmacı tanımlaması dahil olmak üzere konuşulan içeriği doğru şekilde temsil ettiğini doğrulayın.
  5. Metin alternatifinin ekran okuyucular ve diğer yardımcı teknolojiler aracılığıyla erişilebilir olduğunu kontrol edin.
  6. Anlamlı konuşma dışı seslerin metin akışında açıklandığını onaylayın.

Nasıl düzeltilir

Ses oynatıcının yanına bir canlı metin akışı uygulayın:

<div role="region" aria-label="Gerçek zamanlı transkriptli canlı ses yayını">
  <audio controls autoplay>
    <source src="/canli-yayin" type="audio/mpeg" />
    Tarayıcınız ses öğesini desteklemiyor.
  </audio>

  <div
    id="canli-transkript"
    role="log"
    aria-live="polite"
    aria-label="Gerçek zamanlı transkript"
    class="live-transcript-panel"
  >
    <!-- Transkript satırları gerçek zamanlı olarak eklenir -->
  </div>
</div>

WebSocket aracılığıyla gerçek zamanlı bir altyazılama hizmetine bağlanın:

const transkriptEl = document.getElementById("canli-transkript");
const ws = new WebSocket("wss://altyazi-hizmeti.ornek.com/akis");

ws.onmessage = (event) => {
  const veri = JSON.parse(event.data);
  const satir = document.createElement("p");

  if (veri.konusmaci) {
    const konusmaci = document.createElement("strong");
    konusmaci.textContent = `${veri.konusmaci}: `;
    satir.appendChild(konusmaci);
  }

  satir.appendChild(document.createTextNode(veri.metin));
  transkriptEl.appendChild(satir);

  // En son satıra otomatik kaydır
  transkriptEl.scrollTop = transkriptEl.scrollHeight;
};

Gerçek zamanlı bir yedek olarak Web Speech API kullanan daha basit bir yaklaşım için:

const recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;
recognition.lang = "tr-TR";

const transkriptEl = document.getElementById("canli-transkript");
let mevcutParagraf = null;

recognition.onresult = (event) => {
  if (!mevcutParagraf) {
    mevcutParagraf = document.createElement("p");
    transkriptEl.appendChild(mevcutParagraf);
  }

  const sonuç = event.results[event.results.length - 1];
  mevcutParagraf.textContent = sonuç[0].transcript;

  if (sonuç.isFinal) {
    mevcutParagraf = null;
  }
};

recognition.start();

Sık yapılan hatalar

  • Canlı yayın sırasında gerçek zamanlı metin yerine yalnızca etkinlik sonrası transkript sağlamak.
  • Hataları izlemeden otomatik konuşma tanıma kullanmak ve güvenilmez metin üretmek.
  • Gerçek zamanlı metin akışında konuşmacı tanımlaması sağlamamak.
  • Metin alternatifini bulunması zor veya ses oynatıcıyla ilişkilendirilmemiş bir konuma yerleştirmek.
  • Müzik, ses efektleri veya önemli duraklamalar gibi konuşma dışı ses öğelerini açıklamamak.
  • Metin akışını yardımcı teknolojiler için erişilebilir hale getirmemek (ARIA rolleri veya canlı bölgelerin eksikliği).

Kaynaklar