Merge branch 'master' of ssh://git.axiodl.com:6431/AxioDL/amuse

This commit is contained in:
Jack Andersen 2018-10-06 16:55:07 -10:00
commit 4c7971f53a
9 changed files with 144 additions and 0 deletions

View File

@ -82,6 +82,9 @@ set(HEADERS
include/amuse/DSPCodec.hpp include/amuse/DSPCodec.hpp
include/amuse/N64MusyXCodec.hpp include/amuse/N64MusyXCodec.hpp
include/amuse/VolumeTable.hpp) include/amuse/VolumeTable.hpp)
if(NX)
list(APPEND HEADERS include/switch_math.hpp)
endif()
unset(EXTRAS) unset(EXTRAS)
if(TARGET boo) if(TARGET boo)

View File

@ -41,6 +41,51 @@ other audio applications to route their MIDI messages to. This enables
tracker, drum machine, and DAW applications to produce sampled audio tracker, drum machine, and DAW applications to produce sampled audio
using Amuse directly. using Amuse directly.
### Converter Usage
`amuseconv <in-path> <out-path> [gcn|n64|pc]`
**Note:** `amuseconv` currently only supports SNG-to-MIDI conversion and vice-versa. To batch-extract MIDIs from one of the game files listed below, run `amuseconv <data-file> <destination-dir>`
### Player Usage
`amuseplay <data-file> [<songs-file>]`
_or_
Drag-n-drop data file on amuseplay executable _(Windows and many freedesktop file managers support this)_
### Song Renderer Usage
`amuserender <data-file> [<songs-file>] [-r <sample-rate-out>] [-v <volume 0.0-1.0>]`
_or_
Drag-n-drop data file on amuseplay executable _(Windows and many freedesktop file managers support this)_
**Note:** .wav file will be emitted at `<group-name>-<song-name>.wav`. If `-r` option is not specified, rate will default to 32KHz
### Currently Supported Game Containers
- _Indiana Jones and the Infernal Machine_ (N64) `N64 ROM file`
- _Metroid Prime_ (GCN) `AudioGrp.pak` `MidiData.pak`
- _Pass `AudioGrp.pak MidiData.pak` for listening to SongGroup 53 (sequenced ship sounds)_
- _Pass `AudioGrp.pak` for listening to any SFXGroup_
- _Metroid Prime 2: Echoes_ (GCN) `AudioGrp.pak`
- _Paper Mario: The Thousand Year Door_ (GCN) `pmario.proj` `pmario.slib`
- _Pass `pmario.proj pmario.slib` for listening to SongGroups (sequenced SFX events)_
- _Pass `pmario.proj` for listening to any SFXGroup_
- _Star Fox Adventures_ (GCN) `starfoxm.pro` `starfoxs.pro` `midi.wad`
- _Pass `starfoxm.pro midi.wad` for listening to SongGroup 0 songs only (music)_
- _Pass `starfoxs.pro midi.wad` for listening to other SongGroups (sequenced ambience)_
- _Pass `starfoxs.pro` for listening to any SFXGroup_
- _Star Wars Episode I: Battle for Naboo_ (N64) `N64 ROM file`
- _Star Wars: Rogue Squadron_ (N64) `N64 ROM file` (PC) `data.dat`
- _Star Wars Rogue Squadron II: Rogue Leader_ (GCN) `data.dat`
- _Star Wars Rogue Squadron III: Rebel Strike_ (GCN) `data.dat`
- Any other game with raw `.proj` `.pool` `.sdir` `.samp` files
- _Pass any one of them to Amuse, all in the same directory_
### Windows 7 Compatibility
Installing the MSVC++ 2015 runtime may be required if you haven't already installed/updated it:
https://www.microsoft.com/en-us/download/details.aspx?id=48145
#### Library #### Library
The Amuse API exposes full interactivity between a client application The Amuse API exposes full interactivity between a client application

View File

@ -25,6 +25,12 @@
#include <Windows.h> #include <Windows.h>
#endif #endif
#if __SWITCH__
#undef _S
#include "switch_math.hpp"
#endif
#undef min #undef min
#undef max #undef max

View File

@ -2,6 +2,7 @@
#define _DSPCODEC_h #define _DSPCODEC_h
#include <cstdint> #include <cstdint>
#include <cfloat>
static inline int16_t DSPSampClamp(int32_t val) static inline int16_t DSPSampClamp(int32_t val)
{ {

22
include/switch_math.hpp Normal file
View File

@ -0,0 +1,22 @@
#ifndef SWITCH_MATH_HPP
#define SWITCH_MATH_HPP
/* Properly forward math defines to std:: */
#ifdef __SWITCH__
#include <cmath>
#include <cfloat>
#undef exp2
#undef log2
#undef fabs
namespace std
{
using ::exp2;
using ::log2;
using ::fabs;
}
#endif
#endif //TEST_SWITCH_MATH_HPP

View File

@ -612,6 +612,8 @@ static void SetAudioFileTime(const SystemString& path, const Sstat& stat)
#else #else
#if __APPLE__ #if __APPLE__
struct timespec times[] = { stat.st_atimespec, stat.st_mtimespec }; struct timespec times[] = { stat.st_atimespec, stat.st_mtimespec };
#elif __SWITCH__
struct timespec times[] = { stat.st_atime, stat.st_mtime };
#else #else
struct timespec times[] = { stat.st_atim, stat.st_mtim }; struct timespec times[] = { stat.st_atim, stat.st_mtim };
#endif #endif

View File

@ -32,6 +32,8 @@ bool Copy(const SystemChar* from, const SystemChar* to)
return true; return true;
#if __APPLE__ #if __APPLE__
struct timespec times[] = { theStat.st_atimespec, theStat.st_mtimespec }; struct timespec times[] = { theStat.st_atimespec, theStat.st_mtimespec };
#elif __SWITCH__
struct timespec times[] = { theStat.st_atime, theStat.st_mtime };
#else #else
struct timespec times[] = { theStat.st_atim, theStat.st_mtim }; struct timespec times[] = { theStat.st_atim, theStat.st_mtim };
#endif #endif

View File

@ -9,6 +9,64 @@
#include <zlib.h> #include <zlib.h>
#include <lzo/lzo1x.h> #include <lzo/lzo1x.h>
#if __SWITCH__
/*-
* Copyright (c) 2005 Pascal Gloor <pascal.gloor@spale.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
static void *
memmem(const void *l, size_t l_len, const void *s, size_t s_len)
{
char *cur, *last;
const char *cl = (const char *)l;
const char *cs = (const char *)s;
/* we need something to compare */
if (l_len == 0 || s_len == 0)
return NULL;
/* "s" must be smaller or equal to "l" */
if (l_len < s_len)
return NULL;
/* special case where s_len == 1 */
if (s_len == 1)
return memchr(l, (int)*cs, l_len);
/* the last position where its possible to find "s" in "l" */
last = (char *)cl + l_len - s_len;
for (cur = (char *)cl; cur <= last; cur++)
if (cur[0] == cs[0] && memcmp(cur, cs, s_len) == 0)
return cur;
return NULL;
}
#endif
#if _WIN32 #if _WIN32
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>

View File

@ -1,5 +1,10 @@
#include "amuse/DSPCodec.hpp" #include "amuse/DSPCodec.hpp"
#include <algorithm> #include <algorithm>
#include <memory.h>
#if __SWITCH__
#include "switch_math.hpp"
#endif
#undef min #undef min
#undef max #undef max