كيف "تبطئ" ملف MIDI (بشكل مثالي في بيثون)؟

StackOverflow https://stackoverflow.com/questions/1384588

  •  21-09-2019
  •  | 
  •  

سؤال

لدي موسيقى خلفية لبعض الأغاني المتاحة في كل من تنسيقات .mid و .kar ، ولكن في كل حالة يتم تشغيلها بشكل أسرع إلى حد ما مما أود. ما هي أبسط طريقة لإنشاء ملفات .mid أو .Kar بنفس المحتوى ولكن في وتيرة أبطأ - على سبيل المثال ، تباطأت واحدة بنسبة 20 ٪ أو نحو ذلك ، بنسبة 15 ٪ ، والثالث بنسبة 25 ٪ ، وهكذا؟

من الناحية المثالية ، أفضل برنامج Python النصي عبر المنصات (لأن ذلك سيسمح لي بسهولة بتعديل المصدر بشكل تجريبي للالتقاء إلى التأثير الدقيق الذي أريده ؛-) ، لكنني سأأخذ أي حل مجاني يعمل في Linux (Ubuntu 8.04 إذا كان الأمر مهمًا) و Mac (Mac OS X 10.5 ، ولكن 10.6 توافق مفضل).

هل كانت مفيدة؟

المحلول

يمكنك تحرير الملف ، حسب http://www.sonicspot.com/guide/midifiles.html

على الرغم من وجود مكتبة قراءة/كتابة MIDI بالفعل. في الواقع ، كانت مسألة رؤية الأسئلة ذات الصلة: مكتبة MIDI منصة بسيطة ، منصة للبيثون

تعيين وتيرة

يحدد حدث META هذا الإيقاع التسلسل من حيث microseconds لكل ربع الربع الذي يتم ترميزه في ثلاثة بايت. عادة ما يتم العثور عليها في الجزء الأول من المسار ، محاذاة للوقت في نفس الوقت مثل رسالة ساعة MIDI لتعزيز التزامن أكثر دقة. في حالة عدم وجود حدث TEMPO المحدد ، يتم افتراض 120 نبضة في الدقيقة. يمكن استخدام الصيغة التالية لترجمة الإيقاع من microseconds لكل ربع الربع إلى الإيقاعات في الدقيقة والظهر.

MICROSECONDS_PER_MINUTE = 60000000

BPM = MICROSECONDS_PER_MINUTE / MPQN
MPQN = MICROSECONDS_PER_MINUTE / BPM
Meta Event  Type    Length  Microseconds/Quarter-Note
255 (0xFF)  81 (0x51)   3   0-8355711

نصائح أخرى

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

هذا محول MIDI إلى TEXT (والعكس بالعكس):
http://midicomp.opensrc.org/
لقد كنت أستخدمه كثيرًا مؤخرًا. من التافهة القيام بمعالجة النص (على سبيل المثال ، البحث عن خط مع "Tempo") للعمليات البسيطة بمجرد الحصول على النص النصي. لم تحاول على Mac (تم تجميعها دون مشكلة على Ubuntu 8.04).

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

أيضا ، بصرف النظر عن Pyportmidi ، هناك اثنين من وحدات بيثون ميدي حولها.

هممم ... يبدو أنه لا يمكنني النشر إلا على الرابط لكل منشور ، كونه مستخدمًا جديدًا. سأحاول نشر الروابط إلى وحدات Python في تعليقتين أو إجابات أخرى ...

يمكنك استخدام Music21 للقيام بذلك ، على الرغم من أنني اختبرته فقط على OSX 10.10.1.

import music21

fctr = 1.25 # scale (in this case stretch) the overall tempo by this factor
score = music21.converter.parse('song.mid')
newscore = score.scaleOffsets(fctr).scaleDurations(fctr)

newscore.write('midi','song_slow.mid') 

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

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

لدي مصلحة مماثلة مثل رسالتك. لقد صادفت للتو هذه المكتبة التي تبدو واعدة للغاية:

http://web.mit.edu/music21/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top