Add SetAudioStreamCallback, issue #279

This commit is contained in:
Milan Nikolic 2023-11-09 00:45:46 +01:00
parent b09590165d
commit 9f257fc589
No known key found for this signature in database
GPG key ID: 9229D0EAA3AA4E75

View file

@ -4,16 +4,42 @@
package rl package rl
/* /*
//#include "external/stb_vorbis.c"
#include "raylib.h" #include "raylib.h"
#include <stdlib.h> #include <stdlib.h>
extern void internalAudioStreamCallbackGo(void *, int);
static void audioStreamWrapperCallback(void *data, unsigned int frames) {
internalAudioStreamCallbackGo(data, frames);
}
static void setAudioStreamCallbackWrapper(AudioStream stream) {
SetAudioStreamCallback(stream, audioStreamWrapperCallback);
}
*/ */
import "C" import "C"
import ( import (
"unsafe" "unsafe"
) )
// AudioCallback function.
type AudioCallback func(data []float32, frames int)
var internalAudioStreamCallback AudioCallback
// SetAudioStreamCallback - Audio thread callback to request new data
func SetAudioStreamCallback(stream AudioStream, callback AudioCallback) {
internalAudioStreamCallback = callback
C.setAudioStreamCallbackWrapper(*stream.cptr())
}
//export internalAudioStreamCallbackGo
func internalAudioStreamCallbackGo(data unsafe.Pointer, frames C.int) {
if internalAudioStreamCallback != nil {
internalAudioStreamCallback(unsafe.Slice((*float32)(data), frames), int(frames))
}
}
// cptr returns C pointer // cptr returns C pointer
func (w *Wave) cptr() *C.Wave { func (w *Wave) cptr() *C.Wave {
return (*C.Wave)(unsafe.Pointer(w)) return (*C.Wave)(unsafe.Pointer(w))