Für 'Samples', also per FSOUND_Sample_Load geladene Sounds kannst Du folgendermaßen verfahren, indem Du den Loopmode des Channels, auf dem Sounds gespielt werden, setzt:
Code: Alles auswählen
FSOUND_Init(44100, 32, 0)
*hsample = FSOUND_Sample_Load(#FSOUND_FREE, "car.wav", 0, 0, 0)
FSOUND_PlaySound(1, *hsample)
FSOUND_SetLoopMode(1, #FSOUND_LOOP_NORMAL) ; setzt den Loop-Mode des Channels
Delay(5000)
Für Streams hingegen muss entweder beim Laden, oder später per FSOUND_Stream_SetMode() das Flag #FSOUND_LOOP_NORMAL für diesen Stream gesetzt werden, damit dieser überhaupt loopen kann. Zusätzlich läßt sich dann die Anzahl einstellen per FSOUND_Stream_SetLoopCount(*hstream, 2), also z.B. sowas in der Art:
Code: Alles auswählen
FSOUND_Init(44100, 32, 0)
*hstream = FSOUND_Stream_Open(OpenFileRequester("","car.wav","",0), 0, 0, 0) ; hier könnte auch schon das Flag #FSOUND_LOOP_NORMAL angegeben werden
FSOUND_Stream_SetMode(*hstream, #FSOUND_LOOP_NORMAL) ; markiere als loopenden Stream (ohne #FSOUND_LOOP_NORMAL für diesen Stream kann er gar nicht geloopt werden
FSOUND_Stream_SetLoopCount(*hstream, 3) ; 3 Wiederholungen
*hchannel = FSOUND_Stream_Play(1, *hstream)
Delay(5000)
Ein Stream spricht auf ein FSOUND_SetLoopMode() auf seinen Wiedergabechannel nur dann an, wenn der Stream bereits auf #FSOUND_LOOP_NORMAL gesetzt ist. Dann läßt sich der Loop z.B. per FSOUND_SetLoopMode(1, #FSOUND_LOOP_OFF) unterdrücken, aber nicht andersherum erzwingen, wenn beim Stream-laden #FSOUND_LOOP_NORMAL weggelassen wurde.
Das ist ein seltsames Verhalten finde ich, wenn dann sollte FSOUND_SetLoopMode() für alle Samples und Stream auf diesem Channel gleichermaßen gelten, also auch einen Stream-Loop erzwingen können, aber wahrscheinlich ist das eine Krankheit, die sich von Version zu Version eingeschlichen hat.
Bald gibt es ja das komplett neugeschriebene und -konzipierte fmod 4.0 (dann nicht mehr abwärtskompatibel, da völlig neue Befehlslogik), da wird sowas dann wohl hoffentlich ausgebügelt sein.
Mal sehen, ob PureBasic dann auf 4.0 mitzieht
