Amuse عبارة عن جهاز تسلسل MIDI وSFX في الوقت الفعلي، مع تأثيرات أساسية وصوت موضعي ثلاثي الأبعاد وقدرات إخراج محيطي.
تم تصميم المشروع للتوافق مع مجموعات الصوت وبيانات الأغاني الموجودة في ألعاب 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%
يتطلب برنامج سطر الأوامر بيئة عمل النوافذ وسيفتح نافذة صغيرة مقاس 100 × 100 بجانب الجهاز الطرفي/cmd. يجب أن تكون هذه النافذة في المقدمة، لأنها تستمع إلى أحداث لوحة المفاتيح الكاملة من خلالها.
إذا تم توصيل لوحة مفاتيح MIDI والتعرف عليها من قبل نظام التشغيل الخاص بك قبل تشغيل amuseplay
، فيمكنك التحكم مباشرة في جهاز التسلسل باستخدام الإدخال الفعلي.
في نظامي التشغيل OS X وLinux، سيعلن amuseplay
عن منفذ MIDI-IN افتراضي للتطبيقات الصوتية الأخرى لتوجيه رسائل MIDI الخاصة بها إليه. يتيح ذلك لتطبيقات التتبع وآلة الطبل وDAW إنتاج عينات صوتية باستخدام Amuse مباشرة.
amuseconv <in-path> <out-path> [gcn|n64|pc]
ملاحظة: يدعم amuseconv
حاليًا تحويل SNG إلى MIDI فقط والعكس صحيح. لاستخراج MIDIs دفعة واحدة من أحد ملفات اللعبة المذكورة أدناه، قم بتشغيل 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
للاستماع إلى أي SFXGroupAudioGrp.pak
pmario.proj
pmario.slib
pmario.proj pmario.slib
للاستماع إلى SongGroups (أحداث SFX متسلسلة)pmario.proj
للاستماع إلى أي SFXGroupstarfoxm.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
القائد المارق (GCN).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 مع واجهة خلفية تدعم العديد من واجهات برمجة التطبيقات الصوتية ذات المستوى المنخفض. يتمتع كل من 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 ;
}