Amuse es un secuenciador MIDI y SFX en tiempo real, con efectos básicos, audio posicional 3D y capacidades de salida envolvente.
El proyecto está diseñado para ser compatible con grupos de audio y datos de canciones que se encuentran en juegos de PC/N64/GCN/GBA que utilizan el motor de audio MusyX ; proporcionando una biblioteca de tiempo de ejecución alternativa para secuenciar las bibliotecas de audio de estos juegos.
Descargar
Se proporciona un programa de línea de comandos simple para cargar y reproducir AudioGroups a partir de archivos de juegos o archivos sin formato ( .proj
, .pool
, .sdir
, .samp
).
[jacko@ghor ~ ]$ amuseplay test.proj
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░ ████ ████ ┃ ████ ████ ████ ┃ ████ ████ ░░░
░░░ ████ ████ ┃ ████ ████ ████ ┃ ████ ████ ░░░
░░░ ▌W▐█ ▌E▐█ ┃ ▌T▐█ ▌Y▐█ ▌U▐█ ┃ ▌O▐█ ▌P▐█ ░░░
░░░ │ │ ┃ │ │ │ ┃ │ │ ░░░
░░░ A │ S │ D ┃ F │ G │ H │ J ┃ K │ L │ ; ░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
< left/right > : cycle MIDI setup, < up/down > : volume, < space > : PANIC
< tab > : sustain pedal, < window-Y > : pitch wheel, < window-X > : mod wheel
< Z/X > : octave, < C/V > : velocity, < B/N > : channel, < ,/. > : program, < Q > : quit
0 Setup 0, Chan 0, Prog 0, Octave: 4, Vel: 64, VOL: 80%
El programa de línea de comandos requiere un entorno de ventanas y abrirá una pequeña ventana de 100x100 junto a su terminal/cmd. Esta ventana debe estar al frente, ya que escucha todos los eventos del teclado a través de ella.
Si un teclado MIDI está conectado y su sistema operativo lo reconoce antes de iniciar amuseplay
, puede controlar directamente el secuenciador mediante entrada física.
En OS X y Linux, amuseplay
anunciará un puerto MIDI-IN virtual para que otras aplicaciones de audio enruten sus mensajes MIDI. Esto permite que las aplicaciones de seguimiento, caja de ritmos y DAW produzcan audio muestreado usando Amuse directamente.
amuseconv <in-path> <out-path> [gcn|n64|pc]
Nota: amuseconv
actualmente solo admite la conversión de SNG a MIDI y viceversa. Para extraer MIDI por lotes de uno de los archivos del juego que se enumeran a continuación, ejecute amuseconv <data-file> <destination-dir>
amuseplay <data-file> [<songs-file>]
— o — Arrastre y suelte el archivo de datos en el ejecutable de amuseplay (Windows y muchos administradores de archivos de escritorio gratuitos lo admiten)
amuserender <data-file> [<songs-file>] [-r <sample-rate-out>] [-v <volume 0.0-1.0>]
— o — Arrastre y suelte el archivo de datos en el ejecutable de amuseplay (Windows y muchos administradores de archivos de escritorio gratuitos admiten esto)
Nota: el archivo .wav se emitirá en <group-name>-<song-name>.wav
. Si no se especifica la opción -r
, la velocidad será de 32 KHz de forma predeterminada
N64 ROM file
AudioGrp.pak
MidiData.pak
AudioGrp.pak MidiData.pak
para escuchar SongGroup 53 (sonidos de barco secuenciados)AudioGrp.pak
para escuchar cualquier SFXGroupAudioGrp.pak
pmario.proj
pmario.slib
pmario.proj pmario.slib
para escuchar SongGroups (eventos SFX secuenciados)pmario.proj
para escuchar cualquier SFXGroupstarfoxm.pro
starfoxs.pro
midi.wad
starfoxm.pro midi.wad
para escuchar solo canciones del SongGroup 0 (música)starfoxs.pro midi.wad
para escuchar otros grupos de canciones (ambiente secuenciado)starfoxs.pro
para escuchar cualquier SFXGroupN64 ROM file
N64 ROM file
(PC) data.dat
data.dat
data.dat
.proj
.pool
.sdir
.samp
Es posible que sea necesario instalar el tiempo de ejecución de MSVC++ 2015 si aún no lo ha instalado/actualizado: https://www.microsoft.com/en-us/download/details.aspx?id=48145
La API Amuse expone la interactividad total entre una aplicación cliente (motor de juego) y el motor secuenciador. A diferencia de la naturaleza impulsada por interrupciones de las implementaciones originales de la consola (donde el chip de audio 'solicita' más audio según sea necesario), Amuse es completamente sincrónico. Esto significa que el cliente debe bombear periódicamente el motor de audio (normalmente una vez por cuadro de vídeo) para mantener alimentado el sistema de audio del sistema operativo.
El cliente debe proporcionar la implementación para asignar y mezclar voces de audio, ya que esto puede diferir drásticamente de un objetivo a otro. amuse::IBackendVoiceAllocator
es la interfaz puramente virtual a implementar para esto. Alternativamente, si Boo está presente en el árbol del proyecto CMake, Amuse se compilará con un backend que admita múltiples API de audio de bajo nivel populares. Windows, OS X y Linux tienen un excelente soporte de esta manera.
A continuación se muestra un ejemplo de uso:
# include < amuse/amuse.hpp >
# include " MyVoiceAllocator.hpp "
# include " MyAudioGroupLoader.hpp "
int main ( int argc, char * argv[])
{
/* Up to the client to implement voice allocation and mixing */
std::unique_ptr<amuse::IBackendVoiceAllocator> voxAlloc = MakeMyVoiceAllocator ();
/* Application just needs one per audio output (not per channel) */
amuse::Engine snd (*voxAlloc);
/* An 'AudioGroup' is an atomically-loadable unit within Amuse.
* A client-assigned integer serves as the handle to the group once loaded
*/
amuse::IntrusiveAudioGroupData data = LoadMyAudioGroup ();
snd. addAudioGroup (data);
/* Starting a SoundMacro playing is accomplished like so: */
int sfxId = 0x1337 ;
float vol = 1 . 0f ;
float pan = 0 . 0f ;
std::shared_ptr<amuse::Voice> voice = snd. fxStart (sfxId, vol, pan);
/* Play for ~5 sec */
int passedFrames = 0 ;
while (passedFrames < 300 )
{
snd. pumpEngine ();
++passedFrames;
WaitForVSync ();
}
/* Stopping a SoundMacro is accomplished by sending a
* MIDI-style 'KeyOff' message for the voice
*/
voice-> keyOff ();
/* Play for 2 more seconds to allow the macro to gracefully fade-out */
passedFrames = 0 ;
while (passedFrames < 120 )
{
snd. pumpEngine ();
++passedFrames;
WaitForVSync ();
}
/* Clean up and exit */
return 0 ;
}