
هذا مقال آخر في سلسلة مقالات تدريبية للمطورين في مجال الذكاء الاصطناعي. في المقالات السابقة ، درسنا جمع وإعداد البيانات مع الصور ، في هذه المقالة سنواصل مناقشة جمع ودراسة البيانات الموسيقية.
الغرض من هذا المشروع هو:
- إنشاء تطبيق يقبل مجموعة من الصور كمدخلات.
- التأكيد على التلوين العاطفي للصور.
- تلقي إخراج قطعة موسيقية تعكس المشاعر المقابلة.
يستخدم هذا المشروع لتوليد موسيقى معدلة بمساعدة العواطف ، خوارزمية (تحول موسيقي يعتمد على العواطف) ، والذي يؤدي إلى تغيير اللحن الأساسي وفقًا لعاطفة محددة وما يليه من تنسيق وإكمال اللحن باستخدام نموذج التعلم العميق. لإكمال هذه المهمة ، تكون مجموعات بيانات الموسيقى التالية مطلوبة:
- مجموعة بيانات لتعلم خوارزمية إكمال اللحن (باخ كوراليس).
- مجموعة من الألحان الشعبية التي تعمل كقوالب لتعديل المشاعر.
جمع ودراسة مجموعة بيانات موسيقية
باخ كوراليس - مشروع Music21
Music21 عبارة عن مجموعة أدوات تستند إلى Python لعلوم الموسيقى باستخدام جهاز كمبيوتر. يحتوي على مجموعة كاملة من جوقات باخ كجزء من أعماله المجمعة. لذلك ، فإن إجراء جمع البيانات بسيط للغاية - ما عليك سوى تثبيت حزمة
music21 (تتوفر أدلة لنظام التشغيل
macOS * و Windows * و Linux *).
بعد التثبيت ، يمكن الوصول إلى Bach chorales باستخدام الكود التالي:
from music21 import corpus for score in corpus.chorales.Iterator(numberingSystem='bwv', returnType='stream'): pass
التكرار على جميع جوقات باخكبديل ، يمكنك استخدام الكود التالي: يقوم بإرجاع قائمة بأسماء الملفات لجميع Bach chorales ، والتي يمكن معالجتها أكثر باستخدام وظيفة التحليل:
from music21 import corpus chorales = corpus.getBachChorales() score = corpus.parse(chorales[0])
استرجاع قائمة بجميع كورال باخاستكشاف البيانات
بعد الانتهاء من جمع البيانات (في هذه الحالة ، بعد الوصول إليها) ، فإن الخطوة التالية هي فحص ودراسة علامات هذه البيانات.
يعرض الكود التالي التمثيل النصي لملف الموسيقى:
>>> from music21 import corpus
>>> chorales = corpus.getBachChorales()
>>> score = corpus.parse(chorales[0])
>>> score.show('text')
{0.0} <music21.text.TextBox "BWV 1.6 W...">
{0.0} <music21.text.TextBox "Harmonized...">
{0.0} <music21.text.TextBox "PDF 2004 ...">
{0.0} <music21.metadata.Metadata object at 0x117b78f60>
{0.0} <music21.stream.Part Horn 2>
{0.0} <music21.instrument.Instrument P1: Horn 2: Instrument 7>
{0.0} <music21.stream.Measure 0 offset=0.0>
{0.0} <music21.layout.PageLayout>
{0.0} <music21.clef.TrebleClef>
{0.0} <music21.key.Key of F major>
{0.0} <music21.meter.TimeSignature 4/4>
{0.0} <music21.note.Note F>
{1.0} <music21.stream.Measure 1 offset=1.0>
{0.0} <music21.note.Note G>
{0.5} <music21.note.Note C>
{1.0} <music21.note.Note F>
{1.5} <music21.note.Note F>
{2.0} <music21.note.Note A>
{2.5} <music21.note.Note F>
{3.0} <music21.note.Note A>
{3.5} <music21.note.Note C>
{5.0} <music21.stream.Measure 2 offset=5.0>
{0.0} <music21.note.Note F>
{0.25} <music21.note.Note B->
{0.5} <music21.note.Note A>
{0.75} <music21.note.Note G>
{1.0} <music21.note.Note F>
{1.5} <music21.note.Note G>
{2.0} <music21.note.Note A>
{3.0} <music21.note.Note A>
{9.0} <music21.stream.Measure 3 offset=9.0>
{0.0} <music21.note.Note F>
{0.5} <music21.note.Note G>
.
.
.
>>> print(score)
<music21.stream.Score 0x10bf4d828>
تمثيل نصى للرقصأعلاه هو عرض للتمثيل النصي
للرقص ككائن
موسيقي .21. من المثير للاهتمام معرفة كيفية تمثيل music21 للموسيقى في التعليمات البرمجية ، ولكنها ليست مفيدة جدًا من حيث دراسة سمات البيانات المهمة. لذلك ، نحتاج إلى برنامج يمكنه عرض النتيجة.
كما هو مذكور سابقًا في المقالة
إعداد النموذج والمعلمات المفرطة
للتعرف على العواطف في الصور ، يتم تخزين النتيجة في الموسيقى 21 في ملفات MusicXML * (ذات الامتدادات xml أو. mxl). لعرض هذه الملفات بترميز موسيقي ، يتم استخدام تطبيق Finale NotePad * 2 المجاني (نسخة تجريبية من الحزمة الاحترافية Finale * للعمل مع التدوين الموسيقي).
Finale NotePad متاح لنظامي التشغيل Mac و Windows. بعد تنزيل Finale Notepad ، قم بتشغيل التعليمات البرمجية التالية لتكوين music21 للعمل مع Finale Notepad:
>>> import music21
>>> music21.configure.run()
يمكننا الآن تشغيل الكود أعلاه ، ولكن استخدم
نقاط المقطع. show () بدلاً من
Score.show ('text') . في هذه الحالة ، سيتم فتح ملف MusicXML في تطبيق Finale ، والذي يبدو كالتالي:
الصفحة الأولى لباخ في التدوين الموسيقييوفر هذا التنسيق عرضًا مرئيًا أكثر وضوحًا للكوراليس. عند فحص العديد من الكوراليس ، نتأكد من أن البيانات تلبي توقعاتنا: هذه قطع موسيقية قصيرة تحتوي على أربعة أجزاء على الأقل (سوبرانو ، فيولا ، تينور وباس) ، مقسمة إلى عبارات منفصلة عن طريق المزارع.
عادة ، يتم حساب بعض الإحصائيات الوصفية كجزء من إجراء دراسة البيانات. في هذه الحالة ، يمكننا تحديد عدد المرات التي يظهر فيها كل مفتاح في الأعمال التي تم جمعها. فيما يلي مثال لرمز يسمح لك بحساب وتصور تصنيف الاستخدام لكل مفتاح في مجموعة بيانات.
from music21 import* import matplotlib.pyplot as plt chorales = corpus.getBachChorales() dict = {} for chorale in chorales: score = corpus.parse(chorale) key = score.analyze('key').tonicPitchNameWithCase dict[key] = dict[key] + 1 if key in dict.keys() else 1 ind = [i for i in range(len(dict))] fig, ax = plt.subplots() ax.bar(ind, dict.values()) ax.set_title('Frequency of Each Key') ax.set_ylabel('Frequency') plt.xticks(ind, dict.keys(), rotation='vertical') plt.show()
تواتر استخدام كل مفتاح في الأعمال المجمعة. يتم تمثيل المفاتيح الثانوية بأحرف صغيرة ، بينما يتم تمثيل المفاتيح الرئيسية بأحرف صغيرة. يشار إلى الشقق بعلامة "-"فيما يلي بعض الإحصاءات المتعلقة بالأعمال التي تم جمعها.
توزيع المفاتيح المستخدمة في مجموعة من المؤلفات
موقع الملاحظات ، محسوبة على أنها الإزاحة من بداية التدبير في الملاحظات ربع السنويةتختلف الإحصائيات الوصفية التي تهم الحساب لكل مشروع. ومع ذلك ، في معظم الحالات ، يمكن أن تساعدك على معرفة نوع البيانات التي تعمل معها ، وحتى إدارة إجراءات معينة أثناء معالجة البيانات مسبقًا. يمكن أن تكون هذه الإحصائيات أيضًا بمثابة نقطة انطلاق لفحص نتائج المعالجة المسبقة للبيانات.
التحول الموسيقي - المعلومات النظرية
هناك نوعان من ناقلات التعبير الرئيسية في الموسيقى - النغم والإيقاع. نستخدم وسائط التعبير هذه كمعلمات لإعادة كتابة اللحن في الحالة المزاجية المختارة.
في النظرية الموسيقية ، عندما يتعلق الأمر بنبرة الأصوات في اللحن ، فإن علاقة المرتفعات بين النغمات تعني ضمنيًا. يسمى نظام النوتة الموسيقية القائم على سلسلة من الأصوات في درجة معينة مقياسًا. قد تختلف الفواصل الزمنية أو قياس عرض كل خطوة من التسلسل عن بعضها البعض. يخلق هذا الاختلاف أو غيابه علاقة بين النغمات والميول اللحنية التي تخلق فيها تركيبات ثابتة وجاذبية تعبيرًا عن المزاج. في التقليد الموسيقي الغربي ، عندما يتعلق الأمر بمقياس سلم موسيقي بسيط ، فإن موضع الملاحظة المتعلقة بالملاحظة الأولى للمقياس يسمى
مرحلة المقياس (I-II-III-IV-V-VI-VII). وفقًا للمجموعات الثابتة والجاذبية ، يوفر مقياس المقياس نغمة موسيقية تؤدي وظيفتها في النظام. وهذا يجعل فكرة مرحلة المقياس مفيدة للغاية في تحليل نمط لحني بسيط وترميزه مع إمكانية تعيين قيم مختلفة.
على المستوى الأولي ، نحتاج إلى اختيار المقاييس المناسبة من وجهة نظر فنية لخلق أي حالة مزاجية محددة. وبالتالي ، إذا كنا بحاجة إلى تغيير مزاج اللحن ، فيجب علينا دراسة هيكله الوظيفي باستخدام الفكرة الموصوفة للمقياس ، ثم تعيين قيم جديدة للقالب الحالي من خطوات المقياس. مثل الخريطة ، يحتوي هذا القالب أيضًا على معلومات حول الاتجاهات والنقاط في اللحن.
لكل حالة مزاجية محددة ، نستخدم بعض المعلمات الإضافية لجعل ألحاننا الجديدة أكثر تعبيرًا وتناغمًا وتعبيرًا.
الإيقاع هو طريقة لتنظيم الأصوات في الوقت المناسب. يتضمن معلومات مثل: ترتيب ظهور النغمات في اللحن ، وطولها النسبي ، والتوقفات بينها وبين اللهجات المختلفة. وبالتالي ، يتم إنشاء فترات زمنية لتنظيم الحجم الموسيقي. إذا كنا بحاجة إلى الحفاظ على النمط اللحني الأصلي ، فيجب أن نحافظ على هيكله الإيقاعي. لتحقيق هذا الهدف ، من الضروري فقط تغيير بعض معلمات الإيقاع - طول الملاحظات والإيقاف المؤقت - وهذا يجب أن يكون كافيًا من وجهة نظر فنية. بالإضافة إلى ذلك ، لجعل اللحن المعدل أكثر تعبيرًا ، يمكننا استخدام بعض الطرق الإضافية للتأكيد على مزاجها.
على سبيل المثال ، يمكن التعبير عن القلق باستخدام مفتاح ثانوي وإيقاع أكثر نشاطًا. قالب مقياسنا الأصلي هو كما يلي: VV-VI-VI-VII VV-VI-V-II-I VVV (انتقال اوكتاف أعلى) -III-I-VII-VI IV-IV-III-I-II-I .
قالب المصدرتم كتابة اللحن الأصلي في مفتاح رئيسي ، والذي يختلف عن مفتاح ثانوي في ثلاث ملاحظات - في مفتاح رئيسي للمراحل الثالثة والسادسة والسابعة رئيسية (نصف نغمة أعلاه) ، وفي مفتاح ثانوي - ثانوي (نصف نغمة أدناه). لذلك ، إذا احتجنا إلى تغيير الدرجة اللونية المستخدمة ، نحتاج فقط إلى استبدال الخطوات الأعلى بالخطوات الأقل (أو العكس). ومع ذلك ، لإنشاء تأثير أكثر أهمية للقلق ، من الضروري ترك المرحلة السابعة من مرحلة رئيسية (متزايدة) رئيسية - وهذا سيزيد من عدم استقرار هذه النغمة ويؤكد على مقياسنا بطريقة خاصة.
لجعل الإيقاع أكثر نشاطًا ، يمكننا أن نضيف إليه إغماء ، أو مقاطعة متزامنة لحركة الإيقاع العادية ، عن طريق تغيير موضع بعض الملاحظات. في هذه الحالة ، سنقوم بتحريك بعض الملاحظات المتشابهة.
قلق التحويليمكن أيضًا التعبير عن الحزن بمفتاح صغير بسيط ، ولكن يجب أن يكون إيقاعه هادئًا. لذا ، نستبدل الخطوات الرئيسية بخطوات طفيفة ، بما في ذلك الخطوة السابعة. لجعل الإيقاع أكثر هدوءًا ، تحتاج إلى ملء الإيقاف المؤقت عن طريق زيادة طول الملاحظات أمامها.
تحويل SADللتعبير عن النعمة ، يجب أن نتجنب التجويد الحاسم والصارم - سيكون هذا هو مبدأ التحول المقابل. كما ترى ، وفقًا للاختلافات في تسلسل الأصوات المستخدمة ، فإن خطوات المقياس لها معاني مختلفة والمسافة من الخطوة الأولى (I). وهكذا ، يتم إنشاء أهميتها في الصورة العامة. لذلك ، تكون الحركة من المرحلة IV إلى المرحلة I مباشرة جدًا بسبب وظيفتها. يبدو التجويد عند الانتقال من المرحلة V إلى المرحلة I واضحًا جدًا. سوف نتجنب هذين التجويد من أجل خلق انطباع بالفضاء وعدم اليقين.
لذلك ، في كل عنصر من عناصر النموذج ، حيث تتبع المرحلة الأولى المرحلة الخامسة ، أو المرحلة الرابعة تتبع المرحلة الرابعة ، وأيضًا بالترتيب العكسي لهذه الخطوات ، سنستبدل إحدى هذه الملاحظات (أو كلتا الملاحظات) بالخطوات الأقرب إليهما. يمكنك تغيير الإيقاع بطريقة مماثلة لإنشاء تأثير GRUSH - ببساطة عن طريق تقليل السرعة.
تحويل يباركيرتبط القرار بحركة قوية ، لذا فإن أبسط طريقة لإظهار ذلك هي تغيير الإيقاع بطريقة مشابهة للتغيير في تأثير القلق. من الضروري أيضًا تقليل مدة جميع الملاحظات باستثناء كل ملاحظة أخيرة لكل فترة ، VV-VI-VI-VII VV-VI-V-II-I.
قرار التحولالمفتاح الرئيسي في حد ذاته يبدو إيجابيًا وفرحًا ، للتأكيد على السعادة / الفرح والتعبير عنه ، نستخدم المفتاح الخماسي الرئيسي. وتتكون من نفس الخطوات ، باستثناء خطوتين - الرابعة والسابعة ، الأول والثاني والثالث والخامس.
لذلك ، في كل مرة نجد هاتين الخطوتين في قالبنا ، نستبدلها بالخطوات الأقرب إليهما. للتأكيد على البساطة التي توفرها نغماتنا اللونية ، نستخدم جزءًا لحنيًا تنازليًا يتكون من خمس ملاحظات أو أكثر كعرض خطوة بخطوة لمقياسنا.
تحويل JOYالهدوء / الهدوء يمكن التعبير عنه ليس فقط من خلال تغيير الدرجة اللونية ، بل يتطلب أيضًا تحويل الحركة اللحنية. للقيام بذلك ، تحتاج إلى تحليل القالب المصدر وتحديد شرائح مماثلة فيه. تحدد الملاحظة الأولى لكل مقطع السياق التوافقي للعبارة بأكملها ، لذا فإن هذه الملاحظات لها أكبر قيمة بالنسبة لنا:
V -
V -VI-VI-VII-VII
V -V-VI-V-II-I
V -VV-III-I-VII-VI
IV- IV-III-I-II-I.
بالنسبة للجزء الأول ، يجب استخدام الخطوات التالية فقط: IV-VI-VII ؛ الثانية: V-VII-II-I ؛ عن الثالث: VI-VII-III-II ؛ للرابع: السابع - الرابع - الأول - السابع.
هذه المجموعات من الخطوات الممكنة هي في الواقع نوع آخر من البنية الموسيقية ، الحبال. ومع ذلك ، لا يزال بإمكاننا استخدامها كنظام لتحويل الألحان. يمكن استبدال خطوات المقياس بالخطوات الأقرب إليها من أنماط الوتر المشار إليها. إذا بدأ الجزء بأكمله بنغمة أقل من الأصل ، فمن الضروري استبدال جميع الخطوات الواردة فيه بالخطوات الأقل المتوفرة في القالب المحدد. لإنشاء تأثير تأخير ، من الضروري أيضًا تقسيم مدة كل ملاحظة إلى الملاحظات الثامنة وتقليل سرعة هذه الملاحظات الثامنة الجديدة تدريجيًا.
هدوء التحويل / الهدوءللتأكيد على GRATITUDE ، من الضروري استخدام عرضه الأسلوبي في الإيقاع ، وإنشاء تأثير arpeggio: نعود إلى الملاحظة الأولى في نهاية كل مقطع (عبارة). من الضروري تخفيض مدة كل ملاحظة أخيرة إلى النصف إلى النصف ووضع الملاحظة الأولى من هذا المقطع هناك.
GRATITUDE التحويلجزء عملي
مجموعة أدوات Python و music21
تم تنفيذ البرنامج النصي للتحويل باستخدام لغة Python ومجموعة أدوات music21.
Music21 عبارة عن فئة متعددة الاستخدامات وعالية المستوى للتلاعب بالمفاهيم الموسيقية مثل النوتات الموسيقية والحجم والوتر والنغمة وما إلى ذلك. فهي تتيح لك إجراء العمليات مباشرة في مجال الموضوع ، على عكس التلاعبات ذات المستوى المنخفض بالبيانات الأولية من ملف واجهة الآلات الموسيقية الرقمية (MIDI). ومع ذلك ، فإن العمل المباشر مع ملفات MIDI في الموسيقى 21 ليس دائمًا مناسبًا ، خاصة عندما يتعلق الأمر بتصور النتيجة. لذلك ، من أجل التصور وتنفيذ الخوارزمية ، هناك طريقة أكثر ملاءمة لتحويل ملفات MIDI المصدر إلى تنسيق musicXML. بالإضافة إلى ذلك ، تنسيق musicXML هو تنسيق الإدخال لـ BachBot ، والذي يمثل الخطوة التالية في تسلسل المعالجة.
يمكن إجراء التحويل باستخدام Musescore:
للحصول على إخراج ملف musicXML:
musescore input.mid -o output.xml
للحصول على إخراج ملف MIDI:
musescore input.mid -o output.mid
جوبيتر
تم دمج مجموعة أدوات music21 بشكل جيد مع تطبيق Jupyter. بالإضافة إلى ذلك ، يتيح لك التكامل مع Musescore عرض النتيجة مباشرة في مستند دفتر ملاحظات Jupyter والاستماع إلى النتائج من خلال المشغل المدمج أثناء التطوير والتجريب.
وثيقة دفتر جوبيتر مع الكود والنتيجة واللاعبتعتبر وظيفة Score Show مفيدة بشكل خاص للعمل الجماعي للمبرمج والموسيقي - المنظر. إن الجمع بين الطبيعة التفاعلية لجوبيتر ، والمجال الخاص بالموسيقى 21 ، وبساطة بايثون يجعل سير العمل هذا واعدًا بشكل خاص لهذا النوع من الأبحاث متعددة التخصصات.
التنفيذ
تم تنفيذ البرنامج النصي للتحويل كوحدة Python ، لذا فهو يسمح بإجراء مكالمة مباشرة:
python3 emotransform.py --emotion JOY input.mid
أو يمكنك تسميته من خلال نص خارجي (أو جوبيتر):
from emotransform import transform transform('input.mid','JOY')
في كلتا الحالتين ، ستكون نتيجة العمل ملفًا معدلاً بمساعدة عاطفة معينة.
تعتمد التحولات المرتبطة بالتغييرات في الخطوات الموسيقية - القلق والحزن والبركة والسرور - على استخدام وظيفة الموسيقى 21.Note.transpose مع تحليل الوضع الحالي والمطلوب للخطوات الموسيقية. هنا نستخدم وحدة music21.scale ووظائفها لبناء المقياس المطلوب من أي منشط. للحصول على منشط لحن معين ، يمكنك استخدام
وظيفة التحليل ('key') من وحدة music21.Stream7.
للتحويلات القائمة على العبارة - القرار ، GRATITUDE ، الهدوء / الهدوء - مطلوب بحث إضافي. ستتيح لنا هذه الدراسة اكتشاف بداية ونهاية العبارات الموسيقية بدقة.
الخلاصة
في هذه المقالة ، قدمنا الفكرة الرئيسية الكامنة وراء التحول الموسيقي القائم على العواطف - تغيير موضع ملاحظة واحدة في المقياس نسبة إلى منشط (الخطوة الموسيقية) ، وتيرة القطعة ، وكذلك العبارة الموسيقية. تم تنفيذ هذه الفكرة كنص في Python. ومع ذلك ، فإن تنفيذ الأفكار النظرية في العالم الحقيقي ليس سهلاً دائمًا ، لذلك واجهنا بعض الصعوبات وحددنا الاتجاهات الممكنة للبحث في المستقبل. تتعلق هذه الدراسة بشكل أساسي بالكشف عن العبارات الموسيقية وتحولاتها. يعد الاختيار الصحيح للأدوات (music21) والبحث في مجال المعلومات الموسيقية من العوامل الرئيسية لحل هذه المشكلات.
يمثل التحول الموسيقي القائم على العواطف المرحلة الأولى في تسلسلنا لمعالجة البيانات الموسيقية ، والمرحلة التالية هي تقديم اللحن المحول والمجهز لمدخلات BachBot.