Midi-Töne abspielen
-
Sorry
Jetzt gehts.
Hatte bei meiner Soundkarten Software das Midi Out nicht aktiviert.
DankewNw
-
hi, ich emld mich nochmal..
also beui mir wird rückgabewert 292 angezeigt
-
Hi,
Fehler 292 : MCIERR_MISSING_DEVICE_NAME (siehe http://support.microsoft.com/kb/103647/de).
Das heisst, teile dem Programm das Gerät mit, auf welches zugegriffen werden soll.
// Test MCIERROR err; err = mciSendString("open sequencer", 0, 0, 0); err = mciSendString("play PASSPORT.MID", 0, MCI_WAIT, 0); err = mciSendString("close sequencer", 0, 0, 0);
mfg
Peter
-
ahh sry .. hab grad nen doofen fehler gemacht in dem string muss "play song.mid" hatte das play nicht mit drinne .. jetzt klappt ^^
aber ne frage nebenbei... wie kann ich denn die middarei in die exe mit einfügen?
Denn über mciSendString() muss ja die .mid datei zwangsläufig mit in dem order sein wo die .exe ist.. kann amnd as irdgnwie als ressource oder so mit einpflanzen oder wie geht das eig was der fritz da gemacht hat?
-
Hi,
als Resource kannst du das glaub ich auch zum Projekt hinzufügen (RC-Datei).
WebFritzis Code geht auch, du musst nur zwischen den Codezeilen Note an und
Note aus schreiben :Sleep(1000); // 1 sek Klangdauer
sonst ist nix zu hören.
Diese Variante der Klangerzeugung aus dem Programm heraus finde ich flexibler,
da es eine Vielzahl von Instrumenten gibt.mfg
Peter
-
Hallo kpeter
Danke nochmals.
Auf die Idee ein Sleep(x) einzufügen bin ich gar nicht gekommen.
Danke natürlich auch an WebFritzi.wNw
-
jupss.. klappt jetz echt alles super
jetzt müsst ich natürlich nurnoch fragen wie ich den code von webfritz so umstellen kann das auch andere instumente zu hören sind. steige leide rnicht so durch welcher code für was steht ^^
-
Hi,
das geht etwas tiefer in die API...
Um die Werte der MIDI-Message an die Funktion midiOutShortMsg
übergeben zu können, schreiben wir eine union:in die *.h-Datei (gleich unter include) :
union { public: unsigned long word; unsigned char data[4]; } msg;
in die *.cpp :
void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { if (midiOutGetNumDevs() < 1) return; int midiport = 0; HMIDIOUT midiDev; int note; msg.data[2] = 100; msg.data[3] = 0; midiOutOpen(&midiDev, midiport, 0, 0, CALLBACK_NULL); for (int i = 0 ; i <= 127; i++) { // edit: nat. 0 bis 127 note = 60; // Tonhöhe msg.data[0] = 0xC0; // Instrument festlegen msg.data[1] = i; midiOutShortMsg(midiDev, msg.word); msg.data[0] = 0x90; // Note an msg.data[1] = note; // Notenwert midiOutShortMsg(midiDev, msg.word); Sleep(500); msg.data[0] = 0x80; // Note aus msg.data[1] = note; // Notenwert midiOutShortMsg(midiDev, msg.word); } midiOutClose(midiDev); }
Spielt alle 128 Instrumente des Sequencer.
Viel Spass
Peter
-
Super !
Ein Fall für die FAQs...
wNw