SPDIF עד העצם – מהבייטים עד הביטים

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

7:00
  /  
27.03.2008
  
כתב: אריה אושורב (osherov)

הקדמה

המאמר יחולק לשלושה פרקים:
א. חלק ראשון יתאר מה זה בכלל SPDIF לשם מה הוא נוצר ומהם יכולתו ?
ב. יצלול קצת לאיך המחשב בכלל ואיך כרטיסי הקול בפרט מטפלים ב SPDIF
ג. מהם יכולות ה AC3Filter פילטר (זה יהיה חלק נפרד ממאמר זה)

חלק ראשון : מה זה בכלל SPDIF ?

הגדרה (לא מילונית):

SPDIF (נכתב גם כ S/PDIF) הוא פרוטוקול שנוצר לצורך העברת נתוני אודיו על תווך דיגיטלי. הפרוטוקול מגדיר את שכבת ה "קו" (Data Link Layer protocol) כלומר מגדיר ממש את מעבר הביטים בין שתי תחנות ומכך גם נגזרת הגדרה לשכבה הפיסקלית (Physical layer) שכבר ממש מגדיר את הכבל לשימוש בפרוטוקול זה וכו´.

איך הכל התחיל:

בתחילת הדרך SPDIF (ראשי תיבות של Sony/Philips Digital Interconnect Format) נוצר רק כדי לתת פתרון של העברת 2 ערוצי אודיו (Stereo PCM) בצורה דיגיטלית ממכשיר אחד למכשיר אחר (לדוגמה העברת אודיו ממכשיר נגן CD לרסיבר).

פרוטוקל זה מאוד פשוט ואמר בעצם שדגימות האודיו ישלחו בתדר קבוע, דגימה אחרי דגימה (ביט אחרי ביט). כל דגימה כזאת היא בגודל של 32 ביט (4 בתים) כאשר 8 ביטים מתוך ה 32 משמשים לצורך סינכרון וכך 24 ביטים נשארים לדגימת הקול עצמה. ברוב המקרים הדגימה תהיה בגודל של 16 ביט. במקרה זה 8 הביטים הנוספים תמיד יהיו שווים ל 0 (ה 0-ים האלו יהיו תמיד יהיו בחלק התחתון של הדגימה).

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

בפרוטוקול הSPDIF יש הפרדה לאלמנטים שנקראים frames(יש 192 פריימים בבלוק אודיו אחד)
ובכל פריים יש הפרדה ל 2 אלמנטים
שנקראים channels (השמאלי והימני)
וכל
channel כזה מכיל את אותם 32 ביטים שהם דגימת קול אחת (מערוץ אחד)

כאמור דגימה אחת היא בגודל של 32 ביטים להלן תמונה המתארת את הפורמט.

  • ביטים 0-3 (ה 4 ביטים הראשונים בדגימה) : אחראים על שידור של רצף מוגדר של ביטים שתלויים בדגימות הקודמות וזה נעשה לצורך זיהוי תחילת הדגימה וזיהוי יציאה מסנכרון
  • ביט 28-31 (ה 4 ביטים האחרונים בדגימה) : שכל אחד מהם מעביר סטטוס לגבי הדגימה
    כגון ביט parity לזיהוי תקלות וביט validity שמגדיר ליחידה המפענחת האם ניתן לקודד דגימה זאת או לא

ואז לפתע הגיע האודיו רב-ערוצי (surround) לקלנוע הביתי

ברגע שעולם הסראונד (מספר רב של ערוצי אודיו) נכנס לתחום הקולנוע הביתי ה SPDIF היה המעומד המתאים ביותר כדי להשתמש בו לצורך העברת אודיו רב-ערוצי זה בצורה דיגיטלית. כאן נוצרה בעייה. הממשק הנוכחי משתמש רק בדגימות 16 ביט PCM (נתונים לא דחוסים) אבל עכשיו צריך להעביר 6 ערוצים (ואולי אף יותר) ?!

אז איך עושים את זה ?

בגלל הרצון לשמור על תמיכה לאחור הוחלט לא לשנות את הממשק (ופה בעצם היתרון הגדול אך גם החיסרון הגדול של ה SPDIF) אלא הוחלט לשדר נתונים דחוסים של האודיו הרב-ערוצי במקום שידור ה PCM הלא דחוס (שימו לב שלממשק הדיגטלי זה לא משנה מה התוכן המשודר מכיוון שהוא סתאם משדר רצף של 0-ים ו 1-ים).

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

בגלל שהנתונים הדחוסים משודרים במקום נתוני ה PCM סטריאו הלא דחוסים הביטרייט חייב להישאר אותו הדבר.
שימו לב שבדר"כ הערוצים הדחוסים צורכים פחות ביטרייט מאשר ערוץ PCM הלא דחוס!

בשל כך לנתונים הדחוסים לעיתים חייבים להוסיף 0-ים כדי שיהיו באותו קצב השידור (כמובן שזה חיסרון כי יש פה ביזבוז של רוחב פס)

החיבורים הנפוצים

שני החיבורים הנפוצים לשימוש SPDIF בחיבור בין שתי יחידות הם חיבור קואקסלי (RCA) וחיבור אופטי

כבל אופטי

כבל קואקסייאלי

החיסרון הגדול של SPDIF

בגלל הפרוטוקול ובגלל החיווט יש מגבלה של קצב נתונים ולכן במידה והנתונים הדחוסים הם בקצב נתונים גבוה יותר מהתקן אז אין אפשרות לשדרם כלל דרך שימוש ב SPDIF ! זאת אחת הסיבות שכל פורמטי האודיו החדשים והמתקדמים אינם יכולים טכנית להשתמש בתווך ה SPDIF להעברת הערוץ ולכן חייבים היו למצוא להם תווך אחר (כגון חיבורי HDMI).

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

מקרה מיוחד: איך מעבירים DTS על גבי תווך SPDIF

ישנם שני דרכים להעביר שידור DTS על גבי תווך SPDIF :

  1. Wrapped DTS – לכל פריים DTS (יחידה משודרת) מוצמד SPDIF header בנוסף מוספים 0-ים כדי לקבל את הביטרייט המתאים
  2. Padded DTS – לנתוני ה DTS מוסיפים רק 0-ים כדי לביטרייט המתאים

רוב הרסיברים (decoders) יודעים לפענח את שני הסוגים, אך במידה ולא אז חלק מהפילטרים במחשב (כגון ה AC3Filter) יודעים לבחור את עטיפת ה DTS המתאימה. שימו שלא תמיד ניתן להשתמש ב Wrapped DTS מכיוון שקיימת אפשרות שתוספת הבתים תחרוג ממגבלת ה SPDIF לכן במקרה זה ניתן יהיה לבחור רק את העטיפה השנייה (שוב ה AC3Filter פילטר יודע לעשות זאת)

סיכום החלק ראשון

ישנם שני ממשקי SPDIF:
1. העברת שני ערוצים לא דחוסים (PCM Stereo)
2. העברת מספר ערוצי אודיו דחוסים (כגון AC3 ו DTS)

יחידות הקצה שתומכות בכך יודעות לזהות האם הערוץ דחוס או לא (זה רשום ב Header-ים של הערוץ המשודר) ואז הם יודעות האם צריך לפענח את הערוץ לפני ההשמעה (שידור לרמקולים) או לא


סימון בצג של יחידת הקצה (הרסיבר) שהוא מקבל אודיו רב ערוצי מסוג
DD (נקרא גם AC3)


סימון בצג של יחידת הקצה (הרסיבר) שהוא מקבל אודיו רב ערוצי מסוג DTS


סימון בצג של יחידת הקצה (הרסיבר) שהוא מקבל אודיו לא מקודד PCM Stereo

חלק שני : איך המחשב בכלל ואיך כרטיסי הקול בפרט מתמודדים עם SPDIF

איך כרטיסי הקול מעבירים אודיו לא דחוס דרך יציאת הSPDIF (שידור PCM)

כאשר תוכנה כל שהיא (כגון נגן מדייה סנטר) מתחילה לנגן אודיו רב ערוצי לא דחוס (multi- channel PCM) כרטיס הקול יאפשר זאת אך מכיוון ,שכמו שהוסבר בחלק הראשון, SPDIF מאפשר העברה רק של 2 ערוצי אודיו לא דחוסים כרטיס הקול תמיד יבצע פעולה שנקראת down mix שתמיר את האודיו הרב ערוצי לשני ערוצים בלבד!

אני חוזר ומדגיש שערוץ אודיו לא דחוס ב SPDIF תמיד יעבור כ 2 ערוצים בלבד (סטריאו)

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


כרטיס עם חיבורים קואקסלים (RCA) ואופטיים

קצב הדגימה בכרטיסי הקול בשימוש SPDIF (כלומר – Sample Rate)

כרטיס הקול דרך שמוש בממשק ה SPDIF תומכים באחד או יותר קצבי דגימה (כגון 32kHz, 44.1kHz ו 48kHz וכו)
לדוגמה 48kHz אמר שהאודיו נדגם 48,000 פעמים בכל שנייה אחת.

קיימת בעייה בחלק מכרטיסי הקול אשר תומכים רק בשידור בקצב דגימה אחד שהוא בדר"כ 48kHz ולכן בכרטיסים אלו דגימות ה 44.1kHz הכל-כך נפוצות ישודרו רק אחרי המרה לקצב הדגימה הנתמך (או לא ישודרו בכלל).

שידור אודיו רב ערוצי דרך כרטיסי הקול דרך ממשק ה SPDIF

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

שימו לב שיכול להיות מצב בו שני ערוצים שונים המנסים לנגן בו זמנית יש קצב דגימות שונה ואפילו גודל כל דגימה הוא לא זהה (נניח שערוץ אחד נדגם בקצב של 44kHz בגודל של 8 ביט לדגימה וערוץ אחר נדגם בקצב של 48kHz ב 16 ביט גודל כל דגימה) במצב זה כרטיס הקול יבצע שינוי של קצב הדגימה ושל גודל כל דגימה כדי שיהיה שויון בין הקצב השידור וגודל הדגימה בין כל הערוצים השונים (זה יכול להיות להעשות ע"י הדרייבר של כרטיס הקול או ממש על החומרה עצמה).

חשוב לציין שאין אפשרות לבצע פעולה זאת (mixing) על ערוץ מקודד שאמור להיות משודר ליציאת ה SPDIF והסיבה היא שהנתונים כבר עטופים ומקודדים בתוך אריזת ה SPDIF ואין דרך לפתוח את הנתונים ולעשות שינויים על הדגימות מחדש. לכן ניתן לנגן רק שידור SPDIF מקודד אחד ברגע נתון במחשב. תנסו בזמן ניגון סרט לנגן גם איזה קובץ WAV ותראו מה יקרה…

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

במקרה שאפליקצייה (נניח הנגן) מנסה לשדר תוכן מקודד דרך ה SPDIF אלה הדברים שכרטיס הקול מבצע:

1. מפסיק (mute) כל אפליקצייה שכרגע מנגנת PCM
2. פותח את ערוץ ה SPDIF בצורה בלעדית לאפליקצייה המשדרת (exclusive)
3. מתחיל לשדר את התוכן המקודד
4. מונע מכל אפליקצייה אחרת לנגן תוכן כלשהו דרך ה SPDIF (במחשב תתקבל הודעת שגיאה)

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

1. מפסיק את שידור ה SPDIF
2. סוגר את הערוץ ה SPDIF שנפתח
3. משחזר את כל שאר ערוצי ה PCM (שהיו ב mute)
4. מאפשר לאפליקצייה להתחיל ניגון מחדש דרך ה SPDIF

בעייה שקיימת בחלק מהכרטיסים עקב המעבר בין השידורים על SPDIF

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

בנוסף, חלק מכרטיסי הקול לא תומכים בכלל בשידור ערוץ אודיו מקודד דרך יציאת הSPDIF …

לעיתים קיים פתרון לשתי בעיות אלו ע"י שליחה לכרטיס הקול ערוץ אודיו רב ערוצי מקודד אבל בפועל לדווח לכרטיס על שליחה של נתוני PCM לא מקודדים וכך הכרטיס "יחשוב" שזה תקין ויאפשר את השליחה של נתונים אלו. זה לא תמיד עובד ולעיתים יכולים להיות לא מעט בעיות מכיוון שקיים סיכוי שהכרטיס קול ינסה לעבד עם הדגימות שהוא קיבל (הוא הרי חושב שאלה נתונים לא מקודדים) וזה כמובן יהרוס את הקידוד ולכן צריך מאוד להיזהר בשימוש באופצייה זאת (לדוגמה ב AC3Filter הגדרה זו אפשרית).

לסיכום החלק השני

אמנם חלק גדול מכרטיסי הקול מאפשרים שידור של ערוצי PCM לא דחוסים וגם שידור רב-ערוצי מקודד דרך יציאת ה SPDIF אך לא פעם בגלל תקלות ומגבלות בכרטיסי הקול (או בדרייברים שלהם) אנחנו לא מצליחים לקבל שידור SPDIF מקודד תקין ביחידת הקצה (רסיבר)

מקורות למאמר

  • אתר הבית של EBU – European Broadcasting Union
    הם אלה שביחד עם אירגון Audio Engineering Society – AES כתבו את התקן שנקרא AES/EBU (שממנו נגזר ה SPDIF).
  • אתר הבית של AC3Filter פילטר המפורסם (שנכתב כ Open Source ע"י אדם אחד בעל ה-NICK NAME valex )

לדיון בפורומים לחצו כאן


7:00
  /  
27.3.2008
  
כתב: אריה אושורב (osherov)

1