السبر الماضي. دليل للمؤرخين حول تحويل البيانات إلى صوت

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

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

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

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

محتوى



الأهداف والغايات


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

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

سترى كيف أن العمل مع الأصوات ينتقل بنا من التصور البسيط إلى بيئة فعالة حقًا.

الأدوات



عينات البيانات



مقدمة صغيرة للدبلجة


Sonification هو وسيلة لترجمة بعض جوانب البيانات إلى إشارات صوتية. بشكل عام ، يمكن تسمية طريقة "التسجيل" إذا كانت تفي بشروط معينة. وتشمل هذه الاستنساخ (يمكن للباحثين الآخرين معالجة نفس البيانات بنفس الطرق والحصول على نفس النتائج) وما يمكن تسميته "وضوح" أو "وضوح" ، أي عندما تنعكس عناصر كبيرة من البيانات الأصلية بشكل منهجي في الصوت الناتج (انظر هيرمان ، 2008 ). يصف عمل Mark Last و Anna Usyskina (2015) سلسلة من التجارب لتحديد المهام التحليلية التي يمكن القيام بها عند تسجيل البيانات. أظهرت نتائجهم التجريبية أنه حتى الطلاب غير المدربين (بدون تدريب موسيقي رسمي) يمكنهم التمييز بين البيانات السمعية واستخلاص استنتاجات مفيدة. وجدوا أن المستمعين كانوا قادرين على أداء المهام العامة لاستخراج البيانات عن طريق الأذن ، مثل التصنيف والتكتل (في تجاربهم قاموا ببث البيانات العلمية الأساسية على نطاق الموسيقى الغربية).

ركز Last و Usyskina على السلسلة الزمنية. وفقًا للنتائج التي توصلوا إليها ، تعد بيانات السلاسل الزمنية مناسبة تمامًا للتسجيل ، نظرًا لوجود أوجه تشابه طبيعية هنا. الموسيقى متسقة ، لها مدة ، وتتطور مع مرور الوقت ؛ أيضًا مع بيانات السلاسل الزمنية ( Last ، Usyskina 2015: p. 424 ). يبقى لمقارنة البيانات مع مخرجات الصوت المقابلة. في العديد من التطبيقات ، يتم استخدام طريقة تعيين المعلمة للجمع بين جوانب البيانات للقياسات السمعية المختلفة ، مثل الارتفاع والشكل التبايني والفاصل الزمني (بداية). المشكلة في هذا النهج هي أنه إذا لم يكن هناك اتصال مؤقت (أو بالأحرى اتصال غير خطي) بين نقاط البيانات المصدر ، فقد يتحول الصوت الناتج إلى "مربك" ( 2015: 422 ).

ملء الفراغات


عند الاستماع إلى الصوت ، يملأ الشخص لحظات الصمت بتوقعاته. النظر في الفيديو حيث يتم تحويل mp3 إلى MIDI والعودة إلى mp3. يتم "تسطيح" الموسيقى ، بحيث يتم نسخ جميع المعلومات الصوتية بأداة واحدة (يشبه التأثير حفظ صفحة ويب بتنسيق .txt ، وفتحه في Word ، ثم حفظه مرة أخرى بتنسيق .html). يتم ترجمة جميع الأصوات (بما في ذلك غناء) إلى قيم الملاحظة المقابلة ، ثم العودة إلى mp3.

هذا هو الضجيج ، ولكن يمكنك التقاط النقطة:


ما الذي يحدث هنا؟ إذا كانت هذه الأغنية معروفة لك ، فربما تكون قد فهمت "الكلمات" الحقيقية. لكن الأغنية ليس لها كلمات! إذا لم تكن قد سمعت من قبل ، فسيبدو الأمر وكأنه نشوة لا معنى لها (المزيد من الأمثلة على اندي بايو الموقع). يسمى هذا التأثير أحيانًا بالهلوسة السمعية. يوضح المثال كيف في أي تمثيل للبيانات يمكننا سماع / رؤية ما ، بالمعنى الدقيق للكلمة ، ليس كذلك. نحن نملأ الفراغ بتوقعاتنا.

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

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

يحتوي كل قسم على مقدمة مفاهيمية ، يتبعها تجول باستخدام البيانات الأثرية أو التاريخية.

الخوارزميات الموسيقية


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

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


موقع الخوارزميات الموسيقية اعتبارًا من 2 فبراير 2016

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

  # من الأصوات ، اسم منطقة النص ، بيانات منطقة النص
 1 ، morphBox ،
 المنطقة 1 الملعب 2 7 1 8 2 8 1 8 2 8 4 5 9 - 4 5 2 3 5 3 6 - 2 8
 ، dAreaMap1،2 7 1 8 2 8 1 8 2 8 4 5 9 - 4 5 2 3 5 3 6 - 2 8
 ، mapArea1.20 69 11 78 20 78 11 78 20 78 40 49 88 1 40 49 20 30 49 30 59 1 20 78
 ، dMapArea1.1 5 1 5 1 5 1 5 1 5 3 3 6 6 3 3 1 2 3 2 4 - 1 5
 ، so_text_area1.20 69 11 78 20 78 11 78 20 78 40 49 88 1 40 49 20 30 49 30 59 1 20 78 

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

  # من الأصوات ، اسم منطقة النص ، بيانات منطقة النص
 1 ، morphBox ،
 ، منطقة الملعب 1.24 72 12 84 21 81 14 81 24 81 44 51 94 01 44 51 24 31 5 43 61 04 21 81 

بالنسبة لنا ، المفتاح هو الحقل "areaPitch1" مع بيانات الإدخال ، والتي تكون مفصولة بمسافات. سيتم ملء الحقول الأخرى أثناء العمل بإعدادات الخوارزميات الموسيقية المختلفة. في البيانات أعلاه (على سبيل المثال ، 24 72 12 84 ، وما إلى ذلك) ، القيم هي الحسابات الأولية لعدد النقوش في المدن البريطانية على طول الطريق الروماني (لاحقًا سنتدرب مع البيانات الأخرى).


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

الآن ، عند عرض علامات تبويب مختلفة في الواجهة (المدة ، وترجمة الطول ، وترجمة المدة ، وخيارات المقياس) ، تتوفر تحويلات متنوعة. في تعيين الملاعب ، يوجد عدد من الخيارات الرياضية لترجمة البيانات إلى لوحة مفاتيح بيانو كاملة 88 مفتاحًا (في الترجمة الخطية ، تُترجم القيمة المتوسطة إلى المتوسط ​​C ، أي 40). يمكنك أيضًا اختيار نوع المقياس: ثانوي أو رئيسي ، وهكذا. في هذه المرحلة ، بعد تحديد التحويلات المختلفة ، يجب عليك حفظ الملف النصي. في علامة التبويب ملف → التشغيل ، يمكنك تنزيل ملف midi. يجب أن يكون برنامج الصوت الافتراضي لديك قادرًا على تشغيل midi (غالبًا ما تستخدم ملاحظات البيانو افتراضيًا). يتم تعيين أدوات midi الأكثر تطوراً في برامج الخلاط مثل GarageBand (Mac) أو LMMS (Windows ، Mac ، Linux). ومع ذلك ، فإن استخدام GarageBand و LMMS خارج نطاق هذا الدليل: يتوفر فيديو تعليمي LMMS هنا ، والبرامج التعليمية GarageBand كاملة على الإنترنت. على سبيل المثال ، دليل كبير على Lynda.com.

يحدث أن هناك العديد من أعمدة البيانات لنفس النقاط. لنقل ، في مثالنا من بريطانيا ، نريد أيضًا أن نعبر عن حساب أنواع السيراميك لنفس المدن. بعد ذلك ، يمكنك إعادة تحميل الصف التالي من البيانات وإجراء التحويلات والمقارنات - وإنشاء ملف MIDI آخر. نظرًا لأن GarageBand و LMMS يتيحان لك تراكب الأصوات ، يمكنك إنشاء تسلسل موسيقي معقد.


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

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

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

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

ممارسة


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

  1. افتح thesonification-roman-data.csv في جدول بيانات. انسخ العمود الأول إلى محرر نصوص. حذف نهايات السطر بحيث تكون جميع البيانات في نفس السطر.
  2. أضف المعلومات التالية:

      # من الأصوات ، اسم منطقة النص ، بيانات منطقة النص
     1 ، morphBox ،
     ، areaPitch1 ، 

    ... لذلك تتبع بياناتك مباشرة بعد آخر فاصلة (مثل pltcm ). احفظ الملف باسم ذو معنى ، على سبيل المثال ، coinsounds1.csv .
  3. انتقل إلى موقع Musicalgorithms (الإصدار الثالث) وانقر فوق الزر "تحميل". في النافذة المنبثقة ، انقر فوق الزر "تحميل" الأزرق وحدد الملف المحفوظ في الخطوة السابقة. سيقوم الموقع بتحميل المواد الخاصة بك ، وإذا نجح ، فسيظهر علامة خضراء. إذا لم يكن الأمر كذلك ، فتأكد من أن القيم مفصولة بمسافات واتبع الفاصلة الأخيرة في كتلة الشفرة. يمكنك محاولة تنزيل الملف التجريبي من هذا الدليل .


    بعد النقر فوق "تحميل" ، يظهر مربع الحوار هذا على الشاشة الرئيسية. ثم انقر فوق "تحميل ملف CSV". حدد ملفك ، وسوف يظهر في الحقل. ثم انقر فوق الزر "تحميل" في الأسفل.
  4. انقر فوق "Pitch Input" وستظهر لك قيم بياناتك. لا تحدد خيارات إضافية في هذه الصفحة في هذا الوقت (وبالتالي ، تنطبق القيم الافتراضية).
  5. انقر فوق "مدة الإدخال". لا تحدد أي خيارات هنا حتى الآن . ستعمل هذه الخيارات على تحويلات مختلفة لبياناتك مع تغيير في مدة كل ملاحظة. حتى تقلق بشأن هذه الخيارات ، تابع.
  6. انقر فوق "تعيين الملعب". هذا هو الخيار الأكثر أهمية ، حيث إنه يترجم (أي المقاييس) بياناتك الخام إلى مفاتيح لوحة المفاتيح. اترك mapping في قيمة "القسمة" (المعلمات الأخرى هي ترجمة معيارية أو لوغاريتمية). تستخدم المعلمة Range من 1 إلى 88 طول لوحة المفاتيح 88 مفاتيح ؛ وبالتالي ، فإن أدنى قيمة تتوافق مع أعمق ملاحظة على البيانو ، وأعلى قيمة إلى أعلى ملاحظة. بدلاً من ذلك ، يمكنك 31,34,34,34,25,28,30,60,28,25,26,26,25,25,60,25,25,38,33,26,25,25,25 الموسيقى على نطاق حول الوسط C ، ثم إدخال نطاق من 25 إلى 60. سيتغير الإخراج كما يلي: 31,34,34,34,25,28,30,60,28,25,26,26,25,25,60,25,25,38,33,26,25,25,25 ، 31,34,34,34,25,28,30,60,28,25,26,26,25,25,60,25,25,38,33,26,25,25,25 ، 31,34,34,34,25,28,30,60,28,25,26,26,25,25,60,25,25,38,33,26,25,25,25 ، 31,34,34,34,25,28,30,60,28,25,26,26,25,25,60,25,25,38,33,26,25,25,25 ، 31,34,34,34,25,28,30,60,28,25,26,26,25,25,60,25,25,38,33,26,25,25,25 ، 31,34,34,34,25,28,30,60,28,25,26,26,25,25,60,25,25,38,33,26,25,25,25 ، 31,34,34,34,25,28,30,60,28,25,26,26,25,25,60,25,25,38,33,26,25,25,25 . هذه ليست الأرقام الخاصة بك ، ولكن الملاحظات على لوحة المفاتيح.


    انقر فوق حقل "النطاق" وأدخل 25. ستتغير القيم أدناه تلقائيًا. في الحقل "إلى" ، قم بتعيين 60. إذا انتقلت إلى حقل آخر ، سيتم تحديث القيم
  7. انقر فوق "تعيين المدة". كما هو الحال مع ترجمة الارتفاع ، هنا يأخذ البرنامج النطاق الزمني المحدد ويستخدم مختلف المعلمات الرياضية لترجمة هذا النطاق إلى ملاحظات. إذا مررت بالمرور فوق i ، فسترى الأرقام التي تتوافق مع الملاحظات الكاملة والأرباع والثمانين وما إلى ذلك. اترك الإعدادات الافتراضية الآن.
  8. انقر فوق "خيارات النطاق". هنا نبدأ في العمل بما يتوافق مع الجانب "العاطفي". عادة ، يُنظر إلى النطاق الرئيسي على أنه "فرح" والقاصر - "حزين" ؛ يمكن الاطلاع على مناقشة تفصيلية لهذا الموضوع هنا . في الوقت الحالي ، اترك "مقياس حسب: رئيسي". اترك "المقياس" عند C.

لذلك ، أعلنا عمود واحد من البيانات! انقر فوق "حفظ" ، ثم "حفظ ملف CSV".


مربع الحوار "حفظ"

سوف تحصل على شيء مثل هذا الملف:

  # من الأصوات ، اسم منطقة النص ، بيانات منطقة النص
 1 ، morphBox ،
 ، منطقة الملعب 1.80 128 128 128 1 40 77 495 48 2 21 19 1 1 500 1 3 190 115 13 5 1 3
 ، dAreaMap1،2 7 1 8 2 8 1 8 2 8 4 5 9 - 4 5 2 3 5 3 6 - 2
 ، mapArea1.31 34 34 34 25 28 30 60 28 25 26 26 25 25 60 25 25 38 33 26 25 25 25
 ، dMapArea1.1 5 1 5 1 5 1 5 1 5 3 3 6 6 3 3 1 2 3 2 4 - 1
 ، so_text_area1.32 35 35 35 25 28 30 59 28 25 27 27 25 25 59 25 25 39 33 27 25 25 25 

بقيت البيانات الأصلية في الحقل "areaPitch1" ، ثم انتقلت التعيينات التي تم إنشاؤها إلى أبعد من ذلك. يسمح لك الموقع بإنشاء ملف MIDI واحد يصل إلى أربعة أصوات في كل مرة. اعتمادًا على الأدوات التي تريد استخدامها لاحقًا ، يمكنك اختيار إنشاء ملف MIDI واحد في كل مرة. لنبدأ تشغيل الموسيقى: انقر فوق "تشغيل". هنا تختار السرعة والأداة. يمكنك الاستماع إلى بياناتك في مستعرض أو حفظها كملف MIDI باستخدام الزر الأزرق "Save MIDI file".

دعنا نعود إلى البداية ونحمّل عمودي البيانات في هذا القالب:

  # من الأصوات ، اسم منطقة النص ، بيانات منطقة النص
 2 ، morphBox ،
 ، areaPitch1 ،
 ، areaPitch2 ، 


نحن هنا على الصفحة مع المعلمات "مدخلات الملعب". في الجزء العلوي من النافذة ، حدد صوتين ، والآن على أي صفحة مع المعلمات نافذتين لفتح صوتين. كما كان من قبل ، نقوم بتحميل البيانات بتنسيق CSV ، ولكن يجب تنسيق الملف بحيث تتم الإشارة إلى القيمتين "areaPitch1" و "areaPitch2" هناك. ستظهر بيانات الصوت الأول على اليسار ، والثانية - على اليمين

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

بيثون الإعداد لفترة وجيزة


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

تم تثبيت Python بالفعل على أجهزة Mac. يمكنك التحقق: اضغط على COMMAND ومسافة ، وأدخل terminal في مربع البحث وانقر على تطبيق الجهاز. يعرض الأمر $ type python —version أي إصدار من Python قمت بتثبيته. في هذه المقالة نعمل مع Python 2.7 ، لم يتم اختبار الكود في Python 3.

يحتاج مستخدمو Windows إلى تثبيت Python بمفردهم: ابدأ من هذه الصفحة ، على الرغم من أنه أكثر تعقيدًا مما يقول. أولاً ، تحتاج إلى تنزيل ملف .msi (Python 2.7). قم بتشغيل برنامج التثبيت ، وسيتم تثبيته في دليل جديد ، على سبيل المثال ، C:\Python27\ . ثم تحتاج إلى تسجيل هذا الدليل في المسارات ، أي أخبر Windows عن مكان البحث عن Python عند تشغيل برنامج Python. هناك عدة طرق للقيام بذلك. ربما تكون أسهل طريقة للعثور على Powershell على جهاز الكمبيوتر الخاص بك (اكتب "powershell" في شريط بحث Windows). افتح Powershell وفي موجه الأوامر ، الصق هذا كله:

  [البيئة] :: SetEnvironmentVariable ("المسار" ، "$ env: المسار ؛ C: \ Python27 \ ؛ C: \ Python27 \ Scripts \"، "User") 

إذا لم يحدث شيء عن طريق الضغط على مفتاح Enter ، فقد نجح الأمر. للتحقق ، افتح موجه الأوامر (فيما يلي 10 طرق للقيام بذلك ) وأدخل python --version . يجب أن ترى استجابة تشير إلى Python 2.7.10 أو إصدار مماثل.

آخر قطعة من اللغز هو برنامج يسمى Pip . يمكن لمستخدمي Mac تثبيته باستخدام الأمر في محطة sudo easy_install pip . سيكون لمستخدمي Windows أكثر تعقيدًا. أولاً ، انقر بزر الماوس الأيمن فوق وحفظ الملف من خلال هذا الرابط (إذا قمت فقط بالنقر فوق الارتباط ، فسوف يتم فتح رمز get-pip.py في المتصفح). احتفظ بها في مكان ما في متناول اليد. افتح موجه الأوامر في الدليل حيث قمت بحفظ get-pip.py . ثم اكتب python get-pip.py في موجه أوامر python get-pip.py .

عندما يكون لديك رمز Python الذي تريد تشغيله ، الصقه في محرر نصوص واحفظ الملف بالملحق .py . هذا ملف نصي ، لكن امتداد الملف يطلب من الكمبيوتر استخدام Python لتفسيره. يتم تشغيله من سطر الأوامر ، حيث تتم الإشارة إلى اسم المترجم أولاً ، ثم اسم الملف: python my-cool-script.py .

MIDITime


MIDITime هي حزمة بيثون طورتها شركة Reveal News (كانت تسمى سابقًا مركز الصحافة الاستقصائية). مستودع على جيثب . تم تصميم MIDITime خصيصًا لمعالجة السلاسل الزمنية (على سبيل المثال ، سلسلة من الملاحظات التي تم جمعها مع مرور الوقت).

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

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

وضع MIDITime


التثبيت مع أمر نقطة واحدة:

 $ pip install miditime 

لالخشخاش.

 $ sudo pip install miditime 

تحت لينكس

 > python pip install miditime 

تحت Windows (إذا لم يعمل التعليمات ، يمكنك تجربة هذه الأداة المساعدة لتثبيت Pip).

ممارسة


النظر في سبيل المثال النصي. افتح محرر نصوص ، انسخ هذا الرمز والصقه:

 #!/usr/bin/python from miditime.miditime import MIDITime # NOTE: this import works at least as of v1.1.3; for older versions or forks of miditime, you may need to use # from miditime.MIDITime import MIDITime # Instantiate the class with a tempo (120bpm is the default) and an output file destination. mymidi = MIDITime(120, 'myfile.mid') # Create a list of notes. Each note is a list: [time, pitch, attack, duration] midinotes = [ [0, 60, 200, 3], #At 0 beats (the start), Middle C with attack 200, for 3 beats [10, 61, 200, 4] #At 10 beats (12 seconds from start), C#5 with attack 200, for 4 beats ] # Add a track with those notes mymidi.add_track(midinotes) # Output the .mid file mymidi.save_midi() 

احفظ البرنامج النصي كـ music1.py . في سطر الأوامر أو سطر الأوامر ، قم بتشغيله:

 $ python music1.py 

سيتم إنشاء ملف myfile.mid جديد في myfile.mid . يمكنك فتحه للاستماع باستخدام Quicktime أو Windows Media Player (وإضافة أدوات هناك في GarageBand أو LMMS ).

يستورد Music1.py miditime (تذكر تثبيته قبل تشغيل البرنامج النصي: pip install miditime ). ثم يحدد السرعة. يتم سرد جميع الملاحظات بشكل منفصل ، حيث يكون الرقم الأول هو وقت بدء التشغيل ، والارتفاع (أي الملاحظة نفسها!) ، ومدى قوة أو إيقاع الملاحظة (الهجوم) ومدتها. ثم يتم تسجيل الملاحظات على المسار ، ويتم تسجيل المسار نفسه في ملف myfile.mid .

العب مع البرنامج النصي ، أضف المزيد من الملاحظات. فيما يلي ملاحظات أغنية "Baa Baa Black Sheep":

  د ، د ، أ ، أ ، ب ، ب ، ب ، ب ، أ
 با ، با ، أسود ، خروف ، هل لديك أي صوف؟ 

هل يمكنك كتابة تعليمات للكمبيوتر لتشغيل لحن (هنا هو مخطط للمساعدة)؟

بالمناسبة . يوجد تنسيق ملف نصي خاص لوصف الموسيقى التي تسمى ABC Notation . إنه خارج نطاق هذه المقالة ، ولكن يمكنك كتابة نص برمجي للتسجيل ، على سبيل المثال ، في جداول البيانات ، ومقارنة قيم الملاحظات في تدوين ABC (إذا كنت قد استخدمت IF - THEN في Excel ، لديك فكرة عن كيفية القيام بذلك) ، ثم من خلال مواقع مثل هذه ، يتم تحويل تدوين ABC إلى ملف .mid.

تحميل البيانات الخاصة بك


يحتوي هذا الملف على عينة من نموذج سمة يوميات John Adams لموقع Macroscope . تم ترك أقوى الإشارات فقط هنا ، حيث يتم تقريب القيم الموجودة في الأعمدة إلى منزلتين عشريتين. لإدراج هذه البيانات في البرنامج النصي Python ، تحتاج إلى تنسيقها بطريقة خاصة. أصعب شيء في حقل التاريخ.

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

  my_data = [
     {'event_date': <كائن وقت التاريخ> ، 'الحجم': 3.4} ،
     {'event_date': <كائن وقت التاريخ> ، 'الحجم': 3.2} ،
     {'event_date': <كائن وقت التاريخ> ، 'الحجم': 3.6} ،
     {'event_date': <كائن وقت التاريخ> ، 'الحجم': 3.0} ،
     {'event_date': <كائن وقت التاريخ> ، 'الحجم': 5.6} ،
     {'event_date': <كائن وقت التاريخ> ، 'الحجم': 4.0}
 ] 

يمكن استخدام التعبيرات العادية لتنسيق البيانات ، وحتى أسهل - جداول البيانات. انسخ العنصر مع قيمة مساهمة السمة إلى ورقة جديدة واترك الأعمدة يسارًا ويمينًا. في المثال أدناه ، أضعه في العمود D ، ثم ملأ الباقي:

ABCDE
1{'event_date': التاريخ(1753،6،8)، "الحجم":0.0024499630}
2
3

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

  my_data = [
 {'event_date': التاريخ (1753،6،8) ، 'الحجم': 0.0024499630} ،
 {'event_date': التاريخ (1753،6،9) ، 'الحجم': 0.0035766320} ،
 {'event_date': وقت التاريخ (1753،6،10) ، 'الحجم': 0.0022171550} ،
 {'event_date': وقت التاريخ (1753،6،11) ، 'الحجم': 0.0033220150} ،
 {'event_date': وقت التاريخ (1753،6،12) ، 'الحجم': 0.0046445900} ،
 {'event_date': وقت التاريخ (1753،6،13) ، 'الحجم': 0.0035766320} ،
 {'event_date': وقت التاريخ (1753،6،14) ، 'الحجم': 0.0042241550}
 ] 

لاحظ أنه لا توجد فاصلة في نهاية السطر الأخير.

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

 from miditime.MIDITime import MIDITime from datetime import datetime import random mymidi = MIDITime(108, 'johnadams1.mid', 3, 4, 1) 

يتم تعيين القيم بعد MIDITime على أنها MIDITime(108, 'johnadams1.mid', 3, 4, 1) ، هنا:

  • عدد النبضات في الدقيقة (108) ،
  • ملف الإخراج ('johnadams1.mid') ،
  • عدد الثواني في الموسيقى لتمثيل سنة واحدة في التاريخ (3 ثوانٍ لكل سنة تقويمية ، لذلك يتم قياس مدخلات اليوميات لمدة 50 عامًا على أنغام من 50 × 3 ثوان ، أي دقيقتين ونصف) ،
  • اوكتاف أساسي للموسيقى (يمثل C عادةً كـ C5 ، لذلك هنا 4 يتوافق مع اوكتاف واحد أقل من المرجع) ،
  • وعدد أوكتافات لمقارنة المرتفعات.

الآن نقوم بتمرير البيانات إلى البرنامج النصي عن طريق تحميلها في صفيف my_data :

 my_data = [ {'event_date': datetime(1753,6,8), 'magnitude':0.0024499630}, {'event_date': datetime(1753,6,9), 'magnitude':0.0035766320}, 

... هنا نقوم بإدراج جميع البيانات ولا تنسَ إزالة الفاصلة في نهاية السطر الأخير من event_date ، وبعد البيانات ، وضعت شريحة النهاية على سطر منفصل:

 {'event_date': datetime(1753,6,14), 'magnitude':0.0042241550} ] 

ثم أدخل التوقيت:

 my_data_epoched = [{'days_since_epoch': mymidi.days_since_epoch(d['event_date']), 'magnitude': d['magnitude']} for d in my_data] my_data_timed = [{'beat': mymidi.beat(d['days_since_epoch']), 'magnitude': d['magnitude']} for d in my_data_epoched] start_time = my_data_timed[0]['beat'] 

يحدد هذا الرمز التوقيت بين إدخالات مذكرات مختلفة ؛ إذا كانت إدخالات المذكرات قريبة من بعضها البعض في الوقت المناسب ، فستكون الملاحظات المقابلة أقرب. أخيرًا ، نحدد كيفية مقارنة البيانات مع الارتفاع. تتم الإشارة إلى القيم الأولية كنسبة مئوية في النطاق من 0.01 (أي 1٪) إلى 0.99 (99٪) ، لذلك قمنا بتعيين scale_pct بين 0 و 1. إذا لم يكن لدينا النسب المئوية ، فإننا نستخدم الأدنى والأعلى القيم. وبالتالي ، ندرج الكود التالي:

 def mag_to_pitch_tuned(magnitude): scale_pct = mymidi.linear_scale_pct(0, 1, magnitude) # Pick a range of notes. This allows you to play in a key. c_major = ['C', 'C#', 'D', 'D#', 'E', 'E#', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B', 'B#'] #Find the note that matches your data point note = mymidi.scale_to_note(scale_pct, c_major) #Translate that note to a MIDI pitch midi_pitch = mymidi.note_to_midi_pitch(note) return midi_pitch note_list = [] for d in my_data_timed: note_list.append([ d['beat'] - start_time, mag_to_pitch_tuned(d['magnitude']), random.randint(0,200), # attack random.randint(1,4) # duration, in beats ]) 

والجزء الأخير لحفظ البيانات في ملف:

 # Add a track with those notes mymidi.add_track(midinotes) # Output the .mid file mymidi.save_midi() 

احفظ هذا الملف باسم جديد .py .

لكل عمود في البيانات المصدر نصنع نصًا فريدًا ولا تنسَ تغيير اسم ملف الإخراج ! يمكنك بعد ذلك تحميل ملفات midi الفردية إلى GarageBand أو LMMS للأجهزة. إليكم اليوميات الكاملة لجون آدمز .

سونيك بي


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

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

أقترح هنا مقتطف شفرة لاستيراد البيانات ، وهي مجرد قائمة بالقيم المخزنة بتنسيق csv. بفضل لورا فروبل ، مكتبة جامعة جورج واشنطن ، التي حملت تجاربها على سبر عمليات المكتبة إلى gist.github.com .

هناك موضوعان في هذه العينة (النموذج المواضيعي المتولد من العلاقة اليسوعية ). في السطر الأول ، تكون العناوين "topic1" و "topic2".

ممارسة


اتبع البرامج التعليمية المدمجة Sonic Pi حتى تتعرف على الواجهة والميزات (يتم تجميع كل هذه البرامج التعليمية هنا ، ويمكنك أيضًا الاستماع إلى مقابلة مع Sam Aaron ، منشئ Sonic Pi). ثم انسخ الكود التالي في مخزن مؤقت جديد (نافذة محرر) (مرة أخرى ، يجب تجميع أجزاء منفصلة في برنامج نصي واحد):

 require 'csv' data = CSV.parse(File.read("/path/to/your/directory/data.csv"), {:headers => true, :header_converters => :symbol}) use_bpm 100 

تذكر أن path/to/your/directory/ هو الموقع الفعلي لبياناتك على الكمبيوتر. تأكد من أن الملف يسمى بالفعل data.csv ، أو قم بتحرير هذا السطر في الكود.

الآن تحميل هذه البيانات في تكوين الموسيقى:

 #this bit of code will run only once, unless you comment out the line with #'live_loop', and also comment out the final 'end' at the bottom # of this code block #'commenting out' means removing the # sign. # live_loop :jesuit do data.each do |line| topic1 = line[:topic1].to_f topic2 = line[:topic2].to_f use_synth :piano play topic1*100, attack: rand(0.5), decay: rand(1), amp: rand(0.25) use_synth :piano play topic2*100, attack: rand(0.5), decay: rand(1), amp: rand(0.25) sleep (0.5) end 

الصفوف القليلة الأولى تحميل أعمدة البيانات. ثم نشير إلى عينة الصوت التي نريد استخدامها (بيانو) ، ثم نشير إلى تشغيل الموضوع الأول (topic1) وفقًا للمعايير المحددة: بالنسبة إلى قوة الملاحظة (الهجوم) ، يتم تحديد قيمة عشوائية تقل عن 0.5 ؛ للتسوس - قيمة عشوائية أقل من 1 ؛ لالسعة ، قيمة عشوائية أقل من 0.25.

ترى خط مضروبا في مائة ( *100 )؟ يأخذ قيمة بياناتنا (عشرية) ويحولها إلى عدد صحيح. في هذه الشريحة ، يكون العدد مساويًا مباشرةً للمذكرة. إذا كانت أدنى ملاحظة هي 88 وأعلى واحدة هي 1 ، فإن هذا النهج يمثل مشكلة بعض الشيء: في الواقع نحن لا نعرض أي درجة هنا! في هذه الحالة ، يمكنك استخدام Musicalgorithms لعرض الارتفاع ، ثم تمرير هذه القيم مرة أخرى إلى Sonic Pi. بالإضافة إلى ذلك ، نظرًا لأن هذا الكود هو معيار روبي تقريبًا أو أقل ، يمكنك استخدام الأساليب المعتادة لتطبيع البيانات ، ثم إجراء مقارنة خطية لقيمك بمجموعة من 1 إلى 88. بالنسبة للمبتدئين ، من الجيد أن ننظر إلى عمل ستيف لويد بشأن التعبير عن بيانات الطقس مع Sonic Pi.

وآخر شيء يجب ملاحظته هنا: قيمة "rand" (عشوائي) تتيح لك إضافة القليل من "الإنسانية" إلى الموسيقى من حيث الديناميات. نحن نفعل الشيء نفسه بالنسبة لـ "topic2".

يمكنك أيضًا تحديد الإيقاع (دقات في الدقيقة) والحلقات والعينات والتأثيرات الأخرى التي يدعمها Sonic Pi. يؤثر موقع الكود على التشغيل: على سبيل المثال ، إذا تم وضعه أمام كتلة البيانات أعلاه ، فسيتم تشغيله أولاً. على سبيل المثال ، إذا قمت use_bpm 100بإدراج ما يلي بعد سطر :

 #intro bit sleep 2 sample :ambi_choir, attack: 2, sustain: 4, rate: 0.25, release: 1 sleep 6 

... تحصل على مقدمة موسيقية صغيرة. ينتظر البرنامج ثانيتين ، ويقوم بتشغيل العينة "ambi_choir" ، ثم ينتظر 6 ثوانٍ أخرى قبل البدء في تشغيل بياناتنا. إذا كنت ترغب في إضافة القليل من الأسطوانة المشؤومة عبر اللحن ، ضع هذا الشيء التالي (أمام البيانات الخاصة بك):

 #bit that keeps going throughout the music live_loop :boom do with_fx :reverb, room: 0.5 do sample :bd_boom, rate: 1, amp: 1 end sleep 2 end 

الكود واضح ومباشر للغاية: العينة المحجوزة 'bd_boom' مع التأثير الصوتي للكلام بسرعة معينة. وقفة بين الدورات هو 2 ثانية.

بالنسبة إلى "الترميز في الوقت الفعلي" ، فهذا يعني أنه يمكنك إجراء تغييرات على الكود أثناء إعادة تشغيل هذه التغييرات . لا تحب ما تسمع؟ تغيير الكود على الفور!

يمكن أن يبدأ استكشاف Sonic Pi بهذه الورشة . انظر أيضًا تقرير لورا فروبيل عن حضور الندوة التي تصف عملها أيضًا في هذا المجال وعمل زملائها.

لا جديد تحت الشمس


وأكرر مرة أخرى: ليس من الضروري الاعتقاد بأننا ، بنهجنا الحسابي ، في طليعة العلوم. في عام 1978 ، تم نشر مقال علمي حول "ألعاب النرد الموسيقية" في القرن الثامن عشر ، حيث حددت لفات النرد إعادة تجميع قطع الموسيقى المكتوبة سابقًا. قام روبن نيومان بدراسة وترميز بعض هذه الألعاب لـ Sonic Pi . بالنسبة للتدوين الموسيقي ، يستخدم Newman أداة يمكن وصفها باسم Markdown + Pandoc ، وللتحول إلى ملاحظات ، Lilypond . لذا فإن جميع المواضيع في مدونتنا The Programming Historian لها تاريخ طويل!

استنتاج


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

حيث


  • MIDI : . , ( ). . MIDI- , .
  • MP3 : , .
  • : ( C . .)
  • :
  • : ( , , . .)
  • :
  • : ,

Source: https://habr.com/ru/post/ar454318/


All Articles