Einzelnen Beitrag anzeigen

Benutzerbild von 010101
010101

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

AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen

  Alt 7. Dez 2014, 10:08
ich möchte nicht den code von der ersten seite nehmem.

@deddy h

kannst du mir den code mal bitte so korigieren das er ohne warnung funktioniert.


implementation

{$R Midi.res}

Delphi-Quellcode:
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;
aufruf:

Midi('awt');

.rc awt MIDIFILE "test.mid"



lg

Geändert von 010101 ( 7. Dez 2014 um 14:45 Uhr)
  Mit Zitat antworten Zitat