Browse Source

WARNING: Complete review of raudio -WIP-

This module has been completely reviewed, old structures still contained OpenAL useless data, a full module revision. Some of the changes:
 - Redesigned internal MusicData structure
 - Exposed MusicStream structure data
 - Reviewed AudioStream structure
 - Redesigned Sound structure

Still some work to do...
Ray 6 years ago
parent
commit
b44b7dd310
2 changed files with 233 additions and 232 deletions
  1. 203 207
      src/raudio.c
  2. 30 25
      src/raylib.h

File diff suppressed because it is too large
+ 203 - 207
src/raudio.c


+ 30 - 25
src/raylib.h

@@ -406,40 +406,45 @@ typedef struct BoundingBox {
 
 // Wave type, defines audio wave data
 typedef struct Wave {
-    unsigned int sampleCount;   // Number of samples
-    unsigned int sampleRate;    // Frequency (samples per second)
-    unsigned int sampleSize;    // Bit depth (bits per sample): 8, 16, 32 (24 not supported)
-    unsigned int channels;      // Number of channels (1-mono, 2-stereo)
-    void *data;                 // Buffer data pointer
+    unsigned int sampleCount;       // Total number of samples
+    unsigned int sampleRate;        // Frequency (samples per second)
+    unsigned int sampleSize;        // Bit depth (bits per sample): 8, 16, 32 (24 not supported)
+    unsigned int channels;          // Number of channels (1-mono, 2-stereo)
+    void *data;                     // Buffer data pointer
 } Wave;
 
-// Sound source type
-typedef struct Sound {
-    void *audioBuffer;      // Pointer to internal data used by the audio system
-
-    unsigned int source;    // Audio source id
-    unsigned int buffer;    // Audio buffer id
-    int format;             // Audio format specifier
-} Sound;
-
-// Music type (file streaming from memory)
-// NOTE: Anything longer than ~10 seconds should be streamed
-typedef struct MusicData *Music;
+typedef struct rAudioBuffer rAudioBuffer;
+#define AudioBuffer rAudioBuffer    // HACK: To avoid CoreAudio (macOS) symbol collision
 
 // Audio stream type
 // NOTE: Useful to create custom audio streams not bound to a specific file
 typedef struct AudioStream {
-    unsigned int sampleRate;    // Frequency (samples per second)
-    unsigned int sampleSize;    // Bit depth (bits per sample): 8, 16, 32 (24 not supported)
-    unsigned int channels;      // Number of channels (1-mono, 2-stereo)
-
-    void *audioBuffer;          // Pointer to internal data used by the audio system.
+    unsigned int sampleRate;        // Frequency (samples per second)
+    unsigned int sampleSize;        // Bit depth (bits per sample): 8, 16, 32 (24 not supported)
+    unsigned int channels;          // Number of channels (1-mono, 2-stereo)
 
-    int format;                 // Audio format specifier
-    unsigned int source;        // Audio source id
-    unsigned int buffers[2];    // Audio buffers (double buffering)
+    AudioBuffer *buffer;            // Pointer to internal data used by the audio system
 } AudioStream;
 
+// Sound source type
+typedef struct Sound {
+    unsigned int sampleCount;       // Total number of samples
+    AudioStream stream;             // Audio stream
+} Sound;
+
+// Music stream type (audio file streaming from memory)
+// NOTE: Anything longer than ~10 seconds should be streamed
+typedef struct MusicStream {
+    int ctxType;                    // Type of music context (audio filetype)
+    void *ctxData;                  // Audio context data, depends on type
+    
+    unsigned int sampleCount;       // Total number of samples
+    unsigned int sampleLeft;        // Number of samples left to end
+    unsigned int loopCount;         // Loops count (times music will play), 0 means infinite loop
+
+    AudioStream stream;             // Audio stream
+} MusicStream, *Music;
+
 // Head-Mounted-Display device parameters
 typedef struct VrDeviceInfo {
     int hResolution;                // HMD horizontal resolution in pixels

Some files were not shown because too many files changed in this diff