Remove SDL_sound dependency
This commit is contained in:
parent
bf1602e49f
commit
fa912b616b
|
@ -380,7 +380,6 @@ endif()
|
||||||
|
|
||||||
link_directories(
|
link_directories(
|
||||||
../libsigc++-2.10.3/sigc++/.libs
|
../libsigc++-2.10.3/sigc++/.libs
|
||||||
../SDL_sound/.libs
|
|
||||||
../pixman-0.40.0/pixman/.libs
|
../pixman-0.40.0/pixman/.libs
|
||||||
../physfs-3.0.2
|
../physfs-3.0.2
|
||||||
../ruby
|
../ruby
|
||||||
|
@ -388,6 +387,7 @@ link_directories(
|
||||||
../mruby/build/x86_64-pc-linux-gnu/lib
|
../mruby/build/x86_64-pc-linux-gnu/lib
|
||||||
libs
|
libs
|
||||||
|
|
||||||
|
#../SDL_sound/.libs
|
||||||
${SDL2_LIBRARY_DIRS}
|
${SDL2_LIBRARY_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -406,11 +406,12 @@ target_include_directories(${PROJECT_NAME} PRIVATE
|
||||||
src
|
src
|
||||||
windows
|
windows
|
||||||
../libsigc++-2.10.3
|
../libsigc++-2.10.3
|
||||||
../SDL_sound
|
|
||||||
../pixman-0.40.0/pixman
|
../pixman-0.40.0/pixman
|
||||||
../physfs-3.0.2/src
|
../physfs-3.0.2/src
|
||||||
../mruby/include
|
../mruby/include
|
||||||
#..
|
|
||||||
|
|
||||||
|
#../SDL_sound
|
||||||
|
|
||||||
${SDL2_INCLUDE_DIRS}
|
${SDL2_INCLUDE_DIRS}
|
||||||
#${VORBISFILE_INCLUDE_DIRS}
|
#${VORBISFILE_INCLUDE_DIRS}
|
||||||
|
@ -421,11 +422,12 @@ target_include_directories(${PROJECT_NAME} PRIVATE
|
||||||
target_link_libraries(${PROJECT_NAME}
|
target_link_libraries(${PROJECT_NAME}
|
||||||
#ruby-static.a
|
#ruby-static.a
|
||||||
|
|
||||||
sigc-2.0.a physfs.a SDL_sound.a pixman-1.a
|
sigc-2.0.a physfs.a pixman-1.a
|
||||||
#sigc-2.0.x86.a physfs.x86.a SDL_sound.x86.a pixman-1.x86.a
|
#sigc-2.0.x86.a physfs.x86.a SDL_sound.x86.a pixman-1.x86.a
|
||||||
|
|
||||||
mruby.a
|
mruby.a
|
||||||
|
|
||||||
|
#SDL_sound.a
|
||||||
#ruby-static.x86.a
|
#ruby-static.x86.a
|
||||||
#crypt
|
#crypt
|
||||||
#dl
|
#dl
|
||||||
|
|
|
@ -40,6 +40,11 @@ struct ALDataSource
|
||||||
* to provided AL buffer */
|
* to provided AL buffer */
|
||||||
virtual Status fillBuffer(AL::Buffer::ID alBuffer) = 0;
|
virtual Status fillBuffer(AL::Buffer::ID alBuffer) = 0;
|
||||||
|
|
||||||
|
/* Read everything into the provided buffer */
|
||||||
|
virtual int fillBufferFull(AL::Buffer::ID alBuffer) {
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
virtual int sampleRate() = 0;
|
virtual int sampleRate() = 0;
|
||||||
|
|
||||||
/* If the source doesn't support seeking, it will
|
/* If the source doesn't support seeking, it will
|
||||||
|
@ -53,10 +58,12 @@ struct ALDataSource
|
||||||
virtual bool setPitch(float value) = 0;
|
virtual bool setPitch(float value) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef __EMSCRIPTEN__
|
||||||
ALDataSource *createSDLSource(SDL_RWops &ops,
|
ALDataSource *createSDLSource(SDL_RWops &ops,
|
||||||
const char *extension,
|
const char *extension,
|
||||||
uint32_t maxBufSize,
|
uint32_t maxBufSize,
|
||||||
bool looped);
|
bool looped);
|
||||||
|
#endif
|
||||||
|
|
||||||
ALDataSource *createVorbisSource(SDL_RWops &ops,
|
ALDataSource *createVorbisSource(SDL_RWops &ops,
|
||||||
bool looped);
|
bool looped);
|
||||||
|
|
|
@ -244,7 +244,9 @@ struct ALStreamOpenHandler : FileSystem::OpenHandler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef __EMSCRIPTEN__
|
||||||
source = createSDLSource(*srcOps, ext, STREAM_BUF_SIZE, looped);
|
source = createSDLSource(*srcOps, ext, STREAM_BUF_SIZE, looped);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
catch (const Exception &e)
|
catch (const Exception &e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,8 +31,6 @@
|
||||||
|
|
||||||
#include <physfs.h>
|
#include <physfs.h>
|
||||||
|
|
||||||
#include <SDL_sound.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
|
@ -24,7 +24,10 @@
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
#include <SDL_image.h>
|
#include <SDL_image.h>
|
||||||
#include <SDL_ttf.h>
|
#include <SDL_ttf.h>
|
||||||
|
|
||||||
|
#ifndef __EMSCRIPTEN__
|
||||||
#include <SDL_sound.h>
|
#include <SDL_sound.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -272,6 +275,7 @@ int main(int argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef __EMSCRIPTEN__
|
||||||
if (Sound_Init() == 0)
|
if (Sound_Init() == 0)
|
||||||
{
|
{
|
||||||
showInitError(std::string("Error initializing SDL_sound: ") + Sound_GetError());
|
showInitError(std::string("Error initializing SDL_sound: ") + Sound_GetError());
|
||||||
|
@ -281,6 +285,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
SDL_Window *win;
|
SDL_Window *win;
|
||||||
Uint32 winFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_INPUT_FOCUS;
|
Uint32 winFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_INPUT_FOCUS;
|
||||||
|
@ -385,7 +390,10 @@ int main(int argc, char *argv[])
|
||||||
alcCloseDevice(alcDev);
|
alcCloseDevice(alcDev);
|
||||||
SDL_DestroyWindow(win);
|
SDL_DestroyWindow(win);
|
||||||
|
|
||||||
|
#ifndef __EMSCRIPTEN__
|
||||||
Sound_Quit();
|
Sound_Quit();
|
||||||
|
#endif
|
||||||
|
|
||||||
TTF_Quit();
|
TTF_Quit();
|
||||||
IMG_Quit();
|
IMG_Quit();
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
#include "aldatasource.h"
|
#include "aldatasource.h"
|
||||||
#include "exception.h"
|
#include "exception.h"
|
||||||
|
|
||||||
|
#ifndef __EMSCRIPTEN__
|
||||||
|
|
||||||
#include <SDL_sound.h>
|
#include <SDL_sound.h>
|
||||||
|
|
||||||
struct SDLSoundSource : ALDataSource
|
struct SDLSoundSource : ALDataSource
|
||||||
|
@ -129,3 +131,5 @@ ALDataSource *createSDLSource(SDL_RWops &ops,
|
||||||
{
|
{
|
||||||
return new SDLSoundSource(ops, extension, maxBufSize, looped);
|
return new SDLSoundSource(ops, extension, maxBufSize, looped);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -28,10 +28,11 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "debugwriter.h"
|
#include "debugwriter.h"
|
||||||
|
|
||||||
|
#ifndef __EMSCRIPTEN__
|
||||||
#include <SDL_sound.h>
|
#include <SDL_sound.h>
|
||||||
|
#else
|
||||||
#ifdef __EMSCRIPTEN__
|
|
||||||
#include "emscripten.hpp"
|
#include "emscripten.hpp"
|
||||||
|
#include "aldatasource.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SE_CACHE_MEM (10*1024*1024) // 10 MB
|
#define SE_CACHE_MEM (10*1024*1024) // 10 MB
|
||||||
|
@ -198,6 +199,11 @@ struct SoundOpenHandler : FileSystem::OpenHandler
|
||||||
|
|
||||||
bool tryRead(SDL_RWops &ops, const char *ext, const char *fullPath)
|
bool tryRead(SDL_RWops &ops, const char *ext, const char *fullPath)
|
||||||
{
|
{
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
|
ALDataSource *source = createVorbisSource(ops, false);
|
||||||
|
buffer = new SoundBuffer;
|
||||||
|
buffer->bytes = source->fillBufferFull(buffer->alBuffer);
|
||||||
|
#else
|
||||||
Sound_Sample *sample = Sound_NewSample(&ops, ext, 0, STREAM_BUF_SIZE);
|
Sound_Sample *sample = Sound_NewSample(&ops, ext, 0, STREAM_BUF_SIZE);
|
||||||
|
|
||||||
if (!sample)
|
if (!sample)
|
||||||
|
@ -221,7 +227,7 @@ struct SoundOpenHandler : FileSystem::OpenHandler
|
||||||
buffer->bytes, sample->actual.rate);
|
buffer->bytes, sample->actual.rate);
|
||||||
|
|
||||||
Sound_FreeSample(sample);
|
Sound_FreeSample(sample);
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -253,8 +259,13 @@ SoundBuffer *SoundEmitter::allocateBuffer(const std::string &filename)
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
char buf[512];
|
char buf[512];
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
|
snprintf(buf, sizeof(buf), "Unable to decode with vorbisfile: %s",
|
||||||
|
filename.c_str());
|
||||||
|
#else
|
||||||
snprintf(buf, sizeof(buf), "Unable to decode sound: %s: %s",
|
snprintf(buf, sizeof(buf), "Unable to decode sound: %s: %s",
|
||||||
filename.c_str(), Sound_GetError());
|
filename.c_str(), Sound_GetError());
|
||||||
|
#endif
|
||||||
Debug() << buf;
|
Debug() << buf;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -78,6 +78,9 @@ struct VorbisSource : ALDataSource
|
||||||
|
|
||||||
std::vector<int16_t> sampleBuf;
|
std::vector<int16_t> sampleBuf;
|
||||||
|
|
||||||
|
int bufUsed = 0;
|
||||||
|
bool readFull = false;
|
||||||
|
|
||||||
VorbisSource(SDL_RWops &ops,
|
VorbisSource(SDL_RWops &ops,
|
||||||
bool looped)
|
bool looped)
|
||||||
: src(ops),
|
: src(ops),
|
||||||
|
@ -178,7 +181,7 @@ struct VorbisSource : ALDataSource
|
||||||
{
|
{
|
||||||
void *bufPtr = sampleBuf.data();
|
void *bufPtr = sampleBuf.data();
|
||||||
int availBuf = sampleBuf.size();
|
int availBuf = sampleBuf.size();
|
||||||
int bufUsed = 0;
|
bufUsed = 0;
|
||||||
|
|
||||||
int canRead = availBuf;
|
int canRead = availBuf;
|
||||||
|
|
||||||
|
@ -259,6 +262,12 @@ struct VorbisSource : ALDataSource
|
||||||
}
|
}
|
||||||
|
|
||||||
canRead -= res;
|
canRead -= res;
|
||||||
|
|
||||||
|
/* Double size if we want to read everything */
|
||||||
|
if (readFull && !(canRead > 16)) {
|
||||||
|
canRead += sampleBuf.size();
|
||||||
|
sampleBuf.resize(sampleBuf.size() * 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retStatus != ALDataSource::Error)
|
if (retStatus != ALDataSource::Error)
|
||||||
|
@ -268,6 +277,13 @@ struct VorbisSource : ALDataSource
|
||||||
return retStatus;
|
return retStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int fillBufferFull(AL::Buffer::ID alBuffer) {
|
||||||
|
readFull = true;
|
||||||
|
fillBuffer(alBuffer);
|
||||||
|
readFull = false;
|
||||||
|
return bufUsed*sizeof(int16_t);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t loopStartFrames()
|
uint32_t loopStartFrames()
|
||||||
{
|
{
|
||||||
if (loop.valid)
|
if (loop.valid)
|
||||||
|
|
Loading…
Reference in New Issue