[Gambas-user] OpenAL (gb.openal) example code

Benoît Minisini gambas at ...1...
Tue Oct 20 23:45:30 CEST 2015


Le 20/10/2015 07:40, Kevin Fishburne a écrit :
> On 09/15/2015 01:49 AM, Kevin Fishburne wrote:
>>
>> Currently using Alure.BufferDataFromFile to load sound files into
>> OpenAL buffers I'm unable to get the buffer properties using the
>> Al.GetBufferi function. I don't know if this is because I'm using
>> Alure versus the regular Al method, but this code should work and
>> doesn't (see attached project):
>>
>>    ' Load audio data from .wav file into audio buffer.
>>    Print "Load buffer data from wav file:" & Gb.CrLf & " ";
>>    Print Alure.BufferDataFromFile("./test.ogg", AudioBuffer[0])
>>
>>    ' Display audio data properties.
>>    Print "Audio frequency in Hz:" & Gb.CrLf & "  ";
>>    Print Al.GetBufferi(AudioBuffer[0], Al.FREQUENCY)
>>    Print "Audio buffer bit depth:" & Gb.CrLf & "  ";
>>    Print Al.GetBufferi(AudioBuffer[0], Al.BITS)
>>    Print "Audio channels:" & Gb.CrLf & "  ";
>>    Print Al.GetBufferi(AudioBuffer[0], Al.CHANNELS)
>>    Print "Audio data size in bytes:" & Gb.CrLf & "  ";
>>    Print Al.GetBufferi(AudioBuffer[0], Al.SIZE)
>>
>> It returns zeros instead of the proper values. In particular I need
>> the Size property returned, as this can be used to calculate an offset
>> from which to start playing a sample once attached to a source. This
>> is necessary because multiple sources created and played
>> simultaneously using the same buffer will result in the waveforms
>> being combined at the same sample point, which creates a metallic,
>> flange-like effect. If I can find a buffer's size I can offset the
>> position at which a source begins to play randomly between zero and
>> the buffer's size like this:
>>
>> Al.Sourcei(Ship[ShipIndex].AudioSourceVelocity[0], Al.BYTE_OFFSET,
>> Rnd(0, Al.GetBufferi(AudioBufferVelocity[0], Al.SIZE)))
>>
>> For now I'm going to have to use something like Rnd(0, 100000) for the
>> offset and simply hope it doesn't exceed the buffer's size, which
>> silently returns an error and plays the source at zero (no offset).
>
> Having not gotten a response I'll try again. There's now a second
> critical use case where I need to retrieve the properties of an OpenAL
> buffer. According to multiple Internet posts such as this one:
>
> http://stackoverflow.com/questions/7978912/how-to-get-length-duration-of-a-source-with-single-buffer-in-openal
>
> I'm using the correct method with the possible exception of relying upon
> Alure to load the buffer (which you'd think would be irrelevant since a
> buffer is a buffer is a buffer and all). Please see the OpenAL example
> in the GAMBAS software farm to test the failing code. I'm using Mint
> 17.2 amd64 and GAMBAS from the stable PPA. There (as usual) is a
> possibility I'm just doing something really stupid, or there could be a
> legitimate problem with the OpenAL implementation in Alure or GAMBAS.

Sorry, I forgot to look at your problems...

>
> On an unrelated note, I finally watched Benoît's interview. A few
> things... First Benoît's English was good enough that I could understand
> about 80%+ of what he was saying. Second, the two guys doing the
> interview didn't seem to know their assholes from their elbows,
> especially the older Mac guy. Benoît, you were outstanding and your
> passion for both GAMBAS and BASIC really shone through; nice work and it
> was awesome seeing and hearing you talk about your (and our) passion.
> Also around the 23:00 mark you gave me a shout-out by name. I nearly
> shit myself. :)
>

...maybe this is the reason why I mentioned your name: I knew 
unconsciously that I had something to do relative to you. :-)

-- 
Benoît Minisini




More information about the User mailing list