توليد الموسيقى بشكل إجرائي

توليد الموسيقى ابتدائي

من كتابة Christer Kaitila

"باختصار: تخيل أن الموسيقى هي مرحلة من لعبة"

للموسيقى تأثير عميق على اللاعبين. إنها التفصيلة الإضافية التي تعلق في ذاكرة الناس وتفتح الخيال وتحدد المزاج. سنستكشف في هذه المقالة أنماط وقواعد تساعدك على صنع موّلد أغانٍ خاص بك.

لابأس لو كنت لا تعرف شيئاً عن النظرية الموسيقية أو لا تستطيع التفريق بين السلم الكبير والسلم الصغير، الخبر الجيد هو أن العديد من القواعد التي قد نستخدمها من أجل توليد المراحل يمكن تطبيقها من أجل الموسيقى. فبمجرد تطبيق بعض الأنماط وفرض بعض الحدود سينتج نظام توليد الموسيقى الخاص بك أغانٍ جيدة بشكل مدهش.

قراءة إضافية - لائحة المصطلحات الإنجليزية في هذه المقالة:

أضيفت هذه الفقرة الاختيارية من قبل المترجم العربي Alex Clay لتلسهل للقارئ إمكانية البحث عن المصطلحات الإنجليزية عبر غوغل. يمكنك تخطيها واستيعاب المقالة بسهولة.

مصطلحات عامة:

إنجليزي عربي ملاحظات
Aesthetics خصائص جمالية
Dungeon مرحلة حرفياً معناها حصن، لكن يقصد في هذه المقالة مرحلة نموذجية من لعبة.
Interpolate استقراء، استيفاء
Procedural Generation توليد إجرائي
Pixel art فن البكسل قد يشار له باسم
"16bit art" أو "8bit art"
ولكن ذلك المصطلحين يشيران إلى أسلوبين مخصصين من مصطلح "Pixel art" العام
Palette مجموعة منتقاة من الألوان مثال: لائحة الألوان في برنامج الرسام
Parameter وسيط
Perlin Noise خوارزمية ضوضاء برلين
terrain biomes المناطق الطبيعية، المناطق الإحيائية يشير المصطلح هنا إلى عنصر شائع في مولّدات التضاريس

مصطلحات موسيقية:

إنجليزي عربي ملاحظات
Arpeggios الآبييج نوتات الكورد عندما تعزف بشكل تصاعدي أو تنازلي
Beat ضرب إيقاعي، ضربة إيقاعية، نبض
Down beat الضربة المنخفضة
Base باس، بيس الضربات القوية المكتومة في خلفية الأغنية
Bar الميزان
Chord تآلف، كورد
Chorus الكورس المقطع المعاد أكثر من مرة في الأغنية
Dynamics الديناميكية الموسيقية
Emphasis توكيد
Frequency التردد
Harmony تناغم هارموني، انسجام
Melody اللحن
Metronome ميترونوم، رقاص الإيقاع
Musical Phrase عبارة موسيقية
Note نوتة، علامة موسيقية
Note Interval بُعدْ
Pitch حدة صوتية، درجة صوتية
Rhythm إيقاع
Semitone نصف نغمة
Sound Waves موجات صوتية

رجاءً اكسر هذه القواعد!

إن "القواعد" التالية مملوءة بنصائح شخصية وغير موضوعية، وعادة تنتج ألحناً عادية وتقليدية ومألوفة. إن كنت خبيراً بالموسيقى فستلاحظ أني أبسّط وأنجنب الكثير من التفاصيل الثخينة المعقدة. اعتبرْ هذه النصائح مجرد نقطة بداية لإلهامك. وكما يجب معاملة أي نصيحة فنية؛ فبعدما نحفظ القواعد يفضل أن نكسرها.

العبارات الموسيقية تشبه الغرف في مرحلة من لعبة

تخيل وانت تبرمج أن موسيقاك هي مرحلة من لعبة. أبقي ببالك الخصائص التي تجعل موّلد المراحل جيداً. الخصائص الجمالية للموسيقى هي نفس الخصائص الجمالية للمراحل. حين البدء في العمل ستريد أن تتجنب إخراج مجرد أصوات عشوائية، قد نرغب في أن "نجمع" العناصر مع بعضها بشكل منطقي، مثل المناطق الطبيعية في التضاريس المولدة "terrain biomes" أو الغرف في مرحلة.

أعطي مولد مراحلٍ بعض القوانين البسيطة (الغرف مرتبطة عبر ممرات، أو يوجد مسار مضمون أنه يصل بين البداية والنهاية، أو بعض الأشياء النادرة كالكنوز) ولن تبقى مراحلك عشوائية تماماً، وستصبح أكثر كمالاً وأمتع للعب، وسيصبح لديها إيقاع مريح. أي، فيها مقاطع مثيرة ومقاطع هادئة. يجب أن يتواجد الأمر نفسه في مولد الموسيقى خاصتك.

تخيل أن كل مقطع من أغنيتك هي "غرفة" من مرحلة. فغرفة ما قد تكون مقدمة، وأخرى قد تكون "كورس" (Chorus، المقطع المتكرر من أغنية)، وأخرى "سولو" (Solo، مقطع ذات آلة وحيدة). وكل تلك المقاطع هي كتل مفهومية مرتبطة ببعضها عبر مسارات بسيطة.

كما يجب للمرحلة أن تمتلك بداية سهلة، وبعض الأقسام المثيرة والهادئة التي تقود إلى معركة مع الوحش النهائي للمرحلة. فيجب أن تمتلك الأغنية مقدمة بسيطة، وأن تبني التعقيد، وتستخدم الديناميكية الموسيقية "Dynamics in Music" لتحوّل بين الشدة واللين والذروة الرئيسية، ثم تلخص اللحن الرئيسي، ثم تكرر نفسها أو تنتهي بالإختفاء.

إصدار نوتة (علامة موسيقية)

سأترك للقارئ تمريناً وهو أن يستكشف محرك لعبته حتى يجد كيفية إصدار الأصوات بحدات صوتية مختلفة ("pitches"، تدعى أيضاً درجات صوتية). عادة، يكون الحل بضبط إعدادات الحدة الصوتية للصوت المعزوف "sample pitch" أو تردد العزف ("playback frequency"، تسريع أو تبطيء الموجات بحيث تتمدد الموجة وتصبح منخفضة لدرجة صوت الباس "Base" أو تسرعها لدرجة صوت الصرير العالي مثل شخصية "ميكي ماوس"). يمكنك أن تبدأ من هذا المثال أو تبتكر حلاً بأي محرك تحب. في "Unity" يمكنك أن تضبط حدة مولد الصوت "audiosource pitch". إن اضطررت إلى الإستعانة بلغة برمجة منخفضة المستوى "low-level programming" (وذلك لأنك تولّد النوتات عبر موجات الجيب على سبيل المثال)، هذا الدليل يساعدك على تحديد تردد نوتة موسيقية في وحدة Hz.

أهم شيء هو الإيقاع

الضرب "beat" هو كعنصر أهم من النوتات التي تختارها، فهو العنصر الذي يجعل الصوت يصبح موسيقى. عندما تبدأ ببرمجة موّلد الموسيقى خاصتك، عليك أولاً أن تتأكد أنه يمكن عزف الصوت ٤ مرات بالثانية إلى الأبد، كالمترونوم أو نبضات القلب المتكررة. وذلك سيتطلب منك أن تقيس الزمن الماضي وتعزف الأصوات في أوقات محددة، وسيترك هذا الموضوع تمريناً للقارئ.


(procjam-metronome.mp3)

التوكيد

أهم نوتة في أي مجموعة هي النوتة الأولى. يجب أن تكون البادئة الأعلى صوتاً. والنوتة التي تلي البادئة في الأهمية هي النوتة التي في منتصف الميزان (البار) من الجملة الموسيقية، وتدعى الضربة المنخفضة "down beat".


(procjam-beats.mp3)

كتطبيق: في ميزان ذوي ٤ ضربات (4 beat bar)، اضرب بقوة في الضربة ١ و ٣. اختر تلك النوتات بحيث تملأ الصوت مرات أكثر، واجعل الضربة ٣ و ٤ صامتة مرات أكثر.

التكرار

إن أهم عنصر يجعل مجموعة من النوتات تبدو كأنها أغنية حقيقية هو التكرار. يضيف التكرار إيقاعاً وشعوراً طبيعياً شعرياً من الرد والجواب مثل الحديث العادي. ها أنا أكرر، كل قاعدة نضيفها تقلل من الفوضى والصوت العشوائي، وتضيف النظام والألفة.

تقريباً كل الموسيقى الشعبية تكرر قسماً من الأزمنة الثلاث أو الأربع الماضية، عادة ٤ إلى ٨ مرات متكررة. لذا، بدلاً من توليد سلسلة محارف "string" طويلة، يفضل أن تولّد بعض الكتل من ٤ إلى ١٦ نوتة ثم تكرار تلك "العبارة" أربع مرات ثم الإنتقال إلى مقطع آخر من الأغنية. تشبه هذه العملية ما نقوم به عند توليد مرحلة عادية، يجب أن نرقع رسوماتنا "tile our sprites"، ونستخدم نمطاً موحّداً.

الأنماط والتكرار

التكرار مفتاح الموسيقى، فالكثير منه يكون مملاً والقليل منه يجعل الموسيقى تبدو غير هادفة ومتعبة. الأشياء الجديدة تثير الحماس والاهتمام. ولكن، كالتفاصيل في لوحة مرسومة، أو العمارة حقيقية كانت أم افتراضية، فالإيقاع والتكرار يلطّفان الفن ويشعران المشاهد بالراحة. التكرار يسمح للمستمع بأن يتعود على الأغنية، ويمكّنهم من توقع ما سيأتي لاحقاً، ويجعل الأغنية سهلة الحفظ. مثال لذلك في مولّد المراحل: لا يفضل أن نستخدم في مرحلتنا رقع حجر غير مكررة أبداً - يفضل أن نستخدم لكل حائطٍ طويلٍ نفس الرقعة ويقطع بينها بعض التفصيلات المعقدة ليبعدها عن الملل.

تقليل التفاصيل هو أيضاً عنصر أساسي لصنع الموسيقى الجيدة: فالمقاطع المثيرة للاهتمام تهز المشاعر ويمكنها أن تملك الكثير من التفاصيل والتعقيد، ولكن لا يجب أن تبقي على ذلك المستوى على طول القطعة الموسيقية وإلا ستكون كل الأغنية غيتار سولو. يجب أن تبني الحماس وتنهيه قبل أن يصبح متعباً.

لوحة ألوان محدودة

إن المراحل التي تستخدم جميع الألوان في قوس القزح أو كافة الأشكال الهندسية تبدو مبهرجة ورديئة، قد تفيد هذه الطريقة من أجل مشهد الديسكو في القصة. ولكن يفضل للفنان في أغلب الوقت أن يلتزم بمجموعة محدودة من الألوان المتناسقة.


(procjam-chromatic.mp3)

يفضل أن تختار (إلا إن كنت تصنع موسيقى جاز ذات أسلوب ريادي وغير انسجامي) مجموعة منتقاة من الألوان "pallete" كما يستخدم فنان البكسل "pixel artist" ألوانه، فعندما تجعل عناصرك متناسقة، وتخلط بينها بشكل جيد، فجأة يأخذ فنك (إن كان مكوناً من بكسلات أو نوتات) طابعاً أكثر نضوجاً وأكثر انتساقاً وأقل بهرجة. الحدود هي سر الإبداع.


(procjam-major.mp3)

لذا، بدلاً من أن تعزف موسيقانا أي نوتة عشوائية من لوحة البيانو، ماذا لو اختارت نوتات من سلم أو كورد "chord" معين؟ سنبعث المعنى في موسيقانا مباشرة بعد القيام بذلك.

البعد

المسافة بين نوتتين تسمى البعد "Note interval". على سبيل المثال، المسافة بين دو دييز (C#) و دو (C) على لوحة البيانو هو نصف نغمة. لعزف مقياس دو الكبير، والذي يشعر السامع بالسعادة، لا نريد أن نعزف كل المفاتيح، بل فقط المفاتيح البيضاء ابتداءً من دو. ليس من الضرورة أن نعزف كل نوتة من المقياس الموسيقي. بل فقط سنعزف نوتات محددة منسجمة مع بعضها، مثلما قد نختار ٥ إلى ٨ ألوان من قوس قزح الذي يملك ١٢ لون.

الكوردات و الآبييج ("arpeggios"، نوتات كورد عندما تعزف بشكل متتالي، تصاعدياً أو تنازلياً) مصنوعة من مقاييس تستخدم قواعد التناغم الهارموني الموسيقي. يمكنك تعلم المزيد عن الكوردات هنا.

بالاستعانة بتلك المصفوفات "Arrays"، والتي هي بالأحرى جداول للبحث "lookup tables"، يمكنك توليد الموسيقى بدلاً من النوتات العشوائية.

أبعاد قصيرة (امشي بهدوء، لا تقفز)

إن النمط الشائع الذي نراه في ما يقارب كافة الموسيقى الشعبية هو أن اللحن فيه لا يقفز عشوائياً، بل ينتقل بشكل طبيعي إلى الأعلى والأسفل بمسافة لا تبعد عن درجة أو درجتين من النوتة السابقة. تضيف الأبعاد الطويلة الشدة والحماس، بينما الخطوات الصغيرة (مثل عزف نفس النوتة مجدداً أو التحرك إلى الأسفل بمقدار نوتة واحدة من مصفوفة النوتات المسموحة في مقياسك المختار).


(procjam-intervals.mp3)

الديناميكية

الغرف، مثل الأقسام أو اللحن الرئيسي في الأغنية، تمثل مناطق مهمة لإلقاء القصة أو هي ذات موضع مهم من اللعبة؛ قد يكون الهدف منها إضافة معلم جديد للقصة أو زيادة صعوبة اللعبة. من أجل إعطاء اللعبة إيقاعاً مريحاً للاعب (ولتحسين الأداء) يوجد بين تلك الغرف ممرات ذات تفاصيل أقل، بحيث تكون مجرد انتقالات تعطي اللاعبين مكاناً للتنفس وأخذ قسط من الراحة بين الغرف كبيرة، وتقودهم على الطريق السليم.

في الموسيقى، يمكننا القيام بنفس الشيء. قدم الألحان الرئيسية مثل غرفة جديدة بحيث تسمح بالطلوع والهبوط للديناميكية الموسيقية (بناء الحماس وتسريحه، إعلاء الصوت وتسكينه، السرعة والبطئ، التعقيد والبساطة)، فالتنقل بين الأحداث الرئيسية، كالممرات الرابطة، يساعد على تقدم المقطوعة الموسيقية ويعطي المستمعين موضعاً للتنفس.

المرحلة الغنية بالكنوز أو الوحوش بشكل مبالغ على كل رقعة من الخريطة سيئة على نفس درجة سوء مؤلفة موسيقية مملوئة كل لحظة فيها بالصوت؛ السبب في ذلك هو كونها مشغولة للغاية. فكما تقوم المرحلة بوضع حدٍّ أقصى لعدد الأسلحة أو الوحوش في الغرفة الواحدة، يجب على مولد الموسيقى فرض حد أقصى وأدنى لعدد النوتات في القسم الواحد، في كل ميزان أو في كل ضربة. وبهذا الشكل، نتجنب جعل الأمور موحلة بسبب كثرة العناصر.

الاستقراء

تمهيداً لهذه الفقرة، أعود لمثال مولد المراحل الذي يفقد متعته إن كان "حقاً عشوائياً" - عندما نرمي جدران المرحلة في كل مكان بدون أي ترابط أو منطق أو ربط تلقائي للرسوم في الحواف "tile auto-edging" ولن تبدو مرحلتك كعالم حقيقي، بل ستبدو مثل خردة أو ضوضاء. يطبق الأمر ذاته في الموسيقى: إن اختيار نوتات عشوائية سينتج أصوات الصفير والزمامير للحاسوب في أفلام السبعينيات، أي بدون مشاعر أو حماس أو استراحة أو تناغم. أصوات عشوائية بحتة كالقمامة، مثلما التضاريس المولّدة عشوائياً تبدو كالقمامة.

لتحسين مولّداتنا في كلا النطاقين الفيزيائي والصوتي، قد نختار إضافة عناصر باستخدام تحولات أسلس مثل خوارزمية ضوضاء برلين Perlin Noise، بحيث كل قيمة تكون قريبة من جيرانها، والعناصر تتحول تدريجياً من الأبيض إلى الأسود. يوجد في جميع محركات الألعاب مثال برمجي لإضافتها، وتولّد قيماً "سلسة" غير عشوائية وليس مجرد ضوضاء بحتة. فهي تسمح بجعل "النوتة المقبلة" بأن تكون بشكل عام "قريبة" من السابقة، مثلما تكون تضاريس ضوضاء برلين ذات منحدرات ناعمة؛ أي قيم بكسلات خريطة المرتفعات "heightmap" المتجاورة دائماً متقاربة - وليست مجرد ضوضاء عشوائية.

فجأة، بدلاً من الجماد، ستبدوا خريطتك كالتضاريس الحقيقية، وتتضمن جبالاً وبحيرات. هذا التشبيه ينطبق تماماً في الموسيقى؛ نعّم الانتقالات وسيصبح الصوت المولّد كأنه موسيقى حقيقية. لا تقفز عشوائياً بل اجعل النوتات المتجاورة قريبة في القيم.

المساحة الفارغة مهمة

ضف قاعدة أخرى في موّلدك بحيث لا تسمح ما يقارب لمدة نصف الأغنية بأن تكون مملوئة بنوتة تُعزَف. اترك مساحة فارغة، وخاصة في نهاية العبارة. النفس البشرية بحاجة لفسحة من أجل لتنفس، كما يحدث في الحديث الطبيعي مع الناس، فكلما تعقد قسم ما كلما لزم لقسم الآخر بأن يحتوي على مساحة فارغة أكثر. قلل من كثافة النوتات في أغنيتك من ٢٥% إلى ٥٠% من المساحة المتاحة.

اختر نوتات بشكل عشوائي من مقياس ما. اصنع بضع مجموعات مكونة من ثماني نوتات قريبة من بعضها البعض، ثم كرر كل واحدة منها أربع مرات، وبهذه البساطة: سيصبح لديك أغنية صوتها يشبه صوت الموسيقى الحقيقية إلى حدٍ مفاجئ.


(procjam-melody.mp3)

اخطي خطوة بعد الأخيرة بوضع حدٍ للمسافة التي تسافرها الأغنية بين النوتة والتالية، ستنساب النغمات مثل كلمات من شخص يتحدث - مع علو وهبوط في الحدة الصوتية، ونادراً ما تقفز فجأة مسافة طويلة. التطور التدريجي من المنخفض إلى المرتفع في الحدة أو من الضائج إلى الهادئ محبب أكثر من التغيرات الفجائية.

التناغم الهارموني يضيف الجمال

إن عزف أكثر من نوتة واحدة في نفس اللحظة يكون محبوباً عندما يكونان متناغمين، وبشعاً جداً عندما يكونان غير ذلك. إن السر يكمن باختيار الأبعاد التي تتوافق بشكل جيد مع النوتة الجذرية.


(procjam-harmony.mp3)

مثال لانسجام جذاب هو وضع نوتة من [بانحياز +٢]مقياس فوق نوتة أخرى بحيث تكونان منسجمتين، كوضع دو (C) مع فا (F). وذلك يدعى البعد الثالث "3rds". انسجام آخر يعمل في أي موقف هو البعد الخامس "5th"، ويحدث بنقل النوتة التي نريد إكمالها ٤ مراتب في مصفوفة المقياس للحصول على نوتة جديدة ذات صوت مناسب فوقها.

أهم شيء هو الباس

بجانب اللحن والتناغم، قد نريد خط باس "bass line" لربط كل العناصر مع بعضها. انشئ قاعدة تختار النوتة الأولى من الميزان (أو تسمى الضربة المنخفضة) لعزفها على الأغلب، وانشئ قاعدة أخرى تختار النوتة الأولى (الجذرية) من المقياس الذي يستخدمه المولد لاختيار النوتات منه. تلك القاعدتان تكفيان لملئ الدور الذي يلعبه الباس في الموسيقى الشعبية.


(procjam-bassline.mp3)

الآن امرح والعب بالمفاهيم المطروحة في هذه المقالة، واحرص على أن تكسر قواعد النظرية الموسيقية وتقاليد الموسيقى الشعبية وتضيف ما تحب من الأصوات المثيرة في موسيقاك، كضربات الطبل وأصوات الطبيعة.

يمكنك حتى التنقل بالإختفاء بين الأغاني المختلفة المتشاركة في سرعة الإيقاع، مثل البداية بالأغنيات البسيطة الهادئة كمقياس ماجور الشبه الفارغ والإنتقال إلى ألحان تحوي أبعاداً قصيرة بين النوتات كلما مرّ اللاعب بفترة استكشاف في اللعبة.

من أجل المعركة مع وحش المرحلة، ولّد أغنية منشغلة جداً تحوي لحناً يستخدم أبعاداً كبيرة ونوتات قادمة من أحد المقاييس الصغيرة. لن يصدق اللاعبون أن تلك الأغنية مولّدة بشكل إجرائي، سيكون صوتها سعيداً ومخيفاً في اللحظات المناسبة.

أحياناً ستكتشف البذرة "seed" البالغة الكمال أو الموقع والقطعة المناسبة من ضجيج برلين الذي يولد أغنية صوتها يبدو "حقيقياً".

1.00

(random-happy-song.mp4)

بهذه البساطة! مع هذه المجموعة من القواعد المفيدة، أصبح لديك الأسس النظري لإنشاء مولد موسيقى لائق. الآن تناول هذه المفاهيم معك وأنت تعمل على مولدات العناصر الإجرائية.

حظاً موفقاً في مسابقة PROCJAM لهذه السنة. أسمعوني إن صنعتم أي موسيقى إجرائية جيدة. يمكنكم التواصل معي على تويتر، حسابي هو mcfunkypants@. هذه بعض دزينات من الموسيقى العشوائية التي يمكنكم استخدامها في ألعابكم إن لم تكونوا قد صنعتوا مولّد موسيقي بعد. لقد وضعتها في نطاق الملكية العامة كهدية صغيرة لمجتمع صانعي الألعاب. تمتعوا!

Christer "McFunkypants" Kaitila


www.christerkaitila.com