Amuse 는 기본 효과, 3D 위치 오디오 및 서라운드 출력 기능을 갖춘 실시간 MIDI 및 SFX 시퀀서입니다.
이 프로젝트는 MusyX 오디오 엔진을 사용하는 PC/N64/GCN/GBA 게임의 오디오 그룹 및 노래 데이터와 호환되도록 설계되었습니다. 이러한 게임의 오디오 라이브러리를 시퀀싱하는 데 사용할 대체 런타임 라이브러리를 제공합니다.
다운로드
게임 아카이브 또는 원시( .proj
, .pool
, .sdir
, .samp
) 파일에서 AudioGroup을 로드하고 재생하기 위한 간단한 명령줄 프로그램이 제공됩니다.
[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%
명령줄 프로그램에는 창 환경이 필요하며 터미널/cmd와 함께 작은 100x100 창을 엽니다. 이 창은 전체 키보드 이벤트를 수신하므로 맨 앞에 있어야 합니다 .
amuseplay
실행되기 전에 MIDI 키보드가 연결되어 OS에서 인식되면 물리적 입력을 사용하여 시퀀서를 직접 제어할 수 있습니다.
OS X 및 Linux에서 amuseplay
다른 오디오 응용 프로그램이 MIDI 메시지를 라우팅할 수 있도록 가상 MIDI-IN 포트를 광고합니다. 이를 통해 트래커, 드럼 머신 및 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 및 많은 freedesktop 파일 관리자가 이를 지원함)
amuserender <data-file> [<songs-file>] [-r <sample-rate-out>] [-v <volume 0.0-1.0>]
— 또는 — amuseplay 실행 파일에 데이터 파일을 드래그 앤 드롭합니다 (Windows 및 많은 freedesktop 파일 관리자가 이를 지원합니다)
참고: .wav 파일은 <group-name>-<song-name>.wav
에서 생성됩니다. -r
옵션을 지정하지 않으면 속도는 기본적으로 32KHz로 설정됩니다.
N64 ROM file
AudioGrp.pak
MidiData.pak
AudioGrp.pak MidiData.pak
전달합니다.AudioGrp.pak
전달하세요.AudioGrp.pak
pmario.proj
pmario.slib
pmario.proj pmario.slib
전달합니다.pmario.proj
전달하세요.starfoxm.pro
starfoxs.pro
midi.wad
starfoxm.pro midi.wad
전달하세요(음악).starfoxs.pro midi.wad
전달하세요(순차적 분위기)starfoxs.pro
전달하세요.N64 ROM file
N64 ROM file
(PC) data.dat
data.dat
data.dat
.proj
.pool
.sdir
.samp
파일이 포함된 기타 게임아직 설치/업데이트하지 않은 경우 MSVC++ 2015 런타임을 설치해야 할 수 있습니다. https://www.microsoft.com/en-us/download/details.aspx?id=48145
Amuse API는 클라이언트 애플리케이션(게임 엔진)과 시퀀서 엔진 간의 완전한 상호 작용을 제공합니다. 오디오 칩이 필요에 따라 더 많은 오디오를 '요청'하는 원래 콘솔 구현의 인터럽트 중심 특성과 달리 Amuse는 완전히 동기식입니다. 이는 클라이언트가 OS의 오디오 시스템을 계속 공급하기 위해 오디오 엔진을 주기적으로 펌핑 해야 함(일반적으로 비디오 프레임당 한 번)을 의미합니다.
클라이언트는 오디오 음성을 할당하고 믹싱하기 위한 구현을 제공해야 합니다. 이는 대상마다 크게 다를 수 있기 때문입니다. amuse::IBackendVoiceAllocator
이를 구현하는 순수 가상 인터페이스입니다. 또는 CMake 프로젝트 트리에 Boo가 있는 경우 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 ;
}