Entwickler-Ecke

Multimedia / Grafik - Soundproblem, kriegs nicht hin


Delphianer23 - Fr 14.03.03 19:05
Titel: Soundproblem, kriegs nicht hin
Ich hab schon mehere Beiträge gelesen, doch kann sie nicht umsetzen. Ich will mehrere Sounddateien gleichzeitig abspielen, so dass sie sich überlagern.

Wie mach ich das? Mit playsound hab ichs nicht hingekriegt.

BITTE ein Beispiel geben.

Moderiert von user profile iconTino: Absätze entfernt.


toms - Fr 14.03.03 19:10

Vielleicht so:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
// Autor: Genival P.Carvalho 

uses 
  MMSystem; 

procedure SendMCICommand(Cmd: string); 
var 
  RetVal: Integer; 
  ErrMsg: array[0..254] of char; 
begin 
  RetVal := mciSendString(PChar(Cmd), nil, 0, 0); 
  if RetVal <> 0 then 
  begin 
    {get message for returned value} 
    mciGetErrorString(RetVal, ErrMsg, 255); 
    MessageDlg(StrPas(ErrMsg), mtError, [mbOK], 0); 
  end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  SendMCICommand('open waveaudio shareable'); 
  SendMCICommand('play "C:\xyz\BackgroundMusic.wav"'); 
  SendMCICommand('play "C:\xyz\AnotherMusic.wav"'); 
  SendMCICommand('close waveaudio'); 
end;


Delphianer23 - Fr 14.03.03 20:07

danke, doch es funktioniert nur einmal. Beim nächsten starten nicht ... Was soll das?

Es wäre außerdem besser, wenn man einfach an etwas seine sounddateinen "schickt" und die dann IMMER ausgeführt werden, egal wie viele noch laufen usw.

Irgendnw Idee?

Moderiert von user profile iconTino: Absätze entfernt.


tommie-lie - Fr 14.03.03 20:22

schau mal bei den Tutorials. Da gibt's eins von mir über Soundwiedergabe direkt über die Multimedia API von Windows. Da kannst du so viele mmstreams und Sounddevices öffnen, wie du Lust hast, wird alle paralel abgespielt (zumindest wird dies versucht, sofern der Speicher ausreicht...).

edit:
Ist aber ein relativ komplexes Thema, innerhalb von 5 Minuten ist nicht mit befriedigenden Ergebnisssen zu rechnen, aber die mmstreams von Windows helfen schon arg beim zerdröseln der Header.


blackbirdXXX - Mi 19.03.03 12:03

Das habe ich auch lange versucht und eine Lösung gefunden:
erstelle einen MediaPlayer auf deinem Formular. Stelle das Visible Tag auf false; gib dem MediaPlayer einen guten Namen (z.B.: Player1). Wenn du nun den Sound abspielen willst geht das dann so:


Quelltext
1:
2:
3:
Player1.Filename := 'demo.mp3';
Player1.Open;
Player1.Play;


Das kannst du mit so vielen MPLAyer machen wie du willst. Die einzige Beschlänkung ist das die Soundkarte full-duplex fähig sein muss. Das sind sie allerdings schon serienmäsig!

Ich hoffe das ich helfen konnte[/code]


mimi - Mo 24.03.03 00:14

nimm doch die FMod-lib damit geht das gans einfach und du hast 10-20* verschiende sound formate

*
habe noch nicht gezählt aber es sind sehr viele;)
Wenn man es mit der MediaPlayer komponenten vergleicht :)


Adrian - Mo 24.03.03 12:35
Titel: Multi-Sound
Hallo,

habe mal folgendes geschrieben:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
uses
   MMSystem, MPlayer;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Player1.FileName:='Test1.wav';
  Player1.Open;
  Player1.Wait:=false;
  Player1.Play;
  PlaySound('Test2.wav', 0, SND_FILENAME);
end;


Damit kamen die 2 Dateien gleichzeitig raus. Vielleicht hilft Dir so was.

Gruß,

Adrian


mimi - Mo 24.03.03 18:43

vileicht hatte er ja auch schon ne antwort..... auf diese Frage...