Registriert seit: 27. Nov 2014
34 Beiträge
|
AW: MIDI-Hintergrundmusik in Delphi-Anwendungen abspielen lassen
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)
|