summaryrefslogtreecommitdiffhomepage
path: root/src/audio.h
diff options
context:
space:
mode:
authorvictorfisac <[email protected]>2017-03-06 09:47:08 +0100
committervictorfisac <[email protected]>2017-03-06 09:47:08 +0100
commitf9277f216372179560c560427beccdd2e5c5d094 (patch)
tree8d3858c978f2b36ea8912f25e3cbe6fa56952aff /src/audio.h
parentce56fcb1eda06385b88c1a906f0968d742ff8130 (diff)
parentc05701253e0a4eda211a0d7ced74ae29d6585917 (diff)
downloadraylib-f9277f216372179560c560427beccdd2e5c5d094.tar.gz
raylib-f9277f216372179560c560427beccdd2e5c5d094.zip
Merge remote-tracking branch 'refs/remotes/raysan5/master'
Diffstat (limited to 'src/audio.h')
-rw-r--r--src/audio.h121
1 files changed, 91 insertions, 30 deletions
diff --git a/src/audio.h b/src/audio.h
index ed156532..01ed9f72 100644
--- a/src/audio.h
+++ b/src/audio.h
@@ -2,13 +2,30 @@
*
* raylib.audio
*
-* Basic functions to manage Audio: InitAudioDevice, LoadAudioFiles, PlayAudioFiles
+* This module provides basic functionality to work with audio:
+* Manage audio device (init/close)
+* Load and Unload audio files (WAV, OGG, FLAC, XM, MOD)
+* Play/Stop/Pause/Resume loaded audio
+* Manage mixing channels
+* Manage raw audio context
*
-* Uses external lib:
-* OpenAL Soft - Audio device management lib (http://kcat.strangesoft.net/openal.html)
-* stb_vorbis - Ogg audio files loading (http://www.nothings.org/stb_vorbis/)
+* DEPENDENCIES:
+* OpenAL Soft - Audio device management (http://kcat.strangesoft.net/openal.html)
+* stb_vorbis - OGG audio files loading (http://www.nothings.org/stb_vorbis/)
+* jar_xm - XM module file loading
+* jar_mod - MOD audio file loading
+* dr_flac - FLAC audio file loading
*
-* Copyright (c) 2015 Ramon Santamaria (@raysan5)
+* Many thanks to Joshua Reisenauer (github: @kd7tck) for the following additions:
+* XM audio module support (jar_xm)
+* MOD audio module support (jar_mod)
+* Mixing channels support
+* Raw audio context support
+*
+*
+* LICENSE: zlib/libpng
+*
+* Copyright (c) 2014-2016 Ramon Santamaria (@raysan5)
*
* This software is provided "as-is", without any express or implied warranty. In no event
* will the authors be held liable for any damages arising from the use of this software.
@@ -41,24 +58,44 @@
//----------------------------------------------------------------------------------
#ifndef __cplusplus
// Boolean type
-typedef enum { false, true } bool;
+ #if !defined(_STDBOOL_H)
+ typedef enum { false, true } bool;
+ #define _STDBOOL_H
+ #endif
#endif
-// Sound source type
-typedef struct Sound {
- unsigned int source;
- unsigned int buffer;
-} Sound;
-
// 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 dataSize; // Data size in bytes
- unsigned int sampleRate;
- short bitsPerSample;
- short channels;
} Wave;
+// Sound source type
+typedef struct Sound {
+ unsigned int source; // OpenAL audio source id
+ unsigned int buffer; // OpenAL audio buffer id
+ int format; // OpenAL audio format specifier
+} Sound;
+
+// Music type (file streaming from memory)
+// NOTE: Anything longer than ~10 seconds should be streamed
+typedef struct MusicData *Music;
+
+// 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)
+
+ int format; // OpenAL audio format specifier
+ unsigned int source; // OpenAL audio source id
+ unsigned int buffers[2]; // OpenAL audio buffers (double buffering)
+} AudioStream;
+
#ifdef __cplusplus
extern "C" { // Prevents name mangling of functions
#endif
@@ -72,28 +109,52 @@ extern "C" { // Prevents name mangling of functions
// Module Functions Declaration
//----------------------------------------------------------------------------------
void InitAudioDevice(void); // Initialize audio device and context
-void CloseAudioDevice(void); // Close the audio device and context (and music stream)
+void CloseAudioDevice(void); // Close the audio device and context
+bool IsAudioDeviceReady(void); // Check if audio device has been initialized successfully
+void SetMasterVolume(float volume); // Set master volume (listener)
-Sound LoadSound(char *fileName); // Load sound to memory
-Sound LoadSoundFromWave(Wave wave); // Load sound to memory from wave data
-Sound LoadSoundFromRES(const char *rresName, int resId); // Load sound to memory from rRES file (raylib Resource)
+Wave LoadWave(const char *fileName); // Load wave data from file
+Wave LoadWaveEx(void *data, int sampleCount, int sampleRate, int sampleSize, int channels); // Load wave data from raw array data
+Sound LoadSound(const char *fileName); // Load sound from file
+Sound LoadSoundFromWave(Wave wave); // Load sound from wave data
+void UpdateSound(Sound sound, const void *data, int samplesCount); // Update sound buffer with new data
+void UnloadWave(Wave wave); // Unload wave data
void UnloadSound(Sound sound); // Unload sound
void PlaySound(Sound sound); // Play a sound
void PauseSound(Sound sound); // Pause a sound
+void ResumeSound(Sound sound); // Resume a paused sound
void StopSound(Sound sound); // Stop playing a sound
-bool SoundIsPlaying(Sound sound); // Check if a sound is currently playing
+bool IsSoundPlaying(Sound sound); // Check if a sound is currently playing
void SetSoundVolume(Sound sound, float volume); // Set volume for a sound (1.0 is max level)
void SetSoundPitch(Sound sound, float pitch); // Set pitch for a sound (1.0 is base level)
+void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels); // Convert wave data to desired format
+Wave WaveCopy(Wave wave); // Copy a wave to a new wave
+void WaveCrop(Wave *wave, int initSample, int finalSample); // Crop a wave to defined samples range
+float *GetWaveData(Wave wave); // Get samples data from wave as a floats array
+Music LoadMusicStream(const char *fileName); // Load music stream from file
+void UnloadMusicStream(Music music); // Unload music stream
+void PlayMusicStream(Music music); // Start music playing
+void UpdateMusicStream(Music music); // Updates buffers for music streaming
+void StopMusicStream(Music music); // Stop music playing
+void PauseMusicStream(Music music); // Pause music playing
+void ResumeMusicStream(Music music); // Resume playing paused music
+bool IsMusicPlaying(Music music); // Check if music is playing
+void SetMusicVolume(Music music, float volume); // Set volume for music (1.0 is max level)
+void SetMusicPitch(Music music, float pitch); // Set pitch for a music (1.0 is base level)
+void SetMusicLoopCount(Music music, float count); // Set music loop count (loop repeats)
+float GetMusicTimeLength(Music music); // Get music time length (in seconds)
+float GetMusicTimePlayed(Music music); // Get current music time played (in seconds)
-void PlayMusicStream(char *fileName); // Start music playing (open stream)
-void UpdateMusicStream(void); // Updates buffers for music streaming
-void StopMusicStream(void); // Stop music playing (close stream)
-void PauseMusicStream(void); // Pause music playing
-void ResumeMusicStream(void); // Resume playing paused music
-bool MusicIsPlaying(void); // Check if music is playing
-void SetMusicVolume(float volume); // Set volume for music (1.0 is max level)
-float GetMusicTimeLength(void); // Get current music time length (in seconds)
-float GetMusicTimePlayed(void); // Get current music time played (in seconds)
+AudioStream InitAudioStream(unsigned int sampleRate,
+ unsigned int sampleSize,
+ unsigned int channels); // Init audio stream (to stream raw audio pcm data)
+void UpdateAudioStream(AudioStream stream, void *data, int samplesCount); // Update audio stream buffers with data
+void CloseAudioStream(AudioStream stream); // Close audio stream and free memory
+bool IsAudioBufferProcessed(AudioStream stream); // Check if any audio stream buffers requires refill
+void PlayAudioStream(AudioStream stream); // Play audio stream
+void PauseAudioStream(AudioStream stream); // Pause audio stream
+void ResumeAudioStream(AudioStream stream); // Resume audio stream
+void StopAudioStream(AudioStream stream); // Stop audio stream
#ifdef __cplusplus
}