aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2016-09-08 01:03:05 +0200
committerRay <raysan5@gmail.com>2016-09-08 01:03:05 +0200
commit0c58c1198f51c8c8799490bbb6f1b224a43278b2 (patch)
tree909b3aedc9efb94d1210811baafd8d4503d79de1
parent1e55c30824a1fbf4449a1646ca0cf15cd96fa63d (diff)
downloadraylib-0c58c1198f51c8c8799490bbb6f1b224a43278b2.tar.gz
raylib-0c58c1198f51c8c8799490bbb6f1b224a43278b2.zip
Working on new audio functions...develop
-rw-r--r--src/audio.c32
-rw-r--r--src/raylib.h2
2 files changed, 27 insertions, 7 deletions
diff --git a/src/audio.c b/src/audio.c
index 11d0d6b9..7ef5afe1 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -218,11 +218,15 @@ Wave LoadWave(const char *fileName)
}
// Load wave data from float array data (32bit)
-Wave LoadWaveEx(float *data, int sampleRate, int sampleSize, int channels)
+Wave LoadWaveEx(float *data, int sampleCount, int sampleRate, int sampleSize, int channels)
{
Wave wave;
wave.data = data;
+ wave.sampleCount = sampleCount;
+ wave.sampleRate = sampleRate;
+ wave.sampleSize = sampleSize;
+ wave.channels = channels;
WaveFormat(&wave, sampleRate, sampleSize, channels);
@@ -579,15 +583,15 @@ Wave WaveCopy(Wave wave)
{
Wave newWave;
- if (wave.sampleSize == 8) newWave.data = (unsigned char *)malloc(wave.sampleCount*sizeof(unsigned char));
- else if (wave.sampleSize == 16) newWave.data = (short *)malloc(wave.sampleCount*sizeof(short));
- else if (wave.sampleSize == 32) newWave.data = (float *)malloc(wave.sampleCount*sizeof(float));
+ if (wave.sampleSize == 8) newWave.data = (unsigned char *)malloc(wave.sampleCount*wave.channels*sizeof(unsigned char));
+ else if (wave.sampleSize == 16) newWave.data = (short *)malloc(wave.sampleCount*wave.channels*sizeof(short));
+ else if (wave.sampleSize == 32) newWave.data = (float *)malloc(wave.sampleCount*wave.channels*sizeof(float));
else TraceLog(WARNING, "Wave sample size not supported for copy");
if (newWave.data != NULL)
{
// NOTE: Size must be provided in bytes
- memcpy(newWave.data, wave.data, wave.sampleCount);
+ memcpy(newWave.data, wave.data, wave.sampleCount*wave.channels*wave.sampleSize/8);
newWave.sampleCount = wave.sampleCount;
newWave.sampleRate = wave.sampleRate;
@@ -602,7 +606,23 @@ Wave WaveCopy(Wave wave)
// NOTE: Security check in case of out-of-range
void WaveCrop(Wave *wave, int initSample, int finalSample)
{
- // TODO: Crop wave to a samples range
+ if ((initSample >= 0) && (finalSample > 0) && (finalSample < wave->sampleCount))
+ {
+ // TODO: Review cropping (it could be simplified...)
+
+ float *samples = GetWaveData(*wave);
+ float *cropSamples = (float *)malloc((finalSample - initSample)*sizeof(float));
+
+ for (int i = initSample; i < finalSample; i++) cropSamples[i] = samples[i];
+
+ free(wave->data);
+ wave->data = cropSamples;
+ int sampleSize = wave->sampleSize;
+ wave->sampleSize = 32;
+
+ WaveFormat(wave, wave->sampleRate, sampleSize, wave->channels);
+ }
+ else TraceLog(WARNING, "Wave crop range out of bounds");
}
// Get samples data from wave as a floats array
diff --git a/src/raylib.h b/src/raylib.h
index ae3de038..3c815031 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -910,7 +910,7 @@ RLAPI void CloseAudioDevice(void); // Close t
RLAPI bool IsAudioDeviceReady(void); // Check if audio device has been initialized successfully
RLAPI Wave LoadWave(const char *fileName); // Load wave data from file into RAM
-RLAPI Wave LoadWaveEx(float *data, int sampleRate, int sampleSize, int channels); // Load wave data from float array data (32bit)
+RLAPI Wave LoadWaveEx(float *data, int sampleCount, int sampleRate, int sampleSize, int channels); // Load wave data from float array data (32bit)
RLAPI Sound LoadSound(const char *fileName); // Load sound to memory
RLAPI Sound LoadSoundFromWave(Wave wave); // Load sound to memory from wave data
RLAPI Sound LoadSoundFromRES(const char *rresName, int resId); // Load sound to memory from rRES file (raylib Resource)