Amuse — это секвенсор MIDI и SFX, работающий в реальном времени, с базовыми эффектами, 3D-позиционным звуком и возможностями объемного вывода.
Проект разработан для совместимости с данными аудиогрупп и песен, найденными в играх PC/N64/GCN/GBA с использованием аудиодвижка MusyX ; предоставление альтернативной библиотеки времени выполнения, которую можно использовать для упорядочения аудиобиблиотек этих игр.
Скачать
Предоставляется простая программа командной строки для загрузки и воспроизведения аудиогрупп из игровых архивов или необработанных файлов ( .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%
Программа командной строки требует оконной среды и откроет небольшое окно размером 100x100 рядом с вашим терминалом/cmd. Это окно должно быть на переднем плане, так как через него прослушиваются все события клавиатуры.
Если MIDI-клавиатура подключена и распознана вашей ОС до запуска amuseplay
, вы можете напрямую управлять секвенсором, используя физический ввод.
В OS X и Linux amuseplay
будет рекламировать виртуальный порт MIDI-IN, чтобы другие аудиоприложения могли направлять свои MIDI-сообщения. Это позволяет приложениям трекера, драм-машины и DAW создавать семплы аудио напрямую с помощью Amuse.
amuseconv <in-path> <out-path> [gcn|n64|pc]
Примечание. amuseconv
в настоящее время поддерживает только преобразование SNG в MIDI и наоборот. Чтобы пакетно извлечь MIDI-файлы из одного из файлов игры, перечисленных ниже, запустите amuseconv <data-file> <destination-dir>
amuseplay <data-file> [<songs-file>]
— или — Перетащите файл данных на исполняемый файл amuseplay (Windows и многие бесплатные файловые менеджеры для настольных компьютеров поддерживают это)
amuserender <data-file> [<songs-file>] [-r <sample-rate-out>] [-v <volume 0.0-1.0>]
— или — Перетащите файл данных на исполняемый файл amuseplay (Windows и многие файловые менеджеры бесплатных компьютеров поддерживают это)
Примечание. Файл .wav будет создан по адресу <group-name>-<song-name>.wav
. Если опция -r
не указана, частота по умолчанию будет равна 32 кГц.
N64 ROM file
AudioGrp.pak
MidiData.pak
AudioGrp.pak MidiData.pak
для прослушивания SongGroup 53 (последовательные звуки корабля)AudioGrp.pak
для прослушивания любой SFXGroup.AudioGrp.pak
pmario.proj
pmario.slib
pmario.proj pmario.slib
для прослушивания SongGroups (последовательные события SFX)pmario.proj
для прослушивания любой SFXGroup.starfoxm.pro
starfoxs.pro
midi.wad
starfoxm.pro midi.wad
для прослушивания только песен SongGroup 0 (музыка)starfoxs.pro midi.wad
для прослушивания других песенных групп (последовательная атмосфера)starfoxs.pro
для прослушивания любой SFXGroupN64 ROM file
N64 ROM file
(ПК) data.dat
data.dat
data.dat
.sdir
.samp
.proj
.pool
Установка среды выполнения MSVC++ 2015 может потребоваться, если вы еще не установили/обновили ее: https://www.microsoft.com/en-us/download/details.aspx?id=48145
API Amuse обеспечивает полную интерактивность между клиентским приложением (игровым движком) и движком секвенсора. В отличие от исходных консольных реализаций, управляемых прерываниями (где аудиочип «запрашивает» больше звука по мере необходимости), Amuse полностью синхронен. Это означает, что клиент должен периодически прокачивать звуковой движок (обычно один раз на видеокадр), чтобы поддерживать питание аудиосистемы ОС.
Клиент должен предоставить реализацию для распределения и микширования аудиоголосов, поскольку это может сильно отличаться от цели к цели. amuse::IBackendVoiceAllocator
— это чисто виртуальный интерфейс, который можно реализовать для этой цели. В качестве альтернативы, если Boo присутствует в дереве проекта CMake, Amuse будет скомпилирован с серверной частью, поддерживающей несколько популярных API низкоуровневого аудио. Windows, OS X и Linux имеют отличную поддержку.
Вот пример использования:
# 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 ;
}