Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Viele Sound Dateien möglichst schnell abspielen / vorladen? (https://www.delphipraxis.net/212780-viele-sound-dateien-moeglichst-schnell-abspielen-vorladen.html)

gee21 31. Mär 2023 16:13

Viele Sound Dateien möglichst schnell abspielen / vorladen?
 
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
Delphi-Quellcode:
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.

gee21 31. Mär 2023 17:24

AW: Viele Sound Dateien möglichst schnell abspielen / vorladen?
 
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.

himitsu 31. Mär 2023 17:25

AW: Viele Sound Dateien möglichst schnell abspielen / vorladen?
 
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. :angle:

gee21 31. Mär 2023 17:27

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

Zitat von himitsu (Beitrag 1520544)
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 :angle:

Vielen Dank für deine schnelle Antwort. jetzt werde ich bestimmt eine Lösung finden. :thumb:

klaus schaaff 3. Apr 2023 12:57

AW: Viele Sound Dateien möglichst schnell abspielen / vorladen?
 
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

gee21 4. Apr 2023 20:01

AW: Viele Sound Dateien möglichst schnell abspielen / vorladen?
 
@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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 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