update voice

This commit is contained in:
Flatlogic Bot 2026-04-01 09:38:33 +00:00
parent 88ba3bb786
commit f81da63413
2 changed files with 20 additions and 8 deletions

View File

@ -187,8 +187,20 @@ document.addEventListener('DOMContentLoaded', () => {
const utterance = new SpeechSynthesisUtterance(text); const utterance = new SpeechSynthesisUtterance(text);
utterance.lang = locale === 'ar' ? 'ar-SA' : 'en-US'; utterance.lang = locale === 'ar' ? 'ar-SA' : 'en-US';
const voices = window.speechSynthesis.getVoices(); const voices = window.speechSynthesis.getVoices();
const preferredVoice = voices.find((voice) => voice.lang.toLowerCase().startsWith(locale === 'ar' ? 'ar' : 'en')); const langPrefix = locale === 'ar' ? 'ar' : 'en';
if (preferredVoice) utterance.voice = preferredVoice; const langVoices = voices.filter(v => v.lang.toLowerCase().startsWith(langPrefix));
if (langVoices.length > 0) {
// Try to find a high-quality (Google/Microsoft Natural) voice
const bestVoice = langVoices.find(v =>
v.name.includes('Google') ||
v.name.includes('Natural') ||
v.name.includes('Premium') ||
v.name.includes('Online')
) || langVoices.find(v => v.name.includes('Microsoft')) || langVoices[0];
utterance.voice = bestVoice;
}
utterance.onend = () => { if (videoPlayer) videoPlayer.volume = 1.0; }; utterance.onend = () => { if (videoPlayer) videoPlayer.volume = 1.0; };
utterance.onerror = () => { if (videoPlayer) videoPlayer.volume = 1.0; }; utterance.onerror = () => { if (videoPlayer) videoPlayer.volume = 1.0; };

View File

@ -58,7 +58,7 @@ qh_page_start(
</div> </div>
</div> </div>
<div class="d-flex align-items-center gap-3"> <div class="d-flex align-items-center gap-3">
<div class="fs-4 fw-bold text-dark js-live-clock"><?= qh_h(date('H:i')) ?></div> <div class="fs-5 fw-bold text-dark js-live-clock"><?= qh_h(date('H:i')) ?></div>
<button type="button" class="btn btn-outline-secondary btn-sm shadow-sm me-2 js-audio-toggle" id="globalAudioToggle" title="<?= qh_h(qh_t('Toggle Audio', 'تبديل الصوت')) ?>"> <button type="button" class="btn btn-outline-secondary btn-sm shadow-sm me-2 js-audio-toggle" id="globalAudioToggle" title="<?= qh_h(qh_t('Toggle Audio', 'تبديل الصوت')) ?>">
<i class="bi bi-volume-mute"></i> <i class="bi bi-volume-mute"></i>
</button> </button>
@ -82,14 +82,14 @@ qh_page_start(
<?php foreach ($activeCalls as $ticket): $speech = qh_call_message($ticket); ?> <?php foreach ($activeCalls as $ticket): $speech = qh_call_message($ticket); ?>
<div class="col-6 col-lg-3"> <div class="col-6 col-lg-3">
<div class="card border-0 shadow-sm h-100 announcement-card" data-announcement-key="<?= qh_h((string) $ticket['id']) ?>-<?= qh_h((string) strtotime((string) $ticket['called_at'])) ?>" data-announcement-en="<?= qh_h($speech['en']) ?>" data-announcement-ar="<?= qh_h($speech['ar']) ?>"> <div class="card border-0 shadow-sm h-100 announcement-card" data-announcement-key="<?= qh_h((string) $ticket['id']) ?>-<?= qh_h((string) strtotime((string) $ticket['called_at'])) ?>" data-announcement-en="<?= qh_h($speech['en']) ?>" data-announcement-ar="<?= qh_h($speech['ar']) ?>">
<div class="card-body text-center p-3"> <div class="card-body text-center p-2">
<div class="display-5 fw-bold text-primary mb-1"><?= qh_h($ticket['ticket_number']) ?></div> <div class="fs-2 fw-bold text-primary mb-1"><?= qh_h($ticket['ticket_number']) ?></div>
<div class="fs-6 text-muted mb-1 text-truncate" style="max-width: 100%;" title="<?= qh_h(qh_name($ticket, 'doctor_name', qh_t('Doctor', 'الطبيب'))) ?>"><?= qh_h(qh_name($ticket, 'doctor_name', qh_t('Doctor', 'الطبيب'))) ?></div> <div class="small text-muted mb-1 text-truncate" style="max-width: 100%;" title="<?= qh_h(qh_name($ticket, 'doctor_name', qh_t('Doctor', 'الطبيب'))) ?>"><?= qh_h(qh_name($ticket, 'doctor_name', qh_t('Doctor', 'الطبيب'))) ?></div>
<div class="d-inline-block bg-primary text-white rounded px-2 py-1 fs-6 fw-bold mt-1"> <div class="d-inline-block bg-primary text-white rounded px-2 py-1 small fw-bold mt-1">
<?= qh_h(qh_t('Room', 'غرفة')) ?> <?= qh_h($ticket['doctor_room'] ?? '--') ?> <?= qh_h(qh_t('Room', 'غرفة')) ?> <?= qh_h($ticket['doctor_room'] ?? '--') ?>
</div> </div>
</div> </div>
<div class="card-footer bg-white text-center text-muted small py-1" style="font-size: 0.75rem;"> <div class="card-footer bg-white text-center text-muted small py-1" style="font-size: 0.65rem;">
<?= qh_format_datetime($ticket['called_at'] ?? $ticket['updated_at']) ?> <?= qh_format_datetime($ticket['called_at'] ?? $ticket['updated_at']) ?>
</div> </div>
</div> </div>