OpenAL - alBufferData gibt INVALID_VALUE
Verfasst: 14.08.2014 14:25
Hallo Leute,
kennt sich hier jemand mit OpenAL aus?
Ich versuche gerade ein Sound mit OpenAl abzuspielen, bekomme aber beim einladen des Buffers einen Fehler.
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