![]() |
Midi-Dateien abspielen (ohne MP)
Wie kann ich Midi-Dateien abspielen, ohne dass ich abhänig vom Windows Media Player bin?
Am besten wäre es wenn ich gleich dafür auch DelphiX Komponente benützten könnte... |
Ich würde TMediaPlayer vorschlagen... Soweit ich weiß, bist du da nicht vom WMP abhängig...
Chris |
Echt?
Ich dachte immer TMediaPlayer ist auf Windows Media Player Basis aufgebaut... Naja, dann ist es ja gut! |
Moin Webby,
und wenn Du weiter in die Interna einsteigen willst, kannst Du Dir ja mal die MCI Funktion (Konstanten, Typen) im PSDK ansehen. Diese werden vom TMediaPlayer gekapselt. |
Ne, vorerst lieber nicht. ;)
Zur Zeit hab ich schon ein größeres Projekt vor (ein Spiel), wie man vielleicht an meinen Fragen merkt. ;) |
Moin Webby,
probiert hab' ich's noch nicht, aber eventuell funktioniert für Deine Anwendung ja auch die Funktion PlaySound. |
Naja, er lässt mich bisher nur Wave Dateien laden...
|
MIDI ohne MediaPlayer abspielen
Code:
Ich hoffe das ich dir helfen konnte!
uses
MMSystem; procedure TForm1.Button1Click; const FileName = 'C:\YourFile.mid'; begin MCISendString(PChar('play ' + FileName), nil, 0, 0); end; MFG Code-Tags hinzugefügt - Luckie (Luke) (der, der schneller moderiert als sein Schatten :mrgreen: |
Wichtig ist das Schlißen des Geräts:
Code:
MfG,
uses
MMSystem; type TForm1 = class(TForm) private procedure MMMCINotify(var Msg: TMessage); message MM_MCINOTIFY; // ... end; procedure TForm1.Button1Click; const FileName = 'C:\YourFile.mid'; begin MCISendString(PChar('play ' + FileName + ' notify alias sound'), nil, 0, Handle); end; procedure TForm1.MMMCINotify(var Msg: TMessage); begin MCISendString('close sound', nil, 0, 0); end; d3g |
Danke ;-)
|
Danke!!!
Funktioniert super! |
Re: Midi-Dateien abspielen (ohne MP)
Wi kann ich diese Funktion nutzen, wenn das MIDI in einer DLL ist?
|
Re: Midi-Dateien abspielen (ohne MP)
Es ist (soweit ich das übersehen kann) leider nicht möglich, eine Callbackfunktion anstatt MM_MCINOTIFY zu verwenden, was bedeutet, dass du innerhalb deiner DLL ein Fenster erstellen musst (es muss ja nicht sichtbar sein). Das kannst du einerseits machen, indem du ein VCL-Formular in deine DLL einbindest (kannst du in der IDE designen, dann über {$R} in die DLL einbinden und TForm.Create() benutzen), was deine DLL ziemlich aufbläht und das Mitliefern der borlandmm.dll notwendig macht. Andererseits kannst du auch ein Fenster per WinAPI-Funktionen erzeugen und in der WndProc-Funktion die Message MM_MCINOTIFY ganz einfach abfangen. Näheres dazu findest du bei
![]() |
Re: Midi-Dateien abspielen (ohne MP)
Ähhh...hrm. Das is mir zwar n bissel peinlich, aber das "funktioniert super" kann ich nicht von mir sagen. Ich hab diesen Quelltext stupide kopiert und den FileName gegen ein wirklich existierendes Midi ausgetauscht, aber es passiert absolut nix.
Der zeigt noch nich mal ne Fehlermeldung an. Der ignoriert mich einfach. Kann das an Delphi 6 liegen? muss ich was downloaden? Wäre dankbar für jegliche Tips. Mfg. Marvel |
Re: Midi-Dateien abspielen (ohne MP)
Wie stupide genau?
|
Re: Midi-Dateien abspielen (ohne MP)
also ich hab MMsystem in Uses eingetragen,
die Procedure unter type erzeugt unter Button1click das reingeschrieben mit abgewandeltem FileName und die Neue Procedure einfach unten dran geschrieben (vors end.) Ja...da weiß ich nich, was das Problem is... Mfg Marvel |
Re: Midi-Dateien abspielen (ohne MP)
Hast du im Objektinspektor bei aktiviertem Button bzw. im DFM-Quelltext für OnClick auch die Prozedur Button1Click eingetragen?
|
Re: Midi-Dateien abspielen (ohne MP)
Ja. hab ich.
Du kannst auch davon ausgehen, dass ich (warscheinlich) nicht so ganz dumme Fehler gemacht hab. Hab schon eine Weile mit Delphi was gemacht. Aber trotzdem danke für deine Hilfe. Wenn dir noch was einfällt, sach. Marvel |
Re: Midi-Dateien abspielen (ohne MP)
Was ist der Rückgabewert von MCISendString()?
|
Re: Midi-Dateien abspielen (ohne MP)
Hm. gut da war ich wohl ein bisschen großschnäuzig....
Ich weiß nich so recht, wie und was ich da prüfen soll. ich habs einfach in nem Label ausgeben lassen und das sagt mir 263, falls dir das was nützt.... Sonst sach mal bitte, was du meinst. |
Re: Midi-Dateien abspielen (ohne MP)
Fehler 263 ist MCIERR_INVALID_DEVICE_NAME.
Probiere mal:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const FileName = 'C:\YourFile.mid'; begin MCISendString(PChar('open ' + FileName + ' type sequencer alias sound'), nil, 0, Handle); MCISendString('play sound notify', nil, 0, Handle); end; |
Re: Midi-Dateien abspielen (ohne MP)
Nee. geht auch nicht...
Für das Handle muss ich nich zufällig was anderes einsetzen?! Hab wieder die Werte ausgeben lassen: erste Zeile: 259 zweite Zeile: 300 wo guckst du da nach? Könnte ich ja auch machen... |
Re: Midi-Dateien abspielen (ohne MP)
Zitat:
Zitat:
Zitat:
Zitat:
![]() |
Re: Midi-Dateien abspielen (ohne MP)
Erstmal das: Meine Fresse bist du genial. Ich hab zwar nich so richtig die Ahnung, warum, aber wenn ich nen Filename ohne Leerzeichen hab, gehts.
DANKEDANKEDANKE Aber ich weiß nich, wie du das mit den Anführungszeichen meinst... - File" "Name - "FileName" oder wie meinst du das. Meinst du mit normalen Anführungszeichen überhaupt die " ??? Nochmal danke. Du bist der Größte!!! |
Re: Midi-Dateien abspielen (ohne MP)
Zitat:
Wenn du den Commandstring wie folgt übergibst, dann wird '"Ich habe mehrere Leerzeichen.mp3"' als ein Parameter aufgefasst.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const FileName = '"Ich habe mehrere Leerzeichen.mid"'; begin MCISendString(PChar('open ' + FileName + ' type sequencer alias sound'), nil, 0, Handle); MCISendString('play sound notify', nil, 0, Handle); end; |
Re: Midi-Dateien abspielen (ohne MP)
Ok. gut. das ist verständlich.
Noch mal danke. Ich meld mich, wenn mir noch was einfällt. Werd dich weiterempfehlen. |
Re: Midi-Dateien abspielen (ohne MP)
ich habe alles so gemacht wie hier beschrieben.
es kommt keine fehlermeldung und es wird keinen sound ausgegeben. muss ich vorher irgend eine komponente installiert haben oder sonstige treiber? |
Re: Midi-Dateien abspielen (ohne MP)
Nein (ich wüsste zumindest nicht, dass man Windows ohne MCI-Treiber installieren könnte). Auch bei dir wüsste ich gerne
1.) welche Version du jetzt benutzt hast und 2.) was der Rückgabewert von MCISendString() ist. |
Re: Midi-Dateien abspielen (ohne MP)
Ich verwende die Delphi 7 Enterprice Edition.
Naja was soll denn mcisednstring zurückgeben. Bitte für Anfänger erklären |
Re: Midi-Dateien abspielen (ohne MP)
Es ging mir nicht um deine Delphi-Version. Poste bitte den Code, so wie du ihn in deinem Programm verwendest.
MCISendString() ist eine Funktion. Ich wüsste gerne, welchen Wert der Integer i hat, wenn du ihm mit i := MCISendString({...}); den Rückgabewert der Funktion zuweist. |
Re: Midi-Dateien abspielen (ohne MP)
Kann gelöscht werden: Habe ein lieber neues Thema aufgemacht :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz