AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia TMediaplayer jagt Arbeitsspeicher in die Höhe

TMediaplayer jagt Arbeitsspeicher in die Höhe

Ein Thema von ZYLAGON · begonnen am 30. Apr 2017 · letzter Beitrag vom 1. Mai 2017
Antwort Antwort
ZYLAGON

Registriert seit: 11. Nov 2015
50 Beiträge
 
Delphi 10.3 Rio
 
#1

TMediaplayer jagt Arbeitsspeicher in die Höhe

  Alt 30. Apr 2017, 19:14
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:
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.
Auch der Versuch bei jedem Drücken des Buttons den Mediaplayer zur Laufzeit zu erzeugen und dann wieder freizugeben, ändert nichts.
Die Firemonkey-Anwendung wurde mit Delphi 10 Seattle erstellt.
Was läuft hier schief?

ZYL
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: TMediaplayer jagt Arbeitsspeicher in die Höhe

  Alt 30. Apr 2017, 19:24
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:
      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;
gruss

Geändert von EWeiss (11. Jul 2019 um 16:47 Uhr)
  Mit Zitat antworten Zitat
ZYLAGON

Registriert seit: 11. Nov 2015
50 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: TMediaplayer jagt Arbeitsspeicher in die Höhe

  Alt 30. Apr 2017, 20:17
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: TMediaplayer jagt Arbeitsspeicher in die Höhe

  Alt 30. Apr 2017, 20:37
Zitat:
Wie es aussieht kann ich aber mehrere WAV-Dateien mit SndPlaySound oder PlaySound nicht gleichzeitig abspielen.
Kannst du mit dem MediaPlayer auch nicht.
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

Geändert von EWeiss ( 1. Mai 2017 um 02:26 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: TMediaplayer jagt Arbeitsspeicher in die Höhe

  Alt 30. Apr 2017, 20:46
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;
  Mit Zitat antworten Zitat
ZYLAGON

Registriert seit: 11. Nov 2015
50 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: TMediaplayer jagt Arbeitsspeicher in die Höhe

  Alt 30. Apr 2017, 22:40
Zunächst einmal kann ich jetzt eine Ressource mit dem Mediaplayer abspielen.
Habe mich hieran orientiert:
http://www.delphipraxis.net/191801-a...edergeben.html

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:
If MediaPlayer1.State = TMediastate.Playing Then MediaPlayer1.Stop; ZYL
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 1. Dez 2003
Ort: Luterbach (CH)
679 Beiträge
 
Delphi 12 Athens
 
#7

AW: TMediaplayer jagt Arbeitsspeicher in die Höhe

  Alt 1. Mai 2017, 02:20
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.
Und wenn Du wieder zum Anfang des Liedes zurückgehst?
  MediaPlayer1.CurrentTime := 0;
Roland
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#8

AW: TMediaplayer jagt Arbeitsspeicher in die Höhe

  Alt 1. Mai 2017, 08:29
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 http://www.delphipraxis.net/191801-a...edergeben.html orientiert.
  Mit Zitat antworten Zitat
ZYLAGON

Registriert seit: 11. Nov 2015
50 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: TMediaplayer jagt Arbeitsspeicher in die Höhe

  Alt 1. Mai 2017, 09:04
Klasse, funktioniert jetzt wie gewünscht.
Wie von blawen vorgeschlagen, einfach nur CurrentTime auf 0 setzen für wiederholtes Abspielen:
Delphi-Quellcode:
MediaPlayer1.CurrentTime:=0;
MediaPlayer1.Play;
Vielen Dank an alle, die mir hier weitergeholfen haben.

ZYL
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz