Hintergrundmusik
-
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <mmsystem.h> #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { mciSendString("open \\test.mid type sequencer alias MIDI", NULL, 0, 0); mciSendString("play MIDI", NULL, 0, 0); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { mciSendString("open \\test.mid type sequencer alias MIDI", NULL, 0, 0); mciSendString("play MIDI", NULL, 0, 0); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormShow(TObject *Sender) { mciSendString("open \\test.mid type sequencer alias MIDI", NULL, 0, 0); mciSendString("play MIDI", NULL, 0, 0); } //---------------------------------------------------------------------------
Habs mal überall reinkopiert, das geht nirgends.
-
Mit \\test.mid verwendest du einen relativen Pfad. Das ist immer eine potentielle Fehlerquelle, deshalb ist grundsätzlich zu absoluten Pfadangaben zu raten.
Ansonsten: ich vermute, dass der von dir erwähnte BCB4 auf einem anderen Rechner läuft als der BCB6?
Hast du mal geprüft, ob der BCB6-Rechner überhaupt MIDI korrekt abspielt? Vielleicht ist ja nur der entsprechende Kanal der Windows-Lautstärkeregelung (Mixer) deaktiviert.
-
FormShow wird kurz nach TForm (Owner) aufgerufen,
somit startest du den Sequencer 2x mit dem gleichen Alias.
Das ist wie ein Tritt im Hintern für das MIDI-Gerät.
MCI Error.gruß Micha
-
ttester schrieb:
Hä? Was das den für ne seite ^^
wollte doch nur wissen wie ich ne Midi als Background laufen lassen kann.Zieh dir einfach folgende Borland C Builder Datei von:
http://www.allegro.cc/files/4.0.2/allegro-4.0.2-bcc32.zipbzw.
http://www.allegro.cc/files/index.html?&request=1078946933&Dann einfach einbinden und los gehts
Hier ein kleines Tutorial:
http://www.grandgent.com/gfoot/vivace/vivace.txt
-
promicha schrieb:
somit startest du den Sequencer 2x mit dem gleichen Alias.
Das ist wie ein Tritt im Hintern für das MIDI-Gerät.
MCI Error.Kann ich nicht nachvollziehen. Sowohl bei
mciSendString("open c:\\windows\\media\\town.mid type sequencer alias MIDI", NULL, 0, 0); mciSendString("play MIDI", NULL, 0, 0); mciSendString("open c:\\windows\\media\\town.mid type sequencer alias MIDI", NULL, 0, 0); mciSendString("play MIDI", NULL, 0, 0);
als auch bei
mciSendString("open c:\\windows\\media\\town.mid type sequencer alias MIDI", NULL, 0, 0); mciSendString("play MIDI", NULL, 0, 0); mciSendString("play MIDI", NULL, 0, 0);
läuft der Ton problemlos weiter.
Ganz davon abgesehen, dass sich ein MCI Error üblicherweiser mit einer entsprechenden Fehlermeldung ... ähh ... meldet.
Und die hätte ttester uns dann ja sicher nicht vorenthalten. Oder?
-
Jansen schrieb:
Ganz davon abgesehen, dass sich ein MCI Error üblicherweiser mit einer entsprechenden Fehlermeldung ... ähh ... meldet.
Und die hätte ttester uns dann ja sicher nicht vorenthalten. Oder?Nein, mciSendString giebt eine Fehlernummer wieder, ist es 0, ist alles OK.
Andernfalls kann man sich mit mciGetErrorString die Fehlermeldung in Klartext
hollen. Das MCI-Device ist bereits geöffnet und giebt daher eine Fehlernummer
wieder und der Befehl wurde nicht ausgeführt.Probiere es doch mal so:
int a = mciSendString("open c:\\windows\\media\\start.mid type sequencer alias MIDI", NULL, 0, 0); int b = mciSendString("play MIDI", NULL, 0, 0); int c = mciSendString("open c:\\windows\\media\\start.mid type sequencer alias MIDI", NULL, 0, 0); int d = mciSendString("play MIDI", NULL, 0, 0); ShowMessage( IntToStr(a) + ":" + IntToStr(b) + ":" + IntToStr(c) + ":" + IntToStr(d) );
Dann wirst du die Werte sehen.
gruß Micha
*EDIT*
ich glaub ich setzte mal die mciGetErrorString Funktion als Code direkt mit bei,
damit mal unsere Code ausgaben hier Komplet werden:LPTSTR fehler; unsigned int laenge = 128; mciGetErrorString(DWORD(c),fehler,laenge); //Statt c, halt a,b,c,d je mci Befehl MessageBox(Form1->Handle,fehler,NULL,0);
-
Das ändert natürlich nichts an der Tatsache, dass der Sound trotzdem problemlos abgespielt wird.
Deine implizite Aussage, dass der unmittelbar wiederholte Aufruf das von ttester beschriebene Ausbleiben des Sounds verursacht, scheint also nicht haltbar.
-
Vieleicht ist es auch Betriebssystem abhängich und/oder von der
Soundkarte (MIDI-Sequencer), ich habe Win98se und OnBoard Audio.
Bei mir stoppt er aber, bzw spielt nichts höhrbar ab.gruß Micha
-
der tip mit dem absoluten Pfadangaben war gut, jetzt geht es.
Mal sehn wie lange
ThX
-
promicha schrieb:
Vieleicht ist es auch Betriebssystem abhängich und/oder von der
Soundkarte (MIDI-Sequencer), ich habe Win98se und OnBoard Audio.
Bei mir stoppt er aber, bzw spielt nichts höhrbar ab.gruß Micha
Ich muß meine Aussage, vorerst, zurückziehen.
Denn die MCI spielt bei mir gar nichts mehr ab, irgendwie ist
sie zerschossen worden, aber das kann nicht von diesem Code
beispiel kommen (doppelt open). ich denke es liegt daran das
ich den Xing MPEG Player zu Testzwecken installiert habe und
vor kurzem deinstalliert, er hat sich wohl nicht mit anderen
Geräten verstanden, denn ich habe haufenweise auf mein System.
So erkenne ich es zumindest aus der Registry, die räume ich
mal auf und teste nochmal.gruß Micha
PS: der Xing-MPEG-Decoder für MCI, ist einer der wenigen die auf
den vorgegebenen Type für MPEG in der MCI Reagiert wie es sein soll,
so das der TMediaplayer auch problemlos MPEG abspielt mit seinem
Standart-MCI-Command.Wieso wird das d a r t in Stan d a r t durch **** ersetzt ?
-
promicha schrieb:
Wieso wird das d a r t in Stan d a r t durch **** ersetzt ?
Weil das Skript merkt, dass deine Rechtschreibung absolut grottig ist.
ttester schrieb:
der tip mit dem absoluten Pfadangaben war gut, jetzt geht es.
Mal sehn wie langeSolange du gut und sorgfältig programmierst...
-
WebFritzi schrieb:
Weil das Skript merkt, dass deine Rechtschreibung absolut grottig ist.
Aua, das hat weh getan. OK Standart wird Standard geschrieben, dennoch
glaub ich nicht das es der Grund ist für das Austauschen.
Und wenn du noch mehr Rechtschreibfehler findest in meinen Texten,
schenke ich sie dir.WebFritzi schrieb:
ttester schrieb:
der tip mit dem absoluten Pfadangaben war gut, jetzt geht es.
Mal sehn wie langeSolange du gut und sorgfältig programmierst...
Jetzt muß ich ttester nochmal im Schutz nehmen, er ist vor paar Tagen erst Angefangen und ereicht nicht mal 1% von dem Wissen was du hast WebFritzi.
Daher kann man auch nicht verlangen das er besonders gut coded.
Traurich ist nur das er sich damit aufhält gleich tolle Multimedia ergebnisse
zu erzielen, anstelle von "Hello Word" Anfängen um C++ von Grundher zu Verstehen.
Warum werden immer so viele, die den BCB haben der Meinung das sie mit ihm von
NULL auf Hundert kommen, ohne viel C++. Erscheint der BCB zu Einfach?
Ich weiß es nicht, aber ich glaube das sich so manche schon Programmierer nennen,
wenn sie ein Button auf die Form ziehen.
Und es werden immer mehrso long, Micha
-
promicha schrieb:
dennoch glaub ich nicht das es der Grund ist für das Austauschen.
Doch!
BTW: Dein zweites Zitat war doch nicht irgendwie böse gemeint. War nur eine Feststellung, die nicht nur für ttester sondern für jeden gilt.
-
Kann es sein, dass das hier leicht OffTopic wird?
Aber egal.
Ich finde, dass dies ein allgemeines Problem unserer Zeit ist. Selbst im Infounterricht an der Schule lernt man zuerst, wie man sich aus den einzelnen Komponenten ein hübsches Interface bastelt, und dann vielleicht später mal ein paar Grundlagen der Programmiersprache. Oder wenn ich mich da an einen gewissen Delphikurs in einer gewissen Möchtegern-Computer-Fachzeitschrift erinnere...Ein Glück, dass das jetzt im Studium anders ist. Da wird C bis auf's letzte auseinandergenommen (1 komplettes Semester und noch nicht ein richtiges Programm geschrieben... wenn das mal nicht viel Grundlagenarbeit ist).
Aber heutzutage ist es nun mal so: man will möglichst schnell möglichst viel erreichen. Da ist es egal, wie es funktioniert, hauptsache dass es funktioniert. Und einfache Textausgaben auf der Konsole reichen anscheinend nicht mehr aus... traurig.
-
.... Dasd: Du hast recht. Es wird offtopic. (Obwohl du auch mit dem rest deiner Aussage recht hast) Weitere Diskussionen hierzu bitte ich im Offtopic oder NadrW Forum weiterzuführen...
-junix
-
so zurück zum Thema
mciSendString("open c:\\test.mid type sequencer alias MIDI", NULL, 0, 0);
mciSendString("play MIDI repeat", NULL, 0, 0);geht net, also es wiederholt sich nicht.