OpenAL - alBufferData gibt INVALID_VALUE

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

OpenAL - alBufferData gibt INVALID_VALUE

Beitrag 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()
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: OpenAL - alBufferData gibt INVALID_VALUE

Beitrag von mk-soft »

Könnte an *memory liegen. Übergib mal den Pointer auf den Pointer. @*memory
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: OpenAL - alBufferData gibt INVALID_VALUE

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: OpenAL - alBufferData gibt INVALID_VALUE

Beitrag von STARGÅTE »

Alles klar. Es lag an Prototype, ich muss hier PrototypeC verwenden!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten