|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 22.03.2003, 14:15 Titel: Direct Audio |
|
|
Wie kann ich abfragen ob eine Wav zuende abgespielt wurde?
ich hab nämlich son loop ding und möchte das immer wieder von vorne abspielen ... |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 22.03.2003, 15:19 Titel: |
|
|
Ich glaub des geht mit
Code: | Performance::IsPlaying(IDirectMusicSegment*,...) |
_________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 22.03.2003, 15:36 Titel: |
|
|
Performance::
soll doch die Audio Class sein oder?
dann must mir aber noch sagen wie die FUnlktion IsPlaying()
aussehen soll |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 22.03.2003, 16:10 Titel: |
|
|
Ich glaub, des wurde scho mal in dem Forum besprochen.
Nutz doch einfach mal die Suchefunktion.
Aaah ja, habs gefunden.
TheMillenium hats gepostet bei DirectX, OpenGL -> DX Audio Probleme. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 22.03.2003, 19:38 Titel: |
|
|
Hab vorhin gegoogled und was gefunden:
Zitat: | Ascertains whether a particular segment or segment state is currently playing at the speakers.
object.IsPlaying( _ segment As DirectMusicSegment8, _ SegmentState8 As DirectMusicSegmentState8 _
) As Boolean
|
Code: | IDirectMusicPerformance8* Performance;
IDirectMusicSegment8* Segment;
IDirectMusicSegmentState8* SegmentState;
|
Code: | Performance->PlaySegmentEx(Segment,NULL,NULL,DMUS_SEGF_SECONDARY,NULL,NULL,SegmentState,NULL); |
Code: | BOOL StillPlaying=Performance->IsPlaying(Segment,SegmentState); |
So, jetzt müssts klappen...
Müsste eigentlich, aber ich habs probiert und der Computer spielt dann den Sound immer mehrere Male direkt hintereinander ab.
Weiß jemand, woran das liegt? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 22.03.2003, 22:45 Titel: |
|
|
Hast du geprüft ob das aktuelle Stück noch läuft? Wenn nicht, erst dann erneut spielen, wenn ich dein Problem richtig verstanden hab. |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 22.03.2003, 23:32 Titel: |
|
|
->IsPlaying(Segment,SegmentState);
Segment ist klar
aber was ist Segment State? |
|
Nach oben |
|
|
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 22.03.2003, 23:57 Titel: |
|
|
Hi,
hier mal der Code meiner Soundklasse, welche *.mp3s abspielen kann und überprüft, ob eine Sounddatei zu Ende abgespielt wurde. Diese Klasse funktioniert nicht 100%ig, weswegen Sie für unser Spiel nicht genutzt wird, also kann ich Sie mit ruhigem Gewissen posten.
Code: |
#include <dshow.h>
#pragma comment(lib,"amstrmid.lib")
#pragma comment(lib,"strmiids.lib")
*/
#define SOUND 1
#define BGMUSIC 2
#ifndef _DxAudio_h_
#define _DxAudio_h_
class DxAudio
{
public:
DxAudio();
~DxAudio();
//Memberfunktionen
void Create();
HRESULT LoadFile(char *name);
bool Play(int Type);
bool Stop();
bool Pause();
void UnCreate(void);
void Repeat();
//Members
bool bStop;
LONGLONG stop, pCurrent, pStop;
IGraphBuilder *GB;
IMediaControl *MC;
IMediaEventEx *ME;
IBasicAudio *BA;
IMediaSeeking *MS;
};
DxAudio::DxAudio()
{
}
void DxAudio::Create()
{
CoInitialize(NULL);
bStop = false;
}
bool DxAudio::Play(int Type)
{
MC->Run();
return true;
}
void DxAudio::Repeat()
{
MS->GetPositions(&pCurrent,&pStop);
if(pCurrent >= pStop)
{
Stop();
Play(BGMUSIC);
}
}
bool DxAudio::Stop()
{
bStop = true;
MC->Stop();
//streamposition setzen
__int64 pos=0;//an den Anfang setzen
MS->SetPositions(&pos,AM_SEEKING_AbsolutePositioning,NULL,NULL);
//streamposition bekommen
__int64 cur;//aktuelle position und endposition
MS->GetPositions(&cur,&stop);
return true;
}
bool DxAudio::Pause()
{
MC->Pause();
return true;
}
HRESULT DxAudio::LoadFile(char *name)
{
HRESULT hres;
//create graphbuilder
hres=CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&GB);
if(hres!=S_OK)
return hres;
WCHAR wFile[MAX_PATH];
MultiByteToWideChar(CP_ACP,0,name,-1,wFile,MAX_PATH);
//call codec, which will render our audiofile
hres=GB->RenderFile(wFile,NULL);
if(hres!=S_OK)
return hres;
//create mediacontrol for play and stop
hres=GB->QueryInterface(IID_IMediaControl,(void **)&MC);
if(hres!=S_OK)
return hres;
//cretae mediaevent
hres=GB->QueryInterface(IID_IMediaEventEx,(void **)&ME);
if(hres!=S_OK)
return hres;
//create seekingobject for get & set streampointer
hres=GB->QueryInterface(IID_IMediaSeeking,(void **)&MS);
if(hres!=S_OK)
return hres;
//call audiointerface
hres=GB->QueryInterface(IID_IBasicAudio,(void **)&BA);
return hres;
}
void DxAudio::UnCreate()
{
MS->Release();
BA->Release();
ME->Release();
MC->Release();
GB->Release();
CoUninitialize();
}
DxAudio::~DxAudio()
{
}
#endif
|
Ich hoffe, dass dieses Code-Fragment Euch weiterhilft.
Gruss Tarek |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 23.03.2003, 00:04 Titel: |
|
|
Nur mal eine Rand Frage: Warum nutzt hier kaum einer FMOD? |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 23.03.2003, 11:10 Titel: |
|
|
@DarK
vielleicht kannst du damit was anfangen:
Zitat: | DirectMusicSegmentState8 represents a playing instance of a segment. When the DirectMusicPerformance8.PlaySegmentEx method is called, it creates a DirectMusicSegmentState8 object that enables the application to retrieve information about that instance. The object can also be passed to methods of DirectMusicPerformance8 to determine whether a segment instance is still playing, or to stop it. |
Deshalb hab ich in die PlaySegemntEx-Funktion auch noch SegemntState als Parameter übergeben.
@all
wenn ich schreib
Code: | if(FALSE==Performance->IsPlaying(Segment,SegmentState)) //Sound abspielen |
wird der Sound die ganze Zeit etwa 10 mal sehr kurz hintereinander abgespielt. Wenn die Sounds dann abgespielt sind fängts wieder in Impulsen an.
wenn ich dagegen schreib
Code: | if(TRUE==Performance->IsPlaying(Segment,SegmentState)) //Sound abspielen |
wird der Sound nicht mehr die ganze Zeit abgespielt.
Es ertönt zwar der Sound einzeln, wenn ich ihn normal abspiel, aber wenn der Sound verklungen ist, wird er immernoch 10 Mal kurz hintereinander abgespielt. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 05.04.2003, 16:05 Titel: |
|
|
@Christian weißt du vielleicht woran das liegt...oder liegen könnte? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 08.04.2003, 19:59 Titel: |
|
|
Ich versuch mal, das Problem besser zu beschreiben.
X Anfang des Sounds
= Nix
O sound spielt
------------
____________________________________________
Zeit--->
XOOOO=========XOOOO=======
=====XOOOOXOOOO===XOOOO===
======XOOOOXOOOO==XOOOO===
=====XOOOOXOOOO====XOOOO==
In der ersten Zeile wir der Sound z.B. auf Knopfdruck abgespielt.
Die restlichen Zeilen laufen gleichzeitig ab. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 08.04.2003, 20:19 Titel: |
|
|
Also, ich spiele einen Sound ab und prüfe ständig(siehe oben), ob er schon verklungen ist. Wenn das geschehen ist, wird er zwar wie in einer Soundschleife erneut, aber gleich mit "Hall-Effekt" also mehrere male sehr kurz hintereinander, abgespielt. Meine Frage war, wie man das verhindert. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|