µ±Ç°Î»Öà : 145zÓÎÏ·Õ¾¡¡|¡¡ÈÈѪ´«Ææ¡¡|¡¡¼¼Êõ½Ì³Ì¡¡|¡¡

´«ÆæBlueÒýÇæ¹ÖÎïÎÞÉùÉî²ã½âÃÜ£ºÒýÇæÄ£¿é³åÍ»Óë±àÒëÆ÷ÓÅ»¯µÄÖÕ¼«ÅŲéÊÖ²á

Èȶȣº
ÔÚ¡¶´«ÆæBlueÒýÇæ¡·ÖУ¬Ð¹ÖÎï mon35 Ìí¼Óºó³öÏÖÒôЧȱʧÎÊÌ⣬¼´Ê¹×ÊԴ·¾¶¡¢ÅäÖÃÎļþ¾ùÎÞÎó£¬ÈÔ¿ÉÄÜ´æÔÚ ÒýÇæÄ£¿é³åÍ» »ò ±àÒëÆ÷ÓÅ»¯²ßÂÔ µ¼ÖµÄÒþ±ÎÐÔÎÊÌâ¡£±¾ÎĴӵײã´úÂëÂß¼­¡¢ÒýÇæÄ£¿é½»»¥ºÍ±àÒëÆ÷ÐÐΪÈý¸öά¶È£¬ÌṩһÌ×Õë¶Ô“ÎÞÉùÎÊÌ┵ĸ߽׽â¾ö·½°¸¡£

Ò»¡¢ÒýÇæÄ£¿é³åÍ»£ºÒôƵÖмä¼þÀ¹½Ø»úÖÆ

1.1 ÒôƵÖмä¼þȨÏÞÕù¶á

Blue ÒýÇæÄ¬Èϼ¯³ÉµÄÒôƵÖмä¼þ£¨Èç FMOD »ò Wwise£©¿ÉÄÜÓëÆäËûÄ£¿é£¨Èç¼¼ÄÜÒôЧϵͳ£©·¢Éú×ÊÔ´ÇÀÕ¼£º
• ³åÍ»±íÏÖ£º¹ÖÎïÒôЧ±»Öмä¼þ±ê¼ÇΪ“µÍÓÅÏȼ¶”£¬ÔÚ¼¼ÄÜÒôЧ²¥·Åʱ±»Ç¿ÖÆÖжϡ£

• ÑéÖ¤·½·¨£º

1. ÔÚÒýÇæÅäÖÃÎļþ AudioMiddleware.ini ÖÐÇ¿ÖÆÌáÉý¹ÖÎïÒôЧÓÅÏȼ¶£º
[MonsterSound]
Priority=99 ; ×î¸ßÓÅÏȼ¶£¨Ä¬ÈÏͨ³£Îª 50£©

2. ÖØÆôÒýÇæºó²âÊÔÒôЧÊÇ·ñ»Ö¸´¡£

1.2 Öмä¼þ³õʼ»¯²ÎÊý´íÎó

ÈôÒýÇæÉý¼¶ºóδ¸üÐÂÖмä¼þÅäÖ㬿ÉÄܵ¼ÖÂÒôƵ»á»°£¨Audio Session£©Î´ÕýÈ·°ó¶¨£º
// ÒýÇæµ×²ã´úÂëʾÀý£¨¼ÙÉè¿Éµ÷ÊÔ£©
IAudioSession* pSession = AudioEngine::CreateSession();
pSession->SetCategory(AUDIO_CATEGORY_GAME); // ±ØÐëÉèÖÃΪÓÎÏ·Àà±ð
pSession->SetPriority(AUDIO_PRIORITY_HIGH);

• ÐÞ¸´·½°¸£º

ÔÚ AudioInit.lua ½Å±¾ÖÐÌí¼ÓÇ¿ÖÆ³õʼ»¯´úÂ룺
AudioSystem.Initialize({
category = "GAME",
priority = 3 -- ÊýÖµÔ½´óÓÅÏȼ¶Ô½¸ß
})


¶þ¡¢±àÒëÆ÷ÓÅ»¯µ¼ÖµÄ×ÊÔ´¼ÓÔØÒì³£

2.1 Á´½ÓÆ÷°þÀë¹Ø¼üÒôƵ·ûºÅ

²¿·Ö±àÒëÆ÷£¨Èç MSVC£©ÔÚ Release ģʽÏ»á°þÀëδÏÔʽÒýÓõĺ¯Êý·ûºÅ£¬µ¼ÖÂÒôƵ¼ÓÔØº¯Êý±»ÓÅ»¯É¾³ý£º
• ÏÖÏó£ºÈÕÖ¾ÖÐÏÔʾ SoundLoadError: monster35_attack.wav (FunctionNotFound)¡£

• ½â¾ö·½°¸£º

ÔÚ´úÂëÖÐÇ¿ÖÆÒýÓÃÒôƵ¼ÓÔØº¯Êý£¨¼´Ê¹Î´Ö±½ÓʹÓã©£º
// ÔÚ MonsterManager.cpp ¶¥²¿Ìí¼Ó
#pragma comment(linker, "/INCLUDE:_SoundLoadMonster")


2.2 ÄÚÁªº¯ÊýÓëÄÚ´æ¶ÔÆë³åÍ»

±àÒëÆ÷¶ÔÒôƵÊý¾Ý½á¹¹µÄ¹ý¶ÈÓÅ»¯¿ÉÄܵ¼ÖÂÄÚ´æ·ÃÎÊÒì³££º
// ´íÎóʾÀý£º±àÒëÆ÷¿ÉÄܽ« AudioBuffer ¶ÔÆëµ½ 8 ×ֽڱ߽ç
struct AudioBuffer {
uint8_t data[1024]; // ʵ¼ÊÐèÒª 1024 ×Ö½Ú¶ÔÆë
};

• ÐÞ¸´·½°¸£º

ÔÚÍ·ÎļþÖÐÌí¼ÓÄÚ´æ¶ÔÆëÖ¸Á
#pragma pack(push, 1) // Ç¿ÖÆ 1 ×Ö½Ú¶ÔÆë
struct AudioBuffer {
uint8_t data[1024];
};
#pragma pack(pop)


Èý¡¢ÒýÇæµ×²ã×ÊÔ´¹ÜÀí»úÖÆ

3.1 Òì²½¼ÓÔØ¶ÓÁÐ×èÈû

Blue ÒýÇæµÄÒì²½¼ÓÔØÏ߳̿ÉÄÜÒò CPU Õ¼Óùý¸ß¶ø¿¨ËÀ£¬µ¼ÖÂÒôЧÎļþδ¼ÓÔØÍê³É£º
• Õï¶Ï·½·¨£º

1. ´ò¿ªÒýÇæÐÔÄܼàÊÓÆ÷£¨EngineProfiler.exe£©¡£
2. ¹Û²ì AsyncLoaderThread µÄ CPU ʹÓÃÂÊ¡£
• ½â¾ö·½°¸£º

ÔÚ EngineConfig.ini ÖÐÏÞÖÆÖ÷Ïß³Ì×ÊÔ´Õ¼Óãº
[AsyncLoading]
MaxMainThreadUsage=70 ; Ö÷Ïß³Ì×î¶àÕ¼Óà 70% CPU


3.2 Îļþϵͳ»º´æÊ§Ð§

ÒýÇæµÄÐéÄâÎļþϵͳ£¨VFS£©»º´æ¿ÉÄÜδ¼°Ê±¸üУ¬µ¼ÖÂÐÂÌí¼ÓµÄÒôЧÎļþδ±»Ê¶±ð£º
-- Ç¿ÖÆË¢Ð VFS »º´æ£¨ÔÚ Lua ½Å±¾Öе÷Óã©
VFS.RefreshCache("Sound/Monsters/mon35/")


ËÄ¡¢²Ù×÷ϵͳÓë»·¾³¸ÉÈÅ

4.1 Windows ÒôƵ·þÎñ³åÍ»

Windows ϵͳµÄÒôƵ¶Ëµã¹ÜÀíÆ÷¿ÉÄÜÕ¼ÓÃÒôЧÉ豸£º
1. °´Ï Win + R£¬ÊäÈë services.msc¡£
2. ÖØÆô Windows Audio Endpoint Builder ·þÎñ¡£

4.2 ·À»ðǽÀ¹½ØÒôƵÁ÷

²¿·Ö°²È«Èí¼þ¿ÉÄÜÎóÅÐÒýÇæÒôƵģ¿éΪÒì³£½ø³Ì£º
• ÁÙʱ½â¾ö·½°¸£º½« BlueEngine.exe ¼ÓÈë·À»ðǽ°×Ãûµ¥¡£

Îå¡¢ÖÕ¼«ÑéÖ¤£ºÄæÏò¹¤³ÌÓëÈȸüе÷ÊÔ

5.1 ʹÓà IDA Pro ·´±àÒëÒôƵģ¿é

1. ¶¨Î»ÒýÇæÒôƵ¼ÓÔØº¯Êý£¨Èç sub_401230£©¡£
2. ÔÚ·´±àÒë´úÂëÖÐËÑË÷ mon35 Ïà¹Ø×Ö·û´®£¬È·ÈÏÊÇ·ñ±»Ìø¹ý£º
.text:00401230 sub_401230 proc near
.text:00401230 cmp eax, 'mon35' ; ¼ì²é¹ÖÎïID
.text:00401235 jnz short loc_401250 ; Ìø¹ý·ÇÄ¿±ê¹ÖÎï

• ÐÞ¸´·½°¸£ºÐ޸ıȽÏÖ¸ÁîΪ cmp eax, 'monXX'£¨¸²¸ÇËùÓйÖÎ¡£

5.2 Èȸüж¯Ì¬µ÷ÊÔ

ͨ¹ýÒýÇæµ÷ÊÔÆ÷£¨BlueDebug.exe£©¶¯Ì¬×¢ÈëÈÕÖ¾£º
-- ÔÚÒýÇæÆô¶¯Ê±¸½¼Óµ÷ÊÔÃüÁî
Debug.Log("Attempting to load monster35 sounds...")


×ܽ᣺ϵͳÐÔÅŲéÁ÷³Ì

1. ¼ì²éÖмä¼þÓÅÏȼ¶ → È·±£¹ÖÎïÒôЧδ±»ÆäËûÄ£¿é¸²¸Ç¡£
2. ÑéÖ¤±àÒëÆ÷ÓÅ»¯ÉèÖà → ÐÞ¸´·ûºÅ°þÀëºÍÄÚ´æ¶ÔÆëÎÊÌâ¡£
3. ¼à¿ØÒì²½¼ÓÔØÏß³Ì → È·±£×ÊÔ´¼ÓÔØ²»±»×èÈû¡£
4. Åųýϵͳ¼¶¸ÉÈÅ → ¹Ø±Õ³åÍ»·þÎñºÍ°²È«Èí¼þ¡£
5. ÄæÏò¹¤³ÌÑéÖ¤ → Ö±½Ó·ÖÎöÒýÇæµ×²ãÂß¼­¡£