浏览代码

Force OpenAL backend on some platforms

OpenAL audio backend is being forced on HTML5 and OSX
Ray San 7 年之前
父节点
当前提交
61afd07bd7
共有 3 个文件被更改,包括 53 次插入22 次删除
  1. 24 3
      src/Makefile
  2. 17 12
      src/audio.c
  3. 12 7
      src/audio.h

+ 24 - 3
src/Makefile

@@ -47,12 +47,20 @@ API_VERSION = 1
 PLATFORM ?= PLATFORM_DESKTOP
 RAYLIB_PATH = ..
 
+# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
+RAYLIB_LIBTYPE ?= STATIC
+
 # Included raylib audio module on compilation
 # NOTE: Some programs like tools could not require audio support
 INCLUDE_AUDIO_MODULE ?= YES
 
-# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
-RAYLIB_LIBTYPE ?= STATIC
+# Force OpenAL Soft backend for audio
+FORCE_OPENAL_BACKEND ?= FALSE
+
+# OpenAL Soft audio backend forced on HTML5 and OSX (see below)
+ifeq ($(PLATFORM),PLATFORM_WEB)
+    FORCE_OPENAL_BACKEND = TRUE
+endif
 
 # Use cross-compiler for PLATFORM_RPI
 ifeq ($(PLATFORM),PLATFORM_RPI)
@@ -95,6 +103,13 @@ ifeq ($(PLATFORM),PLATFORM_RPI)
     endif
 endif
 
+# Force OpenAL Soft audio backend for OSX platform
+# NOTE 1: mini_al library does not support CoreAudio yet
+# NOTE 2: Required OpenAL libraries should be available on OSX
+ifeq ($(PLATFORM_OS),OSX)
+    FORCE_OPENAL_BACKEND = TRUE
+endif
+
 ifeq ($(PLATFORM),PLATFORM_WEB)
     # Emscripten required variables
     EMSDK_PATH = C:/emsdk
@@ -269,6 +284,10 @@ ifeq ($(RAYLIB_LIBTYPE),SHARED)
     CFLAGS += -fPIC -DBUILD_LIBTYPE_SHARED
 endif
 
+ifeq ($(FORCE_OPENAL_BACKEND),TRUE)
+    CFLAGS += -DFORCE_OPENAL_BACKEND
+endif
+
 # Define include paths for required headers
 # NOTE: Several external required libraries (stb and others)
 INCLUDE_PATHS = -I. -Iexternal -Iexternal/glfw/include
@@ -329,8 +348,10 @@ endif
 
 ifeq ($(INCLUDE_AUDIO_MODULE),YES)
     OBJS += audio.o
-    OBJS += mini_al.o
     OBJS += stb_vorbis.o
+ifeq ($(FORCE_OPENAL_BACKEND),FALSE)
+    OBJS += mini_al.o
+endif
 endif
 
 # Default target entry

+ 17 - 12
src/audio.c

@@ -16,6 +16,9 @@
 *       Define to use the module as standalone library (independently of raylib).
 *       Required types and functions are defined in the same module.
 *
+*   #define FORCE_OPENAL_BACKEND
+*       Force OpenAL Soft audio backend usage
+*
 *   #define SUPPORT_FILEFORMAT_WAV
 *   #define SUPPORT_FILEFORMAT_OGG
 *   #define SUPPORT_FILEFORMAT_XM
@@ -24,19 +27,24 @@
 *       Selected desired fileformats to be supported for loading. Some of those formats are 
 *       supported by default, to remove support, just comment unrequired #define in this module
 *
-*   LIMITATIONS:
+*   LIMITATIONS (only OpenAL Soft):
 *       Only up to two channels supported: MONO and STEREO (for additional channels, use AL_EXT_MCFORMATS)
 *       Only the following sample sizes supported: 8bit PCM, 16bit PCM, 32-bit float PCM (using AL_EXT_FLOAT32)
 *
 *   DEPENDENCIES:
-*       OpenAL Soft - Audio device management (http://kcat.strangesoft.net/openal.html)
+*       mini_al     - Audio device/context management (https://github.com/dr-soft/mini_al)
 *       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
 *
+*      *OpenAL Soft - Audio device management, still used on HTML5 and OSX platforms
+*
 *   CONTRIBUTORS:
-*       Joshua Reisenauer (github: @kd7tck):
+*       David Reid (github: @mackron) (Nov. 2017):
+*           - Complete port to mini_al library
+*
+*       Joshua Reisenauer (github: @kd7tck) (2015)
 *           - XM audio module support (jar_xm)
 *           - MOD audio module support (jar_mod)
 *           - Mixing channels support
@@ -45,7 +53,7 @@
 *
 *   LICENSE: zlib/libpng
 *
-*   Copyright (c) 2014-2017 Ramon Santamaria (@raysan5)
+*   Copyright (c) 2014-2018 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.
@@ -72,8 +80,8 @@
 #define SUPPORT_FILEFORMAT_MOD
 //-------------------------------------------------
 
-#ifndef USE_MINI_AL
-#define USE_MINI_AL 1           // Set to 1 to use mini_al; 0 to use OpenAL.
+#if !defined(FORCE_OPENAL_BACKEND)
+    #define USE_MINI_AL 1       // Set to 1 to use mini_al; 0 to use OpenAL.
 #endif
 
 #if defined(AUDIO_STANDALONE)
@@ -86,7 +94,7 @@
 
 #include "external/mini_al.h"   // Implemented in mini_al.c. Cannot implement this here because it conflicts with Win32 APIs such as CloseWindow(), etc.
 
-#if !defined(USE_MINI_AL) || USE_MINI_AL == 0
+#if !defined(USE_MINI_AL) || (USE_MINI_AL == 0)
     #if defined(__APPLE__)
         #include "OpenAL/al.h"          // OpenAL basic header
         #include "OpenAL/alc.h"         // OpenAL context header (like OpenGL, OpenAL requires a context to work)
@@ -480,11 +488,8 @@ void InitAudioDevice(void)
             
             alListenerf(AL_GAIN, 1.0f);
 
-            if (alIsExtensionPresent("AL_EXT_float32")) {
-                TraceLog(LOG_INFO, "AL_EXT_float32 supported");
-            } else {
-                TraceLog(LOG_INFO, "AL_EXT_float32 not supported");
-            }
+            if (alIsExtensionPresent("AL_EXT_float32")) TraceLog(LOG_INFO, "[EXTENSION] AL_EXT_float32 supported");
+            else TraceLog(LOG_INFO, "[EXTENSION] AL_EXT_float32 not supported");
         }
     }
 #endif

+ 12 - 7
src/audio.h

@@ -10,19 +10,24 @@
 *       - Manage mixing channels
 *       - Manage raw audio context
 *
-*   LIMITATIONS:
+*   LIMITATIONS (only OpenAL Soft):
 *       Only up to two channels supported: MONO and STEREO (for additional channels, use AL_EXT_MCFORMATS)
 *       Only the following sample sizes supported: 8bit PCM, 16bit PCM, 32-bit float PCM (using AL_EXT_FLOAT32)
 *
 *   DEPENDENCIES:
-*       OpenAL Soft - Audio device management (http://kcat.strangesoft.net/openal.html)
+*       mini_al     - Audio device/context management (https://github.com/dr-soft/mini_al)
 *       stb_vorbis  - OGG audio files loading (http://www.nothings.org/stb_vorbis/)
-*       jar_xm      - XM module file loading (#define SUPPORT_FILEFORMAT_XM)
-*       jar_mod     - MOD audio file loading (#define SUPPORT_FILEFORMAT_MOD)
-*       dr_flac     - FLAC audio file loading (#define SUPPORT_FILEFORMAT_FLAC)
+*       jar_xm      - XM module file loading
+*       jar_mod     - MOD audio file loading
+*       dr_flac     - FLAC audio file loading
+*
+*      *OpenAL Soft - Audio device management, still used on HTML5 and OSX platforms
 *
 *   CONTRIBUTORS:
-*       Joshua Reisenauer (github: @kd7tck):
+*       David Reid (github: @mackron) (Nov. 2017):
+*           - Complete port to mini_al library
+*
+*       Joshua Reisenauer (github: @kd7tck) (2015)
 *           - XM audio module support (jar_xm)
 *           - MOD audio module support (jar_mod)
 *           - Mixing channels support
@@ -31,7 +36,7 @@
 *
 *   LICENSE: zlib/libpng
 *
-*   Copyright (c) 2014-2017 Ramon Santamaria (@raysan5)
+*   Copyright (c) 2014-2018 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.