AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Viele Sound Dateien möglichst schnell abspielen / vorladen?
Thema durchsuchen
Ansicht
Themen-Optionen

Viele Sound Dateien möglichst schnell abspielen / vorladen?

Ein Thema von gee21 · begonnen am 31. Mär 2023 · letzter Beitrag vom 4. Apr 2023
Antwort Antwort
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#1

Viele Sound Dateien möglichst schnell abspielen / vorladen?

  Alt 31. Mär 2023, 17:13
Hallo

Ich schreibe gerade ein Tool das möglichst schnell Sounddateien laden / abspielen soll (also mit möglichst wenig verzögerung).

Insgesamt habe ich ca 300 Sounddateien. 30 x 10 Dateien (+/-10 Dateien gehören immer zusammen).

Also wenn dann ein Ereigniss ausgelöst wird, soll aus den 300 (aus den 10 zusammenpassenden Files) 1 File von diesen 10 zufällig abgespielt werden.

Mein Problem ist das ich nicht weiss welche 10 Files als nächstes vorgeladen/abgespielt werden müssen. Das ist je nach Benutzer unterschiedlich. Also müsste alle 300 Files vorladen (glaube ich zumindest) damit ich dann die 10 gewünschten sofort / schnell abspielen kann.

Hat jemand eine Ansatz für mich wie man sowas angeht? Kann man 300 files vorladen? brauche ich dann 300 mediaplayer?
Welches format würde sich von der geschwindigkeit am besten eignen? wav, mp3, ogg?

Ich komme übrigens auf die Idee mit dem vorladen da ich bis jetzt mit dem Mediaplayer rumgetestet habe und mir das mediaplayer.open; sparen wollte. Aber vieleicht ist ja auch der Mediaplayer für sowas ungeeignet.

für die die mich noch nicht kennen. Meine Delphi Kentnisse sind bestenfalls "Amateurhaft". Daher suche ich eine möglichst einfache / Vernüftige Lösung im Verhältniss.

Ich hoffe ihr versteht was ich meine. Ansonsten einfach fragen (hatte etwas Probleme dies auf einfache Weise zu erklären )

Grüsse aus der Schweiz.
Robert
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Viele Sound Dateien möglichst schnell abspielen / vorladen?

  Alt 31. Mär 2023, 18:24
Mir ist gerade eingefallen das ich ja 1 grosse Sounddatei daraus machen könnte und dann nur diese 1 grosse datei laden. Anschliessend nur noch von position zu position springen. Ich versuch es mal so.
Robert
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#3

AW: Viele Sound Dateien möglichst schnell abspielen / vorladen?

  Alt 31. Mär 2023, 18:25
Du kannst natürlich ganz viele TMediaPlay-Instanzen erstellen und die Dateien damit vorladen.

Auch kann man der BASS-Lib, sndPlaySound und Co. nicht nur DateiNamen oder Ressourcen (wobei die RES in aktuell geladenen DLLs/EXE ebenfalls schon vorgelasen sind) übergeben,
sondern auch direkt Zeiger auf Speicher, wo die Datei bereits im RAM bereitliegt.



Auch könntest du, kurz vor dem Abspielen, aus den vielen Dateien die 10 raussuchen und einfach eine Datei daraus erstellen/zusammenstellen und Diese dann absspielen (statt der 10 Einzelnen).
[edit] Jupp, könntest du auch machen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (31. Mär 2023 um 18:28 Uhr)
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Viele Sound Dateien möglichst schnell abspielen / vorladen?

  Alt 31. Mär 2023, 18:27
Du kannst natürlich ganz viele TMediaPlay-Instanzen erstellen und die Dateien damit vorladen.

Auch kann man der BASS-Lib, sndPlaySound und Co. nicht nur DateiNamen oder Ressourcen (wobei die RES in aktuell geladenen DLLs/EXE ebenfalls schon vorgelasen sind) übergeben,
sondern auch direkt Zeiger auf Speicher, wo die Datei bereits im RAM bereitliegt.



Auch könntest du, vor dem Abspielen, aus den vielen Dateien, einfach eine Datei erstellen und Diese dann absspielen.
[edit] Jupp, könntest du
Vielen Dank für deine schnelle Antwort. jetzt werde ich bestimmt eine Lösung finden.
Robert
  Mit Zitat antworten Zitat
klaus schaaff

Registriert seit: 25. Jul 2009
24 Beiträge
 
#5

AW: Viele Sound Dateien möglichst schnell abspielen / vorladen?

  Alt 3. Apr 2023, 13:57
Hallo Robert,

für mich hört sich Deine Aufgabenstellung an, als ob Du einen Sprachsynthesizer bauen möchtest. Viele einzelne Sounddateien, die gleichzeitig abgespielt werden sollen und zusammengestellt werden anhand bestimmter Parameter.

Deine Idee eine große Sounddatei zu erstellen ist schon mal gut.

Dafür Bass oder ähnliche (FMod) zu verwenden ist schwer oder geht gar nicht. Außerdem sind das proprietäre Systeme mit Dll (kein Quellcode) und da steh' ich gar nicht d'rauf. Aber, um einen einfachen *.mp3 Player damit aufzubauen - dafür sind die Dinger gut.

Ein ähnliches Modell FM-Synthesizer habe ich mal mit MMSystem Low-Level aufgebaut und kam damit auf < 15 ms Latenz.

Hier muss mit Zeigern gearbeitet werden, welche Abschnitte einer MemoryMapped Raw-Sounddatei aufaddiert werden und das für jeden Bufferwechsel. Ziemlich aufwendig!

Man muss sich genau fragen, welche Rahmenparameter (Buffergrößen, Anzahl der Buffer, Latenzen, Frequenzgang, Auflösung, threaded oder nicht) die Software erfüllen soll.
Dann kommt die Frage, mit welcher Methode komme ich am schnellsten zum Ziel.


Liebe Grüße
Klaus Schaaff

Geändert von klaus schaaff ( 3. Apr 2023 um 15:31 Uhr)
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Viele Sound Dateien möglichst schnell abspielen / vorladen?

  Alt 4. Apr 2023, 21:01
@Klaus hab dir ne PN geschrieben. Vielen Dank für deine ausführliche Antwort.

Wollte noch kurz Rückmeldung:
Ich habe es nun so gelöst das ich alle Audio Files zusammengefügt habe in ein grosses MP3, dies beim starten in den Mediaplayer lade und dann nur noch die Position wechseln wenn ein Sound abgespielt werden soll. Ist sehr einfach und reagiert sehr schnell und gut. Die Lautstärke kann man über den Windows Audio Mixer steuern.

Beim start des Programm
Delphi-Quellcode:
  
mediaplayer1.FileName:=Programmpfad+'\Files\German Audio Files\MeinGrosses.mp3';
mediaplayer1.Open;

Wenn ein Sound abgespielt werden soll.
Delphi-Quellcode:
mediaplayer1.StartPos:=strtoint(edit1.Text);
mediaplayer1.EndPos:=strtoint(edit2.Text);

trackbar1.Min:=strtoint(edit1.Text);
trackbar1.Max:=strtoint(edit2.Text);
trackbar1.Position:=mediaplayer1.StartPos;

mediaplayer1.play;
Robert
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:23 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