קונור אריס: היי.
אני קונור האריס.
אני CA CS50 באוניברסיטת הרווארד.
סטפן קרווסון: אני סטיבן קרווסון.
אני TF לCS50 באוניברסיטת ייל.
קונור אריס: ואנחנו הולכים לדבר על כמה טכנולוגיות שאולי
רוצה להשתמש אם אתה מעוניין בעושה פרויקט גמר או באמת
דבר עם מוסיקה.
אנחנו הולכים להתמקד בראשונים שפת תכנות בשם הסקל.
זה פונקציונלי שפה, כך הפרדיגמה
שונה מאוד מC או PHP או שפות אחרות הכרחית
שהשתמשת כבר, ובמיוחד על ספרייה נכתבה בהסקל
נקרא Euterpea, שיכול לעזור לאנשים עם כתיבת מוסיקה פונקציונלית,
באופן בסיסי.
וסטיבן ינחה אותך באמצעות דוגמא מצוינת לכך.
>> אחרי זה, אני אכיר לך משהו שנקרא LillyPond, ש
היא טכנולוגיה למוסיקה סדור.
זה כמו סוג של LaTeX למוסיקה אם מישהו מכם
השתמשתי LaTeX לשיעורי מתמטיקה או שיעורי סט P אחרים או מה שיש לך.
ואז אני אתן לך, שוב, כמה דוגמאות פשוטות של ש
ולהצביע באופן כללי אתה כיוון של כמה משאבים טובים יותר.
>> סטפן קרווסון: ב בנוסף, חשב שזה
יהיה מגניב להגדיר קצת רמזים
כיוון צינור בין קבצי MIDI-Euterpea נוצר
בLillyPond, כך אנו מספקים קצת הדרכה על תסריטים
כדי לעשות את זה, כי הם מסופק עם LillyPond
רק כדי לשמור אותו בקוד פתוח ולקבל צינור הולך.
קונור אריס: שוב, אנחנו צריכים להדגיש,
שתי הטכנולוגיות הללו, אתה לא צריך להשתמש בם ביחד.
הם לא נועדו לעבוד יחד, אם כי הם עושים יפה מאוד.
>> סטפן קרווסון: ימין.
ולגמרי בחינם.
קונור אריס: אז תודות, רק לקרוא את זה.
סטפן קרווסון: כדין ציין.
תודה לאנשים אלה.
זה אני להתעכב על רק לרגע.
תהליך ההתקנה זה קצת מסובך.
יש לנו לקרוא לי על GitHub שאתה יכול להעיף מבט על.
רק שלח לי אם יש לך שאלות.
אבל אנו נפעיל את זה בהנחה שזה עובד לכולם.
קונור אריס: ואם אתה לא יכול לקבל LillyPond לעבוד, לא ביג דיל.
אין הידור בשידור חי ש יהיה מעורב, לפחות בצד שלי.
סטפן קרווסון: הסקל ו LillyPond צריך לשניהם יש מתקינים.
Euterpea שהורדת כ חבילה, כך הלאה וכך הלאה.
על מוסיקה מחשב אז אנחנו מדברים.
וזו רק צפה ב50,000 רגל מאוד.
יש כמה היבטים שונים שלו.
וזה קשה, והוא הולך לטשטש כמה פרטים.
אבל אנחנו יכולים לחשוב על משהו כמו הרכב אלגוריתמי,
באמצעות אלגוריתמים, באמצעות קוד, כדי ליצור
איזה סוג ל-- אולי עצמי דומה רצף של הערות, או אולי הערות
תחת אילוץ מסוים.
ואז אלה יכולים להיות ביצע או פירש
עם מכשירים אנלוגיים או משהו כזה.
אבל ההרכב היה עשה אלגוריתמי.
>> אבל כמובן, אולי השטח של מוסיקה מחשב או מוסיקה דיגיטלית
אנחנו מכירים טובים יותר הוא דיגיטליים סינתזת קול או דגימה דיגיטלית
והקלטה דיגיטלית.
הרבה מכשירים דיגיטליים נעשה באמצעות דגימה דיגיטלית.
למעשה, נהיה שימוש באחד מאותם ב הצורה של ספריית גופן צליל מאוחר יותר.
>> אבל יש גם משהו שנקרא סינתזה דיגיטלית שיצאה
של שנתי ה -70 ולתוך "מאוחר -80 ב ימאהה וג'ון Chowning בסטנפורד
עושה סינתזת FM או סינתזת אפנון תדר,
שבו היה לך ספק אות ואות ויסות
גם בספקטרום השמע.
אבל מה שאנחנו מתמקדים ב היום הוא משהו שנקרא MIDI,
וכמובן, הרכב אלגוריתמי.
>> אנחנו לא הולכים לעשות מכשירים, אבל אנחנו במקום הולכים לעשות קצת מוסיקה,
ואז שיקבל פירש על ידי כמה מכשירים ש
הם conformant ל סטנדרטי. הכללי MIDI
אז מה MIDI?
אני לא הולך לקבל מדי עמוק לתוכו, אבל MIDI הוא פרוטוקול להעברת נתונים.
זה סוג של מדריך על פני חברות ותעשיות שונות
לארגון צלילים או תיקונים.
אז אנחנו תראו ש יש סטנדרטי MIDI
לכל כלי ההקשה שונה צלילים והמלצות MIDI
לכל הסוגים השונים של סינטיסייזר או סוגים שונים של כל המכשיר
קבוצות בתזמורת, אומרים.
>> אתה בטח מכיר 0 דרך 127 הודעות MIDI.
אות MIDI היא בדרך כלל אחד קצת המציין
בין אם זה נתונים או מנות מעמד, ואז יש
שבעה ביטים של אות.
ואלה יכולים לשלוט הכל מנפח
לפעולה או לחץ על מקש מסוים
אם אתה מבצע עם MIDI בקר כמו גם, כמובן,
הערות.
וכמובן, יש MIDI היה שימושי מאוד,
כי זה דרך חוט יחד או שרשרת דייזי
חבורה של התקני חומרת MIDI.
יש לי שבעה או שמונה בחזרה בבית שלי.
זה נהיה ממש מסובך, אבל זה ממש חזק.
וזה באמת ישן.
זה מתחילת שנתי ה -80 ', ו זה ממש נחמד וקטן.
קונור אריס: כן.
כל נינטנדו הקלאסי משחקי וידאו כנראה הייתם
יש לי קבצי MIDI למוסיקה, למשל.
>> סטפן קרווסון: הנה דוגמא של MIDI הכללי,
מראה MIDI כסוג של פרוטוקול כללי.
ואני חושב שאנחנו יכולים לחשוב על הבדל בין המפרט
שצריכה להיות משהו כמו מכשיר אלה נשמע ובפועל
מימוש של מכשירים אלה נשמע בגופן קול או MIDI מסוים
סינתיסייזר כהבדל בין אולי typeface-- שאומר,
באופן כללי, זה העיצוב של דרך מסוימת זו לייצג
characters-- וגופן מסוים שיש לו גודל מסוים וגוון,
ויש מימוש כל--
>> קונור אריס: אולי היית השוואה טובה יותר
להיות סטנדרטי Unicode says-- זה נותן לי מספר לכל דמות, ובאמת
כל שפה בעולם, או מערכת רחבה של תסריטים של שפה
בעולם, ולאחר מכן אלה שניתנו למשהו גרפי
על ידי חבילות גופן שונות.
וכמובן, אתה יכול לחשוב על MIDI כמו Unicode של צליל.
וזה רק רשימה ל-- זרם גדול אירועים ומכשירים ומה לא,
ואתה צריך שתהיה לי נפרד תכנית, כמו גופן,
כדי להבהיר של משהו שנשמע.
>> סטפן קרווסון: אז למה הסקל?
הסקל הוא תכנות פונקציונלי שפה, מתקדמת מאוד,
שונה מאוד מC, שונה מאוד מPHP.
ואנחנו הולכים לראות שיש קלות הרכבת פונקציות בהסקל
שיאפשר לנו רוח באמצעות הלחנה או הקלדה, תמלול,
משהו כמו פררתי ז'אק, השיר הזה פשוט ש
יש הרבה חלקים בזה ש הם עצמי דומה או חוזר.
אז זה יהיה חלק מ המוטיבציה למה
אנו משתמשים הסקל, שבי פונקציות הן אזרחים מהשורה הראשונות.
>> ואני רוצה להאריך זה קצת.
זה קצת קל notate פרר ז'אק בהסקל.
אבל מה אנחנו אם רצינו להוסיף חלק תוף לזה?
מה אם אנחנו רוצים לנסות לעשות משהו כמו תוף רולנד 808 או 909
מכונה שבה יש לך כ -16 שלבים שונים?
בדרך כלל אלה הם חשב על הערות ה -16 כ.
ואתה יכול לשלוט בעולם הקצב, ואתה יכול לבחור
חבורה של חלקי כלי הקשה שונים של תוף בס, זיבה, מלכודות שונות,
כובעים גבוהים פתוחים וסגורים על סוג של ערוצים אלה,
ואז אתה יכול EQ או להתאים את נפחן.
>> ואנו רואים דרך נחמדה ב הסקל לייצג שלב זה
רצף עם כל דברים מגניבים שונים בהסקל
אנחנו יכולים לעשות עם יצירה רשימות וסינון על רשימות,
מיפוי על רשימות, מיפוי פונקציות על רשימות.
והתנצלות מהירה.
זה מאוד שטחי וסקיצה מדי מהירה
חלק מההיבטים של הסקל וEuterpea,
שהוא תחום ספציפי שפה מוטבעת בכתב
בהסקל לסוגים מוזיקליים.
אז אנא אל לבדוק את הקוד באינטרנט.
לפטר את GHCI, המהווה את גלזגו הסקל מהדר מתורגמן.
ואני אהיה לעשות קצת זה בקצת
כך שתוכל לראות איך עושה את זה.
>> וזה מאפשר לך לטעון בעם כל-- התחביר הוא מעי גס ולאחר מכן
הפקודה.
אתה יכול לטעון בקבצים.
אתה יכול להשתמש בעיון בקבצים אלה כדי לראות את כל הפונקציות ש
קיימים במודול מסוים.
ולאחר מכן כפי שנראה, סוגים וסוג שיעורים הם כל כך חשובים בהסקל,
כך שאתה תמיד יכול check-- במיוחד אם אתה עובד בDSCL חדש
כמו זה, מה הוא סוג מוסיקה?
אני יודע על הדרך מספרית סוגי העבודה בהסקל,
אבל אני לא יודע הרבה על מוסיקה.
אבל אתה יכול לחקור את הדרך בה הם נמצאים שהוגדר על ידי שימוש בפקודת T או הסוג זה
ולאחר מכן קורא בבפרט פונקציה או אובייקט נתונים.
קונור אריס: כן.
אם חשב C וקלאנג היה קשוח על סוגים,
אין לך מושג על Haskell.
הדבר הטוב הוא שהסקל אם אתה יכול להשיג את הקוד שלך להדר
ואם בודק סוג הסקל, זה כנראה נכון,
כי המערכת היא כל כך קפדנית הסוג.
>> סטפן קרווסון: כן.
אז אני רק רוצה ללכת through-- ושוב,
זה לא עושה את זה justice-- כמה מ התכונות של הסקל כי, לפחות
לcreators-- והוא נוצר בסוף שנתי 1980 על ידי חבורה של אנשים,
ועדה של כ -20 אנשים-- חשב היו חשובים.
והדבר הראשון שהם מופיע בנייר ש
תאר את ראשיתו של הסקל במשך 20 השנים הראשונות או כך
היה שזה היה עצלן.
אז מה זה אומר?
>> ובכן, זה אומר כאשר יש לנו איזה ביטוי, אנחנו צריכים להעריך את זה.
והסקל עושה את זה בשיחה בדרך צורך או דרך שאינה מחמירה.
כלומר, אם יש לנו חבורה של רכיבים של הביטוי שלנו,
אנחנו מנסים לעכב את ההערכה של המשנה אלה
עד minute-- האחרון המוחלט כלומר, עד שבאמת צריכים אותם.
>> אז means-- זה שהוא ממש מגניב, במיוחד
אם אנחנו חושבים על ההפשטה של רצף צעד מוסיקלי.
אתה להפעיל אותו, ואתה מתחיל פועל sequence-- צעד
אם אי פעם עבדו עם תוף machine-- וזה רק הולך לנצח.
אז זה יהיה ממש נחמד אם יכול לחקות שבהסקל.
ואנחנו יכולים לעשות את זה עם אינסופי ערכים, ברשימות אינסופיות מסוימות.
זה קל מאוד להקליד רשימה אינסופית בהסקל.
רק אתה יכול להשתמש בתחביר למטה כאן, איפה אתה רואה 1 עד 3,
להסיר את נקודת הנקודה 3 1, ו שרשימה אינסופית
של כל המספרים הטבעיים הארכה על ככל שאתה יכול לדמיין.
>> אני רוצה להציג רעיון של קפלים מייד.
ושוב, במטרה סמינר זה הוא לא
כדי ללמוד על קפלים בהסקל או פונקציות מסדר גבוהות יותר.
אבל אני רק רוצה להציג את זה ל נותן תחושה של איך מוזר מדויקת
הסקל הוא וכמה חזק זה.
ובפרט, אנחנו הולכים להיות-- כאשר אנו עושים חלקי התוף השונים שלנו,
אנחנו הולכים להיות מניפולציה רשימות של מספרים, מקפלים אותם על זה.
וכדי לעשות את זה, אנחנו להיות באמצעות מפות וקפלים.
>> יש אסוציאטיבי תקין לקפל, שהוא אדם נכון זה
כאן-- 1 מינוס הכמות, 2 מינוס הכמות, 3 מינוס 0.
והתחביר ל קיפול, אתה נותן פי
ערך בסיס ולאחר מכן operation-- במקרה, הוספה או גריעה זו.
אני כבר הראה שני המקרים.
ואז יש מצברים ש מצטבר על כל הרשימה,
יישום שתוספת המפעיל או מינוס, ולאחר מכן צבירתו.
אז זה יהיה כל-- אם זה נקרא עם r פי תוספת של 0, מתחיל עם 0,
היינו אז לסכם את כל המספרים ברשימה.
וזה רשימה 1-3.
קונור אריס: אז לשים את זה אחר דרך, r פי לוקח שלוש טענות.
יש פונקציה ש עצמו לוקח שני טיעונים,
אז יש ערך מתנע, ויש רשימה של ערכים.
ומה שאתה עושה הוא שאתה לוקח ערך המתנע, ערך ראשון,
לשים אותם לתוך הפונקציה.
מה אתה לצאת, לקחת את זה, הזנה ש
לפונקציה של ערך שני, מה שאתה מקבל את,
לקחת את זה, להאכיל של פונקציה של הערך השלישי.
ואז אם אתה יורד כל רשימה זו דרך זו,
אתה הולך לקבל סופו של דבר כמה ערך ייחודי זה
מאותו הסוג של מה שאתה התחיל עם ומאותו הסוג
כדברים ברשימה, ולאחר מכן זה תוצאת חזרתו של ר 'פי
סטפן קרווסון: אז בפרט, אלה הם פונקציות מסדר גבוהות יותר,
בגלל שהם לוקחים עוד פונקציה כאחד מהטיעונים.
>> קונור אריס: כן.
אם השתמשת מסוימים אחר languages-- אני יודע R, [לא ברור]
שפה יש את זה, בשם צמצום.
אולי יש לך פונקציות דומות בשפות אחרות, רק בשם
דברים שונים.
>> סטפן קרווסון: ו מה שיפה R פי
במקרה זה הוא פי ש R יכול לעבוד עם רשימות אינסופיות.
אז בתחתית זה, P5 זה הוא יצירת ההערות ש
מופעלים ברצף הצעד ל כמה חלק תוף, תוף החלק החמישי,
ואולי זה קונגה תוף או משהו.
וזה בכוונה דרך קהה של כותב את זה,
אבל זה כיף, כי זה מוכיח הרבה
דברים על הסקל וEuterpea.
>> אז לקפל R של מעי גס colon-- זה רק מפעיל שדוחף דברים
יחד על list-- קרא ריק רשימה, הנמצאת במרחק סוגריים הריקים.
ואני קורא ש ברשימה האינסופית הזה.
למעשה זה שתי רשימות הוסיף יחד כאן למטה.
נקודת פסיק 1 6 הרשימה נקודה היא 1, 6, 11, 16.
אז Haskell-- רק כמה דמויות, ש
יכול ליצור כל רצף של מספרים
כי הם חמישה מספרים חוץ מתיחה על לאינסוף.
ואני צרף בתחילת שורה של list-- קצת יותר נמוך זה
3, 8, 21-- רק כדי להראות לך איך אתה יכול לשרשר רשימות.
>> ואז אני כבר מקופל על עצמו.
וזה בסופו של פשוט להיות סוג של פעולת זהות, אבל זה אינסופי.
ולקפל R יכול לעשות את זה, כי זה בעצלתיים מעריך, כמו בלעיל.
אם יש לנו 1 ו 2 ו -3, שאנחנו יכולים רק סוגר את כל השאר.
זה לא יעבוד ל מינוס או בתוספת, אבל זה
יעבוד למעי גס זה פעולת זהות ברשימה.
>> אז איך אנחנו למעשה להשתמש שאם יש רשימה ארוכה של דברים לאין שיעור?
ובכן, הסקל מספק הרבה functions--
ונראה יותר לאלה ב time-- שלך כמו לקחת
שאומר, בסדר, אנחנו יצירת הרשימה האינסופית הזה,
אבל אנחנו רק הולכים לקחת קצת מספר זה ובcase-- זה
אנחנו אראה את זה בהמשך code-- מכונת תופים שלנו
GM הוא רק סוג מסוים של עולם משתנה למספר הצעדים
ברצף.
על מכונות רול-באני הראיתי לך, זה בדרך כלל 16,
אבל אני יישמתי אותו עם 32.
זה לא משנה באמת.
>> הסקל הוא גם טהור, כך יש לו חזק הקלדת סטטי שקונור רמז.
אז פונקציות מתמטי בsense--
הם מתמטיים יותר שהם מובטחים
לא לגשת או לשנות כל סוג של משתנה או לבצע קלט או פלט.
אז אם יש לך פונקציה, זה דטרמיניסטי.
זה תמיד יחזיר את אותה הערך במדינה של התכנית
או נשאר אותו הדבר.
יש, כמובן, חריגים monadic לזה, אבל זה מעבר להיקף שלנו.
>> קונור אריס: כן.
מה שזה אומר, אם כי, הוא שיש הם [לא ברורים] חשובים כמה
השלכות של זה.
אחת מהן הוא שזה מאוד קל מקבל תוכניות הסקל.
כי אם יש לך, אומר, פונקציה של ש
צריך לפעול במיליון ערכים, אם אתה יודע שתמיד תהיה הפונקציה
לתת את אותו הערך אם אתה מאכיל בvalue-- מסוים
אם אתה F של [לא ברור] 1, F של 2, אז f של 3 או whatnot-- F של 1
לא הולך לכתוב את לקובץ או לעשות משהו
שישנה את הערך של f2.
אתה פשוט יכול להתפצל בפונקציה זו כדי מיליון מכונות שונות או מיליון
אשכולות או מה שונים, לקבל את כל התגובות בחזרה,
לקבל את כל ערכי ההחזרה בחזרה, ואז זהו זה.
אז מאוד קל מקבל דברים.
>> החסרון הוא קלט ש ופלט במיוחד
להשתלב במערכת הסוג בדרכים מאוד מסובכות.
אנחנו לא נכנסנו לזה עכשיו, אבל אני ממליץ לך להסתכל על כמה משאבים
באינטרנט אם אתה רוצה ללמוד על זה.
>> סטפן קרווסון: אז הקלד classes-- וזה
שיעורי was-- של סוגים הומצאו כדי לפתור
בעיה של עומס יתר מפעיל.
אז אנחנו רוצים שנהיה לי שוויון בין סוגים שונים של דברים.
כמובן, אנחנו יכולים לחשוב של-- שוויון בין סוגים מספריים
קל מאוד לחשוב על, אבל מה לגבי שוויון בין רשימות?
מה לגבי שוויון בין מבני נתונים רגל עץ?
וכל זה אפשרי ב הסקל בגלל שיעורי סוג.
>> אז אם אתה מגדיר type-- נתונים מסוים וכאן, אלה הם מסרים מוזיקליים.
אנחנו סוף סוף מקבלים למוסיקה מחשב.
אז יש לנו C, C חד, וכן הלאה וכן הלאה.
הם שייכים לחבורה של שיעורי סוג שונים.
EQ-- הם שייכים למעמד מסוג EQ.
זה אומר שהם תומכים ב פעולות שוויון.
אז אתה יכול להעריך אם אחד רצף של הפרימיטיבים מוזיקליים
הוא אותו הדבר כמו אחד שונה.
>> הם שייכים למעמד הסודר.
זה אומר שיש הזמנה לאלה.
D מגיע לאחר ג C חד מגיע אחרי C, כמו גם.
הם שייכים למעמד להראות, מה שאומר שהם יכולים
להיות מודפס לקונסולה או מסוף.
הם שייכים ל כיתה מנויות, ש
משמעות הדבר היא שלמרות ש אלה הם דמויות,
יש להם מספרי בסיסי ייצוג מתחיל ב 0
ונוסע דרך אולם הרבה דברים כאן, או כך 20,
או 30 או 40, אולי.
>> קונור אריס: וכש יש לנו סוג הנתונים
שderives-- עם מילת המפתח ש "Deriving--" סוג מחלקה מסוימת,
זה אומר שהמהדר ינסה כדי לבנות משהו באופן אוטומטי.
אז אולי אתה רוצה להגדיר איכות שונה.
אתה רוצה להגדיר C החד כשווה לדירת D, למשל.
עם בנייה זה כאן, אני לא חושב שC חד
ושטוח D יהיו שווה, כי מהדר באופן אוטומטי יהיה
אומר כל ערך אפשרי שונה שונה מכל אחר.
>> אז זה אפשרי לעקוף יישומי ברירת המחדל
סוגים אלה של כיתות.
שוב, מסתכל על ההתייחסות אם אתה רוצה ללמוד על זה.
סטפן קרווסון: ו כאן, למעשה, יהיה זה
להיות מועיל עבור כשאנחנו קוד מאוחר יותר.
אנו רואים חלק ממפעילי infix להרכב רציף,
הרכב מקביל, וכך שוב, אלה פלוסים וסימנים שווים
מוקף בנקודותיים.
זה אומר שאנחנו יכולים לשחק שונים אלה הפרימיטיבים מוזיקליים אחד אחרי השני.
זה הרכב רציף.
>> או שאנחנו יכולים לשחק בהם ב במקביל באותו הזמן.
אז אני יכול להיות בעל ערך מוסיקלי, ואז זה שווה ונקודות,
infix מפעיל הרכב מקביל, ולנגן אותם כסוג של אקורד.
ואנחנו הולכים להשתמש זה כאשר אנו משלבים
חלק התוף שלנו עם שלנו שיר פרר ז'אק קטן
לשחק שני רצפים של אלה ערכים מוזיקליים באותו הזמן.
>> פרוה קארי הוא-- הייתה אחרון שמו של הסקל קארי, ש
תמונת הסקל נקראת על שמו.
וזה מאפשר לנו אלגנטיות נחמדה כשאנחנו
כתיבה שונה כל אלה פונקציות או מסננים שאנחנו
הולך להיות מיפוי על הרשימות שלנו.
פונקציה של שני arguments-- F של X וy--
יכול להיות מיוצג כ f של x להחיל y.
אז זה פונקציה של טיעון אחד שחוזר
פונקציה נוספת של טיעון אחד.
אז זה אומר שאנחנו יכולים למפות פונקצית f של x על רשימה של y של.
קונור אריס: רוצה לתת דוגמא לכך?
סטפן קרווסון: כן.
יש לי דוגמא ממש כאן מ חלק מהדברים שאנו כותבים.
אז לשכפל 2-- גם, לשכפל ייקח
ערך אחד, אשר הוא כמה פעמים לשכפל משהו,
ואז זה ייקח value-- בדרך כלל רשימה או משהו.
אז הנה, אנחנו מיפוי לשכפל 2 על רשימה אחרת.
>> אז אם אנחנו המפה לשכפל 2, אם אנחנו לשכפל 2 חלים
לאלמנט הראשון של list-- זה ו אלה הם רשימות של phrases-- המוזיקלי
יפיק שני של "לך sleeping--" כך אתה ישן, אתה ישן.
אז עכשיו יש לנו שני.
אבל לשכפל לוקח שני טיעונים, אבל בגלל שאנחנו
פרוה ולאחר מכן מיפוי, אנחנו יכולים לייצג לשכפל 2
כמי שהוחזר כפונקציה של argument-- אחד פשוט משכפלים פעמיים.
ואז אנחנו פונים לכל אחד ש אלמנט של רשימה זו של ביטויים.
>> וCONCAT הוא הסקל מבצע לשיטוח רשימה.
בגלל לשכפל 2 לייצר רשימה של רשימות.
וזה צורת ביניים זה כאן.
וכך אז אנחנו יכולים CONCAT או לשטח שיצאו פעמיים.
קונור אריס: פשוט דוגמא של קִרצוּף,
אם היית like-- לדמיין F הוא רק פונקצית כפל שלוקחת שני
טיעונים ומחזיר את המוצר שלהם.
אז אם יש לך F 4 5, זה 20.
אבל אתה יכול לחשוב על זה כ גם-- יש לך פונקצית f 4
שלוקח טיעון וחוזר ארבע פעמים זה רק argument--
יישום חלקי ש רק טיעון אחד 4.
ואם אתה מאכיל F של 4 5, זה ייתן לך 20.
וזה פשוט דוגמא של קִרצוּף.
זה בדרך כלל אחד מאלה ספר הלימוד.
>> סטפן קרווסון: מבדה ביטויים או פונקציות אנונימי
הם עוד סימן היכר הסקל.
אז אם אנחנו צריכים להלהיב לשכפל חיים פונקציה קטן,
אבל אומר שזה לא ב הספרייה סטנדרטית,
אנחנו יכולים להשתמש בתחביר דומה לזו שלהלן.
ואנחנו משב רוח מעל זה.
דבר אחד אתה תראה הרבה ב מכונת תופים הוא שאנחנו עושים שיחות
למשהו שנקרא לסנן, אשר כמו בעבר,
הוא מיפוי של פונקציה על רשימה, אבל זה
מיפוי של פונקציה בוליאנית.
>> אז יש לנו כאן דוגמא של בעילום שם
פונקציה בוליאנית מוגדרת ש פשוט לוקח כמה ערכים.
זה לא מדבר אך ורק פונקציה אנונימית.
אבל זה להגדיר עם תחביר שלקיצור,
וזה פשוט לוקח מודול x n--
קונור אריס: כן.
אז f היא פונקציה של שני טיעונים n ו- p
שמחזיר פונקציה שהוא עצמו פונקציה של טיעון אחד, כלומר x.
סטפן קרווסון: אני מפעילי infix הנזכרת.
מה הם מפעילי infix?
ובכן, מפעילי infix הם דרך רגילה שאנו מייצגים פעולות,
אומר, בmathematics-- 2 בתוספת 2 במקומו של המפעיל בתוספת
ולאחר מכן שתי טענות 2 ו -2.
קונור אריס: זה נקרא להפוך כתיב פולני, שהוא
טווח אני בספק שמישהו מכם יודע.
>> סטפן קרווסון: ימין.
הפוך סימון פולני או קידומת.
אבל הסקל החליט להשתמש מפעילי infix.
אז אלה הם חלק מ אלה מותאמים אישית ש
מוגדרים ל Euterpea DSCL בהסקל.
אז זה היה הרכב רציף.
זה היה הרכב מקביל, וזה היה מקצץ הרכב מקביל.
ואנו צריכים את זה עם מכונת התופים שלנו,
כי אנו נשתמש האחרונים מפעיל שבtuple הקטן יש
לשחק מכונת התופים לאורך עם השיר פרר ז'אק.
ומכונת התופים שלנו היא הולך להיות אינסופי.
זה פשוט משחק לנצח.
אבל השיר פרר ז'אק הוא לא.
זה לא כל כך הרבה זמן.
זה רק כמה ברים.
אז אנחנו צריכים לעצור את מכונת התופים כ ברגע שהערך המוזיקלי הקצר מגיע
לסוף.
וכי מפעיל infixed הוא סופר מועיל עם זה.
>> והסימון infix כמו זה סוג של נחמד,
בגלל שיש לך פונקציה כמו ציטוט, אשר נותן את החטיבה השלם
של x על ידי משהו else-- מצטער, שצריך להיות וב.
אתה יכול לכתוב את זה כציטוט של ב.
אז אם אלמנט put-- הוא דוגמא נוספת לזה.
x אלמנט בחלק הרשימה, אם אתה שם זה במרכאות בודדות אחוריות, אתה יכול להשתמש בו.
למרות שזה לא סמל כמו פלוס או מינוס או פעמים,
אתה יכול להשתמש בשם של פונקציה כמו שבמרכאות בודדות אחוריים
כמפעיל infix, וזה די מגניב.
קונור אריס: שוב, זה כל הסוכר פשוט התחבירי, באמת.
זה לא משפיע על הליבה של שפה.
>> סטפן קרווסון: אז אנחנו רואים כאן המשפט האחרון של השיר פרר ז'אק,
שיחקתי כמה אקורדים קטנים או שלישים באמצעות הרכב המקביל
מַפעִיל.
זו דרך אחרת לומר כמה של מה שזה עתה אמר.
אז אתה יכול למפות פונקציות טיעון אחד על רשימות.
קונור אריס: שוב, אזכור לספרי לימוד מבוא Haskell--
יצטרך את כל זה בזה.
>> סטפן קרווסון: אז הנה די קו מרכזי של רצף הצעד
אנחנו נסתכל על שימוש ב הבנת רשימה.
ואנחנו רואים כאן הוא אלמנט ש במפעיל קבוע במרכאות האחוריות.
אז אם x הוא אלמנט של רשימה x של, אז אנחנו קוראים את פונקציות PERC.
אז PERC הוא רק פונקצית כלי הקשה.
זה לוקח קצת עמ ערך זה חלק מהקבוצה חסומה מכל
צלילי כלי ההקשה השונים שראינו בשקף קודם,
ואז זה נותן לי ש משך פתק רבעון.
אחר זה נותן לו QNR, וQNR רק מנוחת פתק רבעון.
>> אז זה בונה משהו נחמד.
יש לנו רשימה של מרכיבים, ו אנחנו נעלה את לולאה על חלק מהרשימה אחת
לערך המקסימלי של רצף הצעד שלנו.
וכאשר אנחנו בi מסוימת ב רשימה של אחד לערך המרבי,
אם אני שהוא חבר של זה סט נוצר בפונקציה זו,
טוב, אז אנו פונים זה להערת כלי הקשה.
אחרת, אנחנו פשוט לשחק שאר, ש כלומר, אנחנו פשוט לשתוק.
ואנחנו יכולים לראות כאן שב תחביר הבנת רשימה זו,
x מאוכלס על ידי זה רשימה נבנתה אחד
לגודל העולמי של הרצף.
קונור אריס: כן.
התחביר הבסיסי ל comprehensions הרשימה היא
הסוגר, ערך מעורב משתנים, בר מסוים,
ערכים אפשריים של המשתנים עצמם, סגורים סוגריים.
ואם עשו סימון בונה להגדיר בכל סוג של כיתת מתמטיקה,
ייתכן שיש להגדיר 2n כזה n שהוא באו n הוא בz.
דומה thing-- סימון זה אמור להיות רמיזות
של שהתיווי מתמטי.
סטפן קרווסון: ואתה יכול תחול פרדיקטים מרובים
ומסננים מרובים ברשימה הבנה, וזה די נחמד.
אנחנו types-- אלגברית לא להתעכב זמן רב כאן.
יש לא רעיון טוב ב הסקל או רעיון טוב, ברור
איך לקחת, למשל, ברירת מחדל פרמטר לפונקציה או משהו.
בפייתון, זה די קל.
אתה פשוט יכול לומר בשווה ב הכרזת על הפונקציה,
ערך ברירת מחדל ב מקרה אף מסופק.
>> בהסקל, אתה אולי יכול להשתמש אולי אולי הקלדה,
אשר לוקח או כלום או ערך מסוג פשוט.
אז אנחנו מנצלים את זה במכונת התופים כדי לאפשר לנו לתת נפח אופציונאלי
פרמטרים לכל אחד מחלקי התוף.
אז זה נותן לנו דרך של בעל EQ או עוצמת קול בערוץ מסוים.
>> קונור אריס: ב דוגמאות הסקל אחרות,
ייתכן שתראה אולי משמש ל פונקציות שעלולות להיכשל.
זוהי אחת משותפת.
>> סטפן קרווסון: ואתה יכול לספק איזה הודעת שגיאה כברירת מחדל.
וזה שימושי במיוחד כאשר אתה עושה קלט / פלט בהסקל.
זה יכול להיות טריקים.
קונור אריס: או ל דוגמא דומה, חושב
של פונקציה שכרוכה החלוקה של פרמטר שעשויה להיות 0.
ויכל תפקוד ש לחזור אולי מה.
אז אם אין חלוקה על ידי 0, הוא יחזור רק מה.
ואם יש חלוקה על ידי 0, הוא יחזור שום דבר
כדרך איתות השגיאה.
בגלל תוצאה אחת ההקלדה מאוד קפדנית של הסקל
הוא שאין real-- יוצאים מן הכלל הוא מביכים, בעצם,
טיפול בשגיאות מביך.
וזה אחד מאוד דרך נפוצה לעשות את זה.
>> סטפן קרווסון: אז עכשיו אנחנו מקבלים לדבר כיפוף אחר
על הסקל, אשר הוא דפוס הגדרות פונקצית התאמה ו.
הראיתי לך בשקופית האחרונה הכרזה על רצף הצעד
פונקציה, שלקח אולי ערך, אז int, אז רשימה של ints,
לאחר מכן חוזר רצף של ערכי מוסיקה יש מבואר
עם שני המגרש ונפח.
>> אז שלוש טענות אלה יכולים להיות הדפוס מותאם באופן הבא.
ואנחנו תמיד רוצים להיות בטוחים ל לעשות מקרה בסיס או במקרה היציאה ראשונה.
ותחתון אלה יכול רק להתפרש
לפירושו כל ערך שהוא שם.
אז אם אנחנו מקבלים שיחה לצעד רצף עם ערך כלשהו, ​​ערך אחר,
ולאחר מכן הרשימה הריקה, מה שאנחנו רוצים לחזור הוא פשוט דממה, שאר 0.
>> ובמקום ש להיות רשימה ריקה או 0,
זה שאר 0, בגלל שאנחנו התמודדות עם סוג המוזיקה,
והרשימה הריקה של המוזיקה סוג הוא רק שארית אין זמן.
זה לא מוסיקה.
ואז אנו רואים אם אנחנו מקבלים צעד רצף עם נ 'לטענת נפח,
p למכשיר אמצעי זהירות טיעון, ולאחר מכן רשימה של x של.
>> אז אנחנו עושים כמה דברים.
בפרט, אנו מיישמים הבנה זו רשימה,
ואנו מבצעים כמה פעולות על אולי הערך
להפוך אותו לערך מספרי כך ש זה יכול להיות אז מנויים ומשמש
כדי לבחור את המכשיר.
שוב, זה קצת קצת בכוונה inconcise
רק כדי להראות את כל הדברים המוזרים אתה יכול לעשות בהסקל כמו שאתה
תסתכל על זה בזמן שלך.
>> בסדר.
אז אנחנו מקבלים סוף סוף ל לעשות את מה שאנחנו עושים כדי לצאת ל,
אשר הוא לעשות קצת מוסיקה מחשב.
אז אנחנו הולכים לנסות להפוך את השיר פרר ז'אק.
אז יש כמה ביטויים בפררו ז'אק?
אַרְבָּעָה.
גדול.
ומה נחמד הוא ש הם כולם חזרו
את אותה הכמות של פעמים, שהוא שני.
>> אז יש לנו ארבעה ביטויים כל חוזר ונשנה פעמיים.
ובפרט, שהם בסיבוב.
ויש הרבה, דרכים רבות ליישום
סיבוב. זה יכול להיות כיף לעשות
אני כבר עשיתי את זה ב די דרך פשוטה כאן,
שרק לconstruct-- הקו פונקציה לוקחת רשימה של ערכי מוסיקה
והופך אותו להרכב רציף על ידי יישום שההרכב רציף
מַפעִיל.
>> ואז אני לעכב את החלקים השונים על ידי הפיכתם להתחיל עם שאר.
אז אני מתחיל עם שאר שני צעדים, ולאחר מכן שאר ארבעה צעדים,
ולאחר מכן שאר שש אמצעים, ולאחר מכן בסיבוב
עובד, כפי שכולנו מכירים את השיר הזה.
אנו רואים שני הסברים או שינויים של ערכי המוזיקה
הנמצאים ברציפים זה הסדר של אלמנטי מוסיקה.
יש לנו להוסיף נפח.
זוהי פונקציה כדי להוסיף הערות מוסיקה עם נפח מסוים.
זוהי דוגמא טובה של ריצת אות MIDI
0-127, שבע פיסות מידע שיכול להתבצע.
>> ואז-- שראינו את זה מאוד בקצרה, אבל MIDI הכללי
רשימה של כל המכשירים השונים.
ואין הרבה מהם.
אם אתה משתמש בתחנת עבודה שמע דיגיטלית, כמו Ableton Live או Pro כלים,
יש מגוון רחב יותר להפליא של סינתיסייזרים ומכשירי VST.
אבל סטנדרטי MIDI רק יש כמה עשרות, או כמה.
וחלק מהם הם מצחיק.
חשבתי שזה יהיה כיף אם שיחקתי מכשיר מכשיר MIDI
מסוק, ולאחר מכן הדרך הבאה בסיבוב,
עשינו סינטיסייזר כרית, ולאחר מכן של סינטיסייזר גל מרובע זה להוביל נדוש,
ואז קול בוץ, שהם קצת לא ברור על MIDI הרע שלי
סינתיסייזר, אבל הם בסדר.
>> ואז אנחנו רואים לתת לזה ובתחביר מהסקל,
ואז אנחנו משחקים כל החלקים האלה יחד
עם מפעיל הרכב המקביל.
ואנחנו כנראה יכולים להראות כמה זה.
הנה הקוד.
ואתה יכול לראות ב- C, שיהיה הרבה כחכוחים והגדרה
קוד השולחן לפני ש יכול לעשות מוסיקה כזאת.
או כל תכנות אחר שפה, אתה בטח
צריך אינטראקציה עם סוג כלשהו של ספרייה או API ולהגדיר את הכל,
ואז היית צריך לנקות.
אבל כאן בהסקל הוא, אני חושב, ברגע ש אתה מקבל את העניין שלו, שלא תיאמן
קריא ומאוד אקספרסיבי.
אז יש את היישום של פרר ז'אק.
בסדר.
עכשיו אנחנו רוצים להוסיף כלי הקשה, וזה קצת מבולגן.
אז בואו נסתכל על השקופיות.
אז הרעיון הגדול הוא להפוך את חבורה של רשימות או חלקים.
על מכונות רול-באלה, יש היו בדרך כלל על אולי שמונה
עד 10 חלקי קצב או כלי הקשה.
ולאחר מכן להשתמש בחבורה של טכניקות.
ואנחנו כבר דיברנו על השימוש בthese-- קפלים, מסננים, פונקציות למבדה,
מופה על רשימות כדי ליצור ערכים בחלק הטווח 1 עד r, r הוא 16,
או 32 שלבים ברצף.
>> ואז אם יש ערך ברשימה ש כפי שאנו פועלים ברצף,
פועל באמצעות אותו שוב ו מעל, מתברר בפתק ש,
והמדגם שמקבל מופעל.
הנה כל הדרכים מוזרות השונות אני בא עם כדי ליצור הערות.
נסה את זה על הסכום למחצה משלך.
זה יהיה מגניב נשמע.
זמן מאפשר, אנחנו נעבור את זה.
אבל לעכשיו, אני מניח ש אנחנו צריכים הדגמה מה שיש לנו.
בואו מקווים שזה הולך בסדר.
>> אז זה GHCI.
ואנו לטעון קובץ יש לי song.lhs נקרא,
שהוא הקובץ אני פשוט הראיתי לך.
אוקי מצויין.
כקונור אמר קודם, זה הידור, זה סוג בדק,
אז אני יכול לנשום הרבה יותר קל.
זה לא הולך לפוצץ אותי.
>> אני לא רוצה להראות לך משהו מועיל.
אתה יכול לראות ש מודול הטעון בשם 50.
אתה יכול לגלוש מודול זה.
וזה כל כך נחמד על עשות-- אולי מה
אתה עושה בהסקל לא בשם פיתוח תוכנה,
אבל אתה יכול לעשות הרבה דברים כיפיים בעצמך.
והעבודה היא ממש נחמדה כ בהשוואה להרבה שפות אחרות,
כי אתה יכול לראות בבאמת דרך קריא מה קורה.
כך אנו רואים שיש לנו כל הביטויים האלה, ש
רשימות של רפי מוסיקה, ואז אנחנו לבנות הללו עד למשהו גדול יותר,
שהוא שיר מוסיקה.
זה יחידה מוזיקלית.
ואז אנחנו יכולים לשחק את זה כל עם נגן מוסיקה פונקציה שנקראת.
ניתן לראות כי כאן למטה.
שפשוט לשחק.
>> אני צריך say-- אני לא מדבר על סימן זה דולר שנמצא בכל מקום.
דולר סימן הוא מפעיל infix אחר.
אבל יש לו את העדיפות הנמוכה ביותר של כל מפעיל, אשר למעשה
פירוש דבר שעל בצד השמאל של סימן הדולר
וזכותו של סימן הדולר, אנחנו הולכים לקבל הערכה לפני ש.
אז זה סוג של כמו עוד דרך של הוספת סוגריים.
>> קונור אריס: זה בעצם הרכבת פונקציות.
והוא מבטיח כי אתה לא נו-- אם יש לך שני צדדי פונקציות או infix
מפעילים בכל צד, הם לא לשייך לרוחבו ולתת לך
תוצאות בלתי צפויות.
>> סטפן קרווסון: אז אנחנו can-- באמצעות זה, אנחנו יכולים לקרוא.
ראשית, ננגן את זה בלי התופים.
זה המסוק, מסוק MIDI.
>> [השמעת מוסיקה]
יש גל המרובע.
בוץ הקול.
ואתה באמת יכול להתפרע עם זה.
הרמתי אחד די פשוט, כי ידעתי שאני לא צריך לנגוס
יותר ממה שאני יכול ללעוס.
רק לשמור את זה די פשוט כדי להראות את הרעיונות העיקריים.
אבל אז אני היה כמו, יש לנו יש להוסיף כמה תופים לזה.
רק בגלל זה הוא קצת בלתי חדיר,
ואני לא השתמשתי ב שמו של חלקי התוף,
אני ממופה them-- כי הם חלק מאותו מעמד הנחקר,
אני הממופה ints.
אחד מהם הוא כמו תוף בס.
אפס הוא גם כן.
שבעה הוא כובע גבוה.
ולמטה בכאן בי פונקציות לקבל קצת יותר אקראיות,
אלה הם כמו תופי קונגה.
>> אז אם אתה חושב על-- אולי דרך מהנה ליישם מכונת תופים
הוא להשתמש מאוד מסודר דפוסים על תוף הבס שלך.
כך למשל, על סינון על רשימה עם כל מה שנותן גב
1 כאשר הוא נלקח מודול 04.
אז אני מקבל 1, 5, 9, 13, 17-- אז זה הוא הפעימה הראשונה של כל אמצעי.
>> ואז זה אותו הדבר דבר השתנה יותר משני צעדים.
אז זה לא שגר.
אז זה יהיה משהו כמו כובע גבוה.
ואז שוב, כאן למטה, זה קצת אקראי,
בגלל שאנחנו עושים תופי קונגה.
ויש לי כמה מראקאס כאן למטה, מדי.
>> אז אני יכול להתקשר למכונת תופי משחק, אבל זה יימשך לנצח,
וזה עלול להתחיל תופס את כל הזיכרון במערכת שלי.
אז אני אתקשר בפונקציה זו נגן מוסיקה, אשר כפי שאנו רואים,
להשתמש ברכב המקביל המקצץ לשחק השיר פרר ז'אק הקטן שלנו
יחד עם מכונת תופים המוזרה הזה.
אז בואו נסתכל.
ובבקשה אל לשפר עליי הסדר של כל חלקי התוף.
לא המומחיות שלי, אבל אני היה הרבה כיף לעשות את זה.
>> [השמעת מוסיקה]
>> אז כמובן, כל זה קצת לא כיף
אם אנחנו לא יכולים להמיר אותו לציון אז אולי זה
יכול להתפרש על ידי מבצע אנושי.
אז אני לא להפעיל אותו כאן.
אני כבר נוצר הקבצים.
אתה יכול לראות שיש נקודת LilyPond file-- וזה
יהיה segue שלי מעל ל Connor-- וקובץ הנקודה MIDI,
וקובץ PDF נקודה, וזה מה ש LilyPond סופו של דבר ליצור.
>> אבל אלה הם תסריטים אלה, ואני יהיה רק להפעיל אותם עם אפשרויות העזרה שלהם.
אם אתה מקבל אלה והפעלה עם Euterpea, אתה יכול ליצור קובץ MIDI.
ולאחר מכן מקובץ MIDI עם תכנית MIDI 2LY זה,
אתה יכול ליצור לילי קובץ בריכה, ואז אתה
יכול ליצור PDF של הציון.
ואנחנו צריכים נסתכל על זה.
אז קונור כנראה יציג לך איך להוסיף הערות זה טוב יותר,
אבל זה פרר ז'אק כ נוצר על ידי לי בEuterpea.
זה רק בג אני צריך הבנתי מה זה בעצם לפרוץ ב.
אבל זה הצינור ל איך אתה עושה את זה עם זה.
בואו נדבר עוד על LilyPond.
>> קונור אריס: אישור בוא לראות.
האם אתה מזכיר למד אתה הסקל?
סטפן קרווסון: אה, כן.
בדוק את מידע אתה הסקל.
זה במשאבים.
ככה התחלתי למידה, וזה נהדר.
למידה לא מטומטמת.
>> קונור אריס: אז זה באינטרנט.
אז בחור בשם [לא ברור] learnyouahaskell.com, ללא רווחים.
הדקדוק הוא חולה.
סטפן קרווסון: זה מאויר, מדי.
קונור אריס: אז מה הוא LilyPond?
זה תכנות הצהרתי שפה למוסיקה סדור.
אז אתה יכול declarative-- לחשוב על דברים כמו HTML,
שבו אתה לא saying-- HTML לא אומר איך דפדפני אינטרנט צריכים
להפוך דפי צעד אחר צעד.
זה רק אומר את זה תיאור טקסטואלי
של מה שאתה רוצה להיראות כמו הדף.
>> ואז זה גם תכנית כי הידור בשפה זו,
או שזה קורא בה ולאחר מכן למעשה עושה סדור בשבילך,
וזה יורק את אלה ציוני PDF מחפשים נפלאים.
גם אתה יכול לקבל בפורמט PNG או כל דבר אחר.
דרך טובה לחשוב לכך הוא על ידי אנלוגיה
הוא שLaTeX הוא כמו סוג של LillyPond, אבל רק סדור רגיל.
אז במקום של-- זה לא WYSIWYG, מה שאתה רואה
האם מה שאתה מקבל, כמו, אומר פינאלה הוא, או סיבליוס,
או Microsoft Word, שבו אתה יכול להקליד ב דברים זמן וטיוטה אמיתיים בזמן אמת
ותראה את השינויים באופן מיידי.
>> הוא מבוסס טקסט.
אתה צריך לקמפלך ציונים באמצעות תכנית נפרדת
ולצאת קובצי PDF מאוחר יותר.
זה קצת פחות נוח לשימוש אם אתה
מנסה לכתוב ישירות לציון ואתה
מנסה להלחין במחשב.
אבל יש הרבה יתרונות לזה.
אחת, זה נראה הרבה יותר נחמד, כי בעצם LillyPond יכול
לקחת את הזמן כדי לעשות החלטות פריסה כראוי,
בניגוד סיבליוס או פינאלה, שיש לי כדי להפוך את אלגוריתמים שנפרצו כל כך
כי הם יכולים להציג דברים בזמן אמת.
>> אז למה הוא LilyPond-- גרפיקה הממוחשבת היא קשה.
אם אתה עושה משהו עם מוסיקה ואתה רוצה לכתוב את ציונים,
אתה לא רוצה לכתוב הכל בעצמך
מתחיל עם איך לצייר הצוותים ואיך לצייר פנקסים.
זה מאוד קשה. זה נעשה בעבר.
אתה בסדר.
>> אם אתה רוצה להשתמש בפינאלה או סיבליוס, הפורמטים של קבצים לדברים האלה
מאוד מסובכים, ואתה לא יכול באמת להשתמש בם תכנותי.
אתה יכול לפתוח את סיבליוס עם פינאלה וללכת קובץ, יצוא כ- PDF עצמך,
אבל אתה לא יכול באמת קורא לזה מתסריט.
LillyPond, אתה יכול להתקשר מהתסריטים האלה.
אתה יכול בקלות לחזר LillyPond עם LaTeX.
לא יהיה לי כל כך הרבה זמן ללכת לטכנולוגיות אלה עכשיו,
אבל הם קיימים.
אם אתה רוצה להיראות בספר LillyPond,
מדובר בתכנית שמגיעה עם הפצת LillyPond,
וזה לiterating שברי LillyPond לLaTeX
אם אתה רוצה לעשות משהו כמו מסמך מוסיקולוגיה גדול
עם דוגמאות, למשל.
וזה מיומנות טובה ל חיים אם אתה עושה משהו
עם מוסיקה, לא רק CS50.
אני השתמשתי LillyPond לכל פרויקטי הרכב שלי
מאז שהייתי בעצם בכיר בבית הספר תיכון.
>> אז הנה כמה דוגמאות פשוטות.
זהו בעצם נציג של רמת הקושי
כי רוב האנשים היו נודה בזה שהם מנסים
להשתמש LilyPond לפרויקטים פשוטים.
ראשון זה הוא תחילת להקדמת מקהלה של באך.
תחתון אחד זה קטע מאחת מהיצירות שלי,
וזה רק שם כדי להראות לך דברים כמו [לא ברור]
לשים קווים מרובים באותו צוות, איך לירי undersetting עובד.
underlays הלירי הוא דבר שמאוד קל לשימוש LilyPond למוסיקה המקהלתית.
>> ואז יש עוד קצת דוגמאות מסובכות כאן.
כל אלה נעשים ב LilyPond והם אפשריים.
הקטע הראשון הוא מ [לא ברור] על ידי [לא ברור].
ו[ לא ברור] זה מ חתיכה לבס סולו
חליל ידי [לא ברור], מי הוא longtime-- ש
היה חבר ותיק של מחלקת מוסיקה כאן, אני חושב.
אני לא בטוח לאן הוא הלך ל.
אבל הוא היה היועץ של הרווארד מלחיני האגודה לזמן ארוך.
אדם נפלא.
והוא כותב מוסיקה שיש לי מאוד סימון מסובך שLillyPond
בכל זאת יכול להתמודד יפה מאוד.
>> אז רק כדי לתת לך תחושה של מה ש היכולות של דבר זה כל כך הן--
internals של LillyPond מאוד מסובכים.
ואתה יכול להשתמש בו ל זמן רב, ובכלל זה
לכמה מסובך למדי דברים, בלי באמת
יש לדעת הרבה עליהם.
אבל הרעיון הבסיסי הוא שעל הרמה הנמוכה ביותר, האטומים של LillyPonds
הם מציין.
ההערות להכיל קולות נקראים הקשר.
אז הקשר הקול בעצם מתאים
לשורה אחת של פוליפוניה.
ואז הקשר יכול להיות הכיל היררכי
ברמה גבוהה יותר אלה ש מייצגים הצוותים על הציון
או קבוצות גדולות יותר כמו הצוותים פסנתר או הצוותים מקהלה,
ואז סופו של דבר כל הקשרי ציון.
ואתה באמת יכול להקיף עשרות רבים בספר.
>> ויש לו כל קשר מספר החרטים מצורפים.
אם אתה מסתכל דרך תוכן של הקשר
ולהדפיס סמל מסוים או סוג מסוים של סימנים במידת צורך.
אז לכל הקשר קול, יש [לא ברור] הערות
חרט שהוא בעצם פונקציה או אובייקט שכותב את כל הפתק
ראשים על חלקיו ימני של דף.
אז יש חרט שסוע, ש כותב את שסעים בצוות.
אז יש מטרונום חרט סימן ש
כותב את סימני מטרונום בציון.
וכל אלה די בכושר גם להיררכיה.
וזה מאוד, מאוד, מאוד להתאמה אישית, שבו אתה צריך
אם אתה רוצה לקבל דברים כאלה.
>> אז יש את כל ההקשרים הרבה תכונות שונות
שאתה יכול לשנות לכל דבר מהמרווח לגופן שונים
בחירה בגדלים של דברים.
אם אתה רוצה לעשות גם דברים מסובכים יותר,
יש שפת scripting מוטבעת.
הם משתמשים בערכה, ש הוא ניב של LISP.
אלה כנראה לא לעשות אומר לך משהו.
אבל בעצם, תכנית אחר תפקודי
שפת תכנות, פחות או יותר.
>> סטפן קרווסון: העניבה-ב.
>> קונור אריס: כן.
זה עניבה-בטובה, אני מניח.
וזה משמש כשפת הוראה, למעשה, את המסה Ave. ב- MIT.
וזה מאוד נוח לLillyPond מסיבות טכניות שונות.
>> ולכן אם אתה רוצה לעשות פשוט tweaks התלוי בתנאי,
לexample-- יש מסוים מצבו של ציון שפגש,
לבצע שינויים ל פריסה או whatnot-- אז
מתקנים אלה נמצאים שם.
הם מסובכים.
אז הנה דוגמת קוד די פשוט.
זה חמש שורות.
בעיקרון, אני מגדיר שני הצוותים.
זה ב3/4.
יש צוות הראשון מצורף סימן קצב,
אבל זה באמת הולך ללכת לכל הציון,
בגלל סימני קצב הם ברמת הציון.
חרט סימן מטרונום מצורף להבקיע הקשר.
יש מפתחות שונים, כי החרט [לא ברור]
מצורף הצוותים.
אתה באמת יכול לעשות הוא.
המדגם שכתבתי הוא למעשה בדו מז'ור,
אבל זה רק ל להפגין שאתה יכול להיות
מפתחות שונים בצוותות שונים.
והתחביר הבסיסי הוא שאתה כותב שים לב שמות עם E, F, G, כל מה ש.
אם אתה רוצה לעשות מקריות, אתה הסיומת IS או ES.
זה מהולנדי אמנות למוסיקולוגיה.
>> וכדי לעשות את קפיצות אוקטבה, אתה צריך להשתמש אלה סמן סימנים, פסיק או גרש.
ביחס רק אומר כל מה שיש לך פתק,
זה באופן אוטומטי plaec ב אוקטבה הקרובה ביותר לזו קודמת.
ואם אתה רוצה לקפוץ יותר מ fifth-- אומר חמישי או more--
אז אתה צריך להשתמש ב[ לא ברור].
אבל חוץ מזה, אין לך ל לציין את האוקטבה של כל פתק.
>> ויחסי C, ראש, ו C, אתה פשוט לציין אמצע C
והבסיס C, צלילים הראשונים במיוחד.
אז יש לך הצוותים אלה המארגנים שני קולות או דגימות של מוסיקה אלה,
ויש לך ציון.
וזה נראה כך.
>> אם אתה רוצה לקחת את הזמן כדי להעתיק מדגם זה של LillyPond
קוד על קודם להחליק במורד כאן, ואתה
יכול לכתוב את זה לעצמך LillyPond.
אני יודע שיש לנו משהו שנראה הרבה כמו זה.
אז יש טכנולוגיה אחרת שמרו XML המוזיקה נקרא
על ידי אנשים שונים לגמרי.
XML הוא אני structure-- נתונים טקסטואליים לא צריך לומר נתונים structure-- אומרים
סוג מפת מטאפורה של.
וזה נועד להחזיק נתונים היררכיים טוב מאוד.
HTML, לדוגמא, הוא סוג של XML.
ואתה יכול להגיד לי XML כי הם כל סוגריים הזווית הייתה וזווית
סימני חיתוך הסוגר ששדות נתונים מופע.
>> אין לי קוד דוגמא מXML המוזיקה.
אתה יכול למצוא אותו בעצמך.
בעיקרון, הסיבה ייתכן שתרצי להשתמש ב- XML ​​כשלב ביניים
הוא, קודם כל, זה פורמט מחלף
לבעצם every-- אני לא צריך לומר כל, אבל הרבה ציון שונה
סופרים.
אז אם אתה כותב במוסיקה XML, לא רק יכול LillyPond
לקרוא אותו בעזרת auxilary זה תכנית בשם XML מוסיקה לLY,
אבל גם יכול לקרוא פינאלה זה, סיבליוס יכול לקרוא אותו.
בהתאם לאופן שהאובייקט הפנימי שלך היררכיה עובדת לייצוג מוסיקה,
זה יכול להיות קל יותר לכתוב את ל- XML ​​המוזיקה מאשר לLillyPond
ולהסתמך רק על XML מוסיקה לLY לעשות את ההמרה.
>> אני לא חושב ש[ לא ברור] יש XML מוסיקה.
סטפן קרווסון: זה לא.
מישהו עובד על זה, אם כי.
>> קונור אריס: על אישור.
Euterpea אין פונקצית פלט ב- XML ​​מוסיקה עדיין.
אם אתה רוצה רעיון פרויקט גמר, אולי ליצור קשר עם בחורים
שסטיבן יודע, ו הם יכולים להיעזר בכם.
>> סטפן קרווסון: אני אוהב את זה.
קונור אריס: כן, בעצם, כל שפות תכנות
זה שווה שלה כבר יש ספריית XML,
כך פנימי שאתה יכול להמיר את כל המוזיקה שלך לכמה אובייקט
שספריית XML יכולה לכתוב שידרוש פחות
שינויים במבנה הפנימי שלך לכל מוסיקה שאתה מתנגדת
רוצה לכתוב מאשר לכתוב אותו ישירות בLillyPond היית.
אז פשוט להדפיס אותו עם XML עם ספריות XML בשפה שלך,
שיבטיח שזה מבחינה תחבירית נכון והכל,
ולאחר מכן להמיר אותו לLillyPond.
אז טכנולוגיה ייתכן שתרצו להסתכל לתוך אם אתה עושה משהו
אוהב את זה.
>> , אחר [לא ברור] טכנולוגית auxilarry.
זה בעצם עובד טק או טק סטודיו לLillyPond.
אז היא מציעה עזרה ב תחביר, עם תבניות
לנפוץ שונים שילובים של מכשירים.
זה מאפשר מסך מפוצל צפייה כך אתה יכול לקבל את הקוד שלך בחלון אחד
ו- PDF בחלון אחר ו לחץ על מקומות בPDF
כדי לקפוץ לרלוונטי כתמים בקוד המקור שלך.
זה שימושי יותר אם אתה באמת כתיבת LillyPond קבצים עצמך
מאשר אם אתה יצירה שלהם תכנותי.
אבל שוב, זה משהו שימושי שיש.
>> גדול.
resources-- אחר אני פשוט לעבור את זה מהר מאוד.
יש manuals-- LillyPond LillyPond תיעוד מצוין באתר האינטרנט שלה.
יש להם הדרכה.
יש להם התייחסות תחביר.
יש להם מאות קטעים לדברים קטנים שונים
יו ייתכן שיצטרך לעשות כדי להפגין יכולות שונות.
אם ברצונך להשתמש שפת scripting
או לעשות נרחב יותר התאמות אישיות, אז יש
internals התייחסות בכתובת האתר ש.
אם אתה רוצה להשתמש ב- XML ​​מוסיקה, יש כתובת אתר ש, musicxml.com/tutorial.
>> ואז אם אתה צריך ללמוד תכנית כי אתה באמת רוצה להשתמש ב
מתקני scripting בLillyPond, אז יש [לא ברור] נקרא
פרשנות מובנה של תוכניות מחשב,
וזה לא רק שני ספר לימוד CS הגדול ביותר אי פעם written--
תמצא אותי אחר כך, אם אתה רוצה לדעת מה שאני חושב הוא-- אחד הגדול
אבל זה גם מאוד טוב מבוא לשפה הנכונה.
לא צריך יותר מ כמה הסעיפים הראשונים.
>> וזה הכל.
יש שאלות?
>> תלמיד: איפה אני יכול להוריד ז'אק פרר נוצר
אז אני יכול לשים אותו על ה- iPod שלי?
>> סטפן קרווסון: ובכן, אתה יכול לכתוב לחלק קובץ WAV בEuterpea.
ויש לך את הקוד.
זה על GitHub.
הפוך וריאציות משלך פררתי ז'אק על ידי מוח כוורת CS50.
זה יהיה נהדר.
קונור אריס: כל אחד אחר?
סטפן קרווסון: אנחנו צריכים תוף בס טוב יותר, יותר מדי.
זה ממש רע.
>> תלמיד: Euterpea יש לא רק בצד הרכב, אבל signal--
סטפן קרווסון: כן.
למעשה, אני העבודה עשיתי בEuterpea כש
לקח זה-- יש בוגר קורס באוניברסיטת ייל ש
משתמש it-- היה על סינתזת קול.
אז יש באמת דרך נחמדה באמצעות חצים
וחלק מהסימון שראינו של הלחנה יחד פונקציות אות.
בפרט, הבס ביותר שלהם הוא רק גל סינוס פשוט.
אבל אם אתה מתחיל להלחין אותם בדרכים תכנותיים מוזרות,
אתה יכול לקבל צליל מטורף תופעות, כמו מפלים מוזרים.
אתה יכול ליצור מאוד גרגירי נשמע עם הרבה אפנון.
>> אני עשיתי את פרויקט בגרגירים סינתזה, שהוא
איפשהו באמצע FM והדגימה.
אתה לוקח קטן מאוד, דגימות קטנות, ולאחר מכן
לשלב אותם עם איזה מאפנן ולבנות את צליל עשיר יותר.
גם אנחנו עשינו דוגמנות פיזית, כך מנסה לחשוב על הפיזיקה
וpsychoacoustics של משהו כמו חצוצרה, ולחשוב על הדרך
הצליל קפץ הפעמון של החצוצרה
והאקוסטיקה של החדר והדוגמנות
כי עם מתנדים הבסיסיים.
קונור אריס: תודה רבה.
תודה שבאת.
ואני תמיד מוכן לקחת שאלות על ידי email--
connorharris@college.harvard.edu.
>> סטפן קרווסון: כן. stephen.krewson@yale.edu.
מגניב.