Fixed MIDI music in OpenTTD
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -8,4 +8,4 @@ project/src
|
|||||||
project/res/values*
|
project/res/values*
|
||||||
project/AndroidManifest.xml
|
project/AndroidManifest.xml
|
||||||
project/jni/Settings.mk
|
project/jni/Settings.mk
|
||||||
|
libapplication.so
|
||||||
|
|||||||
@@ -4,15 +4,15 @@
|
|||||||
# export PATH=$PATH:~/src/endless_space/android-ndk-r4b
|
# export PATH=$PATH:~/src/endless_space/android-ndk-r4b
|
||||||
# Set environment to CrystaX NDK with RTTI and exceptions instead of original NDK
|
# Set environment to CrystaX NDK with RTTI and exceptions instead of original NDK
|
||||||
# export PATH=$PATH:~/src/endless_space/android-ndk-r4-crystax/ndk-build
|
# export PATH=$PATH:~/src/endless_space/android-ndk-r4-crystax/ndk-build
|
||||||
NDKBUILD=ndk-build
|
NDKBUILDPATH=$PATH
|
||||||
if grep "AppUseCrystaXToolchain=y" AndroidAppSettings.cfg > /dev/null ; then
|
if grep "AppUseCrystaXToolchain=y" AndroidAppSettings.cfg > /dev/null ; then
|
||||||
NDKBUILD=`which ndk-build | sed 's@/[^/]*/ndk-build@/android-ndk-r4-crystax@'`/ndk-build
|
NDKBUILDPATH=`which ndk-build | sed 's@/[^/]*/ndk-build@/android-ndk-r4-crystax@'`:$PATH
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -e project/bin/lib ] || ln -s ../libs project/bin/lib
|
[ -e project/bin/lib ] || ln -s ../libs project/bin/lib
|
||||||
|
|
||||||
cd project && \
|
cd project && \
|
||||||
$NDKBUILD -j2 V=1 && \
|
env PATH=$NDKBUILDPATH ndk-build -j2 V=1 && \
|
||||||
cd bin && \
|
cd bin && \
|
||||||
rm -rf DemoActivity-debug-unaligned.apk && \
|
rm -rf DemoActivity-debug-unaligned.apk && \
|
||||||
cp DemoActivity.ap_ DemoActivity-debug-unaligned.apk && \
|
cp DemoActivity.ap_ DemoActivity-debug-unaligned.apk && \
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ AppName="OpenTTD"
|
|||||||
AppFullName=org.openttd.sdl
|
AppFullName=org.openttd.sdl
|
||||||
ScreenOrientation=h
|
ScreenOrientation=h
|
||||||
InhibitSuspend=n
|
InhibitSuspend=n
|
||||||
AppDataDownloadUrl="Data files size is 19 Mb|http://sites.google.com/site/andgamdev/openttd-1.0.4-data.zip?attredirects=0&d=1^OpenTTD fonts 4MB|http://sites.google.com/site/andgamdev/openttd-1.0.4-fonts-data.zip?attredirects=0&d=1^MIDI music support (18 Mb)|http://sourceforge.net/projects/libsdl-android/files/timidity.zip/download"
|
AppDataDownloadUrl="Data files - 20 Mb|http://sourceforge.net/projects/libsdl-android/files/OpenTTD/openttd-data-2.zip/download^Localization files and fonts (7 MB)|http://sourceforge.net/projects/libsdl-android/files/OpenTTD/openttd-lang-2.zip/download^MIDI music support (18 Mb)|http://sourceforge.net/projects/libsdl-android/files/timidity.zip/download"
|
||||||
SdlVideoResize=y
|
SdlVideoResize=y
|
||||||
SdlVideoResizeKeepAspect=n
|
SdlVideoResizeKeepAspect=n
|
||||||
NeedDepthBuffer=n
|
NeedDepthBuffer=n
|
||||||
@@ -29,5 +29,5 @@ AppCflags=''
|
|||||||
AppLdflags=''
|
AppLdflags=''
|
||||||
AppSubdirsBuild=''
|
AppSubdirsBuild=''
|
||||||
AppUseCrystaXToolchain=y
|
AppUseCrystaXToolchain=y
|
||||||
AppCmdline=''
|
AppCmdline='openttd'
|
||||||
ReadmeText='^You may press "Home" now - the data will be downloaded in background'
|
ReadmeText='^You may press "Home" now - the data will be downloaded in background'
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
diff -ru orig/openttd-1.0.4/src/network/core/os_abstraction.h openttd-1.0.4/src/network/core/os_abstraction.h
|
|
||||||
--- orig/openttd-1.0.4/src/network/core/os_abstraction.h 2010-05-18 17:49:59.000000000 -0400
|
|
||||||
+++ openttd-1.0.4/src/network/core/os_abstraction.h 2010-11-13 16:35:45.000000000 -0500
|
|
||||||
@@ -159,7 +159,7 @@
|
|
||||||
# include <net/if.h>
|
|
||||||
/* According to glibc/NEWS, <ifaddrs.h> appeared in glibc-2.3. */
|
|
||||||
# if !defined(__sgi__) && !defined(SUNOS) && !defined(__MORPHOS__) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__INNOTEK_LIBC__) \
|
|
||||||
- && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX)
|
|
||||||
+ && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX) && !defined(ANDROID)
|
|
||||||
/* If for any reason ifaddrs.h does not exist on your system, comment out
|
|
||||||
* the following two lines and an alternative way will be used to fetch
|
|
||||||
* the list of IPs from the system. */
|
|
||||||
diff -ru orig/openttd-1.0.4/src/os/unix/unix.cpp openttd-1.0.4/src/os/unix/unix.cpp
|
|
||||||
--- orig/openttd-1.0.4/src/os/unix/unix.cpp 2010-05-18 17:44:47.000000000 -0400
|
|
||||||
+++ openttd-1.0.4/src/os/unix/unix.cpp 2010-11-13 18:06:14.000000000 -0500
|
|
||||||
@@ -25,7 +25,7 @@
|
|
||||||
#ifdef __APPLE__
|
|
||||||
#include <sys/mount.h>
|
|
||||||
#elif (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) || defined(__GLIBC__)
|
|
||||||
- #define HAS_STATVFS
|
|
||||||
+// #define HAS_STATVFS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAS_STATVFS
|
|
||||||
@@ -239,6 +239,8 @@
|
|
||||||
void cocoaReleaseAutoreleasePool();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#include <SDL.h>
|
|
||||||
+extern "C" int CDECL main(int, char *[]);
|
|
||||||
int CDECL main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
@@ -1,3 +1,67 @@
|
|||||||
|
Index: src/sound/sdl_s.cpp
|
||||||
|
===================================================================
|
||||||
|
--- src/sound/sdl_s.cpp (revision 21200)
|
||||||
|
+++ src/sound/sdl_s.cpp (working copy)
|
||||||
|
@@ -20,9 +20,16 @@
|
||||||
|
|
||||||
|
static FSoundDriver_SDL iFSoundDriver_SDL;
|
||||||
|
|
||||||
|
+#ifdef ANDROID
|
||||||
|
+extern void Android_MidiMixMusic(Sint16 *stream, int len);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
static void CDECL fill_sound_buffer(void *userdata, Uint8 *stream, int len)
|
||||||
|
{
|
||||||
|
MxMixSamples(stream, len / 4);
|
||||||
|
+#ifdef ANDROID
|
||||||
|
+ Android_MidiMixMusic((Sint16 *)stream, len / 2);
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *SoundDriver_SDL::Start(const char * const *parm)
|
||||||
|
Index: src/music/libtimidity.cpp
|
||||||
|
===================================================================
|
||||||
|
--- src/music/libtimidity.cpp (revision 21200)
|
||||||
|
+++ src/music/libtimidity.cpp (working copy)
|
||||||
|
@@ -22,10 +22,13 @@
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <timidity.h>
|
||||||
|
+#include <SDL.h>
|
||||||
|
+
|
||||||
|
#if defined(PSP)
|
||||||
|
#include <pspaudiolib.h>
|
||||||
|
#endif /* PSP */
|
||||||
|
|
||||||
|
+
|
||||||
|
enum MidiState {
|
||||||
|
MIDI_STOPPED = 0,
|
||||||
|
MIDI_PLAYING = 1,
|
||||||
|
@@ -50,6 +53,24 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* PSP */
|
||||||
|
+#ifdef ANDROID
|
||||||
|
+#define MIN(X ,Y) ((X) < (Y) ? (X) : (Y))
|
||||||
|
+void Android_MidiMixMusic(Sint16 *stream, int len)
|
||||||
|
+{
|
||||||
|
+ if (_midi.status == MIDI_PLAYING) {
|
||||||
|
+ Sint16 buf[16384];
|
||||||
|
+ while( len > 0 )
|
||||||
|
+ {
|
||||||
|
+ int minlen = MIN(sizeof(buf), len);
|
||||||
|
+ mid_song_read_wave(_midi.song, stream, MIN(sizeof(buf), len*2));
|
||||||
|
+ for( Uint16 i = 0; i < minlen; i++ )
|
||||||
|
+ stream[i] += buf[i];
|
||||||
|
+ stream += minlen;
|
||||||
|
+ len -= minlen;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
static FMusicDriver_LibTimidity iFMusicDriver_LibTimidity;
|
||||||
|
|
||||||
Index: src/os/unix/unix.cpp
|
Index: src/os/unix/unix.cpp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- src/os/unix/unix.cpp (revision 21200)
|
--- src/os/unix/unix.cpp (revision 21200)
|
||||||
@@ -36,3 +100,27 @@ Index: src/network/core/os_abstraction.h
|
|||||||
/* If for any reason ifaddrs.h does not exist on your system, comment out
|
/* If for any reason ifaddrs.h does not exist on your system, comment out
|
||||||
* the following two lines and an alternative way will be used to fetch
|
* the following two lines and an alternative way will be used to fetch
|
||||||
* the list of IPs from the system. */
|
* the list of IPs from the system. */
|
||||||
|
Index: src/debug.cpp
|
||||||
|
===================================================================
|
||||||
|
--- src/debug.cpp (revision 21200)
|
||||||
|
+++ src/debug.cpp (working copy)
|
||||||
|
@@ -16,6 +16,9 @@
|
||||||
|
#include "string_func.h"
|
||||||
|
#include "fileio_func.h"
|
||||||
|
#include "settings_type.h"
|
||||||
|
+#ifdef ANDROID
|
||||||
|
+#include <android/log.h>
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
@@ -76,6 +79,9 @@
|
||||||
|
*/
|
||||||
|
static void debug_print(const char *dbg, const char *buf)
|
||||||
|
{
|
||||||
|
+#ifdef ANDROID
|
||||||
|
+ __android_log_print(ANDROID_LOG_INFO, "OpenTTD", "[%s] %s", dbg, buf);
|
||||||
|
+#endif
|
||||||
|
#if defined(ENABLE_NETWORK)
|
||||||
|
if (_debug_socket != INVALID_SOCKET) {
|
||||||
|
char buf2[1024 + 32];
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
scummvm
|
openttd
|
||||||
@@ -83,11 +83,12 @@ JAVA_EXPORT_NAME(DemoRenderer_nativeInit) ( JNIEnv* env, jobject thiz, jstring
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "libSDL", "Calling SDL_main(\"%s\")", str);
|
||||||
|
|
||||||
(*env)->ReleaseStringUTFChars(env, cmdline, jstr);
|
(*env)->ReleaseStringUTFChars(env, cmdline, jstr);
|
||||||
|
|
||||||
__android_log_print(ANDROID_LOG_INFO, "libSDL", "Calling SDL_main(\"%s\")", str);
|
for( i = 0; i < argc; i++ )
|
||||||
//for( i = 0; i < argc; i++ )
|
__android_log_print(ANDROID_LOG_INFO, "libSDL", "param %d = \"%s\"", i, argv[i]);
|
||||||
// __android_log_print(ANDROID_LOG_INFO, "libSDL", "param %d = \"%s\"", i, argv[i]);
|
|
||||||
|
|
||||||
main( argc, argv );
|
main( argc, argv );
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,6 @@ LOCAL_SHARED_LIBRARIES :=
|
|||||||
|
|
||||||
LOCAL_STATIC_LIBRARIES :=
|
LOCAL_STATIC_LIBRARIES :=
|
||||||
|
|
||||||
LOCAL_LDLIBS :=
|
LOCAL_LDLIBS := -llog
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
|||||||
@@ -548,6 +548,7 @@ void pre_resample(MidSong *song, MidSample *sp)
|
|||||||
sint32 incr, ofs, newlen, count;
|
sint32 incr, ofs, newlen, count;
|
||||||
sint16 *newdata, *dest, *src = (sint16 *) sp->data;
|
sint16 *newdata, *dest, *src = (sint16 *) sp->data;
|
||||||
sint16 v1, v2, v3, v4, *vptr;
|
sint16 v1, v2, v3, v4, *vptr;
|
||||||
|
/*
|
||||||
#ifdef DEBUG_CHATTER
|
#ifdef DEBUG_CHATTER
|
||||||
static const char note_name[12][3] =
|
static const char note_name[12][3] =
|
||||||
{
|
{
|
||||||
@@ -555,9 +556,11 @@ void pre_resample(MidSong *song, MidSample *sp)
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
DEBUG_MSG(" * pre-resampling for note %d (%s%d)\n",
|
DEBUG_MSG(" * pre-resampling for note %d (%s%d)\n",
|
||||||
sp->note_to_use,
|
sp->note_to_use,
|
||||||
note_name[sp->note_to_use % 12], (sp->note_to_use & 0x7F) / 12);
|
note_name[sp->note_to_use % 12], (sp->note_to_use & 0x7F) / 12);
|
||||||
|
*/
|
||||||
|
|
||||||
a = ((double) (sp->sample_rate) * freq_table[(int) (sp->note_to_use)]) /
|
a = ((double) (sp->sample_rate) * freq_table[(int) (sp->note_to_use)]) /
|
||||||
((double) (sp->root_freq) * song->rate);
|
((double) (sp->root_freq) * song->rate);
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <android/log.h>
|
||||||
|
|
||||||
#include "timidity.h"
|
#include "timidity.h"
|
||||||
#include "timidity_internal.h"
|
#include "timidity_internal.h"
|
||||||
@@ -90,7 +91,11 @@ static int read_config_file(char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!(fp=open_file(name)))
|
if (!(fp=open_file(name)))
|
||||||
|
{
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "libSDL", "libTimidity: read_config_file(%s) failure", name);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "libSDL", "libTimidity: read_config_file(%s) opened config success", name);
|
||||||
|
|
||||||
while (__fgets(tmp, sizeof(tmp), fp))
|
while (__fgets(tmp, sizeof(tmp), fp))
|
||||||
{
|
{
|
||||||
@@ -391,6 +396,9 @@ static int read_config_file(char *name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "libSDL", "libTimidity: read_config_file(%s) success", name);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,8 +430,7 @@ int mid_init(char *config_file)
|
|||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
add_to_pathlist("\\TIMIDITY");
|
add_to_pathlist("\\TIMIDITY");
|
||||||
#else
|
#else
|
||||||
add_to_pathlist("/usr/local/lib/timidity");
|
add_to_pathlist("timidity");
|
||||||
add_to_pathlist("/etc");
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mid_init_no_config();
|
mid_init_no_config();
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#ifndef TIMIDITY_INTERNAL_H
|
#ifndef TIMIDITY_INTERNAL_H
|
||||||
#define TIMIDITY_INTERNAL_H
|
#define TIMIDITY_INTERNAL_H
|
||||||
|
|
||||||
|
#include <android/log.h>
|
||||||
#include "timidity.h"
|
#include "timidity.h"
|
||||||
|
|
||||||
#if defined(__i386__) || defined(__ia64__) || defined(WIN32) || \
|
#if defined(__i386__) || defined(__ia64__) || defined(WIN32) || \
|
||||||
@@ -49,11 +50,8 @@
|
|||||||
#define SWAPLE32(x) XCHG_LONG(x)
|
#define SWAPLE32(x) XCHG_LONG(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG
|
//#define DEBUG_MSG(...) __android_log_print(ANDROID_LOG_INFO, "libSDL", __VA_ARGS__)
|
||||||
#define DEBUG_MSG(...) fprintf(stderr, __VA_ARGS__)
|
|
||||||
#else
|
|
||||||
#define DEBUG_MSG(...)
|
#define DEBUG_MSG(...)
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#define MID_VIBRATO_SAMPLE_INCREMENTS 32
|
#define MID_VIBRATO_SAMPLE_INCREMENTS 32
|
||||||
|
|||||||
Reference in New Issue
Block a user