Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

1

02.07.2009, 19:50

Sound auf Ende prüfen

Hallo,

ich habe mich dazu schon in der Dokumentation umgesehen aber nichts gefunden. Alos erstmal, es geht um SDL_Mixer.

Ich hab probleme das er beim abspielen von Sound stetig Speicher frisst.
Obwohl ich die Funktion nur einmal aufrufe.

Also müsste ich wissen wie ich heraus finde ob die Sounddatei zu ende ist. Weil das Sampel mitten drinne zu räumen ist ja schwachsinnig. (folge: sound stoppt).

Also.. wie kriege ich heraus ob die Sounddatei fertig ist.

2

02.07.2009, 20:15

Ich versteh deine Problematik nicht ganz:
Du spielst eine Sounddatei ab, aber die benötigt immer noch Speicher obwohl sie zu Ende ist?

Zeig mal ein bisschen Code.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

3

02.07.2009, 20:37

Nicht ganz. Ich frisst während des abspielens laufend Speicher.


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void CGame::Menue ()
{

m_Option.GetSoundPointerMenue ()->PlaySound ();

while (m_bProgrammRun)
{
    
    ProcessMenue ();
    RenderMenue  ();
    SwitchMenue ();
}

}


Wie man sieht wird der Sound nur einmal abgespielt. Er frisst aber laufend Speicher wenn er abgespielt WIRD.


Und die Playfunktion dazu...


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
void CSound::PlaySound() 
{ 
   
   if ( m_bPlay)
   Mix_PlayChannel(-1, m_psound, 0);


   
}

4

03.07.2009, 20:15

Vorweg: Ich hab nur wenig Ahnung von SDL_Mixer. Ich hoffe das ich dir trotzdem helfen kann.

1. Also eigentlich wie bei allem würde ich dir empfehlen eine Fehlerabfrage einzubauen:

C-/C++-Quelltext

1
2
3
4
if (Mix_PlayChannel(-1, m_psound, 0) == -1)
{
      std::cout << Mix_GetError() << std::endl;
} 


2. Kann das sein das deine Playsound Methode mehrmals aufgerufen wird oder das du dein m_psound Pointer bei einem anderen Soundaufruf parametriert hast?
3. Kann das sein, dass deine Klasse mit dieser Methode öfters als gewollt in den Heap / Stack geschaufelt wird?
4. Wie und wo deklarierst und definierst du deinen Mix_Chunk pointer?
5. Prüf mal mit dem Debugger nach wo zum ersten mal eine ungewöhnliche Speicherbelegung stattfindet.

Werbeanzeige