Entwickler-Ecke
Windows API - Sound spielt nicht
delporum - Fr 01.07.22 12:45
Titel: Sound spielt nicht
Delphi-Quelltext
1:
| Playsound('C:\A.Wav',0,SND_FILENAME); |
geht, aber nicht
Delphi-Quelltext
1:
| sndPlaySound('C:\A.Wav',Snd_Async); |
aber schon
Delphi-Quelltext
1:
| sndPlaySound('C:\A.Wav',Snd_sync); |
aber ich möchte das mein program weiter läuft und mixen.
und ist das fehlerfrei:
Delphi-Quelltext
1: 2:
| SoundPointer^=(Header+)Wave sndPlaySound(SoundPointer,Snd_Memory Or Snd_Async) |
Moderiert von Th69: Delphi-Tags hinzugefügt
Th69 - Fr 01.07.22 15:00
Hast du schon den Rückgabewert der Funktion überprüft?
delporum - Sa 02.07.22 15:13
der rückgabewert bei
sndPlaySound ist bei Embarcadero 10.4 nur
boolean,
und obwohl kein ton gespielt wird ist er
true.
Moderiert von Th69: Delphi-Tags hinzugefügt
Th69 - Sa 02.07.22 16:00
Ich sehe gerade, hast du schon folgendes probiert:
Delphi-Quelltext
1:
| PlaySound('C:\A.Wav', 0, SND_FILENAME OR SND_ASYNC); |
?
Ansonsten, in welchem Projekt (Konsole, Windows) verwendest du es? Und was macht dein Code danach dann?
PS:
sndPlaySound [
https://docs.microsoft.com/en-us/previous-versions/dd798676(v=vs.85)] gibt es ja nur aus Gründen der Rückwärtskompatibilität (und sollte daher nicht mehr in aktuellen Projekten verwendet werden).
delporum - So 03.07.22 11:53
async bei beiden funktionen ist stumm und liefert true.
delporum - Mo 04.07.22 12:25
da ich ja nur 1 zeile habe, bei den anderen fällen, und nur bei änderung
sync in
async nicht spielt, weiss ich nicht welches
hinstance?
Moderiert von Th69: Delphi-Tags hinzugefügt
Th69 - Mo 04.07.22 14:01
Ich habe dir extra den Link dazu gegeben, es ist eine globale Variable, die du einfach verwenden kannst (zumindestens in Windows VCL-Projekten).
delporum - Di 05.07.22 06:37
Delphi-Quelltext
1:
| Playsound('D:\A.Wav',hinstance,SND_FILENAME or snd_async); |
geht auch nicht.
Moderiert von Th69: Delphi-Tags hinzugefügt
jaenicke - Di 05.07.22 09:55
Diese uralten Funktionen wie PlaySound unterstützen kein paralleles Abspielen mehrerer Sounds. Du kannst nur einen Sound asynchron starten, aber keinen weiteren parallel dazu abspielen.
Dafür kannst du z.B. die bass.dll verwenden:
https://www.un4seen.com/
Diese ist sehr umfangreich, aber für deinen Zweck brauchst du davon nicht viel. Beispiele sind dabei.
Hauptsächlich benötigst du die Funktionen BASS_StreamCreateFile zum Zugriff auf die Datei und BASS_ChannelPlay zum Abspielen.
Natürlich brauchst du etwas Zeit, um dich darin einzuarbeiten. Aber so simpel wie du es dir vorstellst, ist das ganze nicht. Die Zeit solltest du investieren, damit du auch ein gutes Ergebnis bekommst. Hier gibt es auch ein Tutorial zu dem Thema, aber das ist sehr viel umfangreicher als das, was du brauchst. Insofern könnte es dich auch verwirren. Aber immerhin siehst du dort Beispiele für die Verwendung der genannten Funktionen:
https://www.delphi-treff.de/tutorials/sonstiges/mein-einfacher-mp3-player/
Th69 - Di 05.07.22 10:51
So wie ich die Doku verstehe, sollte es mit SND_NOSTOP gehen, mehrere Sounds im selben Prozess zu verwenden (ausprobiert habe ich das aber noch nicht).
jaenicke - Di 05.07.22 12:23
Th69 hat folgendes geschrieben : |
So wie ich die Doku verstehe, sollte es mit SND_NOSTOP gehen, mehrere Sounds im selben Prozess zu verwenden (ausprobiert habe ich das aber noch nicht). |
Nein, das sorgt nur dafür, dass ein bestehender Sound nicht gestoppt wird. Der neue wird dann aber nicht abgespielt. Paralleles Abspielen ist mit dieser API nicht möglich.
Th69 - Di 05.07.22 12:38
OK, also nur maximal 1 asynchroner Sound. Dann ist die "BASS audio library" wirklich die beste Wahl dafür.
delporum - Di 05.07.22 18:19
was könnt ihr dazu sagen, dass bass.dll nicht 64-Bit ist?
jaenicke - Di 05.07.22 18:26
delporum hat folgendes geschrieben : |
was könnt ihr dazu sagen, dass bass.dll nicht 64-Bit ist? |
Wie kommst du darauf?
Es stimmt nämlich nicht, wie ein Blick auf die verlinkte Webseite ("64-bit support - Both 32-bit and 64-bit architectures are supported") oder in den Download (zweite bass.dll im Unterordner x64) zeigen würde.
Davon abgesehen ist 64-Bit für eigene Anwendungen fast immer gar nicht wirklich nötig.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!