Amuse est un séquenceur MIDI et SFX en temps réel, avec des effets de base, un son positionnel 3D et des capacités de sortie surround.
Le projet est conçu pour être compatible avec les groupes audio et les données de chansons trouvés dans les jeux PC/N64/GCN/GBA utilisant le moteur audio MusyX ; fournir une bibliothèque d'exécution alternative à utiliser pour séquencer les bibliothèques audio de ces jeux.
Télécharger
Un simple programme de ligne de commande pour charger et lire des AudioGroups à partir d'archives de jeu ou de fichiers bruts ( .proj
, .pool
, .sdir
, .samp
) est fourni.
[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%
Le programme de ligne de commande nécessite un environnement de fenêtrage et ouvrira une petite fenêtre 100x100 à côté de votre terminal/cmd. Cette fenêtre doit être au premier plan, car elle écoute l'intégralité des événements du clavier à travers elle.
Si un clavier MIDI est connecté et reconnu par votre système d'exploitation avant le lancement amuseplay
, vous pouvez contrôler directement le séquenceur à l'aide d'une entrée physique.
Sous OS X et Linux, amuseplay
annoncera un port MIDI-IN virtuel vers lequel d'autres applications audio pourront acheminer leurs messages MIDI. Cela permet aux applications de suivi, de boîte à rythmes et DAW de produire de l'audio échantillonné directement en utilisant Amuse.
amuseconv <in-path> <out-path> [gcn|n64|pc]
Remarque : amuseconv
ne prend actuellement en charge que la conversion SNG vers MIDI et vice-versa. Pour extraire par lots des fichiers MIDI de l'un des fichiers de jeu répertoriés ci-dessous, exécutez amuseconv <data-file> <destination-dir>
amuseplay <data-file> [<songs-file>]
— ou — Glissez-déposez le fichier de données sur l'exécutable amuseplay (Windows et de nombreux gestionnaires de fichiers freedesktop le prennent en charge)
amuserender <data-file> [<songs-file>] [-r <sample-rate-out>] [-v <volume 0.0-1.0>]
— ou — Glissez-déposez le fichier de données sur l'exécutable amuseplay (Windows et de nombreux gestionnaires de fichiers Freedesktop le prennent en charge)
Remarque : le fichier .wav sera émis à <group-name>-<song-name>.wav
. Si l'option -r
n'est pas spécifiée, le taux sera par défaut de 32 KHz
N64 ROM file
AudioGrp.pak
MidiData.pak
AudioGrp.pak MidiData.pak
pour écouter SongGroup 53 (sons de navire séquencés)AudioGrp.pak
pour écouter n’importe quel SFXGroupAudioGrp.pak
pmario.proj
pmario.slib
pmario.proj pmario.slib
pour écouter des SongGroups (événements SFX séquencés)pmario.proj
pour écouter n’importe quel SFXGroupstarfoxm.pro
starfoxs.pro
midi.wad
starfoxm.pro midi.wad
pour écouter uniquement les chansons de SongGroup 0 (musique)starfoxs.pro midi.wad
pour écouter d'autres SongGroups (ambiance séquencée)starfoxs.pro
pour écouter n’importe quel SFXGroupN64 ROM file
N64 ROM file
(PC) data.dat
data.dat
data.dat
.proj
.pool
.sdir
.samp
L'installation du runtime MSVC++ 2015 peut être nécessaire si vous ne l'avez pas déjà installé/mis à jour : https://www.microsoft.com/en-us/download/details.aspx?id=48145
L'API Amuse expose une interactivité complète entre une application client (moteur de jeu) et le moteur séquenceur. Contrairement à la nature pilotée par interruption des implémentations de console d'origine (où la puce audio « demande » plus d'audio selon les besoins), Amuse est entièrement synchrone. Cela signifie que le client doit périodiquement pomper le moteur audio (généralement une fois par image vidéo) pour alimenter le système audio du système d'exploitation.
Le client doit fournir l'implémentation pour l'allocation et le mixage des voix audio, car cela peut différer considérablement d'une cible à l'autre. amuse::IBackendVoiceAllocator
est l'interface purement virtuelle à implémenter pour cela. Alternativement, si Boo est présent dans l'arborescence du projet CMake, Amuse sera compilé avec un backend prenant en charge plusieurs API audio de bas niveau populaires. Windows, OS X et Linux bénéficient tous d'un excellent support de cette façon.
Voici un exemple d'utilisation :
# 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 ;
}