![]() |
TMediaplayer jagt Arbeitsspeicher in die Höhe
Hallo liebe Community,
ich habe ein sehr einfaches Testprogamm geschrieben, welches als einzige Aufgabe einen Sound abspielen soll, wenn ein Button gedrückt wird. Bei jedem Drücken des Buttons wird der Arbeitsspeicher merklich aufgezehrt (sagt mir der Taskmanager). Hier der gesamte Code zum Nachvollziehen:
Delphi-Quellcode:
Auch der Versuch bei jedem Drücken des Buttons den Mediaplayer zur Laufzeit zu erzeugen und dann wieder freizugeben, ändert nichts.
unit Unit1;
interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Media; type TForm1 = class(TForm) MediaPlayer1: TMediaPlayer; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin ReportMemoryLeaksOnShutdown:=true; end; procedure TForm1.Button1Click(Sender: TObject); begin MediaPlayer1.FileName:=ExtractFilePath(ParamStr(0))+'SXPLODE1.WAV'; MediaPlayer1.Volume:=0.6; MediaPlayer1.Play; end; end. Die Firemonkey-Anwendung wurde mit Delphi 10 Seattle erstellt. Was läuft hier schief? ZYL |
AW: TMediaplayer jagt Arbeitsspeicher in die Höhe
Du wirst die Wavedatei im Speicher wieder frei geben müssen.
Oder sie wird ständig zum speicher erneut addiert. Pack die doch in eine Ressource.. bsp.
Delphi-Quellcode:
gruss
if SoundActive then
begin Res := TResourceStream.Create(hInstance, 'BLUP', 'WAV'); try Res.Position := 0; SndPlaySound(Res.Memory, SND_MEMORY or SND_ASYNC); finally Res.Free; end; end; |
AW: TMediaplayer jagt Arbeitsspeicher in die Höhe
Danke EWeiss, funktioniert.
Wie es aussieht kann ich aber mehrere WAV-Dateien mit SndPlaySound oder PlaySound nicht gleichzeitig abspielen. Aber muss ja auch mit dem TMediaplayer funktionieren. Ich google mich mal durch. ZYL |
AW: TMediaplayer jagt Arbeitsspeicher in die Höhe
Zitat:
Nur jeweils immer eine. Wenn du also mehrere Wav Dateien im Programm benötigst musst du diese natürlich zu der WAV Ressource addieren. Wenn du jedoch, diese von der Festplatte, also x-beliebige Dateien abspielen willst geht das so natürlich nicht. gruss |
AW: TMediaplayer jagt Arbeitsspeicher in die Höhe
Vielleicht versuchst Du es ja mal, nachdem die Datei abgespielt wurde, mit
Delphi-Quellcode:
If MediaPlayer1.Mode = mpPlaying Then MediaPlayer1.Stop;
If MediaPlayer1.Mode = mpOpen Then MediaPlayer1.Close; |
AW: TMediaplayer jagt Arbeitsspeicher in die Höhe
Zunächst einmal kann ich jetzt eine Ressource mit dem Mediaplayer abspielen.
Habe mich hieran orientiert: ![]() Allerdings kann ich nur genau 1x den Sound spielen, dann bekomme ich die Meldung, dass der Filestream nicht erstellt werden kann, da bereits von einem anderen Prozess verwendet wird. Das kann ich bisher nicht lösen. @nahpets: Die Eigenschaft 'Mode' kennt mein Mediaplayer nicht. Die erste Zeile konnte ich noch umformen:
Delphi-Quellcode:
ZYL
If MediaPlayer1.State = TMediastate.Playing Then MediaPlayer1.Stop;
|
AW: TMediaplayer jagt Arbeitsspeicher in die Höhe
Zitat:
Delphi-Quellcode:
MediaPlayer1.CurrentTime := 0;
|
AW: TMediaplayer jagt Arbeitsspeicher in die Höhe
Warum bringt ihr alle TWindowsMediaPlayer aus WMPLib_TLB.pas und TMediaPlayer aus DELPHI durcheinander?
Der TE hat nicht WMPLib_TLB in der Uses-Liste - also verwendet er TMediaPlayer aus DELPHI, auch wenn er sich an einem falschen Link ![]() |
AW: TMediaplayer jagt Arbeitsspeicher in die Höhe
Klasse, funktioniert jetzt wie gewünscht.
Wie von blawen vorgeschlagen, einfach nur CurrentTime auf 0 setzen für wiederholtes Abspielen:
Delphi-Quellcode:
Vielen Dank an alle, die mir hier weitergeholfen haben.
MediaPlayer1.CurrentTime:=0;
MediaPlayer1.Play; ZYL |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz