Einzelnen Beitrag anzeigen

Benutzerbild von 010101
010101

Registriert seit: 27. Nov 2014
34 Beiträge
 
#19

AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen

  Alt 5. Dez 2014, 15:58
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....
  Mit Zitat antworten Zitat