كيف يمكنني التفاعل البرمجي مع الإضافات VST (I) لتوليف الصوت؟

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

سؤال

خذ ، على سبيل المثال ، VSTI triforce, ، بواسطة TweakBench. عند تحميله في أي مضيف VST في السوق ، فإنه يسمح للمضيف بإرسال إشارة (من المفترض أن يكون MIDI) إلى VSTI. سيقوم VSTI بعد ذلك بمعالجة هذه الإشارة والإخراج المصنفة على أنها تم إنشاؤها بواسطة أ أداة البرمجيات داخل VSTI.

على سبيل المثال ، فإن إرسال A4 (MIDI Note ، على ما أعتقد) إلى VSTI سيؤدي إلى تجميعها A MIDLE MIDLE C. إنها ترسل بيانات الصوت إلى مضيف VST ، والتي يمكنها بعد ذلك تشغيلها على مكبرات الصوت الخاصة بي أو حفظها إلى .wav أو بعض تنسيق ملف الصوت الآخر.

لنفترض أن لدي triforce, ، وأحاول كتابة برنامج بلغتي المفضلة يمكن أن تتفاعل مع VSTI عن طريق إرسال ملاحظة A4 ليتم توليفها ، وحفظه تلقائيًا في ملف على النظام؟

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

كيف يمكنني القيام بذلك ، وفي اي لغة هل يجب أن أتطلع إلى بناء الإطار الأساسي؟

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

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

شكرا مقدما على أي مساعدة =)

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

المحلول

حسنًا ، منذ أن سألت ، ستكون اللغة المثالية لمشروع مثل هذا C ++. على الرغم من أن هناك أغلفة للغات ذات المستوى الأعلى مثل Java & .NET لـ VST SDK ، لم أتمكن من العثور على واحدة لروبي (على الرغم من أنني وجدت هذا المشروع الرائع الذي يتيح لك برنامج VST Plugins في Ruby). لذلك سوف تكون عالقًا في القيام بدرجة ما من تكامل C/C ++ بنفسك.

ومع ذلك ، لديك خياران هنا:

  1. اكتب مضيف VST في C ++ ، وقم بتشغيله كعملية منفصلة من داخل Ruby.
  2. دمج رمز Ruby الخاص بك مباشرة إلى VST SDK ، وقم بتحميل المكون الإضافي/حزم DLL/حزم مباشرة من التعليمات البرمجية الخاصة بك. ربما تكون هذه هي طريقة أنظف ولكنها أصعب لتحقيق هدفك.

لقد كتبت أ برنامج VST Host Programming Tutorial في مدونتي لحظة ، قد تجد مفيدًا في كلتا الحالتين. إنه يفصل كيف تفتح والتواصل مع مكونات VST على كل من Mac OSX و Windows. بمجرد حصولك على مضيفك لتحميل المكونات الإضافية ، يجب أن تكون قادرًا على إرسال أحداث MIDI مباشرة إلى المكون الإضافي ، إما عن طريق قراءتها من ملف أو نوع من الاتصالات بين رمز Ruby الخاص بك ومضيف VST (أي ، أ المسماة الأنبوب ، المقبس ، ملف ، إلخ). إذا لم تكن على دراية ببروتوكول MIDI ، تحقق من هذه الروابط:

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

تعتمد VST SDK أيضًا على كتل النقطة العائمة ، وبالتالي فإن أي بيانات تعود إليها ستحتوي على عينات فردية في النطاق {-1.0 .. 1.0}. اعتمادًا على تنسيق الإخراج المطلوب ، قد تحتاج إلى تحويلها إلى تنسيق آخر. لحسن الحظ ، يبدو أن هناك روبي ملزمة لمكتبة Audiofile, ، لذلك قد تكون قادرًا على إرسال إخراجك إلى ذلك من أجل إنشاء ملف AIFF/WAV مناسب.

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

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