Seite 1 von 1

OpenAL - alBufferData gibt INVALID_VALUE

Verfasst: 14.08.2014 14:25
von STARGÅTE
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.

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")
Library : OK
Device & Context : OK
byteRate = 88200
dataChunkSize = 88200
sampleRate = 44100
AL_NO_ERROR
AL_INVALID_VALUE
Meiner Meinung nach stimmen aber die Parameter von alBufferData()

Re: OpenAL - alBufferData gibt INVALID_VALUE

Verfasst: 15.08.2014 17:00
von mk-soft
Könnte an *memory liegen. Übergib mal den Pointer auf den Pointer. @*memory

Re: OpenAL - alBufferData gibt INVALID_VALUE

Verfasst: 15.08.2014 17:05
von STARGÅTE
Hab ich schon probiert, selbes problem.
Der Buffer von OpenAL scheint aber richtig zu sein, denn wenn ich dort was andere teste bekomm ich INVALIDE NAME

Vielleicht stimmt ja die 'dataChunkSize' nicht, aber ich habe auch nichts parat, wo ich sicher weiß, dass es genau so gehen müsste.

Re: OpenAL - alBufferData gibt INVALID_VALUE

Verfasst: 16.08.2014 01:28
von STARGÅTE
Alles klar. Es lag an Prototype, ich muss hier PrototypeC verwenden!