PracticU

השמעת צלילים

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › השמעת צלילים
מילון מושגים:
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
Android - מערכת הפעלה מבוססת Linux לטלפונים ולמכשירים ניידים, שפותחה על ידי גוגל.

השמעת צלילים
נושא חדש: השמעת סאונד, מוזיקה ווידאו באנדרואיד. הרכיב הראשון הוא SoundPool, מאגר צלילים קצרים שמתאים במיוחד לאפקטים, כמו הודעה נכנסת, אישור של המשתמש או משחקים שמשמיעים הרבה צלילים בו-זמנית.
השלבים העיקריים
1. יצירת SoundPool: ב-onCreate יוצרים אובייקט עם שלושה קבועים, שמוגדרים כקבועים עם שם ברור ולא כמספרים בקוד.
2. מספר צלילים בו-זמנית: הקבוע הראשון (MAX_SOUNDS_ALLOWED_AT_ONCE, כאן 5) קובע כמה צלילים יושמעו יחד. מעבר לכך הרכיב משמיע רק את אלה בעלי עדיפות גבוהה.
3. ערוץ השמע: הקבוע השני בא מ-AudioManager, למשל STREAM_MUSIC. יש ערוצים שונים (מוזיקה, שיחה נכנסת ועוד) והבחירה תלויה בייעוד הצליל, למשל שמוזיקה תושמע רק באוזניות כשהן מחוברות.
4. איכות: הקבוע השלישי (QUALITY_NEEDED) מקבל 0 כברירת מחדל. הרכיב לא מתייחס אליו כרגע.
5. קבצי הצליל: מציבים בתיקיית res/raw (נוצרת כ-Android Resource Directory) שני קבצי OGG, laser ו-siren. טוענים כל אחד עם soundPool.load שמקבל קונטקסט, R.raw.laser ועדיפות. הטעינה מראש היא מה שהופך את הרכיב ליעיל.
6. השמעה: soundPool.play מקבל את ה-ID של הצליל, עוצמה בשמאל ובימין (בין 0 ל-1, כאן 1.0 כמקסימום), עדיפות, loop ו-rate.
7. loop ו-rate: ערך loop של 8 משמיע 8 פעמים, ו--1 משמיע ללא הפסקה. פעם אחת מתקבלת עם 0, כי 1 גרם להשמעה כפולה. ה-rate נע בין 0.5 (איטי פי שניים) ל-2 (מהיר פי שניים), ו-1.0 הוא הקצב המקורי.
8. השהיה והמשך: הדגמה עם לחצנים ל-pause, resume ו-stop, שמקבלים את ה-ID. לחצנים נוספים הדגימו loop, קצב איטי ומהיר, השמעת הצליל השני ואת שניהם יחד, בלי בעיית ביצועים.
כעת אפשר להשמיע אפקטי סאונד באפליקציה בביצועים טובים, עם שליטה בעוצמה בכל צד, בקצב ובחזרות.
השיעור הבא בקורס: Media Player

פרקי ההרצאה: השמעת צלילים

  1. 00:00

    רכיבים להשמעת סאונד ווידאו

  2. 00:39

    SoundPool לאפקטים קצרים

  3. 01:16

    יצירת אובייקט SoundPool עם קבועים

  4. 01:53

    מספר הצלילים המרבי בבת אחת

  5. 02:54

    בחירת ערוץ השמע במכשיר

  6. 05:04

    טעינת קבצי סאונד מתיקיית RAW

  7. 06:42

    קביעת Priority לצליל

  8. 08:01

    השמעה עם play ועוצמת הרמקולים

תמלול ההרצאה: השמעת צלילים

הטקסט המלא של הדקות הראשונות בהרצאה «השמעת צלילים» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:21

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

  3. 00:38

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

  4. 00:56

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

  5. 01:11

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

  6. 01:23

    אז בואו נבנה פשוט רכיב Sound Pool, ניגש ל-OnCreate, נייצר ממנו איזשהו אובייקט חדש. עכשיו אנחנו צריכים לתת לקונסטרקטור שלו כל מיני קבועים וגם במהלך העבודה עם הרכיב הזה אנחנו צריכים לספק כל מיני קבועים.

  7. 01:43

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

  8. 02:03

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

  9. 02:28

    אז בואו נמציא פה איזשהו קבוע ונקרא לו max sounds allowed at once. ממש קבועים בעלי שמות הגיוניים. בואו ניגש לכאן, לאזור הגלובלי, ופשוט ניתן פה איזשהו קבוע, private, final, static ו-the integer.

  10. 02:54

    הנה הקבוע, ובואו נניח שאנחנו מאשרים להשמיע חמישה צלילים בבת אחת. הקבוע הבא שאנחנו צריכים לספק זה קבוע שמתאר מאיפה בדיוק במכשיר אנחנו מעוניינים להשמיע את הצלילים.

  11. 03:09

    מה זאת אומרת מאיפה? במכשיר יש מספר ערוצי שמע, זה לא שיש לו רמקולים וזהו ואנחנו מהרמקולים יכולים להשמיע את הצלילים שלנו.

  12. 03:21

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

  13. 03:36

    ולכן יש כל מיני ערוצים שבהם אנחנו יכולים לקבוע שמשם אנחנו רוצים להשמיע את הסאונד שלנו. אם זה סאונד עבור משחקים, אז כמובן זה אותו הדבר כמו סאונד עבור מוזיקה.

  14. 03:47

    אנחנו רוצים שהיוזר ישמע אותם בצורה רגילה מהרמקולים. אבל אולי הסאונד הזה זה עבור שיחה נכנסת. שיחה נכנסת זה ערוץ אחר. למה?

  15. 03:56

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

  16. 04:20

    קיים קבוע והוא נמצא באודיו מנג'ר ופה נמצאים כל הקבועים של הערוצים, לדוגמה stream music. קבוע מספר 3 נקרא quality needed, וזה בעצם האיכות שאנחנו מעוניינים להשמיע, כאשר הרכיב הספציפי הזה לא מתייחס לקבוע הזה, אולי בעתיד הוא כן יתייחס לקבוע הספציפי הזה, ואם אנחנו רוצים בכל מקרה להגדיר איזשהו

  17. 04:51

    quality שהוא default, אז אנחנו נותנים 0. אז בואו נייצר פה private final static int quality needed שווה 0 וזה ברור שזה יהיה ה-default 0 default quality.

  18. 05:08

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

  19. 05:28

    הנה היא כאן, פתחתי אותה לפני זה, וזה פשוט על ידי הוספת תיקייה חדשה מתוך Android Resource Directory, ואנחנו יכולים לראות שהיא נמצאת כאן. אז הוספתי את התיקייה הזאת, והוספתי בתוכה שני קבצי סאונד, OGG זה קובץ סאונד מסוים.

  20. 05:45

    ואנחנו רואים שהקובץ הראשון נקרא לייזר, והוא כמובן משמיע אפקט של לייזר, והקובץ השני נקרא סיירן, והוא משמיע אפקט של סירנה. יש לנו פה שני קבצים, ואנחנו צריכים את ה-ID שלהם.

  21. 05:57

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

  22. 06:33

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

  23. 06:58

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

  24. 07:21

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

  25. 07:47

    הוא לא יתחיל לבצע תאנה ולשאוב את הקבצים במהלך האפליקציה אלא בהתחלה עושה את זה וזהו הכל מוכן להשמעה. אוקיי אז כל מה שאנחנו צריכים לעשות זה פשוט to play the sound כל מה שאנחנו רוצים זה sound pool.play אבל פונקציית play גם כאן מקבלת כל מיני קבועים.

  26. 08:09

    הדבר הראשון שהיא אומרת לנו טוב אתם רוצים להשמיע סאונד אחלה אבל מי הקבוע שטענתי מקודם ונתתי לכם את ה-ID שלו?

  27. 08:18

    בואו ניקח את ה-Laser ID. הדבר הבא, ואתם יכולים לקבוע האם הסאונד הזה מושמע ברמקול ימין או רמקול שמאל או שניהם, ובכלל באיזה עוצמה הוא נשמע בכל אחד מהרמקולים.

  28. 08:39

    עד כדי כך יש לנו שליטה בהשמעה של הסאונד על ידי ה-Soundpool. אוקיי, אז בואו נגדיר כאן שני קבועים, אחד נקרא left volume והשני נקרא right volume ובואו נעצור וניגש למעלה, right volume רק, רשמתי בשקיעה, נעצור, נלך למעלה ונייצר לנו private final static

  29. 09:09

    float, הקבועים האלה מסוג float, ובואו נדביק, זה היה ה-right volume, ואנחנו צריכים לתת 0 עד 1 כקבוע. בואו נשכפל את זה, Left Volume, ופשוט ניתן 1 בתור המקסימום של הסאונד, 1.0 שווה Max Volume,

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: מצלמה - חלק 6 - שמירת קובץ תמונה

ההרצאה הבאה: Media Player

הרצאות קשורות מקורסים אחרים

  • השמעת קובץ מוזיקה

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון