Amuse คือซีเควนเซอร์ MIDI และ SFX แบบเรียลไทม์ พร้อมเอฟเฟกต์พื้นฐาน เสียงตำแหน่ง 3 มิติ และความสามารถเอาท์พุตเซอร์ราวด์
โปรเจ็กต์นี้ได้รับการออกแบบเพื่อให้เข้ากันได้กับกลุ่มเสียงและข้อมูลเพลงที่พบในเกม PC/N64/GCN/GBA โดยใช้เอ็นจิ้นเสียง MusyX จัดให้มีไลบรารีรันไทม์สำรองเพื่อใช้สำหรับจัดลำดับไลบรารีเสียงของเกมเหล่านี้
ดาวน์โหลด
มีโปรแกรมบรรทัดคำสั่งง่ายๆ สำหรับการโหลดและเล่น AudioGroups จากไฟล์เก็บถาวรของเกมหรือไฟล์ raw ( .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>]
— หรือ — ไฟล์ข้อมูลแบบ Drag-n-drop บนไฟล์ปฏิบัติการ amuseplay (Windows และโปรแกรมจัดการไฟล์ freedesktop จำนวนมากรองรับสิ่งนี้)
amuserender <data-file> [<songs-file>] [-r <sample-rate-out>] [-v <volume 0.0-1.0>]
— หรือ — ไฟล์ข้อมูล Drag-n-drop บนไฟล์ปฏิบัติการ amuseplay (Windows และ โปรแกรมจัดการไฟล์ freedesktop จำนวนมากรองรับสิ่งนี้)
หมายเหตุ: ไฟล์ .wav จะถูกส่งไปที่ <group-name>-<song-name>.wav
หากไม่ได้ระบุตัวเลือก -r
อัตราจะมีค่าเริ่มต้นเป็น 32KHz
N64 ROM file
Indiana Jones และ Infernal Machine (N64) N64AudioGrp.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
เพื่อฟัง SongGroups อื่นๆ (บรรยากาศตามลำดับ)starfoxs.pro
เพื่อฟัง SFXGroup ใดๆN64 ROM file
N64 ROM file
(พีซี) 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 เป็นแบบซิงโครนัสทั้งหมด ซึ่งหมายความว่าไคลเอนต์จะต้อง ปั๊ม เอ็นจิ้นเสียงเป็นระยะ (โดยทั่วไปหนึ่งครั้งต่อเฟรมวิดีโอ) เพื่อให้ระบบเสียงของระบบปฏิบัติการถูกป้อนต่อไป
ลูกค้าจะต้องจัดให้มีการใช้งานสำหรับการจัดสรรและการผสมเสียงเสียง เนื่องจากอาจแตกต่างกันอย่างมากในแต่ละเป้าหมาย 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 ;
}