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