• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 727
  • Last Modified:

How to play MIDI files

I want to know how I can play a MIDI file in a Delphi 2.0 program using the Win32 MCI library. I know how to do it in Visual C++, but not in Delphi. Please include some code samples that clearly illustrate how to load and play a MIDI file, as well as send a notification to the form to restart the MIDI when it is done.
0
mmarvi
Asked:
mmarvi
  • 4
1 Solution
 
intheCommented:

use the TMediaPlayer component
select file and set autoopen to true
and to loop it do the following on the notify event:

procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
 with MediaPlayer1 do
  if NotifyValue = nvSuccessful then begin
   Notify := True;
  Play;
 end;
end;
0
 
mmarviAuthor Commented:
dear inthe:

I don't like your answer because I asked for information on how to use the Win32 MCI library to load and play a MIDI file. Please post an answer to that question and I'll be glad to give you points.
0
 
intheCommented:
Hello mmarvi
sorry
i can give you code for mci library playsound procedure
but it is for loading and playing wav files not midi
Im still looking for midi but everything i find is for wav :-(
im not sure how to do playsound procedure for midi files it may be the same but maybe not
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
intheCommented:
hello again  
this page may be of more help to you

http://www.compguy.com/cwtip05.htm
0
 
intheCommented:
system.ini will hold the midi sequencer
on my system it's sequencer=mciseq.drv
so something like this is what your after i think

open sequencer!yoursong.mid alias anthem
play anthem
pause anthem
resume anthem
stop anthem
seek anthem to start
play anthem
stop anthem
close anthem
0
 
tothpaulCommented:
try this !
-------------
unit sound;

interface

uses
 windows,mmsystem;

procedure StartSound(hwnd:THandle; FileName:string);
procedure Replay;
procedure StopSound;

implementation

const
 playing:boolean=false;
Var
 DevId:word;
 mciPlay:TMCI_PLAY_PARMS;

procedure StartSound(hwnd:THandle;FileName:string);
 var
  mciOpen:TMCI_OPEN_PARMS;
 begin
  if playing then StopSound;
  with mciOpen do begin
   dwCallBack:=0;
   lpstrDeviceType:=nil;
   lpstrElementName:=PChar(FileName);
   lpstrAlias:=nil;
  end;
  if mciSendCommand(0, mci_Open, mci_open_element, Longint(@mciOpen))=0 then begin
   DevId:=mciOpen.wDeviceId;
   mciPlay.dwCallBack:=HWnd;
   mciPlay.dwFrom    :=0;
   Playing:=(mciSendCommand( DevID, mci_Play, mci_notify or mci_from, Longint(@mciPlay))=0);
   if not playing then StopSound;
  end;
 end;

procedure Replay;
 begin
  if Playing then
   mciSendCommand( DevID, mci_Play, mci_notify or mci_from, Longint(@mciPlay));
 end;

procedure StopSound;
 begin
  mciSendCommand( DevID, mci_Close, 0, 0);
  playing:=false;
 end;

end.

0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now