Amuse ist ein Echtzeit-MIDI- und SFX-Sequenzer mit grundlegenden Effekten, 3D-Positionsaudio und Surround-Ausgabefunktionen.
Das Projekt ist auf Kompatibilität mit Audiogruppen und Songdaten ausgelegt, die in PC/N64/GCN/GBA-Spielen mit der MusyX- Audio-Engine zu finden sind; Bereitstellung einer alternativen Laufzeitbibliothek zur Sequenzierung der Audiobibliotheken dieser Spiele.
Herunterladen
Es wird ein einfaches Befehlszeilenprogramm zum Laden und Abspielen von AudioGroups aus Spielarchiven oder Rohdateien ( .proj
, .pool
, .sdir
, .samp
) bereitgestellt.
[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%
Das Befehlszeilenprogramm erfordert eine Fensterumgebung und öffnet ein kleines 100x100-Fenster neben Ihrem Terminal/cmd. Dieses Fenster muss ganz vorne sein, da es alle Tastaturereignisse abhört.
Wenn ein MIDI-Keyboard angeschlossen ist und von Ihrem Betriebssystem erkannt wird, bevor amuseplay
gestartet wird, können Sie den Sequenzer direkt über physische Eingaben steuern.
Unter OS X und Linux bietet amuseplay
einen virtuellen MIDI-IN-Port an, an den andere Audioanwendungen ihre MIDI-Nachrichten weiterleiten können. Dies ermöglicht es Tracker-, Drum-Machine- und DAW-Anwendungen, gesampelte Audiodaten direkt mit Amuse zu produzieren.
amuseconv <in-path> <out-path> [gcn|n64|pc]
Hinweis: amuseconv
unterstützt derzeit nur die SNG-zu-MIDI-Konvertierung und umgekehrt. Um MIDIs stapelweise aus einer der unten aufgeführten Spieldateien zu extrahieren, führen Sie amuseconv <data-file> <destination-dir>
aus
amuseplay <data-file> [<songs-file>]
– oder – Datendatei per Drag-and-Drop in die ausführbare Amuseplay-Datei ziehen (Windows und viele Freedesktop-Dateimanager unterstützen dies)
amuserender <data-file> [<songs-file>] [-r <sample-rate-out>] [-v <volume 0.0-1.0>]
– oder – Ziehen Sie die Datendatei per Drag-and-Drop auf die ausführbare Amuseplay-Datei (Windows und viele Freedesktop-Dateimanager unterstützen dies)
Hinweis: Die .wav-Datei wird unter <group-name>-<song-name>.wav
ausgegeben. Wenn die Option -r
nicht angegeben ist, wird die Rate standardmäßig auf 32 kHz eingestellt
N64 ROM file
AudioGrp.pak
MidiData.pak
AudioGrp.pak MidiData.pak
zum Anhören von SongGroup 53 (sequenzierte Schiffsgeräusche)AudioGrp.pak
zum Anhören einer beliebigen SFXGroupAudioGrp.pak
pmario.proj
pmario.slib
pmario.proj pmario.slib
zum Anhören von SongGroups (sequenzierte SFX-Ereignisse).pmario.proj
zum Abhören einer beliebigen SFXGroupstarfoxm.pro
starfoxs.pro
midi.wad
starfoxm.pro midi.wad
um nur SongGroup 0-Songs (Musik) anzuhören.starfoxs.pro midi.wad
weiter, um andere SongGroups anzuhören (sequenzierte Atmosphäre).starfoxs.pro
weiter, um eine beliebige SFXGroup anzuhörenN64 ROM file
N64 ROM file
(PC) data.dat
data.dat
data.dat
.proj
.pool
.sdir
.samp
-DateienDie Installation der MSVC++ 2015-Laufzeitumgebung kann erforderlich sein, wenn Sie sie noch nicht installiert/aktualisiert haben: https://www.microsoft.com/en-us/download/details.aspx?id=48145
Die Amuse-API bietet volle Interaktivität zwischen einer Client-Anwendung (Spiel-Engine) und der Sequenzer-Engine. Im Gegensatz zur Interrupt-gesteuerten Natur der ursprünglichen Konsolenimplementierungen (wo der Audio-Chip bei Bedarf mehr Audio „anfordert“) ist Amuse vollständig synchron. Das bedeutet, dass der Client die Audio-Engine regelmäßig pumpen muss (normalerweise einmal pro Videobild), um das Audiosystem des Betriebssystems mit Strom zu versorgen.
Der Kunde muss die Implementierung für die Zuordnung und Mischung von Audiostimmen bereitstellen, da diese von Ziel zu Ziel drastisch variieren kann. amuse::IBackendVoiceAllocator
ist die hierfür zu implementierende rein virtuelle Schnittstelle. Wenn Boo alternativ im CMake-Projektbaum vorhanden ist, wird Amuse mit einem Backend kompiliert, das mehrere beliebte Low-Level-Audio-APIs unterstützt. Windows, OS X und Linux werden auf diese Weise alle hervorragend unterstützt.
Hier ist ein Beispiel für die Verwendung:
# 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 ;
}