Amuse adalah sequencer MIDI dan SFX real-time, dengan efek dasar, audio posisi 3D, dan kemampuan output surround.
Proyek ini dirancang untuk kompatibilitas dengan Grup Audio dan data Lagu yang ditemukan di game PC/N64/GCN/GBA menggunakan mesin audio MusyX ; menyediakan perpustakaan runtime alternatif yang digunakan untuk mengurutkan perpustakaan audio game ini.
Unduh
Program baris perintah sederhana untuk memuat dan memutar AudioGroup dari arsip game atau file mentah ( .proj
, .pool
, .sdir
, .samp
) disediakan.
[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%
Program baris perintah memerlukan lingkungan berjendela dan akan membuka jendela kecil berukuran 100x100 di samping terminal/cmd Anda. Jendela ini harus berada paling depan, karena ia mendengarkan kejadian keyboard lengkap melaluinya.
Jika keyboard MIDI terhubung dan dikenali oleh OS Anda sebelum amuseplay
diluncurkan, Anda dapat langsung mengontrol sequencer menggunakan input fisik.
Di OS X dan Linux, amuseplay
akan mengiklankan port MIDI-IN virtual untuk aplikasi audio lain yang akan merutekan pesan MIDI mereka. Hal ini memungkinkan aplikasi pelacak, mesin drum, dan DAW menghasilkan sampel audio menggunakan Amuse secara langsung.
amuseconv <in-path> <out-path> [gcn|n64|pc]
Catatan: amuseconv
saat ini hanya mendukung konversi SNG-ke-MIDI dan sebaliknya. Untuk mengekstrak MIDI secara batch dari salah satu file game yang tercantum di bawah, jalankan amuseconv <data-file> <destination-dir>
amuseplay <data-file> [<songs-file>]
— atau — Drag-n-drop file data pada amuseplay yang dapat dieksekusi (Windows dan banyak pengelola file freedesktop mendukung ini)
amuserender <data-file> [<songs-file>] [-r <sample-rate-out>] [-v <volume 0.0-1.0>]
— atau — Drag-n-drop file data pada amuseplay yang dapat dieksekusi (Windows dan banyak pengelola file desktop gratis mendukung ini)
Catatan: File .wav akan dikeluarkan di <group-name>-<song-name>.wav
. Jika opsi -r
tidak ditentukan, laju akan default ke 32KHz
N64 ROM file
AudioGrp.pak
MidiData.pak
AudioGrp.pak MidiData.pak
untuk mendengarkan SongGroup 53 (suara kapal berurutan)AudioGrp.pak
untuk mendengarkan SFXGroup mana punAudioGrp.pak
pmario.proj
pmario.slib
pmario.proj pmario.slib
untuk mendengarkan SongGroups (acara SFX yang diurutkan)pmario.proj
untuk mendengarkan SFXGroup mana punstarfoxm.pro
starfoxs.pro
midi.wad
starfoxm.pro midi.wad
untuk mendengarkan lagu SongGroup 0 saja (musik)starfoxs.pro midi.wad
untuk mendengarkan Grup Lagu lain (suasana berurutan)starfoxs.pro
untuk mendengarkan SFXGroup mana punN64 ROM file
N64 ROM file
(PC) data.dat
data.dat
data.dat
.proj
.pool
.sdir
.samp
mentahMenginstal runtime MSVC++ 2015 mungkin diperlukan jika Anda belum menginstal/memperbaruinya: https://www.microsoft.com/en-us/download/details.aspx?id=48145
Amuse API memperlihatkan interaktivitas penuh antara aplikasi klien (mesin game) dan mesin sequencer. Berbeda dengan implementasi konsol asli yang bersifat interupsi (di mana chip audio 'meminta' lebih banyak audio sesuai kebutuhan), Amuse sepenuhnya sinkron. Ini berarti klien harus memompa mesin audio secara berkala (biasanya sekali per frame video) agar sistem audio OS tetap tersalurkan.
Klien harus menyediakan implementasi untuk mengalokasikan dan mencampur suara audio, karena hal ini mungkin berbeda secara drastis dari satu target ke target lainnya. amuse::IBackendVoiceAllocator
adalah antarmuka virtual murni yang akan diterapkan untuk ini. Alternatifnya, jika Boo ada di pohon proyek CMake, Amuse akan dikompilasi dengan backend yang mendukung beberapa API audio tingkat rendah yang populer. Windows, OS X, dan Linux semuanya memiliki dukungan yang sangat baik untuk cara ini.
Berikut contoh penggunaannya:
# 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 ;
}