OpenAl Problem on Mac OsX 10.5 Is it a bug?

BlitzMax Forums/BlitzMax Programming/OpenAl Problem on Mac OsX 10.5 Is it a bug?

Midimaster(Posted 2009) [#1]
I wrote a recording software which takes the signal from microphone and works with the samples afterwards (fft etc...)

On Windows it is working perfect, but on Mac it crashed. Now I reduced the code to a minimum to find the error and noticed that a OpenAl Function is working different to the PC-Version.

On the PC the function "alcCaptureSamples" fetches some samples from the device and reduces the number of remaining samples. On the MAC the function does not reduce the number of remaining samples.

What Do I do wrong or is ot a bug?

the code demontrates the behavior without crashing. Normaly "alcCaptureSamples" should reduce the amount of remaining samples:

If OpenALInstalled()=False 
	Print " no open al installed"
	End
EndIf

EnableOpenALAudio()

SetAudioDriver("OpenAL")

Global Device: Int
Global CaptureDevice:Int
Global NumSamples:Int
Global VoidSample:TAudioSample=CreateAudioSample(44100*2,44100,SF_MONO16LE)
Global Zeit%

Device=alcOpenDevice(Null)

If Device=Null Then RuntimeError "No access to OpenAL Device !"

Local flag%=InitCapture()
If flag=False Then  RuntimeError "No access to OpenAL capture Device !"

Graphics 800,600,0

alcCaptureStart(CaptureDevice)

Repeat
	If zeit<MilliSecs() Then
		zeit=MilliSecs()+500
		Print " i am ok " + MilliSecs()
		alcGetIntegerv(CaptureDevice, ALC_CAPTURE_SAMPLES, 4, Varptr(NumSamples))	
		Print "amount of samples : " + numsamples
		If numsamples>10000 Then
			numsamples=10000
			Print "only fetching " + numsamples
			alcCaptureSamples(CaptureDevice, VoidSample.Samples, NumSamples)
			' check how much remai samples
			alcGetIntegerv(CaptureDevice, ALC_CAPTURE_SAMPLES, 4, Varptr(NumSamples))	
		    Print "remaining samples : " + numsamples
		EndIf
	EndIf
Until KeyHit(key_escape)
ShutdownOpenAL
End



Function InitCapture%()
   	If (alcIsExtensionPresent(Device, "ALC_EXT_CAPTURE") = AL_FALSE) Then Return False
	
	CaptureDevice = alcCaptureOpenDevice(Null, 44100, AL_FORMAT_MONO16, 44100*5*2);
   	
	If Not(CaptureDevice) Then Return False
	
	Return True
EndFunction



Function ShutdownOpenAL()
	alcCaptureStop(CaptureDevice)
    	alcCloseDevice(CaptureDevice)
    	alcCloseDevice(Device)
EndFunction