<
li><
span style='color:#800080'><
b>eff.inc<
/b><
/span> - ýòîò çàãîëîâî÷íûé ôàéë ñîçäà¸òñÿ óòèëèòîé <
a href='#22'>Eff<
/a>. Íå ðåêîìåíäóåòñÿ ðåäàêòèðîâàòü äàííûé ôàéë âðó÷íóþ! Íàñòîÿùèå êîäåðû íå îáðàùàþò âíèìàíèÿ íà ïîäîáíûå ïðåäóïðåæäåíèÿ, íî âñ¸ æå... :
)<
li><
span style='color:#800080'><
b>ufmod.inc<
/b><
/span> ñîäåðæèò ïîäðîáíîå îïèñàíèå API uFMOD äëÿ èñïîëüçîâàíèÿ â ïðîåêòàõ íà ASM
/C
/C++.<
li><
span style='color:#800080'><
b>ufmod-codec.h<
/b><
/span> ñîäåðæèò îïèñàíèå àëüòåðíàòèâíîãî API uFMOD, êîòîðîå ïðåäîñòàâëÿåòñÿ áèáëèîòåêîé â ðåæèìå AC97SND - ýòîò ðåæèì ïðåäíàçíà÷åí äëÿ èñïîëüçîâàíèÿ â ïëååðàõ àóäèî-ôàéëîâ, âðîäå AC
'97 MP3 Player Serge'ÿ.<
li>Â <
span style='color:#008080'><
b>core.asm<
/b><
/span> íàõîäèòñÿ áîëüøàÿ ÷àñòü èñõîäíîãî êîäà uFMOD. Ýòîò ñàìûé ôàéë ïðèñóòñòâóåò âî âñåõ äèñòðèáóòèâàõ áèáëèîòåêè: KolibriOS, Unix
/BSD, Linux è Win32. Çàãðóçêà XM-ôàéëà, ñìåøèâàíèå êàíàëîâ, íàëîæåíèå ýôôåêòîâ è ìíîãèå äðóãèå îáùèå äëÿ âñåõ äèñòðèáóòèâîâ àëãîðèòìû ðåàëèçîâàíû â äàííîì ôàéëå.<
li><
span style='color:#008080'><
b>ufmod.asm<
/b><
/span> ñîäåðæèò ïëàòôîðìîçàâèñèìûå ïðîöåäóðû: ôàéëîâûé Â
/Â, îáùåíèå ñî çâóêîâûì äðàéâåðîì è ò.ä. Ïîýòîìó, ñîäåðæèìîå äàííîãî ôàéëà ðàçëè÷àåòñÿ â äèñòðèáóòèâàõ äëÿ ðàçíûõ ÎÑåé.<
li><
span style='color:#008080'><
b>fasm.asm<
/b><
/span> õðàíèò îïðåäåëåíèÿ êîíñòàíò, ñòðóêòóð è ò.ä. ïîä ñèíòàêñèñ Flat Assembler
(FASM
). Ýòîò ôàéë ïîçâîëÿåò ñîáèðàòü áèáëèîòåêó ñ ïîìîùüþ FASM.<
li><
span style='color:#008080'><
b>masm.asm<
/b><
/span> õðàíèò îïðåäåëåíèÿ êîíñòàíò, ñòðóêòóð è ò.ä. ïîä ñèíòàêñèñ MASM32. Ýòîò ôàéë ïîçâîëÿåò ñîáèðàòü áèáëèîòåêó ñ ïîìîùüþ MASM32.<
li><
span style='color:#008080'><
b>nasm.asm<
/b><
/span> õðàíèò îïðåäåëåíèÿ êîíñòàíò, ñòðóêòóð è ò.ä. ïîä ñèíòàêñèñ Netwide Assembler
(NASM
). Ýòîò ôàéë ïîçâîëÿåò ñîáèðàòü áèáëèîòåêó ñ ïîìîùüþ NASM.<
/ul>Ñëåäóþùèì ïîñëå âíåñåíèÿ èçìåíåíèé â èñõîäíèêè øàãîì ÿâëÿåòñÿ êîìïèëÿöèÿ. ×òîáû ïåðåñîáðàòü ufmod.obj, ñíà÷àëà îòêðîéòå â òåêñòîâîì ðåäàêòîðå áàòíèê
src/ufmodlib
/makeobj.bat. Âñ¸, ÷òî íàõîäèòñÿ ìåæäó ñëåäóþùèõ ñòðîê:<
pre>rem *** CONFIG START<
/pre>è<
pre>rem *** CONFIG END<
/pre>ïîäëåæèò íàñòðîéêå. Îáðàòèòå âíèìàíèå íà ñåêöèþ <
code>Pathes<
/code>. Òàì åñòü òàêàÿ îïöèÿ:<
pre>SET UF_NASM
=\nasm<
/pre>Åñëè ó Âàñ óñòàíîâëåí NASM, óäîñòîâåðüòåñü, ÷òî ïóòü â äàííîé îïöèè óêàçûâàåò òî÷íî òóäà, ãäå íàõîäèòñÿ nasmw.exe. Äîïóñòèì, NASM óñòàíîâëåí â <
code>D:\TOOLS\NASM<
/code>.  òàêîì ñëó÷àå, íåîáõîäèìî ñêîððåêòèðîâàòü îïöèþ ñëåäóþùèì îáðàçîì:<
pre>SET UF_NASM
=D:\TOOLS\NASM<
/pre>Íå âñå ïóòè íåîáõîäèìû äëÿ óñïåøíîé êîìïèëÿöèè. Íàïðèìåð, åñëè Âû íàìåðåíû èñïîëüçîâàòü FASM, íå íóæíî íàñòðàèâàòü UF_NASM. Ïðîâåðüòå ïðàâèëüíîñòü âñåõ ïóòåé, íåîáõîäèìûõ äëÿ êîìïèëÿöèè. Òåïåðü íàñòðîéòå ïàðàìåòðû êîíôèãóðàöèè, ñîãëàñíî ñëåäóþùåé òàáëèöå:<
p><
table border=0 cellpadding=4 cellspacing=2 style='font-size:10pt;font-family:Arial,Aerial'><
tr bgcolor=#
708090 style='color:#E7E7E7;font-weight:bold'><
td>Îïöèÿ<
td>Îïèñàíèå<
td width=200>Çíà÷åíèÿ<
tr valign=top><
td>UF_RAMP<
td>Äàííàÿ îïöèÿ ïîçâîëÿåò íàñòðîèòü ìåõàíèçì èíòåðïîëÿöèè, êîòîðûé ïðåäíàçíà÷åí äëÿ ïîãàøåíèÿ ùåë÷êîâ - ðåçêèå ïåðåïàäû àìïëèòóäû ñèãíàëà, õàðàêòåðíûå äëÿ òðåêåðñêîé ìóçûêè. Ñ äðóãîé ñòîðîíû, èíòåðïîëÿöèÿ âíîñèò èñêàæåíèå â âûñîêî÷àñòîòíûå ñïåêòðàëüíûå ñîñòàâëÿþùèå ñèãíàëà, ÷òî èíîãäà áûâàåò çàìåòíî. STRONG - ýòî çíà÷åíèå ïî óìîë÷àíèþ, ðåêîìåíäóåìîå äëÿ áîëüøèíñòâà ïðèëîæåíèé.  äàííîì ðåæèìå ìèêñåð ñãëàæèâàåò ðåçêèå ïåðåïàäû àìïëèòóäû, ïðèìåíÿÿ ëèíåéíóþ
128-ñòóïåí÷àòóþ èíòåðïîëÿöèþ. WEAK íàêëàäûâàåò ëèøü
16 ñòóïåíåé - ýòîò ðåæèì ìåíåå ýôôåêòèâåí, ÷åì STRONG, íî çàòî âåðîÿòíîñòü äåãðàäàöèè ñèãíàëà â ýòîì ðåæèìå íèæå. NONE âîîáùå îòêëþ÷àåò èíòåðïîëÿöèþ. Áåç ñãëàæèâàíèÿ íå áóäåò è äåãðàäàöèè, íî áîëüøèíñòâî êîìïîçèöèé áåç ñãëàæèâàíèÿ áóäåò çâó÷àòü çàìåòíî õóæå èç-çà íàëîæåíèÿ ùåë÷êîâ. Îñîáûì îáðàçîì ñáàëàíñèðîâàííûå êîìïîçèöèè áåç ñãëàæèâàíèÿ ìîãóò çâó÷àòü ëó÷øå.<
td>NONE, WEAK, STRONG<
tr bgcolor=#E7E7E7
valign=top><
td>UF_FREQ<
td>×àñòîòà äèñêðåòèçàöèè
(â Ãö
).
48ÊÃö ÿâëÿåòñÿ çíà÷åíèåì, ðåêîìåíäóåìûì äëÿ áîëüøèíñòâà ïðèëîæåíèé.<
td>
22050,
44100,
48000<
tr valign=top><
td>UF_ASM<
td>Àññåìáëåð. Äà, uFMOD ìîæíî ñîáèðàòü ðàçíûìè àññåìáëåðàìè - âûáèðàéòå òîò, êîòîðûé áîëüøå íðàâèòñÿ :
)<
td>MASM, NASM, FASM<
tr bgcolor=#E7E7E7
valign=top><
td>UF_MODE<
td>NORMAL - ýòî çíà÷åíèå ïî óìîë÷àíèþ. Íè÷åãî îñîáåííîãî. UNSAFE îòêëþ÷àåò ïðîâåðêó ïðàâèëüíîñòè ôîðìàòà XM ïåðåä çàãðóçêîé êîìïîçèöèè. Åñëè Âû óâåðåíû, ÷òî âñå êîìïîçèöèè, êîòîðûå áóäóò ïðîèãðûâàòüñÿ â âàøåì ïðèëîæåíèè, êîððåêòíû
(ïðàâèëüíîñòü ôîðìàòà XM-ôàéëà ìîæíî ïðîâåðèòü â Eff èëè XMStrip
), ìîæåòå ïåðåñîáðàòü áèáëèîòåêó â ðåæèìå UNSAFE, ÷òîáû âûéãðàòü â ðàçìåðå è ñêîðîñòè çàãðóçêè. Èìåéòå â âèäó, ÷òî çàãðóçêà íåïðàâèëüíîãî XM-ôàéëà â ðåæèìå UNSAFE ìîæåò ïðèâåñòè ê êðàõó! Â ðåæèìå AC97SND áèáëèîòåêà ïðåäñòàâëÿåò ñîáîé êîäåê äëÿ ïðîèãðûâàòåëÿ AC
'97 MP3 Player Serge'ÿ. Äàííûé ðåæèì ìîæåò áûòü ïîëåçåí è äëÿ äðóãèõ ïðîåêòîâ ñõîäíîé íàïðàâëåííîñòè. Îïèñàíèå API äàííîãî ðåæèìà ìîæíî íàéòè â ufmod-codec.h.<
td>NORMAL, UNSAFE, AC97SND<
/table><
p>Çàïóñòèòå áàòíèê, ÷òîáû ñîáðàòü áèáëèîòåêó. Âîò è âñ¸!<
p> <
br><
a name='4'><
b>Ïðèìåðû<
/b><
/a><
p>Â äàííûé äèñòðèáóòèâ âîøëè
2 ïðèìåðà: mini è jmp2pat. Îòêîìïèëèðîâàííûå ýêçåøíèêè íàõîäÿòñÿ â bin
/. Çàìåòüòå, ÷òî ýêçåøíèêè ïðåäñòàâëåíû áåç ñæàòèÿ.<
ul><
li><
b>mini<
/b> - ýòî ïðîñòåéøèé ïðèìåð ôîíîâîãî ïðîèãðûâàíèÿ ìóçûêè èç ïàìÿòè.<
li><
b>jmp2pat<
/b> - ýòî ïðèìåð èñïîëüçîâàíèÿ ôóíêöèè Jump2Pattern. Â äàííîì ïðèìåðå ïðîèãðûâàåòñÿ êîìïîçèòíûé XM, ëþáåçíî ïðåäîñòàâëåííûé òîâàðèùåì Kim
(îí æå norki
). Îïèñàíèå òåõíèêè ñîçäàíèÿ è èñïîëüçîâàíèÿ ïîäîáíûõ êîìïîçèöèé ìîæíî íàéòè â ñëåäóþùåì ðàçäåëå.<
/ul><
p> <
br><
a name='5'><
b>Äîïîëíèòåëüíîå óìåíüøåíèå ðàçìåðà<
/b><
/a><
p>Óòèëèòà <
a href='#22'>Eff<
/a> ïðåäíàçíà÷åíà äëÿ îïòèìèçàöèè è óìåíüøåíèÿ ðàçìåðà áèáëèîòåêè uFMOD.<
p>Åñëè Âû ñîáèðàåòåñü âêëþ÷èòü XM ñòàòè÷åñêè â ýêçåøíèê, ìîæåòå ïîïðîáîâàòü îïòèìèçèðîâàòü ñíà÷àëà ñàì XM. Modplug Player óìååò ñæèìàòü XM-êîìïîçèöèè ïî ñõåìå APDCM, íî ó÷òèòå, ÷òî ýòîò òèï ñæàòèÿ ïàãóáíî âëèÿåò íà êà÷åñòâî çâó÷àíèÿ! Óòèëèòà <
a href='#21'>XMStrip<
/a> ïåðåïàêîâûâàåò XM ôàéë áåç ïîòåðè êà÷åñòâà.<
p>Åñëè Âû óâåðåíû â êîððåêòíîñòè ôîðìàòà âñåõ êîìïîçèöèé, êîòîðûå áóäóò èñïîëüçîâàíû â ïðèëîæåíèè, ìîæåòå ïåðåñîáðàòü áèáëèîòåêó â ðåæèìå UNSAFE.<
p>Óïàêîâùèêè, âðîäå mtappack diamond
'à, óìåþò óæèìàòü ýêçåøíèêè. Òåì íå ìåíåå, äëÿ íàãëÿäíîñòè, âñå ïðèìåðû ïðåäîñòàâëåíû áåç ñæàòèÿ!<p>Åñòü åù¸ îäèí õèòðûé ñïîñîá îïòèìèçàöèè ðàçìåðà XM-ôàéëîâ, êîòîðûé çàêëþ÷àåòñÿ â ñîâìåùåíèè ñðàçó íåñêîëüêèõ êîìïîçèöèé â îäíîì ôàéëå. Ïðè ýòîì ìîæíî óäàëÿòü ëèøíèå ýêçåìïëÿðû ïîâòîðÿþùèõñÿ èíñòðóìåíòîâ, åñëè òàêîâûå èìåþòñÿ, ÷òî î÷åíü çàìåòíî ñêàçûâàåòñÿ íà ðàçìåðå êîíå÷íîãî ôàéëà. Äàæå áåç îïòèìèçàöèè èíñòðóìåíòîâ ðàçìåð êîìïîçèòíîãî ôàéëà äîëæåí ïîëó÷èòüñÿ ìåíüøå ñóììû ðàçìåðîâ îòäåëüíûõ ôàéëîâ, òàê êàê çàãîëîâêè âñåõ ôàéëîâ çàìåíÿþòñÿ îäíèì îáùèì. Äàâàéòå ðàññìîòðèì ïðèìåð ñ òðåìÿ ôàéëàìè:<pre>