AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Mehrere WAV aus Resource gleichzeitig abspielen

Mehrere WAV aus Resource gleichzeitig abspielen

Ein Thema von Danny92 · begonnen am 6. Aug 2017 · letzter Beitrag vom 14. Aug 2017
Antwort Antwort
Seite 1 von 3  1 23   
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 6. Aug 2017, 11:57
Hey,

ich plane ein Spiel zu programmieren. Dazu muss ich mehrere wav-Dateien, die in in einer Ressource geladen habe, abspielen können.

Mit SndPlaySound funktioniert das auch soweit. Nur wenn ich diese gleichzeitig abspiele, wird das eins von beiden unterbrochen.

Ich möchte keine Dateien auf der Platte schreiben müssen, sonst wär das mit der Resource ja völlig unnötig.

Wie kann ich das realisieren?

Lieben Dank!
Danny
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 6. Aug 2017, 13:19
Ich würde dafür die BASS Audio Bibliothek benutzen:
https://www.un4seen.com/
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 6. Aug 2017, 15:12
Und wie genau nützt mir das was?
Was genau mach ich mit der Bass.dll?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 6. Aug 2017, 17:38
Hört sich so an als hättest du bisher nicht in die Beispiele oder Doku geschaut.

Ganz kurz: Du rufst BASS_StreamCreateFile auf um eine Datei oder einen Stream zu laden und spielst dann mit BASS_ChannelPlay ab. Das geht auch parallel mit mehreren Sounds.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 6. Aug 2017, 19:30
Okay aber da muss ich doch die Bass.dll benutzen? Wie geht das?
Sorry aber ich bin damit nicht so vertraut^^
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 7. Aug 2017, 12:43
Hat da wirklich keiner ne Ahnung?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, bass;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
strs: HStream;

implementation

{$R *.dfm}
{$R fx.res}

procedure TForm1.FormCreate(Sender: TObject);
var
rs: TResourceStream;
begin
rs:=TResourceStream.Create(hInstance,'intro','WAV' );
strs:=BASS_StreamCreateFile(false,rs.Memory,0,0,0) ;
BASS_ChannelPlay(handle,false);
rs.Free;
end;

end.

Geändert von Danny92 ( 7. Aug 2017 um 12:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 7. Aug 2017, 13:26
Doch schon, aber ich habe darauf gewartet, dass du etwas zeigst wie du etwas versucht hast.

Schau dir mal die Doku zu BASS_StreamCreateFile an:
https://www.un4seen.com/doc/#bass/BA...reateFile.html
Speziell den ersten und vierten Parameter. Da sollte dir etwas auffallen.

Erklärung zum vierten Parameter:
Wenn du nur einen Pointer auf einen Speicherbereich übergibst, kann BASS anders als bei einer Datei nicht selbst feststellen wie lang dieser Speicherbereich ist.

Außerdem fehlt die Fehlerauswertung. Dazu steht da auch ein Hinweis drin:
Zitat:
Return value
If successful, the new stream's handle is returned, else 0 is returned. Use BASS_ErrorGetCode to get the error code.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 7. Aug 2017, 13:41
procedure TForm1.FormCreate(Sender: TObject);
var
rs: TResourceStream;
begin
rs:=TResourceStream.Create(hInstance,'intro','WAV' );
rs.Position:=0;
strs:=BASS_StreamCreateFile(true,rs.Memory,0,rs.Si ze,0);
BASS_ChannelPlay(handle,false);
rs.Free;
end;

Sieht das so besser aus?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 7. Aug 2017, 13:58
Auf den ersten Blick ja, aber du solltest noch den Rückgabewert prüfen und ggf. den Fehlercode abrufen, wenn es nicht geklappt hat.

Dann kommen wir zum nächsten Befehl. Aktuell übergibst du das Handle des Formulars an BASS_ChannelPlay. Das macht keinen Sinn, meinst du nicht auch?
http://www.un4seen.com/doc/#bass/BASS_ChannelPlay.html
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Danny92
Danny92

Registriert seit: 18. Aug 2014
55 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

AW: Mehrere WAV aus Resource gleichzeitig abspielen

  Alt 7. Aug 2017, 14:06
procedure TForm1.FormCreate(Sender: TObject);
var
rs: TResourceStream;
code: bool;
begin
rs:=TResourceStream.Create(hInstance,'intro','WAV' );
rs.Position:=0;
strs:=BASS_StreamCreateFile(true,rs.Memory,0,rs.Si ze,0);
//BASS_ErrorGetCode;
code:=BASS_ChannelPlay(strs,false);
showmessage(inttostr(integer(code)));
rs.Free;
end;

Also würde das in etwa so aussehen? Wenn ich die Rückmeldung ausgebe, kommt 0 zurück. Scheint also alles in Ordnung zu sein? Höre aber trotzdem nichts...ich seh's nicht.
  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 19:46 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