דילוג לתוכן

מנוע הניגון

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

כל הפענוח הוא FFmpeg, בתוך התהליך, בכל פלטפורמה: FLAC, MP3, APE, ALAC, AAC, PCM (WAV/AIFF), Ogg Vorbis, Opus, WavPack ו-DSD הם מה שהייבוא מקבל, ומה ש-FFmpeg מדווח מהבתים, לא מסיומת הקובץ, הוא הקודק הרשום. דגימות יוצאות כ-float של 32 סיביות לשלב הפלט; המרת פורמט דגימה היא ההמרה היחידה שמתבצעת.

הפלט הוא API השמע המקורי של הפלטפורמה (Core Audio דרך cpal במחשב שולחני וב-iOS,‏ AAudio ב-Android). זרם הפלט מוגדר לקצב הדגימה ומספר הערוצים של המקור: קובץ 96 kHz מתנגן ב-96 kHz. אין שלב דגימה מחדש. התקן הפלט של ברירת המחדל נפתר בכל בניית זרם, כך שהניגון עוקב אחרי החלפות ההתקן של המערכת. ב-Android, קודקים שנתמכים בחומרה יכולים לעקוף את FFmpeg לגמרי לפענוח מועבר.

קריאות הזרמה

קישור למקטע הזה

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

רצועות כחלונות

קישור למקטע הזה

רצועה אינה קובץ; היא רשימה מסודרת של חלונות דגימה מעל קובץ אחד או יותר, שנבנית בייבוא מגיליון CUE או מהטווח העצמי של הקובץ. ייצוג אחד נושא כל צורת דיסק: קובץ לכל רצועה, דיסק שלם בדימוי אחד, pregap שחי בסוף קובץ אחד ובתחילת אחר, וריפים עם אובדן שנחתכו לקובץ לכל רצועה.

חלונות pregap מסומנים ככאלה. הניגון נכנס לרצועה ב-pregap שלה כשיש אחד (index 00, כולל שמע רצועה חבויה) בזמן שהשעון מציג זמן רצועה: המיקום נצמד לאפס עד שהרצועה עצמה מתחילה, והמשך המוצג אינו כולל את ה-pregap, כמו התנהגות של נגן CD.

ללא רווחים

קישור למקטע הזה

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

ייבוא מודד עוצמה משולבת (EBU R128) ושיא אמיתי, לכל רצועה ולכל אלבום, בזמן מעבר אימות הפענוח. Replay gain נגזר מהמדידות האלה בזמן הניגון, לעולם לא נכתב לתוך קבצים: יעד ‎−18 LUFS, מוגבל כך ששיא אמיתי לא יכול להיחתך, מוחל לפי רצועה או לפי אלבום, ועובר נקי בגבולות ללא רווחים. המצב נשלח כרגע בלי ממשק הגדרות וברירת המחדל שלו כבויה; אפשר להגדיר אותו בקובץ ההגדרות של הספרייה.

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