احصل على معرف من أجهزة MIDI في C ++
سؤال
أنا موسيقي ومبرمج وأرغب في إنشاء برنامجي الخاص لصنع الموسيقى. سأبدأ بتطبيق وحدة تحكم في C ++ قبل أن أقوم بعمل واجهة المستخدم الرسومية.
أنا هادئ جديد على C/C ++ وأعرف كيفية تقديم تطبيق وحدة تحكم أساسية وقرأت عن واجهة برمجة تطبيقات Win32.
كنت أبحث في MSDN للوسائط المتعددة في تطبيقات Win32 ووجدت الكثير من الوظائف لـ MIDI: http://msdn.microsoft.com/en-us/library/dd798495(vs.85).aspx
يمكنني تلقي عدد أجهزة MIDI التي يتم توصيلها بهذه الطريقة:
#include <windows.h>
#include <iostream>
using namespace std;
int main() {
cout << midiInGetNumDevs();
cout << " MIDI devices connected" << endl;
return 0;
}
لكن الآن أريد أن أعرف كيف تسمى هذه الأجهزة ، مع midiInGetID
وظيفة أعتقد و while
عقدة. هل يمكن لأي أحد أن يساعدني بهذا؟ تتطلب الوظيفة أ HMIDIIN
المعلمة وأنا لا أعرف كيف يمكنني الحصول على واحدة لأن جميع وظائف MIDI تقريبًا تستخدم هذه المعلمة.
أعلم أن هذا ليس هو الموضوع الأكثر وضوحًا ، لكن سيكون من الرائع أن يساعدني شخص ما.
شكرًا :)
المحلول
للحصول على معلومات ، يمكنك الاتصال midiingetdevcaps, ، مع المعلمة الأولى تتراوح من 0 مدرجة إلى نتيجة midiInGetNumDevs
مستبعد. كل مكالمة تملأ أ midiincaps struct (تقوم بتمرير مؤشر إلى البنية عند الاتصال بالوظيفة) بمعلومات حول الجهاز التاسع. ل افتح جهاز ، وملء hmidiin اللازمة للمكالمات الأخرى ، يمكنك الاتصال midiinopen مع رقم الجهاز (مرة أخرى ، من 0 إلى N-1 المدرجة) كمعلمة ثانية.
ينطبق نفس المفهوم على أجهزة الإخراج ، باستثناء أن الأسماء لها Out
بدلاً من In
(وللهياكل OUT
بدلاً من IN
).
نصائح أخرى
حسنًا ، لقد اكتشفت ذلك. لم أكن أعرف midiInGetDevCaps
يتطلب مكالمة إلى الخصائص المحددة منه لإرجاع اسم الجهاز.
ها هو رمزتي:
#include <windows.h>
#include <iostream>
using namespace std;
int main() {
unsigned int devCount = midiInGetNumDevs();
cout << devCount << " MIDI devices connected:" << endl;
MIDIINCAPS inputCapabilities;
for (unsigned int i = 0; i < devCount; i++) {
midiInGetDevCaps(i, &inputCapabilities, sizeof(inputCapabilities));
cout << "[" << i << "] " << inputCapabilities.szPname << endl;
}
}
وشكرا لمساعدتكم!