Menu

HTML audio: התגית audio, controls, autoplay ו-loop

האלמנט <audio> מנגן קובצי קול עם הנגן המובנה של הדפדפן. למדו את הקוד, את המאפיינים (controls, autoplay, loop, muted, preload), באילו פורמטים להשתמש, למה autoplay עם קול נחסם, ואיך לבנות כפתור ניגון משלכם עם JavaScript.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

איך מוסיפים אודיו

הפנו את האלמנט <audio> לקובץ קול והוסיפו controls:

<audio src="song.mp3" controls></audio>

controls מציג את הנגן של הדפדפן: ניגון והשהיה, ציר זמן, הזמן ובקרת עוצמת קול. בלי controls האלמנט לא תופס מקום בכלל. התצוגה המקדימה לא יכולה לטעון קבצים מהמחשב שלכם, לכן הדוגמה הזו בונה קובץ WAV קצר בדפדפן עם סקריפט ומשתמשת בו כ-src. לחצו על ניגון:

הנגן נראה שונה ב-Chrome, ב-Firefox וב-Safari, כי כל דפדפן מצייר את שלו. מחקו את controls והנגן נעלם, אבל האודיו עדיין שם ו-JavaScript יכול לנגן אותו.

מאפייני אודיו

מאפייןמה הוא עושה
controlsמציג את הנגן של הדפדפן
autoplayמנסה להתחיל לנגן בטעינה (נחסם כשיש קול, ראו בהמשך)
loopמתחיל שוב כשהקובץ נגמר
mutedמתחיל כשעוצמת הקול כבויה
preloadnone (לא להוריד כלום עד הניגון), metadata (רק את האורך) או auto (הדפדפן מחליט)
srcהקובץ לנגן; או השתמשו באלמנטי <source> בפנים לכמה פורמטים

השתמשו ב-preload="none" או "metadata" בעמודים עם הרבה נגנים, כמו רשימת פרקים של פודקאסט, כדי שהעמוד לא יוריד כל קובץ מראש.

פורמטים וחלופות

פרטו כמה קבצים עם <source> והדפדפן ינגן את הראשון שהוא תומך בו. טקסט בתוך האלמנט מוצג רק בדפדפנים בלי תמיכה ב-<audio>:

<audio controls preload="metadata">
  <source src="episode.opus" type="audio/ogg; codecs=opus">
  <source src="episode.mp3" type="audio/mpeg">
  <p>Your browser cannot play audio. <a href="episode.mp3">Download the episode</a>.</p>
</audio>
פורמטסוג MIMEהערות
MP3audio/mpegמתנגן בכל הדפדפנים העדכניים; הבחירה הבטוחה כשיש קובץ אחד
AAC (.m4a)audio/mp4נתמך באופן רחב, איכות טובה בגודל קטן
Opus או Vorbis (.ogg, .webm)audio/ogg, audio/webmקבצים קטנים; הוסיפו MP3 כחלופה, כי התמיכה ב-Safari משתנה לפי גרסה
WAVaudio/wavלא דחוס וגדול; מתאים לאפקטים קוליים קצרים

למה autoplay נכשל

דפדפנים לא מאפשרים לעמוד להתחיל להשמיע קול מעצמו. autoplay, או קריאה ל-play() לפני שהמשתמש לחץ או הקיש, נדחים. הדוגמה הזו מנסה לנגן בטעינה ומדפיסה מה קרה, ואז מציעה כפתור:

בדרך כלל תראו NotAllowedError, השגיאה שהדפדפן נותן כשהוא חוסם ניגון. הכפתור עובד כי לחיצה נחשבת כרשות. לכל דפדפן יש כללים נוספים משלו (Chrome, למשל, זוכר אתרים שבהם אתם מנגנים מדיה לעיתים קרובות), אז לעולם אל תסמכו על autoplay: התחילו קול מפעולה של המשתמש, ותמיד טפלו ב-promise ש-play() מחזיר.

new Audio(url) יוצר אלמנט אודיו ב-JavaScript בלי להוסיף אותו לעמוד, וזה שימושי לאפקטים קוליים.

בנו פקדים משלכם

הסתירו את הנגן המובנה על ידי השמטת controls, ואז הפעילו את האלמנט עם ה-API שלו ב-JavaScript: play(), pause(), currentTime, duration, volume, ואירועים כמו timeupdate ו-ended:

הכפתור הוא <button> אמיתי, ולכן הוא עובד עם המקלדת, והתווית שלו מתחלפת בין Play ל-Pause. בסוף הקובץ הדפדפן משהה את האלמנט ומפעיל את ended, כך שהכפתור חוזר ל-Play מעצמו. אם אתם בונים פקדים מותאמים, אתם גם לוקחים על עצמכם את מה שהמובנים נתנו בחינם: תמיכה במקלדת, תוויות ובקרת עוצמת קול.

נגישות

  • לעולם אל תתחילו קול מעצמו. זה מפריע לקוראי מסך ומבהיל אנשים. התחילו אודיו מלחיצה.
  • הציעו תמלול לפודקאסטים ולאודיו מדובר. קישור לגרסת טקסט מתחת לנגן מספיק, ומנועי חיפוש יכולים לקרוא אותה.
  • השאירו את controls, או בנו פקדים מכפתורים אמיתיים, כדי שאפשר יהיה להשהות את האודיו עם המקלדת.

לווידאו עם קול, כתוביות ותמונות פוסטר, ראו את העמוד על התגית video; ל-<audio> יש את רוב המאפיינים שלה ואת כל ה-API שלה ב-JavaScript.

טעויות נפוצות

  • שכחה של controls. בלעדיו האלמנט בלתי נראה, ונראה כאילו לא קרה כלום.
  • ציפייה ש-autoplay יעבוד. התחילו את הניגון מלחיצה וטפלו ב-promise של play().
  • נתיב או סוג קובץ שגויים. פתחו את כתובת הקובץ ישירות כדי לבדוק אותה, והתאימו את type לפורמט האמיתי (audio/mpeg ל-MP3).
  • טעינת כל הקבצים ברשימה ארוכה. השתמשו ב-preload="none" או "metadata".
  • מוזיקת רקע שאי אפשר לעצור. תמיד תנו לאנשים דרך גלויה להשהות.

שאלות נפוצות

איך מוסיפים אודיו לעמוד HTML?

השתמשו ב-<audio src="song.mp3" controls></audio>. המאפיין controls מציג את הנגן של הדפדפן עם כפתור ניגון, ציר זמן ועוצמת קול. בלעדיו האלמנט בלתי נראה.

למה האודיו שלי לא מתנגן אוטומטית?

דפדפנים חוסמים אודיו שמתחיל עם קול לפני שהמשתמש קיים אינטראקציה עם העמוד. התחילו את הניגון מלחיצה עם audio.play() במקום. אלמנט מושתק יכול להתנגן אוטומטית, אבל באודיו זה כמעט אף פעם לא שימושי.

באיזה פורמט אודיו כדאי להשתמש ב-HTML?

MP3 מתנגן בכל הדפדפנים העדכניים, ולכן הוא הבחירה הבטוחה לקובץ יחיד. גם AAC בקובץ .m4a נתמך באופן רחב. השתמשו באלמנטי <source> כדי להציע יותר מפורמט אחד.

איך מנגנים אודיו בלולאה ב-HTML?

הוסיפו את המאפיין loop: <audio src="rain.mp3" controls loop>. כשהקובץ נגמר, הוא מתחיל שוב מההתחלה.

איך מנגנים צליל עם JavaScript?

צרו או בחרו אלמנט אודיו וקראו ל-play(), למשל new Audio('click.mp3').play() בתוך handler של לחיצה. play() מחזיר promise שנדחה אם הדפדפן חוסם את הניגון.

אפשר לעצב את נגן האודיו של HTML?

רק מעט: אפשר לקבוע את הרוחב, השוליים וה-display שלו, אבל הכפתורים שבתוכו מצוירים על ידי הדפדפן ונראים שונה בכל אחד. למראה מותאם, הסתירו את ה-controls ובנו פקדים משלכם עם כפתורים וה-API של אודיו ב-JavaScript.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל