diff --git a/src/audio.c b/src/audio.c
index 6d8f876c3..43e8be14e 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -128,8 +128,8 @@ static void EmptyMusicStream(int index);                  // Empty music buffers
 
 static MixChannel_t* InitMixChannel(unsigned short sampleRate, unsigned char mixChannel, unsigned char channels, bool floatingPoint); // For streaming into mix channels.
 static void CloseMixChannel(MixChannel_t* mixc); // Frees mix channel
-static unsigned short BufferMixChannel(MixChannel_t* mixc, void *data, int numberElements); // Pushes more audio data into mixc mix channel, if NULL is passed it pauses
-static unsigned short FillAlBufferWithSilence(MixChannel_t *mixc, ALuint buffer); // Fill buffer with zeros, returns number processed
+static int BufferMixChannel(MixChannel_t* mixc, void *data, int numberElements); // Pushes more audio data into mixc mix channel, if NULL is passed it pauses
+static int FillAlBufferWithSilence(MixChannel_t *mixc, ALuint buffer); // Fill buffer with zeros, returns number processed
 static void ResampleShortToFloat(short *shorts, float *floats, unsigned short len); // Pass two arrays of the same legnth in
 static void ResampleByteToFloat(char *chars, float *floats, unsigned short len); // Pass two arrays of same length in
 static int IsMusicStreamReadyForBuffering(int index); // Checks if music buffer is ready to be refilled
@@ -292,7 +292,7 @@ static void CloseMixChannel(MixChannel_t* mixc)
 // Pushes more audio data into mixc mix channel, only one buffer per call
 // Call "BufferMixChannel(mixc, NULL, 0)" if you want to pause the audio.
 // @Returns number of samples that where processed.
-static unsigned short BufferMixChannel(MixChannel_t* mixc, void *data, int numberElements)
+static int BufferMixChannel(MixChannel_t* mixc, void *data, int numberElements)
 {
     if(!mixc || mixChannelsActive_g[mixc->mixChannel] != mixc) return 0; // when there is two channels there must be an even number of samples
     
@@ -331,7 +331,7 @@ static unsigned short BufferMixChannel(MixChannel_t* mixc, void *data, int numbe
 }
 
 // fill buffer with zeros, returns number processed
-static unsigned short FillAlBufferWithSilence(MixChannel_t *mixc, ALuint buffer)
+static int FillAlBufferWithSilence(MixChannel_t *mixc, ALuint buffer)
 {
     if(mixc->floatingPoint){
         float pcm[MUSIC_BUFFER_SIZE_FLOAT] = {0.f};
@@ -377,6 +377,7 @@ static void ResampleByteToFloat(char *chars, float *floats, unsigned short len)
 }
 
 // used to output raw audio streams, returns negative numbers on error
+// if floating point is false the data size is 16bit short, otherwise it is float 32bit
 RawAudioContext InitRawAudioContext(int sampleRate, int channels, bool floatingPoint)
 {
     int mixIndex;
@@ -398,6 +399,19 @@ void CloseRawAudioContext(RawAudioContext ctx)
         CloseMixChannel(mixChannelsActive_g[ctx]);
 }
 
+int BufferRawAudioContext(RawAudioContext ctx, void *data, int numberElements)
+{
+    int numBuffered = 0;
+    if(ctx >= 0)
+    {
+        MixChannel_t* mixc = mixChannelsActive_g[ctx];
+        numBuffered = BufferMixChannel(mixc, data, numberElements);
+    }
+    return numBuffered;
+}
+
+
+
 
 
 //----------------------------------------------------------------------------------
diff --git a/src/audio.h b/src/audio.h
index d3276bf6e..1140a60a8 100644
--- a/src/audio.h
+++ b/src/audio.h
@@ -102,8 +102,12 @@ float GetMusicTimePlayed(int index);                            // Get current m
 int getMusicStreamCount(void);
 void SetMusicPitch(int index, float pitch);
 
+// used to output raw audio streams, returns negative numbers on error
+// if floating point is false the data size is 16bit short, otherwise it is float 32bit
 RawAudioContext InitRawAudioContext(int sampleRate, int channels, bool floatingPoint);
+
 void CloseRawAudioContext(RawAudioContext ctx);
+int BufferRawAudioContext(RawAudioContext ctx, void *data, int numberElements); // returns number of elements buffered
 
 #ifdef __cplusplus
 }
diff --git a/src/raylib.h b/src/raylib.h
index 6efde7102..986dc7bfe 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -896,8 +896,12 @@ float GetMusicTimePlayed(int index);                            // Get current m
 int getMusicStreamCount(void);
 void SetMusicPitch(int index, float pitch);
 
-RawAudioContext InitRawAudioContext(int sampleRate, int channels, bool floatingPoint); // used to output raw audio streams, returns negative numbers on error
+// used to output raw audio streams, returns negative numbers on error
+// if floating point is false the data size is 16bit short, otherwise it is float 32bit
+RawAudioContext InitRawAudioContext(int sampleRate, int channels, bool floatingPoint);
+
 void CloseRawAudioContext(RawAudioContext ctx);
+int BufferRawAudioContext(RawAudioContext ctx, void *data, int numberElements); // returns number of elements buffered
 
 #ifdef __cplusplus
 }