
waveInOpen, הכנת מאגרים, התחלת ההקלטה וניגון חוזר של מה שהוקלט. בדרך נתקלים בשגיאות שממחישות את חשיבות סדר הקריאות ואת העתקת המבנים.waveInGetNumDevs מחזירה את מספר התקני הקלט, ו-waveInGetDevCaps ממלאת את היכולות של כל אחד. הפורמט של ההקלטה חייב להיות זהה לפורמט של הניגון, אחרת הניגון יצא מהר או לאט מדי. התקן נפתח עם waveInOpen.unsigned char בגודל 8,000 בתים, כלומר שנייה אחת, מאפסים את WAVEHDR ומציבים לו את הכתובת והאורך.waveInPrepareHeader מכינה את המאגר, ו-waveInAddBuffer מוסרת אותו לחומרה. אפשר להוסיף מאגרים מראש, והחומרה כותבת לתוכם כשההקלטה פעילה.waveInStart מתחילה את ההקלטה. המאגר חוזר לתוכנית כשהוא מלא, ואורך מה שנכתב נמצא ב-dwBytesRecorded. תיבת הודעה מסבירה למשתמש שההקלטה נמשכת שנייה ומסתיימת.waveOutWrite ומנוגן דרך כרטיס הקול. ההרצאה הקליטה את המשפט "הלו משה" והשמיעה אותו חזרה.waveInGetDevCaps(i, &caps, sizeof(WAVEINCAPS)) ממלאת את היכולות של התקן קלט.waveInOpen(&hwi, deviceId, &wfx, 0, 0, ...) נפתחת ללא callback (הערך 0).waveInPrepareHeader ו-waveInAddBuffer נקראות לפני waveInStart.WAVEHDR לפונקציה כעותק: הפונקציה עובדת על העתק, והמבנה המקורי לא מתעדכן. ההרצאה תיקנה את זה והעבירה כתובת (מצביע).waveInPrepareHeader הספיקה לתפקוד תקין.הטקסט המלא של הדקות הראשונות בהרצאה «Audio - Recording waveIn» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
טוב, אנחנו ממשיכים בעולם הניגונים. אז בואו נפתח את הוויז'ואל סטודיו. דווקא רציתי שזה יישאר פתוח לי. יופי, טוב לי. את זה נגדיל, נלך לאודיו 0.1, נסגור את הסטארט פייג'.
ונשאלתי כמה שאלות. השאלה הראשונה שנשאלתי היא, רוצים דיון, תלמידים רוצים דיון על אקסה דצימלי ועל דצימלי ועל אוקטלי ועל בינארי, אז בהזדמנות אחרת נעשה את הדיון הזה.
זה יכול להיות אפילו שזה סדרה של הרצאות. באוניברסיטה בדרך כלל זה קורס בפני עצמו, או לפחות תחילה של קורס, זה כמה הרצאות ראשונות. אז אני לא יודע אם בזה נטפל כרגע. דבר שני, נשאלתי לגבי Unsigned, מה פירוש ה-Unsigned.
אז גם זה בהזדמנות צריך ללמד את זה בצורה מסודרת. אבל מה שזה אומר זה שהמשתנה מסוג unsigned לא יודע להציג, הוא לא מציג מינוס. אם אני מדפיס אותו הכל פה קשור להדפסות.
בין אם זה unsigned או signed או unsigned או כלום זה רלוונטי בעצם להדפסה. כי מבחינת המחשב אין הבדל מה שאני נותן לו גם אם זה unsigned הוא יודע לאכול מינוס. השאלה היא רק איך הוא מצפיץ את זה, איך הוא מציג את זה. מבחינת מה שיש לו בבטן אין הבדל.
אם אני אומר לו מינוס אחד, בכל מקרה אין דבר כזה מינוס במחשב. מחשב בנוי ממעגלים חשמליים שדולקים או קבועים, מאפס ואחדים.
אז מה זה אומר שזה מינוס? אז יש לו איזושהי דרך לדעת מתי להציג את זה עם מינוס לפני זה ומתי לא להציג את זה עם מינוס, אבל זה רק המינוס, זה רלוונטי רק לתצוגה לא בעצם לא נכון זה גם רלוונטי לפעולות חשבוניות אבל מאחורי הקלעים לא משנה בקיצור בהזדמנות אחרת נדון בזה ונתעמק בזה לא לעכשיו כרגע כל מה שאנחנו אומרים זה
שזה לא מעניין את דעת המינוס אנחנו אומרים שזה בין 0 ל-255 אלה הערכים ולכן זה Unsigned זה לא מעניין אותנו מינוס אז עשינו את זה Unsigned והשאלה האחרונה שנשאלתי הייתה לגבי הפלאגס של הפריפר הדר או של האופן או של מי, איפה היה הפלאגס? זהו, של הווייב הדר.
את הווייב הדר יש את הדרך אחת של פלאגס שבכלל לא טיפלנו בו ועדיין הכל עובד, אז סקרן אותנו איך זה קרה. אז בואו נעשה אולי F1 על ווייב הדר.
הנה ווייב הדר, בואו נעשה לו סינק. יפה, אנחנו נמצאים אגב באזור של אסטרקטים. באזור של אסטרקטים ליד הפאנקשן של המולטימדיה רפרנס.
פה נמצאות הפונקציות, הנה הווייבים ופה נמצאים אסטרקטים, תמיד זה אותו מבנה. לא משנה איפה אתם ב-MSDN, תמיד יש רפרנס, ברפרנס יש פאנקשן סטרקצ'רס או כל מיני דברים אחרים.
יפה. אז זה ההדר, אז בואו נראה מה הוא אומר לגבי הפלאגס, הוא אומר לגבי הפלאגס שזה יכול להיות Begin Loop, זה יכול להיות Done, זה יכול להיות N Loop, אוקיי בוא נראה מה זה, מה זה, מה זה, בוא נעשה דברים, Windows to indicate that the buffer has been prepared.
אבל מה אנחנו אמורים לשים שם? פה לא כתוב מה אנחנו, פלאגס, פלאגס, supply information about the buffer, reformed and redefined, אבל מי אמור לשים מה, איפה? בואו נראה מה לגבי פריפר הדר, הנה פריפר הדר, F1, בואו נגדיל את זה, אז פרפר הדר רימארקס דה אלפי דאטה באפר לינקס דה פלאגס ממרז אוף דה הדר פונקצ'ון מאז די סט
בפור קולינג דה פונקצ'ון דיס פונקצ'ון. ראינו שזה לא נכון, דה פלאגס ממרז מאז די סט טו או פרפרד או בגין או בו אין לופ. אני לא מתפלא שפרפרד זה אפס.
בואו נבדוק מה זה w h d r כף תחתון פרפרד. אז הנה w h ונגיד שw ווייב הדר נקודה די דאבליו פלאגס שווה ל... עוד פעם, אני כבר לא זוכר. דאבליו איידש די אר דאבליו איידש די אר כף תחתון פריפרדף שתים עשרה ושתיים.
סט איף דיס הדר אשבין פריפרד. אוקיי, אז מה שהוא אומר זה משהו נורא מוזר. הוא אומר, דפלאגס דלינקס ביסט טו או זה או זה או זה. ודפלאגס חייבים לקרוא לו לפני.
הפלאגס לינקס ולופס ממבר אוף דה ווי ודה סטארצ'ר קן צ'יינג' ביטווין קולס טו דיס פונקצ'ן אנד דה רייט פונקצ'ן. יווני פלאגסט קן צ'יינג' לסינדרלס ודה פלאגס ממבר אוף דה ביגינופ אנד לופס.
איף יו צ'יינג' סייז בפור רייט דה ניו ווילי מאסט בי לתן דה פריפרד וליו. פרפיילד אין לו שום אפקט. אוקיי, בואו נראה, ושהוא פריפרד. אם נלך רגע לבאק, אז הוא יכול להיות פריפרד.
אה, אנחנו שמים אותו פריפרד. זה לא מובן לי. מה המשמעות של זה? אבל אני חושב שאני... הרי פריפר הדר מכין את ההדר, אז הייתי אומר שאחרי שקוראים לו פריפר הדר, רק אז זה נהיה פריפרד.
בואו נשים פה ברייק פוינט ונריץ אותו. כרגע זה לא מדאיג אותנו כי זה עובד, אבל כשדברים מפסיקים לעבוד, אז אנחנו מתחילים לחפש חשודים, ואז כל מה שלא עשינו לפי הדוקומנטציה הופך להיות חשוד.
שווה כנות קונבאות from unsigned, הנה בעיה, from unsigned charred 8000 to LPSTR. נכון, זה מאחורי הכליל זה unsigned, אז כדי שזה יהיה בסדר, אז אני אמיר אותו ל-LPSTR, CTRL-SHIFT-B. קיבל את זה, בואו נריץ את זה.
יפה, 0, Enter, וזה. מייבדר, ככה וככה, וזה בכלל לא מעניין אותנו. מה שאותנו מעניין טיפה יותר זה הברייק פוינט הבא.
יפה. ומה קרה עם יבש שווה? כמובן שזה כרגע 0, בואו נדלג על זה רגע ונגיד לו פריפר. הוא אומר, הכל עבר בשלום, מה עכשיו הערך של?
הערך שלו זה 2, 2 זה פריפרד, הוא פריפרד, עכשיו הוא פריפרד. אני לא יודע למה הם אומרים שצריך להגיד שהוא prepared לפני שעושים prepared, זה לא נשמע לי הגיוני.
אני לא הייתי קורא לזה. נשמע שהדוקומנטציה פה משהו לא בסדר. הוא גם אומר prepared by Windows. Windows נותן את הערך הזה, to indicate the buffer has been prepared with the wave in or wave out prepared ahead of function. נו, אז זה בסתירה מפורשת למה שכתוב כאן.
The flags members must be set to prepared, טוב פה הוא לא אומר את זה, אבל פה, The flags members must be set before calling this function. יפה, אז הגענו לסתירה בדוקמנטציה עצמה, ומי שלדעתי מכריע זה א', ההיגיון, וב', העובדה שזה עובד. ההיגיון אומר, אין היגיון שאני אתן לו ערך prepared לפני שאני קורא לו.
מעניין אותי מה יקרה אם באמת נעשה מה שאחד מהצדדים ב-MSDN אומר. עשר ועכשיו אני אקרא לו וזה לא משפיע זאת אומרת זה גם בסדר הכל בסדר יפה זה לא משנה אבל בכל זאת אני אישית לא הייתי עושה מה שאומרים ב-MSDN כי הם אומרים דבר והיפוכו וצריך להחליט מה לעשות וההיגיון אומר שאנחנו לא נעשה את זה מה שאומר לי ההיגיון וזה גם עובד בלי יפה
זה דבר ראשון. דבר שני שרצינו זה שכשמשתמש מפעיל את המערכת מבחוץ ממערכת הקבצים אם רצינו שעדיין המערכת תעבוד לו, לא רק שהוא מדבק מתוך הוויז'ול סטודיו.
מה שאנחנו ראינו זה כשהפעלנו בהרצאה הקודמת את המערכת, אנחנו גילינו, אם ניגש ל-1 ול-1, אז נגיד לו 0.
או, זה מעניין. The way of adder was not prepared. Use the prepare function to prepare the adder and then try again. זה מעניין.
מה הוא רוצה? הוא הפעיל את מה שעכשיו קימפלנו. אולי לא כי לא שמרנו בואו למרות שעשינו בילד בוא נעשה לו F6 אמור לבנות את זה ויז'ל סטודיו מה יכול היה להיות לו ויז'ל סטודיו איך הוא קשור לסיפור לא יודע בוא נעשה שוב להריץ נגיד לו אפס כן בכל מקרה הוא נסגר בטרם זמנו הוא לא מצליח הוא לא מספיק להשמיע את הצליל
עאוט ווייב אאוט רייט פונה לחומרה ואומרת לה תנגני תנגני אבל אז מיד מיין מסתיימת וכשמיין מסתיימת מערכת ההפעלה מנקה אחרי מיין וסוגרת את כל מה שהפרוסס פתח ואחד מהדברים היא סוגרת את הערוץ ומבטלת את הרייטס יפה אז אנחנו לא שומעים כלום אז מה שצריך זה להגיד למשתמש אם סייארת אז צריכה אתה לאנטר אז סי אאוט סי
אאוט פליז היט אנטר ון רדי טו קוויט ואנד ליין ואז סי אין לתוך איזשהו משתנה אז נגדיר משתנה דאמי חייבים אין פה אין פה זה למרות שאני יכול להשתמש בסי אין נקודה גט מה זה גט ליין?
גט ליין, אי אפשר להבין מה הדבר הזה עושה. גט ליין, אני מקבלת פוינט, אני עדיין צריכה משהו. מה עם גט שר? גט, זה מקבל כלום, וגט, מקבל הרבה מאוד, וגט לוק, כל זה, גט לוקל, הוא בכלל מחדיר את הלוקל, הוא מחדיר את השפה המקומית.
אוקיי, אבל מה לגבי סתם, יש פונקציה get char, get c, get c עובדת עם קובץ ו-get r מחזירה את char, אני חושב שהיא לא ממתינה למקלדת ו-get e, יש get c, get char echo גם לא טוב לנו, get c אמרנו גם לא טוב, יש את כנף, כנף מחכה ל-enter,
אבל היא גם תרצה משתנה אני חושב אחרת היא תתחרפן. בקיצור אין הרבה ברירה צריך להגדיר פה משתנה דאמי אז נגדיר int דאמי ופשוט נקלוט לתוכו tn לתוך דאמי וזה בעצם ה-enter ובלי breakpoint אם נריץ ונגיד לו 0 enter הוא מנגן והוא אומר please enter זה ואני אומר לו enter אמרתי לו נגיד לו enter עוד פעם הוא מחכה למשהו הוא
חכם מדי הוא רוצה משהו זה גם כן בעייתי אני לא רוצה אני רוצה שהוא פשוט יעשה זה בואו ננסה בואו נראה מה קורה עם גט שער F5 טכניקולה פסיק ונריץ 0 enter ואני צפצף ו-enter טוב עדיין קוראים לזה בואו נראה איפה הוא נמצא כרגע אם הוא עבר את הגט על הגט מה הוא רוצה זה process?
it has to be deadlocked or is not running any user mode code all threads have been stopped מה על מה הוא מדבר מה הוא רוצה לא יודע מה הוא רוצה זה לא מעניין אותנו