IOS: Brings support for FluidSynth
This commit is contained in:
parent
8d9b13059b
commit
c99456ecff
6 changed files with 109 additions and 25 deletions
|
@ -31,6 +31,11 @@
|
||||||
#include "audio/musicplugin.h"
|
#include "audio/musicplugin.h"
|
||||||
#include "audio/mpu401.h"
|
#include "audio/mpu401.h"
|
||||||
#include "audio/softsynth/emumidi.h"
|
#include "audio/softsynth/emumidi.h"
|
||||||
|
#ifdef IPHONE_OFFICIAL
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/syslimits.h>
|
||||||
|
#include "backends/platform/ios7/ios7_common.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <fluidsynth.h>
|
#include <fluidsynth.h>
|
||||||
|
|
||||||
|
@ -179,7 +184,16 @@ int MidiDriver_FluidSynth::open() {
|
||||||
|
|
||||||
const char *soundfont = ConfMan.get("soundfont").c_str();
|
const char *soundfont = ConfMan.get("soundfont").c_str();
|
||||||
|
|
||||||
|
#ifdef IPHONE_OFFICIAL
|
||||||
|
char *soundfont_fullpath[PATH_MAX];
|
||||||
|
const char *document_path = iOS7_getDocumentsDir();
|
||||||
|
strcpy((char *) soundfont_fullpath, document_path);
|
||||||
|
strcat((char *) soundfont_fullpath, soundfont);
|
||||||
|
_soundFont = fluid_synth_sfload(_synth, (const char *) soundfont_fullpath, 1);
|
||||||
|
#else
|
||||||
_soundFont = fluid_synth_sfload(_synth, soundfont, 1);
|
_soundFont = fluid_synth_sfload(_synth, soundfont, 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (_soundFont == -1)
|
if (_soundFont == -1)
|
||||||
error("Failed loading custom sound font '%s'", soundfont);
|
error("Failed loading custom sound font '%s'", soundfont);
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
@ -80,7 +81,7 @@ OSystem_iOS7::OSystem_iOS7() :
|
||||||
_screenOrientation(kScreenOrientationFlippedLandscape), _mouseClickAndDragEnabled(false),
|
_screenOrientation(kScreenOrientationFlippedLandscape), _mouseClickAndDragEnabled(false),
|
||||||
_gestureStartX(-1), _gestureStartY(-1), _fullScreenIsDirty(false), _fullScreenOverlayIsDirty(false),
|
_gestureStartX(-1), _gestureStartY(-1), _fullScreenIsDirty(false), _fullScreenOverlayIsDirty(false),
|
||||||
_mouseDirty(false), _timeSuspended(0), _lastDragPosX(-1), _lastDragPosY(-1), _screenChangeCount(0),
|
_mouseDirty(false), _timeSuspended(0), _lastDragPosX(-1), _lastDragPosY(-1), _screenChangeCount(0),
|
||||||
_mouseCursorPaletteEnabled(false), _gfxTransactionError(kTransactionSuccess) {
|
_lastErrorMessage(NULL), _mouseCursorPaletteEnabled(false), _gfxTransactionError(kTransactionSuccess) {
|
||||||
_queuedInputEvent.type = Common::EVENT_INVALID;
|
_queuedInputEvent.type = Common::EVENT_INVALID;
|
||||||
_touchpadModeEnabled = !iOS7_isBigDevice();
|
_touchpadModeEnabled = !iOS7_isBigDevice();
|
||||||
#ifdef IPHONE_OFFICIAL
|
#ifdef IPHONE_OFFICIAL
|
||||||
|
@ -275,8 +276,9 @@ Audio::Mixer *OSystem_iOS7::getMixer() {
|
||||||
return _mixer;
|
return _mixer;
|
||||||
}
|
}
|
||||||
|
|
||||||
OSystem *OSystem_iOS7_create() {
|
OSystem_iOS7 *OSystem_iOS7::sharedInstance() {
|
||||||
return new OSystem_iOS7();
|
static OSystem_iOS7 *instance = new OSystem_iOS7();
|
||||||
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
Common::String OSystem_iOS7::getDefaultConfigFileName() {
|
Common::String OSystem_iOS7::getDefaultConfigFileName() {
|
||||||
|
@ -318,6 +320,11 @@ void OSystem_iOS7::logMessage(LogMessageType::Type type, const char *message) {
|
||||||
else
|
else
|
||||||
output = stderr;
|
output = stderr;
|
||||||
|
|
||||||
|
if (type == LogMessageType::kError) {
|
||||||
|
free(_lastErrorMessage);
|
||||||
|
_lastErrorMessage = strdup(message);
|
||||||
|
}
|
||||||
|
|
||||||
fputs(message, output);
|
fputs(message, output);
|
||||||
fflush(output);
|
fflush(output);
|
||||||
}
|
}
|
||||||
|
@ -353,7 +360,7 @@ void iOS7_main(int argc, char **argv) {
|
||||||
chdir("/var/mobile/");
|
chdir("/var/mobile/");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
g_system = OSystem_iOS7_create();
|
g_system = OSystem_iOS7::sharedInstance();
|
||||||
assert(g_system);
|
assert(g_system);
|
||||||
|
|
||||||
// Invoke the actual ScummVM main entry point:
|
// Invoke the actual ScummVM main entry point:
|
||||||
|
|
|
@ -109,11 +109,15 @@ protected:
|
||||||
bool _fullScreenOverlayIsDirty;
|
bool _fullScreenOverlayIsDirty;
|
||||||
int _screenChangeCount;
|
int _screenChangeCount;
|
||||||
|
|
||||||
|
char *_lastErrorMessage;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
OSystem_iOS7();
|
OSystem_iOS7();
|
||||||
virtual ~OSystem_iOS7();
|
virtual ~OSystem_iOS7();
|
||||||
|
|
||||||
|
static OSystem_iOS7 *sharedInstance();
|
||||||
|
|
||||||
virtual void initBackend();
|
virtual void initBackend();
|
||||||
|
|
||||||
virtual bool hasFeature(Feature f);
|
virtual bool hasFeature(Feature f);
|
||||||
|
@ -192,6 +196,7 @@ public:
|
||||||
virtual Common::String getDefaultConfigFileName();
|
virtual Common::String getDefaultConfigFileName();
|
||||||
|
|
||||||
virtual void logMessage(LogMessageType::Type type, const char *message);
|
virtual void logMessage(LogMessageType::Type type, const char *message);
|
||||||
|
virtual void fatalError() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initVideoContext();
|
void initVideoContext();
|
||||||
|
|
|
@ -29,6 +29,38 @@
|
||||||
#include "graphics/conversion.h"
|
#include "graphics/conversion.h"
|
||||||
#import "iOS7AppDelegate.h"
|
#import "iOS7AppDelegate.h"
|
||||||
|
|
||||||
|
@interface iOS7AlertHandler : NSObject<UIAlertViewDelegate>
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation iOS7AlertHandler
|
||||||
|
|
||||||
|
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
|
||||||
|
OSystem_iOS7::sharedInstance()->quit();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
static void displayAlert(void *ctx) {
|
||||||
|
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Fatal Error"
|
||||||
|
message:[NSString stringWithCString:(const char *)ctx encoding:NSUTF8StringEncoding]
|
||||||
|
delegate:[[iOS7AlertHandler alloc] init]
|
||||||
|
cancelButtonTitle:@"OK"
|
||||||
|
otherButtonTitles:nil];
|
||||||
|
[alert show];
|
||||||
|
[alert autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
void OSystem_iOS7::fatalError() {
|
||||||
|
if (_lastErrorMessage) {
|
||||||
|
dispatch_async_f(dispatch_get_main_queue(), _lastErrorMessage, displayAlert);
|
||||||
|
for(;;);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
OSystem::fatalError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void OSystem_iOS7::initVideoContext() {
|
void OSystem_iOS7::initVideoContext() {
|
||||||
_videoContext = [[iOS7AppDelegate iPhoneView] getVideoContext];
|
_videoContext = [[iOS7AppDelegate iPhoneView] getVideoContext];
|
||||||
}
|
}
|
||||||
|
|
|
@ -945,6 +945,7 @@ const Feature s_features[] = {
|
||||||
{ "theora", "USE_THEORADEC", "libtheora_static", true, "Theora decoding support" },
|
{ "theora", "USE_THEORADEC", "libtheora_static", true, "Theora decoding support" },
|
||||||
{ "freetype", "USE_FREETYPE2", "freetype", true, "FreeType support" },
|
{ "freetype", "USE_FREETYPE2", "freetype", true, "FreeType support" },
|
||||||
{ "jpeg", "USE_JPEG", "jpeg-static", true, "libjpeg support" },
|
{ "jpeg", "USE_JPEG", "jpeg-static", true, "libjpeg support" },
|
||||||
|
{"fluidsynth", "USE_FLUIDSYNTH", "libfluidsynth", true, "FluidSynth support" },
|
||||||
|
|
||||||
// Feature flags
|
// Feature flags
|
||||||
{ "bink", "USE_BINK", "", true, "Bink video support" },
|
{ "bink", "USE_BINK", "", true, "Bink video support" },
|
||||||
|
|
|
@ -401,6 +401,9 @@ void XcodeProvider::setupCopyFilesBuildPhase() {
|
||||||
#define DEF_SYSFRAMEWORK(framework) properties[framework".framework"] = FileProperty("wrapper.framework", framework".framework", "System/Library/Frameworks/" framework ".framework", "SDKROOT"); \
|
#define DEF_SYSFRAMEWORK(framework) properties[framework".framework"] = FileProperty("wrapper.framework", framework".framework", "System/Library/Frameworks/" framework ".framework", "SDKROOT"); \
|
||||||
ADD_SETTING_ORDER_NOVALUE(children, getHash(framework".framework"), framework".framework", fwOrder++);
|
ADD_SETTING_ORDER_NOVALUE(children, getHash(framework".framework"), framework".framework", fwOrder++);
|
||||||
|
|
||||||
|
#define DEF_SYSTBD(lib) properties[lib".tbd"] = FileProperty("sourcecode.text-based-dylib-definition", lib".tbd", "usr/lib/" lib ".tbd", "SDKROOT"); \
|
||||||
|
ADD_SETTING_ORDER_NOVALUE(children, getHash(lib".tbd"), lib".tbd", fwOrder++);
|
||||||
|
|
||||||
#define DEF_LOCALLIB_STATIC_PATH(path,lib,absolute) properties[lib".a"] = FileProperty("archive.ar", lib ".a", path, (absolute ? "\"<absolute>\"" : "\"<group>\"")); \
|
#define DEF_LOCALLIB_STATIC_PATH(path,lib,absolute) properties[lib".a"] = FileProperty("archive.ar", lib ".a", path, (absolute ? "\"<absolute>\"" : "\"<group>\"")); \
|
||||||
ADD_SETTING_ORDER_NOVALUE(children, getHash(lib".a"), lib".a", fwOrder++);
|
ADD_SETTING_ORDER_NOVALUE(children, getHash(lib".a"), lib".a", fwOrder++);
|
||||||
|
|
||||||
|
@ -432,6 +435,7 @@ void XcodeProvider::setupFrameworksBuildPhase(const BuildSetup &setup) {
|
||||||
DEF_SYSFRAMEWORK("Carbon");
|
DEF_SYSFRAMEWORK("Carbon");
|
||||||
DEF_SYSFRAMEWORK("Cocoa");
|
DEF_SYSFRAMEWORK("Cocoa");
|
||||||
DEF_SYSFRAMEWORK("CoreAudio");
|
DEF_SYSFRAMEWORK("CoreAudio");
|
||||||
|
DEF_SYSFRAMEWORK("CoreMIDI");
|
||||||
DEF_SYSFRAMEWORK("CoreGraphics");
|
DEF_SYSFRAMEWORK("CoreGraphics");
|
||||||
DEF_SYSFRAMEWORK("CoreFoundation");
|
DEF_SYSFRAMEWORK("CoreFoundation");
|
||||||
DEF_SYSFRAMEWORK("CoreMIDI");
|
DEF_SYSFRAMEWORK("CoreMIDI");
|
||||||
|
@ -441,6 +445,8 @@ void XcodeProvider::setupFrameworksBuildPhase(const BuildSetup &setup) {
|
||||||
DEF_SYSFRAMEWORK("QuartzCore");
|
DEF_SYSFRAMEWORK("QuartzCore");
|
||||||
DEF_SYSFRAMEWORK("QuickTime");
|
DEF_SYSFRAMEWORK("QuickTime");
|
||||||
DEF_SYSFRAMEWORK("UIKit");
|
DEF_SYSFRAMEWORK("UIKit");
|
||||||
|
DEF_SYSTBD("libiconv");
|
||||||
|
|
||||||
// Optionals:
|
// Optionals:
|
||||||
DEF_SYSFRAMEWORK("OpenGL");
|
DEF_SYSFRAMEWORK("OpenGL");
|
||||||
|
|
||||||
|
@ -467,6 +473,8 @@ void XcodeProvider::setupFrameworksBuildPhase(const BuildSetup &setup) {
|
||||||
DEF_LOCALLIB_STATIC_PATH(absoluteOutputDir + "/libpng.a", "libpng", true);
|
DEF_LOCALLIB_STATIC_PATH(absoluteOutputDir + "/libpng.a", "libpng", true);
|
||||||
DEF_LOCALLIB_STATIC_PATH(absoluteOutputDir + "/libvorbis.a", "libvorbis", true);
|
DEF_LOCALLIB_STATIC_PATH(absoluteOutputDir + "/libvorbis.a", "libvorbis", true);
|
||||||
DEF_LOCALLIB_STATIC_PATH(absoluteOutputDir + "/libmad.a", "libmad", true);
|
DEF_LOCALLIB_STATIC_PATH(absoluteOutputDir + "/libmad.a", "libmad", true);
|
||||||
|
DEF_LOCALLIB_STATIC_PATH(absoluteOutputDir + "/libfluidsynth.a", "libfluidsynth", true);
|
||||||
|
DEF_LOCALLIB_STATIC_PATH(absoluteOutputDir + "/libglib.a", "libglib", true);
|
||||||
|
|
||||||
frameworksGroup->properties["children"] = children;
|
frameworksGroup->properties["children"] = children;
|
||||||
_groups.add(frameworksGroup);
|
_groups.add(frameworksGroup);
|
||||||
|
@ -499,11 +507,28 @@ void XcodeProvider::setupFrameworksBuildPhase(const BuildSetup &setup) {
|
||||||
frameworks_iOS.push_back("QuartzCore.framework");
|
frameworks_iOS.push_back("QuartzCore.framework");
|
||||||
frameworks_iOS.push_back("OpenGLES.framework");
|
frameworks_iOS.push_back("OpenGLES.framework");
|
||||||
|
|
||||||
if (CONTAINS_DEFINE(setup.defines, "USE_FLAC")) frameworks_iOS.push_back("libFLACiOS.a");
|
if (CONTAINS_DEFINE(setup.defines, "USE_FLAC")) {
|
||||||
if (CONTAINS_DEFINE(setup.defines, "USE_FREETYPE2")) frameworks_iOS.push_back("libFreetype2.a");
|
frameworks_iOS.push_back("libFLACiOS.a");
|
||||||
if (CONTAINS_DEFINE(setup.defines, "USE_PNG")) frameworks_iOS.push_back("libpng.a");
|
}
|
||||||
if (CONTAINS_DEFINE(setup.defines, "USE_VORBIS")) { frameworks_iOS.push_back("libogg.a"); frameworks_iOS.push_back("libvorbis.a"); }
|
if (CONTAINS_DEFINE(setup.defines, "USE_FREETYPE2")) {
|
||||||
if (CONTAINS_DEFINE(setup.defines, "USE_MAD")) frameworks_iOS.push_back("libmad.a");
|
frameworks_iOS.push_back("libFreetype2.a");
|
||||||
|
}
|
||||||
|
if (CONTAINS_DEFINE(setup.defines, "USE_PNG")) {
|
||||||
|
frameworks_iOS.push_back("libpng.a");
|
||||||
|
}
|
||||||
|
if (CONTAINS_DEFINE(setup.defines, "USE_VORBIS")) {
|
||||||
|
frameworks_iOS.push_back("libogg.a");
|
||||||
|
frameworks_iOS.push_back("libvorbis.a");
|
||||||
|
}
|
||||||
|
if (CONTAINS_DEFINE(setup.defines, "USE_MAD")) {
|
||||||
|
frameworks_iOS.push_back("libmad.a");
|
||||||
|
}
|
||||||
|
if (CONTAINS_DEFINE(setup.defines, "USE_FLUIDSYNTH")) {
|
||||||
|
frameworks_iOS.push_back("libfluidsynth.a");
|
||||||
|
frameworks_iOS.push_back("libglib.a");
|
||||||
|
frameworks_iOS.push_back("CoreMIDI.framework");
|
||||||
|
frameworks_iOS.push_back("libiconv.tbd");
|
||||||
|
}
|
||||||
|
|
||||||
for (ValueList::iterator framework = frameworks_iOS.begin(); framework != frameworks_iOS.end(); framework++) {
|
for (ValueList::iterator framework = frameworks_iOS.begin(); framework != frameworks_iOS.end(); framework++) {
|
||||||
std::string id = "Frameworks_" + *framework + "_iphone";
|
std::string id = "Frameworks_" + *framework + "_iphone";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue