
تشغيل الصوت في HTML: شرح عنصر
<audio>
وخصائصه (controls,
autoplay, loop) مع أمثلة عملية
في هذا الدليل العملي ستتعلّم كل ما تحتاجه لاستخدام عنصر
<audio>
في صفحات الويب، بداية من
إضافة ملفات صوتية متعددة الصيغ عبر
<source>
، مرورًا بالتحكم في التشغيل بواسطة
controls
، والتشغيل التلقائي autoplay
، وكتم الصوت muted
، وتكرار التشغيل loop
، وتهيئة التحميل preload
، وانتهاءً بأفضل الممارسات لتحسين الأداء وإمكانية الوصول (Accessibility)
ودعم المتصفحات.
ما هو عنصر <audio>
؟
عنصر <audio>
هو الوسيلة القياسية
في HTML لتضمين وتشغيل ملف صوتي داخل صفحة الويب. يُمكّنك من تقديم تجربة
استماع سلسة للمستخدمين دون الحاجة لأي إضافات خارجية. عند استخدامه مع السمة
controls
، يعرض المتصفح واجهة تشغيل افتراضية تتضمن زر التشغيل والإيقاف المؤقت
والتحكم بمستوى الصوت والشريط الزمني.
الاستخدام الأساسي وإضافة أكثر من مصدر
أبسط شكل لاستخدام العنصر يتم بإضافة واجهة التحكم وعرض مصدر أو أكثر. إذا كان المتصفح لا يدعم صيغة معينة فسيحاول التالية، لذلك من الجيد توفير OGG وMP3 على الأقل لضمان التوافق الواسع.
<audio controls>
<source src="audio/track.ogg" type="audio/ogg">
<source src="audio/track.mp3" type="audio/mpeg">
متصفحك لا يدعم عنصر الصوت.
</audio>
لاحظ أننا وضعنا نصًا بديلًا بين وسمَيّ الفتح والإغلاق. سيظهر هذا النص في
المتصفحات القديمة التي لا تفهم عنصر
<audio>
.
خاصية controls
ولماذا هي مهمة
عند إضافة controls
، سيعرض المتصفح عناصر واجهة جاهزة ليتحكم المستخدم في التشغيل بسهولة. غياب
هذه السمة يعني أن المستخدم لن يرى أزرارًا افتراضية، وقد تحتاج لبناء واجهة
مخصصة عبر JavaScript وهو ما يزيد التعقيد.
controls
أثناء التطوير لاختبار الملف
بسرعة.
التشغيل التلقائي autoplay
مع
muted
تُقيِّد معظم المتصفحات الحديثة ميزة التشغيل التلقائي عندما يحتوي الصوت على
خرج مسموع، وذلك لحماية تجربة المستخدم. لذلك، إذا كنت تريد بدء التشغيل
تلقائيًا، أضف مع autoplay
السمة
muted
ليعمل التشغيل التلقائي دون إزعاج
المستخدم. يمكن لاحقًا إزالة الكتم برمجيًا بعد تفاعل المستخدم (على سبيل
المثال عند الضغط على زر).
<audio controls autoplay muted>
<source src="audio/intro.ogg" type="audio/ogg">
<source src="audio/intro.mp3" type="audio/mpeg">
متصفحك لا يدعم عنصر الصوت.
</audio>
سمة loop
لتكرار التشغيل
تُستخدم السمة loop
لإعادة تشغيل الملف
الصوتي تلقائيًا عند نهاية المقطع دون تدخل المستخدم. هذه السمة مثالية
للمؤثرات الصوتية القصيرة أو الموسيقى الخلفية (Background Music) التي ترغب
أن تستمر بسلاسة. يكفي إضافتها داخل وسم
<audio>
لتعمل من دون أي إعدادات
إضافية.
<audio controls loop>
<source src="audio/ambient.ogg" type="audio/ogg">
<source src="audio/ambient.mp3" type="audio/mpeg">
متصفحك لا يدعم عنصر الصوت.
</audio>
إذا أردت الجمع بين التكرار والتشغيل التلقائي في آن واحد مع احترام سياسات
المتصفح، يمكنك إضافة muted
:
<audio controls autoplay muted loop>
<source src="audio/bg.ogg" type="audio/ogg">
<source src="audio/bg.mp3" type="audio/mpeg">
</audio>
سلوك التحميل بواسطة preload
تتحكم السمة preload
في الكمية التي
يُحمّلها المتصفح من الملف قبل تشغيله. وهي تقبل القيم:
none (لا تحمّل شيئًا مسبقًا)،
metadata (تحميل بيانات التعريف فقط مثل المدة)،
وauto (دع المتصفح يقرّر وربما يحمّل الملف
كاملًا). اختيار القيمة المناسبة يساعدك على موازنة سرعة التشغيل الأولى مع
استهلاك البيانات.
<audio controls preload="metadata">
<source src="audio/episode.ogg" type="audio/ogg">
<source src="audio/episode.mp3" type="audio/mpeg">
</audio>
يُفضل استخدام preload="metadata"
في
الصفحات التي تحتوي عدة مقاطع لحفظ البيانات وتحسين الأداء، بينما يمكن
استخدام preload="auto"
لمقطع رئيسي
واحد ترغب أن يبدأ بسرعة.
النص البديل ودعم المتصفحات والصيغ
في حال عدم دعم المتصفح لعنصر الصوت، سيعرض النص الموجود بين الوسمين. أمّا دعم الصيغ فيختلف: معظم المتصفحات تدعم MP3 وWAV وOGG، مع ملاحظة أن بعض الإصدارات من متصفح Safari قد لا تدعم OGG. لذلك، يُنصح بتوفير ملف MP3 على الأقل لضمان التوافق الواسع.
المتصفح | MP3 | WAV | OGG |
---|---|---|---|
Edge/IE | مدعوم | مدعوم* | مدعوم* |
Chrome | مدعوم | مدعوم | مدعوم |
Firefox | مدعوم | مدعوم | مدعوم |
Safari | مدعوم | مدعوم | غير مدعوم غالبًا |
Opera | مدعوم | مدعوم | مدعوم |
ملحوظة: علامة النجمة تعني أن الدعم قد يعتمد على الإصدارات أو الترميزات (Codecs). وفّر أكثر من صيغة عندما تستطيع.
إمكانية الوصول (Accessibility)
حتى لو كان الصوت محتوىً بسيطًا، لا تهمل مبادئ الوصول. وفّر عناوين واضحة
للمقاطع، ونصوصًا بديلة تصف المحتوى، وأزرارًا كبيرة وسهلة على الشاشات
الصغيرة. إذا كان الصوت يحتوي محتوى معلوماتي مهم، فكر في توفير تفريغ نصّي
(Transcript) أو ملف <track>
من
نوع captions أو
subtitles حيثما أمكن.
<audio controls>
<source src="podcast.mp3" type="audio/mpeg">
<track kind="captions" src="podcast.vtt" srclang="ar" label="تعليقات توضيحية بالعربية">
محتوى صوتي: لقاء حول تطوير الويب. للتفريغ النصي زر الصفحة المقالية.
</audio>
كما يدعم معظم المتصفحات التحكم عبر لوحة المفاتيح، لذا احرص على وضوح التركيز البصري (Focus) إن استخدمت واجهات مخصصة.
التحكم البرمجي عبر JavaScript
يوفّر عنصر الصوت واجهة برمجية سهلة عبر كائن
HTMLAudioElement
. يمكنك الوصول لخصائص مثل
currentTime
وduration
، والاتصال بالدوال play()
وpause()
، وتعديل volume
(من 0 إلى 1)،
وتفعيل/تعطيل loop
برمجياً.
<audio id="player" controls preload="metadata">
<source src="music.mp3" type="audio/mpeg">
</audio>
<button id="btnPlay">تشغيل/إيقاف</button>
<button id="btnLoop">تبديل اللوب</button>
<script>
const player = document.getElementById('player');
document.getElementById('btnPlay').addEventListener('click', () => {
if (player.paused) player.play(); else player.pause();
});
document.getElementById('btnLoop').addEventListener('click', () => {
player.loop = !player.loop;
alert('loop: ' + player.loop);
});
</script>
لاحظ أنه لا توجد سمة HTML اسمها volume؛ يتم التحكم بمستوى الصوت
برمجيًا عبر الخاصية volume
. كذلك، بعض المتصفحات تمنع
play()
بدون تفاعل المستخدم إذا لم يكن
الصوت مكتومًا.
أفضل الممارسات والأخطاء الشائعة
- وفّر أكثر من صيغة: على الأقل MP3 وOGG لضمان عمل الصوت على معظم المتصفحات.
- استخدم preload="metadata" للمقاطع الكثيرة: يقلّل استهلاك البيانات ويحسن أداء الصفحة.
- اجمع بين autoplay وmuted فقط عند الحاجة: واحترم رغبة المستخدم وخيارات الوصول.
- للخلفيات الصوتية: استخدم loop مع ملفات مُعالجة لتقليل الفجوات بين الإعادات.
- لا تعتمد على واجهة المتصفح فقط: أضف وصفًا أو عنوانًا للمقطع ليفهم المستخدم المحتوى سريعًا.
- اختبر على الهواتف: سلوك التشغيل التلقائي والبيانات المتنقلة قد يختلف عن الحواسيب المكتبية.
- تحسين الأداء: ضع الملفات على شبكة توصيل محتوى (CDN) أو فعّل الضغط والتخزين المؤقت (Caching) حيثما أمكن.
- احترام الحقوق: تأكد أن لديك إذنًا قانونيًا لاستخدام الملفات الصوتية.
أخطاء شائعة لتجنّبها
- الخلط بين اسم السمة loop وكتابات خاطئة مثل loob.
-
عدم تحديد نوع الملف في
type
، ما قد يجعل التوافق أسوأ. -
الاعتماد على
autoplay
دونmuted
وتوقّع أنه سيعمل دائمًا. - وضع ملف واحد فقط بصيغة غير مدعومة على بعض المتصفحات.
- عدم توفير نص بديل أو وصف للمستخدمين الذين لديهم تقنيات مساعدة.
أسئلة شائعة
هل يمكن إظهار العناوين أو الفصول داخل الصوت؟
يمكن استخدام
<track kind="chapters">
لتوفير
فصول، لكن دعم المتصفحات متغير. كحل بديل، قدّم قائمة يدوية بمؤشرات زمنية
داخل المقالة.
كيف أضبط مستوى الصوت افتراضيًا؟
لا توجد سمة HTML لذلك؛ استخدم
player.volume = 0.5
عبر JavaScript
(القيمة بين 0 و1).
هل يمكن تشغيل عدة أصوات في آنٍ واحد؟
نعم، لكن احذر من التداخل الصوتي وتجربة المستخدم. يفضّل إيقاف الآخر عند تشغيل واحد.
هل تعمل سمة loop
على جميع المتصفحات
الحديثة؟
نعم، وهي مدعومة على نطاق واسع. إن واجهت مشكلة، تأكد من أن الملف نفسه لا يحتوي صمتًا طويلًا في النهاية يسبب فجوة مسموعة.
هل يدعم العنصر <audio>
الترجمات
مثل الفيديو؟
يدعم <track>
مع أنواع مثل
captions وsubtitles وdescriptions وchapters
وmetadata
وفق ملفات VTT. جرّبها مع محتوى معلوماتي مهم.
الخلاصة
يوفّر عنصر <audio>
طريقة موحدة
وبسيطة لتشغيل الملفات الصوتية على الويب. باستخدام
controls
تحصل على واجهة جاهزة، وبإضافة
مصادر متعددة عبر <source>
تحقّق
أقصى توافق، ومع autoplay
وmuted
تحترم سياسات المتصفح، وبسمة loop
تضمن
تكرار التشغيل بدون تدخل المستخدم، وبتنظيم
preload
تحافظ على الأداء واستهلاك
البيانات. اتّبع أفضل الممارسات المذكورة هنا، وستحصل على تجربة صوتية
احترافية ومريحة للمستخدم.
أمثلة إضافية سريعة
مشغل صوت خلفي يتكرر باستمرار
<audio controls autoplay muted loop preload="auto">
<source src="bg-music.ogg" type="audio/ogg">
<source src="bg-music.mp3" type="audio/mpeg">
الخلفية الصوتية غير مدعومة في متصفحك.
</audio>
بودكاست بصيغة MP3 مع بيانات تعريف فقط
<audio controls preload="metadata">
<source src="podcast-episode-12.mp3" type="audio/mpeg">
حلقة بودكاست عن HTML Audio.
</audio>
واجهة مخصصة بشكل بسيط
<audio id="custom" preload="metadata">
<source src="clip.mp3" type="audio/mpeg">
</audio>
<button onclick="document.getElementById('custom').play()">تشغيل</button>
<button onclick="document.getElementById('custom').pause()">إيقاف مؤقت</button>
<button onclick="document.getElementById('custom').loop=!document.getElementById('custom').loop">تبديل اللوب</button>