Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen (https://www.delphipraxis.net/83936-midi-hintergrundmusik-delphi-anwendungen-abspielen-lassen.html)

Nils_13 9. Jan 2007 12:44

Re: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen la
 
Musst schauen, ob es zutrifft, das 1. funktioniert vlt. nicht, aber ist dennoch anschaulich:
http://www.dsdt.info/tipps/?id=353&search=
http://www.dsdt.info/tipps/?id=459&search=

Such mal im Forum nach Ressource und kümmer dich mal um die Bass.dll, denn wer den MediaPlayer nicht installiert hat, wird nichts hören.

010101 5. Dez 2014 13:08

AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen
 
also mit einer .wav geht das so...

Delphi-Quellcode:
unit Unit1;

interface

uses
  MMSystem;




implementation


{$R MyResFile.res}

 

 procedure TForm1.FormCreate(Sender: TObject);
begin

PlaySound(PChar(1), hInstance, SND_ASYNC or SND_MEMORY or SND_RESOURCE or SND_LOOP);

end;

end.

und wie geht es mit einer midi oder mp3?

:?:

DeddyH 5. Dez 2014 13:31

AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen
 
Das steht doch auf der ersten Seite.

010101 5. Dez 2014 13:52

AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen
 
ich meine ohne media player. aus einem res file wie geht das?

DeddyH 5. Dez 2014 14:00

AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen
 
Darauf kenne ich keine generelle Antwort. Soll es mit BASS, FMOD oder ähnlichen Libs sein?

hathor 5. Dez 2014 14:03

AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen
 
uses MMSystem...

Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
var FN : String;
begin
FN:='D:\Info.mid'; // oder *.mp3
MCISendString(PChar('play ' + FN), nil, 0, 0);
end;

DeddyH 5. Dez 2014 14:10

AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen
 
Und asynchron aus einer Ressource?

hathor 5. Dez 2014 15:54

AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen
 
@DeddyH:
Willst Du mich beschäftigen oder was?

{$R SOUNDS.RES}

Geht aber nur mit WAV-Files:
Delphi-Quellcode:
PlaySound(PChar('ONE'),0,SND_ASYNC or SND_RESOURCE);
PlaySound(PChar('TWO'),0,SND_ASYNC or SND_RESOURCE);

010101 5. Dez 2014 15:58

AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen
 
aus einer ressource.

die hier wird aber nicht richtig übergeben. die form bleibt weg und der debugger läuft. sound wird immerhin abgespielt...


Delphi-Quellcode:

uses

MMSystem;

implementation

{$R Midi.res}


procedure Midi(const aResName: String);
const
  Len: Cardinal = MAX_PATH;
  tmpFile: String = '~tmpFile01'; // Name der temporären Datei
var
  Stream: TCustomMemoryStream;
  BufLen, BufPos, tmpPath: String;
begin
  // Temp- Verzeichnis ermitteln
  SetLength(tmpPath, Len);
  GetTempPath(Len, PChar(tmpPath));
  tmpPath := StrPas(PChar(tmpPath)) + tmpFile;

  mciSendString('stop mySound', nil, 0, 0);
  mciSendString('close mySound', nil, 0, 0);
  if FileExists(tmpPath) then // temporäre Datei löschen (falls noch vorhanden)
    DeleteFile(tmpPath);

  if FindResource(hInstance, PChar(aResName), 'MIDIFILE') <> 0 then
  begin // Ist die Ressource verfügbar
    try
      Stream := TResourceStream.Create(hInstance, aResName, 'MIDIFILE'); // Stream erstellen
      Stream.SaveToFile(tmpPath); // temporäre Datei speichern
    finally
      Stream.Free;
    end;
  end
  else
  begin
    MessageBeep(MB_ICONEXCLAMATION);
    MessageDlg('Die Ressource kann nicht gefunden werden.', mtError, [mbOk], 0);
    Exit;
  end;

  mciSendString(PChar('open sequencer!' + tmpPath + ' alias mySound'), nil, 0, 0);
  mciSendString('play mySound' , nil, 0, 0);

  SetLength(BufLen, Len);
  SetLength(BufPos, Len);
  mciSendString('status mySound length', PChar(BufLen), Len, 0); // Länge der Mididatei ermitteln
  repeat
    mciSendString('status mySound position', PChar(BufPos), Len, 0); // aktuelle Position ermitteln ...
    Application.ProcessMessages;
    if Application.Terminated then
      break;
  until StrToInt(BufPos) >= StrToInt(BufLen); // ... bis Dateiende erreicht ist
  mciSendString('stop mySound', nil, 0, 0);
  mciSendString('close mySound', nil, 0, 0);

  if FileExists(tmpPath) then // temporäre Datei löschen
    DeleteFile(tmpPath);
end;



 procedure TForm1.FormCreate(Sender: TObject);
begin


Midi('awt');

end;
ja will dich beschäftigen :) ne muss noch irgendwo was nicht ganz stimmen....

010101 6. Dez 2014 09:05

AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen
 
kann den code mal jemand bei sich probieren.

bei mir kommt ne warnung bei:

Delphi-Quellcode:
Stream.Free;

Variable 'Stream' ist möglicherweise nicht initialisiert worden.

der sound der midi funktioniert, aber die form ist nicht mehr sichtbar/ansprechbar.

:?:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz