Determine total sound playing length (ms)

BlitzMax Forums/BlitzMax Beginners Area/Determine total sound playing length (ms)

Hi !
you use a sound with loadsound, now... (an .ogg file)
Is there a command to dertermine the total sound length (in milliseconds) ?
Many Thanks

after a bit of investimigation:

SuperStrict

Local sample:TAudioSample = LoadAudioSample("battle.ogg")
Local spm:Float = sample.hertz * 60

Local timeSeconds:Float = (sample.length / spm) * 60
Print timeSeconds


Does that still work with variable bitrate OGG files?

*EDIT*
I just tested it with OGGs of different bitrates and the results are consistent, I can only suggest trying it.

I just dug out a few VBR OGG files and tested it too - works fine.

cool :)

*EDIT*
just for the hell of it, I converted it to a function:
SuperStrict

Local sample:TAudioSample = LoadAudioSample("battle.ogg")
Local length:Float = getSampleLength(sample)
Print "Length in seconds: " + length
Print "Length: " + Int(Floor(length/60))+"m "+Int(length Mod 60)+"s"

Function getSampleLength:Float(sample:TAudioSample)
	Return Float( (sample.length / Float( (sample.hertz * 60) ) ) * 60)
End Function


many thanks. but what's the difference between s1 : TSound = loadsound and s2:TAudioSample = LoadAudioSample ? Later in your code could you play s2 with playsound ? Length don't exist with an TSound object ?

SuperStrict

Local sample:TAudioSample = LoadAudioSample("battle.ogg")
Local length:Float = getSampleLength(sample)
Print "Length in seconds: " + length
Print "Length: " + Int(Floor(length/60))+"m "+Int(length Mod 60)+"s"
Local sound:TSound = LoadSound(sample)
Local channel:TChannel = PlaySound(sound)
While channel.playing()

Wend

Function getSampleLength:Float(sample:TAudioSample)
	Return Float( (sample.length / Float( (sample.hertz * 60) ) ) * 60)
End Function


I am not a math expert but shouldn't the equation be Length/hertz?

length
------- * 60 = Length/hertz
60*hertz

I am not a math expert but shouldn't the equation be Length/hertz?
...

..isn't that exactly what Perturbatio said?

No. There is no need to multiply it by 60 at all.

No. There is no need to multiply it by 60 at all.


You're right of course, but in my defence, I wrote that code in a hurry and it changed several times before I got it right.