aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoshua Reisenauer <kd7tck@msn.com>2016-05-19 20:44:09 -0700
committerJoshua Reisenauer <kd7tck@msn.com>2016-05-19 20:44:09 -0700
commit41c5f3a0178027e9b74e563ab102f603a53e35bf (patch)
tree8db80b512a772e7c95f9e723d8b0834af37b536c /src
parent847944e24047cb3e2a2c6dfd6dfaa3667cf6f830 (diff)
downloadraylib-41c5f3a0178027e9b74e563ab102f603a53e35bf.tar.gz
raylib-41c5f3a0178027e9b74e563ab102f603a53e35bf.zip
Buffer for raw audio
Diffstat (limited to 'src')
-rw-r--r--src/audio.c22
-rw-r--r--src/audio.h4
-rw-r--r--src/raylib.h6
3 files changed, 27 insertions, 5 deletions
diff --git a/src/audio.c b/src/audio.c
index 6d8f876c..43e8be14 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 d3276bf6..1140a60a 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 6efde710..986dc7bf 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
}