Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Midi-Dateien abspielen (ohne MP) (https://www.delphipraxis.net/810-midi-dateien-abspielen-ohne-mp.html)

webby 10. Sep 2002 16:32


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...

CalganX 10. Sep 2002 16:35

Ich würde TMediaPlayer vorschlagen... Soweit ich weiß, bist du da nicht vom WMP abhängig...

Chris

webby 10. Sep 2002 17:04

Echt?
Ich dachte immer TMediaPlayer ist auf Windows Media Player Basis aufgebaut...

Naja, dann ist es ja gut!

Christian Seehase 10. Sep 2002 17:05

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.

webby 10. Sep 2002 17:16

Ne, vorerst lieber nicht. ;)
Zur Zeit hab ich schon ein größeres Projekt vor (ein Spiel), wie man vielleicht an meinen Fragen merkt. ;)

Christian Seehase 10. Sep 2002 19:39

Moin Webby,

probiert hab' ich's noch nicht, aber eventuell funktioniert für Deine Anwendung ja auch die Funktion PlaySound.

webby 11. Sep 2002 08:52

Naja, er lässt mich bisher nur Wave Dateien laden...

City Light 17. Sep 2002 07:46

MIDI ohne MediaPlayer abspielen
 
Code:
uses
  MMSystem;

procedure TForm1.Button1Click;
const
  FileName = 'C:\YourFile.mid';
begin
  MCISendString(PChar('play ' + FileName), nil, 0, 0);
end;
Ich hoffe das ich dir helfen konnte!

MFG

Code-Tags hinzugefügt - Luckie (Luke) (der, der schneller moderiert als sein Schatten :mrgreen:

d3g 17. Sep 2002 12:53

Wichtig ist das Schlißen des Geräts:

Code:
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;
MfG,
d3g

City Light 17. Sep 2002 13:06

Danke ;-)

webby 17. Sep 2002 15:40

Danke!!!
Funktioniert super!

maststef 10. Jul 2003 16:45

Re: Midi-Dateien abspielen (ohne MP)
 
Wi kann ich diese Funktion nutzen, wenn das MIDI in einer DLL ist?

d3g 10. Jul 2003 20:10

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 Luckies nonVCL-Tutorials.

Marvel 9. Jan 2005 18:50

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

d3g 10. Jan 2005 17:49

Re: Midi-Dateien abspielen (ohne MP)
 
Wie stupide genau?

Marvel 10. Jan 2005 19:20

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

d3g 10. Jan 2005 20:36

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?

Marvel 11. Jan 2005 15:50

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

d3g 11. Jan 2005 16:33

Re: Midi-Dateien abspielen (ohne MP)
 
Was ist der Rückgabewert von MCISendString()?

Marvel 12. Jan 2005 16:54

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.

d3g 12. Jan 2005 19:43

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;

Marvel 13. Jan 2005 15:36

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...

d3g 13. Jan 2005 20:47

Re: Midi-Dateien abspielen (ohne MP)
 
Zitat:

Zitat von Marvel
Für das Handle muss ich nich zufällig was anderes einsetzen?!

Nein.

Zitat:

Zitat von Marvel
Hab wieder die Werte ausgeben lassen:
erste Zeile: 259

MCIERR_UNRECOGNIZED_KEYWORD. Hat FileName Leerzeichen? Wenn ja, versuch mal (normale) Anführungszeichen drumherum zu setzen.

Zitat:

Zitat von Marvel
zweite Zeile: 300

MCIERR_NOTIFY_ON_AUTO_OPEN. Ist auch logisch.

Zitat:

wo guckst du da nach?
Hier.

Marvel 14. Jan 2005 16:14

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!!!

d3g 14. Jan 2005 17:41

Re: Midi-Dateien abspielen (ohne MP)
 
Zitat:

Zitat von Marvel
Ich hab zwar nich so richtig die Ahnung, warum, aber wenn ich nen Filename ohne Leerzeichen hab, gehts.

Ist FileName z.B. 'Ich habe mehrere Leerzeichen.mid', dann evauiert der gesamte Commandsting zu 'open Ich habe mehrere Leerzeichen.mid type sequencer alias sound'. Da ein Wort immer ein Parameter sein muss, wird der Interpreter mit "habe", "mehrere" und "Leerzeichen.mid" wenig anfangen können.

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;

Marvel 15. Jan 2005 16:07

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.

koarlheinz 16. Jan 2005 10:47

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?

d3g 16. Jan 2005 13:16

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.

koarlheinz 19. Jan 2005 20:58

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

d3g 19. Jan 2005 22:35

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.

Elko 16. Feb 2008 23:30

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