kennt sich hier jemand mit OpenAL aus?
Ich versuche gerade ein Sound mit OpenAl abzuspielen, bekomme aber beim einladen des Buffers einen Fehler.
Code: Alles auswählen
#ALC_ALL_ATTRIBUTES = 4099
#ALC_ALL_DEVICES_SPECIFIER = 4115
#ALC_ATTRIBUTES_SIZE = 4098
#ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER = 785
#ALC_CAPTURE_DEVICE_SPECIFIER = 784
#ALC_CAPTURE_SAMPLES = 786
#ALC_DEFAULT_ALL_DEVICES_SPECIFIER = 4114
#ALC_DEFAULT_DEVICE_SPECIFIER = 4100
#ALC_DEVICE_SPECIFIER = 4101
#ALC_EXTENSIONS = 4102
#ALC_FALSE = 0
#ALC_FREQUENCY = 4103
#ALC_INVALID_CONTEXT = 40962
#ALC_INVALID_DEVICE = 40961
#ALC_INVALID_ENUM = 40963
#ALC_INVALID_VALUE = 40964
#ALC_MAJOR_VERSION = 4096
#ALC_MINOR_VERSION = 4097
#ALC_MONO_SOURCES = 4112
#ALC_NO_ERROR = 0
#ALC_OUT_OF_MEMORY = 40965
#ALC_REFRESH = 4104
#ALC_STEREO_SOURCES = 4113
#ALC_SYNC = 4105
#ALC_TRUE = 1
#AL_BITS = 8194
#AL_BUFFER = 4105
#AL_BUFFERS_PROCESSED = 4118
#AL_BUFFERS_QUEUED = 4117
#AL_BYTE_OFFSET = 4134
#AL_CHANNELS = 8195
#AL_CHANNEL_MASK = 12288
#AL_CONE_INNER_ANGLE = 4097
#AL_CONE_OUTER_ANGLE = 4098
#AL_CONE_OUTER_GAIN = 4130
#AL_DIRECTION = 4101
#AL_DISTANCE_MODEL = 53248
#AL_DOPPLER_FACTOR = 49152
#AL_DOPPLER_VELOCITY = 49153
#AL_EXPONENT_DISTANCE = 53253
#AL_EXPONENT_DISTANCE_CLAMPED = 53254
#AL_EXTENSIONS = 45060
#AL_FALSE = 0
#AL_FORMAT_MONO8 = 4352
#AL_FORMAT_MONO16 = 4353
#AL_FORMAT_STEREO8 = 4354
#AL_FORMAT_STEREO16 = 4355
#AL_FREQUENCY = 8193
#AL_GAIN = 4106
#AL_ILLEGAL_COMMAND = 40964
#AL_ILLEGAL_ENUM = 40962
#AL_INITIAL = 4113
#AL_INVALID = -1
#AL_INVALID_ENUM = 40962
#AL_INVALID_NAME = 40961
#AL_INVALID_OPERATION = 40964
#AL_INVALID_VALUE = 40963
#AL_INVERSE_DISTANCE = 53249
#AL_INVERSE_DISTANCE_CLAMPED = 53250
#AL_LINEAR_DISTANCE = 53251
#AL_LINEAR_DISTANCE_CLAMPED = 53252
#AL_LOOPING = 4103
#AL_MAX_DISTANCE = 4131
#AL_MAX_GAIN = 4110
#AL_MIN_GAIN = 4109
#AL_NONE = 0
#AL_NO_ERROR = #AL_FALSE
#AL_ORIENTATION = 4111
#AL_OUT_OF_MEMORY = 40965
#AL_PAUSED = 4115
#AL_PENDING = 8209
#AL_PITCH = 4099
#AL_PLAYING = 4114
#AL_POSITION = 4100
#AL_PROCESSED = 8210
#AL_REFERENCE_DISTANCE = 4128
#AL_RENDERER = 45059
#AL_ROLLOFF_FACTOR = 4129
#AL_SAMPLE_OFFSET = 4133
#AL_SEC_OFFSET = 4132
#AL_SIZE = 8196
#AL_SOURCE_RELATIVE = 514
#AL_SOURCE_STATE = 4112
#AL_SOURCE_TYPE = 4135
#AL_SPEED_OF_SOUND = 49155
#AL_STATIC = 4136
#AL_STOPPED = 4116
#AL_STREAMING = 4137
#AL_TRUE = 1
#AL_UNDETERMINED = 4144
#AL_UNUSED = 8208
#AL_VELOCITY = 4102
#AL_VENDOR = 45057
#AL_VERSION = 45058
Structure al6float
f.f[6]
EndStructure
Prototype.i alcOpenDevice(*deviceName)
Prototype.i alcCreateContext(*device, attrList.l)
Prototype.i alcMakeContextCurrent(*context)
Prototype.i alBufferData(*buffer, format.l, *data, size.l, freq.l)
Prototype.i alGenBuffers(n.l, *buffers)
Prototype.i alGenSources(n.l, *sources)
Prototype.i alGetError()
Prototype.i alListener3f(type.i, v1.f, v2.f, v3.f)
Prototype.i alListenerfv(type.i, *v)
Prototype.i alSourcei(*source, type.i, v.l)
Prototype.i alSourcef(*source, type.i, v.f)
Prototype.i alSource3f(*source, type.i, v1.f, v2.f, v3.f)
Prototype.i alcGetError(*device)
Prototype.i alSourcePlay(*source)
Prototype.i alGetSourcei(*source, type.i, *value)
If OpenLibrary(0, "OpenAL32.dll")
Global alcOpenDevice.alcOpenDevice = GetFunction(0, "alcOpenDevice")
Global alcCreateContext.alcCreateContext = GetFunction(0, "alcCreateContext")
Global alcMakeContextCurrent.alcMakeContextCurrent = GetFunction(0, "alcMakeContextCurrent")
Global alGenSources.alGenSources = GetFunction(0, "alGenSources")
Global alGenBuffers.alGenBuffers = GetFunction(0, "alGenBuffers")
Global alListener3f.alListener3f = GetFunction(0, "alListener3f")
Global alListenerfv.alListenerfv = GetFunction(0, "alListenerfv")
Global alSourcei.alSourcei = GetFunction(0, "alSourcei")
Global alSourcef.alSourcef = GetFunction(0, "alSourcef")
Global alSource3f.alSource3f = GetFunction(0, "alSource3f")
Global alcGetError.alcGetError = GetFunction(0, "alcGetError")
Global alGetError.alGetError = GetFunction(0, "alGetError")
Global alBufferData.alBufferData = GetFunction(0, "alBufferData")
Global alSourcePlay.alSourcePlay = GetFunction(0, "alSourcePlay")
Global alGetSourcei.alGetSourcei = GetFunction(0, "alGetSourcei")
Debug "Library : OK"
EndIf
Procedure.s alGetErrorText()
Select alGetError()
Case #AL_NO_ERROR : ProcedureReturn "AL_NO_ERROR"
Case #AL_INVALID_NAME : ProcedureReturn "AL_INVALID_NAME"
Case #AL_INVALID_ENUM : ProcedureReturn "AL_INVALID_ENUM"
Case #AL_INVALID_VALUE : ProcedureReturn "AL_INVALID_VALUE"
Case #AL_INVALID_OPERATION : ProcedureReturn "AL_INVALID_OPERATION"
Case #AL_OUT_OF_MEMORY : ProcedureReturn "AL_OUT_OF_MEMORY"
EndSelect
EndProcedure
Procedure alBufferWAV(*Buffer, FileName.s)
Protected File.i = ReadFile(#PB_Any, FileName)
Protected audioFormat, channels, sampleRate, byteRate, bitsPerSample, dataChunkSize
Protected *Memory
If File
FileSeek(File, 20)
audioFormat = ReadWord(File)
channels = ReadWord(File)
sampleRate = ReadLong(File)
byteRate = ReadLong(File)
Debug "byteRate = "+Str(byteRate)
ReadWord(File)
bitsPerSample = ReadWord(File)
FileSeek(File, 40)
dataChunkSize = ReadLong(File)
*Memory = AllocateMemory(dataChunkSize)
ReadData(File, *Memory, dataChunkSize)
Debug "dataChunkSize = "+Str(dataChunkSize)
Debug "sampleRate = "+Str(sampleRate)
Debug alGetErrorText()
alBufferData(*Buffer, #AL_FORMAT_MONO16, *Memory, dataChunkSize, sampleRate)
Debug alGetErrorText()
CallDebugger
FreeMemory(*Memory)
CloseFile(File)
EndIf
EndProcedure
; Initialisierung
Global *Device, *Context
*Device = alcOpenDevice(#Null)
If *Device
*Context = alcCreateContext(*Device, #Null)
If *Context
alcMakeContextCurrent(*Context)
Debug "Device & Context : OK"
EndIf
EndIf
; Zuhörer
Define Orientation.al6float : Orientation\f[2] = -1 : Orientation\f[4] = 1
alListener3f(#AL_POSITION, 0, 0, 0);
alListener3f(#AL_VELOCITY, 0, 0, 0);
alListenerfv(#AL_ORIENTATION, @Orientation);
; Quelle
Define *Source
alGenSources(1, @*Source)
alSourcef(*Source, #AL_PITCH, 1)
alSourcef(*Source, #AL_GAIN, 1)
alSource3f(*Source, #AL_POSITION, 0, 0, 0)
alSource3f(*Source, #AL_VELOCITY, 0, 0, 0)
alSourcei(*Source, #AL_LOOPING, #AL_TRUE)
; Buffer
Define *Buffer
alGenBuffers(1, @*Buffer)
alSourcei(*Source, #AL_BUFFER, *Buffer)
alBufferWAV(*Buffer, "Sinus.wav")
Meiner Meinung nach stimmen aber die Parameter von alBufferData()Library : OK
Device & Context : OK
byteRate = 88200
dataChunkSize = 88200
sampleRate = 44100
AL_NO_ERROR
AL_INVALID_VALUE