Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. <html lang=ru><head><meta http-equiv=Content-Type content="text/html; charset=windows-1251"><title>uFMOD</title></head><body style='margin:0'><table border=0 cellpadding=0 cellspacing=0 width=100%><tr bgcolor=#E7E7E7 align=center><td height=20 style='color:#708090;font-size:9pt;font-family:Arial,Aerial'>[ <a href='en.htm'>English</a> | <a href='es.htm'>Espa&#241;ol</a> | Pycc&#954;u&#250; ]<tr bgcolor=#708090><td height=1></table><center><h2 style='font-size:14pt;font-family:Arial,Aerial'>&#956;FMOD v1.25 äëÿ KolibriOS</h2></center><div style='font-size:10pt;font-family:Arial,Aerial;text-align:justify;margin:8'><p>uFMOD - ýòî êîìïàêòíàÿ, øóñòðàÿ, íàä¸æíàÿ, ìóëüòèïëàòôîðìåííàÿ áèáëèîòåêà äëÿ êà÷åñòâåííîãî âîñïðîèçâåäåíèÿ àóäèî â ôîðìàòå XM, ðàçðàáîòàííàÿ ïîëíîñòüþ íà àññåìáëåðå. XM ìîæåò õðàíèòüñÿ â îòäåëüíîì ôàéëå èëè ïðåäâàðèòåëüíî çàãðóæåí â ïàìÿòü. Ïîääåðæèâàþòñÿ òàêæå áèòûå è íå ñîâñåì ñòàíäàðòíûå ôàéëû. Áèáëèîòåêà ðàñïðîñòðàíÿåòñÿ ñ îòêðûòûì èñõîäíûì êîäîì è ïðèìåðàìè äëÿ ñëåäóþùèõ êîìïèëÿòîðîâ: FASM, MASM32 è NASM.<p>Âåðñèÿ äëÿ KolibriOS äîëæíà èñïðàâíî ðàáîòàòü íà ëþáûõ êîíôèãóðàöèÿõ, óäîâëåòâîðÿþùèõ ñëåäóþùèì òðåáîâàíèÿì:<ol><li>Ìèíèìàëüíàÿ ðåâèçèÿ SVN ÿäðà è äðàéâåðîâ KolibriOS: 574. Ïîñëåäíèå âåðñèè äèñòðèáóòèâîâ è îáíîâëåíèÿ SVN ìîæíî ñêà÷àòü ñ îôèöèàëüíîãî ñàéòà: <a href='http://www.kolibrios.org/'>www.kolibrios.org</a>.<li>Çâóêîâàÿ êàðòî÷êà, ïîääåðæèâàåìàÿ àóäèî-áèáëèîòåêîé <a href='http://infinity-sound.narod.ru/'>Infinity Sound</a> - ýòî âñòðîåííûé çâóêîâîé äðàéâåð KolibriOS. Íà äàííûé ìîìåíò äðàéâåð ïîääåðæèâàåò ìíîãèå âñòðîåííûå êîäåêè ñîâìåñòèìûå ñî ñòàíäàðòîì AC'97.</ol>Âàøà êîíôèãóðàöèÿ óäîâëåòâîðÿåò âûøåïåðå÷èñëåííûì òðåáîâàíèÿì, íî uFMOD íà íåé îòêàçûâàåòñÿ ðàáîòàòü? - Ïîæàëóéñòà, ñîîáùèòå íàì îá ýòîì (<a href='#ci'>êîíòàêòíûå äàííûå</a> ïðèâîäÿòñÿ â íèçó äàííîé ñòðàíèöû).<p><ul><li><a href='#1'>Ïðåæäå ÷åì íà÷àòü</a><li><a href='#2'>Óòèëèòû</a><ul><li><a href='#21'>XMStrip</a><li><a href='#22'>Eff</a></ul><li><a href='#3'>Êîìïèëÿöèÿ áèáëèîòåêè</a><li><a href='#4'>Ïðèìåðû</a><li><a href='#5'>Äîïîëíèòåëüíîå óìåíüøåíèå ðàçìåðà</a><li><a href='#6'>×àÂî</a><li><a href='#7'>Áëàãîäàðíîñòè</a></ul><p>&nbsp;<br><a name='1'><b>Ïðåæäå ÷åì íà÷àòü</b></a><p>KolibriOS - ýòî îïåðàöèîííàÿ ñèñòåìà, íàïèñàííàÿ íà àññåìáëåðå. Ïîýòîìó ó íå¸ òàêîé ìàëåíüêèé ðàçìåð è òàêàÿ âûñîêàÿ ïðîèçâîäèòåëüíîñòü, íî òîëüêî íå â óùåðá âîçìîæíîñòÿì ýòîé ïîëíîöåííîé îïåðàöèîíêè, êàê Âû, âîçìîæíî, óæå óáåäèëèñü. Àíàëîãè÷íàÿ èäåîëîãèÿ ïîääåðæèâàåòñÿ è â ïðîåêòå uFMOD ;)<p>Îñíîâíóþ ÷àñòü äàííîãî ðóêîâîäñòâà ìîæíî óñïåøíî âûïîëíèòü ïðÿìî â ñàìîé ñèñòåìå Kolibri. Òåì íå ìåíåå, òàê êàê ìíîãèå íîâè÷êè â ïðîãðàììèðîâàíèè Kolibri ïðåäïî÷èòàþò êîìïèëèðîâàòü ñâîè ïðîåêòû â Windows è ïîòîì ïåðåíîñèòü èõ â Kolibri äëÿ òåñòèðîâàíèÿ, â äàííîì ðóêîâîäñòâå ìû ïðèìåíèì êðîññêîìïèëÿöèþ.<p>&nbsp;<br><a name='2'><b>Óòèëèòû</b></a><p>Åñòü ïàðà áåñïëàòíûõ óòèëèò äëÿ èñïîëüçîâàíèÿ ñîâìåñòíî ñ uFMOD: XMStrip è Eff. Ïîêà ÷òî íè îäíà èç íèõ íå ïîðòèðîâàíà â Kolibri. Ïîýòîìó ìîæåòå ñêà÷àòü ëþáîé èç äðóãèõ äèñòðèáóòèâîâ uFMOD (äëÿ Win32, Linux èëè Unix/BSD) è èñïîëüçîâàòü óòèëèòû êðîññïëàòôîðìåííî. Íåçàâèñèìî îò âûáðàííîãî äèñòðèáóòèâà, îáå óòèëèòû ñîâìåùàþò â ñåáå êîíñîëüíûé è ãðàôè÷åñêèé (GUI) èíòåðôåéñû. Ðåæèì GUI èíòóèòèâíî ïîíÿòåí. Äàâàéòå ðàññìîòðèì êîíñîëüíûé èíòåðôåéñ.<p><table border=0 cellpadding=0 cellspacing=0 bgcolor=#708090 style='font-size:9pt;font-family:Arial,Aerial'><tr><td colspan=3 height=1><tr height=18><td style='color:#E7E7E7'><b>&nbsp;SVN&nbsp;</b><td bgcolor=#E7E7E7>&nbsp;<a href='http://ufmod.svn.sourceforge.net/viewvc/ufmod'>Èñõîäíèêè äîñòóïíû ÷åðåç SVN</a>&nbsp;<td width=1><tr><td colspan=3 height=1></table><p><a name='21'><b><i>XMStrip</i></b></a> îáðàáàòûâàåò çàäàííûé XM ôàéë ñ öåëüþ óìåíüøåíèÿ ðàçìåðà, áåç ïîòåðè êà÷åñòâà çâó÷àíèÿ.  ïðîöåññå îáðàáîòêè, XMStrip óäàëÿåò íåèñïîëüçóþùèåñÿ èíñòðóìåíòû è ïàðòèòóðû, âûðåçàåò êîììåíòàðèè è ïåðåïàêîâûâàåò âíóòðåííèå ñòðóêòóðû ôàéëà äëÿ óìåíüøåíèÿ ðàçìåðà è ïîâûøåíèÿ ñêîðîñòè çàãðóçêè. Äëÿ íà÷àëà, îòêðîåì êîíñîëü è ââåä¸ì <code>xmstrip /h</code>, ÷òîáû ïîëó÷èòü ñëåäóþùåå ñîîáùåíèå:<p><center><table border=0 cellpadding=8><tr bgcolor=#000000><td><pre><font color=#FFFFFF> USAGE:  xmstrip [options] file [output]
  2.         file   - input file name.
  3.         output - optional output file name.          
  4. options:
  5.  /c - clean only (don't strip)
  6.  When [output] is not specified, XMSTRIP
  7.  attempts to overwrite the input. If file
  8.  name contains spaces, enclose it in "".</font></td></tr></table></center><p>Åñëè èìÿ ñîõðàíÿåìîãî ôàéëà íå óêàçàíî, XMStrip ïåðåçàïèøåò çàäàííûé ôàéë. Åñëè èìÿ ôàéëà ñîäåðæèò ïðîáåëû, åãî íåîáõîäèìî çàêëþ÷èòü â êàâû÷êè ("").<p>Èìåéòå â âèäó, ÷òî äðóãèå ïðîèãðûâàòåëè XM ôàéëîâ, âîçìîæíî, îòêàæóòñÿ âîñïðîèçâîäèòü ôàéë, îáðàáîòàííûé XMStrip. Îïöèÿ <b>/c</b> ïðåäóñìîòðåíà äëÿ âîññòàíîâëåíèÿ òàêèõ ôàéëîâ èëè îáðàáîòêè îáû÷íûõ XM ôàéëîâ, êîòîðûå ïëàíèðóåòñÿ ïðîèãðûâàòü íå òîëüêî â uFMOD.<p><a name='22'><b><i>Eff</i></b></a> ïðåäíàçíà÷àåòñÿ äëÿ îïûòíûõ êîäåðîâ, æåëàþùèõ ñýêîíîìèòü êàæäûé áàéò â ñâîèõ ïðèëîæåíèÿõ. Äëÿ ýòîãî íóæíî âûäåëèòü òîëüêî òå ôóíêöèè uFMOD, êîòîðûå äåéñòâèòåëüíî áóäóò èñïîëüçîâàíû â öåëåâîì ïðèëîæåíèè, ïåðåêîìïèëèðîâàòü áèáëèîòåêó è ïîëó÷èòü íàèìåíüøèé âîçìîæíûé ðàçìåð. Âîò, ÷òî âûäà¸ò <code>eff /h</code> :<p><center><table border=0 cellpadding=8><tr bgcolor=#000000><td><pre><font color=#FFFFFF> USAGE:  eff [options] file
  9.          file - input file name
  10.          options:
  11.           /Dm - generate a masm32/tasm dump
  12.           /Dd - generate a Pascal (Delphi) dump
  13.           /Dc - generate a C/C++ dump
  14.           /Ds - generate an RCDATA resource dump
  15.           /Di - disable infoAPI:
  16.                     uFMOD_GetStats, uFMOD_GetRowOrder,
  17.                     uFMOD_GetTitle and uFMOD_GetTime
  18.           /Dp - disable uFMOD_Pause, uFMOD_Resume
  19.                     and XM_SUSPENDED
  20.           /Dv - disable volume control
  21.           /Dj - disable Jump2Pattern
  22.           /Df - disable loading XM from file
  23.           /Dl - disable XM_NOLOOP
  24.           /M  - mark & clear unused chunks of
  25.                 data in a masm32/tasm compatible dump</font></td></tr></table></center><p>Ïîñëåäíèé ïàðàìåòð - èìÿ XM ôàéëà, íà èñïîëüçîâàíèå êîòîðîãî îðèåíòèðóþòñÿ ñëåäóþùèå ïàðàìåòðû îïòèìèçàöèè:<ul><li><b>/Dm</b> ñîçäà¸ò òåêñòîâûé äàìï äàííîãî XM ôàéëà äëÿ èñïîëüçîâàíèÿ â èñõîäíèêå íà MASM32 èëè TASM. Ñèíòàêñèñ ñîâìåñòèì ñ FASM è NASM. Âìåñòå ñ òåì, è FASM è NASM ïîçâîëÿþò âêëþ÷àòü â èñïîëíèìûé îáðàç ñîäåðæèìîå ïðîèçâîëüíûõ ôàéëîâ íàïðÿìóþ. Äàííóþ îïöèþ íåîáõîäèìî âêëþ÷èòü ïðè èñïîëüçîâàíèè êëþ÷à <b>/M</b> (ñì. íèæå).<li><b>/Dd</b> è <b>/Dc</b> ñîçäàþò ïîäîáíûå äàìïû, íî äëÿ Pascal (Delphi, Kylix, FreePascal) èëè C/C++ ñîîòâåòñòâåííî.<li><b>/Ds</b> ñîçäà¸ò àíàëîãè÷íûé äàìï â ôîðìàòå RCDATA, êîòîðûé èñïîëüçóåòñÿ â ñêðèïòàõ îïèñàíèÿ ðåñóðñîâ (*.rc).  KolibriOS äàííàÿ îïöèÿ áåñïîëåçíà.<li>Êëþ÷ <b>/Di</b> îòêëþ÷àåò âñå èíôîðìàòèâíûå ôóíêöèè: uFMOD_GetStats, uFMOD_GetRowOrder, uFMOD_GetTitle è uFMOD_GetTime. Ýòî äà¸ò âûèãðûø íå òîëüêî â ðàçìåðå áèáëèîòåêè, íî è â ñêîðîñòè.<li><b>/Dp</b> îòêëþ÷àåò ôóíêöèè uFMOD_Pause è uFMOD_Resume è ïîääåðæêó ôëàãà XM_SUSPENDED. Åñëè Âû íå ñîáèðàåòåñü èñïîëüçîâàòü pause/resume, âêëþ÷èòå ýòîò êëþ÷ â ïàðàìåòðû êîìàíäíîé ñòðîêè äëÿ ýêîíîìèè åù¸ íåñêîëüêèõ áàéò.<li>uFMOD_SetVolume óâåëè÷èâàåò íå òîëüêî ðàçìåð áèáëèîòåêè, íî åù¸ è çàãðóçêó CPU. Äîáàâüòå êëþ÷ <b>/Dv</b>, ÷òîáû îòêëþ÷èòü ýòó ôóíêöèþ è ñýêîíîìèòü íåñêîëüêî áàéò è òàêòîâ ;)<li><b>/Dj</b> îòêëþ÷àåò ôóíêöèþ Jump2Pattern. Äàííàÿ ôóíêöèÿ ïðåäíàçíà÷åíà äëÿ î÷åíü ñïåöèôè÷íûõ çàäà÷ è, ïîýòîìó, èñïîëüçóåòñÿ ðåäêî.  ðàçäåëå <a href='#5'>"Äîïîëíèòåëüíîå óìåíüøåíèå ðàçìåðà"</a> ïîäðîáíî îïèñàíî èñïîëüçîâàíèå Jump2Pattern.<li>Âàì íå íóæíà ïîääåðæêà çàãðóçêè ôàéëîâ - òîëüêî ïðîèãðûâàíèå èç ïàìÿòè? Òîãäà, íå çàäóìûâàÿñü, âêëþ÷àéòå <b>/Df</b> äëÿ äîïîëíèòåëüíîãî óìåíüøåíèÿ ðàçìåðà.<li>Êëþ÷ <b>/Dl</b> (ìàëåíüêàÿ L) îòêëþ÷àåò ïîääåðæêó ôëàãà XM_NOLOOP (è, ñëåäîâàòåëüíî, áëàãîòâîðíî âëèÿåò íà ðàçìåð è ñêîðîñòü).<li>Ñîâñåì "ýêñòðåìàëüíûé" âèä îïòèìèçàöèè ïðåäóñìîòðåí ñïåöèàëüíî äëÿ àññåìáëåðùèêîâ.  êàæäîì XM ôàéëå åñòü öåïî÷êè áàéò, êîòîðûå çàðåçåðâèðîâàíû íà áóäóùåå, èëè ïðîñòî ñîäåðæàò êîììåíòàðèè èëè ëþáóþ äðóãóþ, íå èìåþùóþ îòíîøåíèÿ ê ïðîèãðûâàíèþ, èíôîðìàöèþ. <b>/M</b> âûäåëÿåò ýòè "äûðû", ïðåäîñòàâëÿÿ âîçìîæíîñòü çàïîëíèòü èõ ïîëåçíîé èíôîðìàöèåé (ðàçìåñòèòü äàííûå èëè äàæå êîä). Ïðèìåð src/Masm32/ êàê ðàç èñïîëüçóåò ýòó îïöèþ.</ul>Eff ñîçäà¸ò ôàéë EFF.INC è, ñîãëàñíî çàäàííûì îïöèÿì, òåêñòîâûé äàìï. Ðàññìîòðèì íåñêîëüêî îäèíàêîâûõ ïðèìåðîâ (âñå âåðíû):<p><b>eff /Dmpvjfl /M file.xm<br>eff /M /Dm /Dp /Dv /Dj /Df /Dl file.xm<br>eff -M -Dmpvjfl file.xm</b><p>Ëþáîé èç ïðåäûäóùèõ ïðèìåðîâ ñîçäàñò àññåìáëåðíûé äàìï, âûäåëèò "äûðû" è ïðåäâàðèòåëüíî çàïîëíèò èõ íóëÿìè. Ôàéë EFF.INC ñîäåðæèò ñïèñîê ýôôåêòîâ XM, êîòîðûå äåéñòâèòåëüíî èñïîëüçóþòñÿ â çàäàííîì ôàéëå, è íåêîòîðûå äîïîëíèòåëüíûå ôëàãè äëÿ îòêëþ÷åíèÿ pause/resume, ðåãóëÿòîðà ãðîìêîñòè, Jump2Pattern, ïîääåðæêè ôàéëîâ è XM_NOLOOP. Ïîìåñòèòå ýòîò íîâûé EFF.INC â src/ufmodlib/src/ è ïåðåêîìïèëèðóéòå áèáëèîòåêó (â ñëåäóþùåì ðàçäåëå îñâåùåíû íåêîòîðûå âîïðîñû êàñàþùèåñÿ êîìïèëÿöèè èñõîäíèêîâ áèáëèîòåêè). Òåïåðü ó Âàñ èìååòñÿ ñâîé ñîáñòâåííûé îïòèìèçèðîâàííûé áèëä uFMOD, íî èìåéòå â âèäó, ÷òî â ýòîì áèëäå âêëþ÷åíû íå âñå ýôôåêòû XM. Ïîýòîìó, íå ñëåäóåò èñïîëüçîâàòü åãî äëÿ ïðîèãðûâàíèÿ äðóãèõ XM ôàéëîâ, îòëè÷íûõ îò îáðàáîòàííîãî óòèëèòîé Eff!<p>&nbsp;<br><a name='3'><b>Êîìïèëÿöèÿ áèáëèîòåêè</b></a><p>Íåîáõîäèìîñòü êîìïèëÿöèè èñõîäíèêîâ áèáëèîòåêè uFMOD âîçíèêàåò ïðè èñïîëüçîâàíèè óòèëèòû <a href='#22'>Eff</a>, à òàêæå äëÿ âêëþ÷åíèÿ îñîáûõ ðåæèìîâ è îïöèé, êîòîðûå îòêëþ÷åíû â ñáîðêå ïî óìîë÷àíèþ (ñì. òàáëèöó <b>Îïöèè</b> íèæå). Äëÿ òåõ, êòî õî÷åò ïîïðàêòèêîâàòüñÿ â àññåìáëåðå è/èëè ðàçîáðàòüñÿ â áèáëèîòåêå íà ñàìîì íèçêîì óðîâíå, è ïðåäíàçíà÷åí äàííûé ðàçäåë.<p>Èñõîäíèêè uFMOD ðàñïîëîæåíû â src/ufmodlib/src/:<ul>
  26. <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>&nbsp;<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>&nbsp;<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>
  27. <b>Ôàéë 1 :</b> XM1_HEADER P11 P12 P13     I11 I12
  28. <b>Ôàéë 2 :</b> XM2_HEADER P21 P22 P23 P24 I21 I22 I23 I24
  29. <b>Ôàéë 3 :</b> XM3_HEADER P31             I31
  30. </pre><i><b>Ïîÿñíåíèå:</b> XMn_HEADER - ýòî çàãîëîâîê n-íîãî ôàéëà. Pnm - ýòî m-íàÿ ïàðòèòóðà n-íîãî ôàéëà. Inm - ýòî m-íûé èíñòðóìåíò n-íîãî ôàéëà.</i><p>Äëÿ íà÷àëà, ñîâìåñòèì âñå 3 êîìïîçèöèè áåç îïòèìèçàöèè èíñòðóìåíòîâ:<pre>
  31. <b>Ôàéë 4 :</b> XM4_HEADER P11 P12 P13 P21 P22 P23 P24 P31 I11 I12 I21 I22 I23 I24 I31
  32. </pre>Ïðåäñòàâüòå, ÷òî I12 î÷åíü ïîõîæ èëè èäåíòè÷åí I23; I24 è I31 òîæå ïðàêòè÷åñêè îäèíàêîâû. Ìû ìîæåì çàñòàâèòü ïàðòèòóðû P2n èñïîëüçîâàòü I12 âìåñòî I23, à P31 ïåðåêëþ÷èòü íà I24. Òîãäà ìû ñìîæåì óäàëèòü I23 è I31:<pre>
  33. <b>Ôàéë 4 :</b> XM4_HEADER P11 P12 P13 P21 P22 P23 P24 P31 I11 I12 I21 I22 I24
  34. </pre>Íåîáõîäèìî ñêîððåêòèðîâàòü êîìàíäû çàöèêëèâàíèÿ è ññûëêè íà ïàðòèòóðû â êîìïîçèöèÿõ 2 è 3 ïîñëå ñîâìåùåíèÿ. Êîíå÷íî, ìîæíî ñîâìåùàòü è áîëüøåå êîëè÷åñòâî êîìïîçèöèé, íî ôîðìàò XM èìååò îãðàíè÷åíèÿ íà ìàêñèìàëüíîå êîëè÷åñòâî ïàðòèòóð è èíñòðóìåíòîâ â ôàéëå. Âñå îïåðàöèè íàä XM-ôàéëàìè íàäëåæèò ïðîâîäèòü â ñïåöèàëüíîì ÏÎ - òðåêåðå. Äëÿ ïðîèãðûâàíèÿ êîìïîçèòíîãî ôàéëà äîñòàòî÷íî îäíîãî âûçîâà ôóíêöèè uFMOD_PlaySong. Äàëåå íóæíî èñïîëüçîâàòü ôóíêöèþ uFMOD_Jump2Pattern äëÿ ïðîèãðûâàíèÿ îòäåëüíûõ êîìïîçèöèé èç îáùåãî ôàéëà â ïðîèçâîëüíîé ïîñëåäîâàòåëüíîñòè. Íàïðèìåð, uFMOD_Jump2Pattern(3) ïåðåêëþ÷èòñÿ íà âòîðóþ êîìïîçèöèþ, uFMOD_Jump2Pattern(7) íà÷í¸ò ïðîèãðûâàòü òðåòüþ, à uFMOD_Jump2Pattern(0) âåðí¸òñÿ îáðàòíî ê ïåðâîé. Òî÷íûå çíà÷åíèÿ èíäåêñîâ ñòàðòîâûõ ïàðòèòóð êàæäîé êîìïîçèöèè ïîñëå ñîâìåùåíèÿ ëåãêî âû÷èñëèòü â óìå, íî ìîæíî è â òðåêåðå ïîäñìîòðåòü :) Ïðèìåð <b>jmp2pat</b> èñïîëüçóåò äàííûé ñïîñîá îïòèìèçàöèè.<p> èñïîëüçîâàíèè Jump2Pattern åñòü åù¸ îäèí ïëþñ - ïåðåêëþ÷åíèå ïðîèñõîäèò ãîðàçäî áûñòðåå (ïðàêòè÷åñêè ìîìåíòàëüíî) ÷åì ïðè îñòàíîâêå òåêóùåé êîìïîçèöèè è ïîñëåäóþùåé çàãðóçêå íîâîé. Ìîæåòå áðàòü íà âîîðóæåíèå ýòó ôèøêó äëÿ ðåàëèçàöèè ðåøåíèé, òðåáóþùèõ ìàêñèìàëüíî áûñòðîãî ïåðåêëþ÷åíèÿ ìóçûêàëüíîãî ôîíà.<p>&nbsp;<br><a name='6'><b>×àÂî</b></a><p><span style='color:#008080'><b>Â:</b> Áèáëèîòåêà uFMOD äåéñòâèòåëüíî áåñïëàòíà äëÿ ëþáîãî èñïîëüçîâàíèÿ, âêëþ÷àÿ êîììåð÷åñêîå?</span><br><b>Î:</b> Äà, òåêóùàÿ âåðñèÿ àáñîëþòíî áåñïëàòíà äëÿ èñïîëüçîâàíèÿ â ëþáûõ öåëÿõ.<p><span style='color:#008080'><b>Â:</b> Ãäå áû äîñòàòü êîìïîçèöèè â ôîðìàòå XM?</span><br><b>Î:</b> <a href='http://modarchive.org/'>The Mod Archive</a> ñîäåðæèò âíóøèòåëüíûõ ðàçìåðîâ àðõèâ ñ áåñïëàòíûìè òðåêåðñêèìè êîìïîçèöèÿìè â ôîðìàòå XM, IT, S3M è MOD. <a href='http://www.modplug.com/'>Open Modplug Tracker</a> óìååò êîíâåðòèðîâàòü IT, S3M è MOD â XM áåç ïîòåðè êà÷åñòâà.  ñåòè ìíîãî òàëàíòëèâûõ êîìïîçèòîðîâ, êîòîðûå áåñïëàòíî âûêëàäûâàþò ñâîè ðàáîòû. Íå çàáûâàéòå óêàçûâàòü ñîîòâåòñòâóþùèå ïîìåòêè îá àâòîðñòâå!<p><span style='color:#008080'><b>Â:</b> Ñóùåñòâóåò ëè êàêàÿ-ëèáî ñâÿçü ìåæäó ïðîåêòîì uFMOD è ðàçðàáîòêàìè Firelight Technologies&#174;: FMOD è miniFMOD?</span><br><b>Î:</b> Íà äàííûé ìîìåíò íèêàêîé ñâÿçè óæå íåò. Äî 2004ãî ãîäà âêëþ÷èòåëüíî ïðîåêò uFMOD îñíîâûâàëñÿ íà èñõîäíûõ êîäàõ áèáëèîòåêè miniFMOD. Ñ òåõ ïîð, êîä uFMOD áûë ïîëíîñòüþ ïåðåïèñàí, îñíàù¸í íîâûìè ôóíêöèÿìè, îïòèìèçèðîâàí è îòëàæåí. Òàêèì îáðàçîì, uFMOD áîëåå íå ñâÿçàí íè ñ FMOD, íè ñ miniFMOD.<p><span style='color:#008080'><b>Â:</b> Íåêîòîðûå ðàçðàáîò÷èêè óòâåðæäàþò, ÷òî èõ áèáëèîòåêè óâåëè÷èâàþò ýêçåøíèêè íà N-íîå êîëè÷åñòâî êèëîáàéò. Íà ñêîëüêî êèëîáàéò óâåëè÷èâàåòñÿ ðàçìåð ýêçåøíèêà ïðè èñïîëüçîâàíèè uFMOD?</span><br><b>Î:</b> Òî÷íîãî îòâåòà íà ýòîò âîïðîñ íåò, òàê êàê ýòîò ðàçìåð çàâèñèò îò ìíîãèõ ôàêòîðîâ: èñïîëüçóåìûå õàðàêòåðèñòèêè áèáëèîòåêè (îñîáåííî ïðè èñïîëüçîâàíèè óòèëèòû Eff), îñíîâíîé êîä ïðîãðàììû, ðàçìåð XM-ôàéëà (åñëè XM âêëþ÷àåòñÿ â îáðàç ýêçåøíèêà). Ðàçìåð òàêæå çàâèñèò îò îïöèé ëèíêåðà. Ïðèìåð bin/mini çàíèìàåò 4768 áàéò áåç ñæàòèÿ.<p><span style='color:#008080'><b>Â:</b> Ãäå ìîæíî ðàçäîáûòü îôèöèàëüíîå îïèñàíèå ôîðìàòà XM?</span><br><b>Î:</b> Ïîëíîãî îôèöèàëüíîãî îïèñàíèÿ ñîâðåìåííîãî ôîðìàòà XM íåò. Ïîçâîëüòå ïðåäëîæèòü âçàìåí ýòîò äîêóìåíò: <a href='http://sourceforge.net/project/showfiles.php?group_id=158498&package_id=234625'>"The Unofficial XM File Format Specification: FastTracker II, ADPCM and Stripped Module Subformats"</a> (òîëüêî íà àíãë.).  äàííîì äîêóìåíòå îïèñàíû ìíîãèå òîíêîñòè ðàáîòû ñ ôîðìàòîì XM, âêëþ÷àÿ âñå íåñòàíäàðòíûå ðàñøèðåíèÿ, êîòîðûå íà äàííûé ìîìåíò ïîääåðæèâàåò uFMOD. Ê òîìó æå, èç èñõîäíèêîâ ModPlug (íà C++) ìîæíî ïî÷åðïíóòü ìàññó ïîëåçíîé èíôîðìàöèè ïî òðåêåðñêèì ôîðìàòàì ôàéëîâ.<p>&nbsp;<br><a name='7'><b>Áëàãîäàðíîñòè</b></a><p>antarman, Barracuda, bogrus, chris_b, cresta, dododo, flaith, Four-F, GL#0M, norki, q_q, SofT MANiAC, S_T_A_S_, voodooattack è yoxola çà ïîìîùü â óñòðàíåíèè îøèáîê, ïðåäëîæåíèÿ ïî óëó÷øåíèþ áèáëèîòåêè, ïðèìåðû èñïîëüçîâàíèÿ ïîä ðàçíûå êîìïèëÿòîðû è âñ¸ îñòàëüíîå, òàê èëè èíà÷å ïîìîãàþùåå íàì â ðàçâèòèè ïðîåêòà.<p><a href='http://wasm.ru'>[WASM.RU]</a> è <a href='http://sf.net'>SourceForge.net</a> çà ïîääåðæêó è õîñòèíã.<p>&nbsp;<br><b>Àâòîð&#169;òâî</b><p>Èñõîäíûå êîäû uFMOD è ñîïðîâîæäàþùèå óòèëèòàðíûå ïðèëîæåíèÿ &#169; 2005 - 2007 Asterix è Quantum.<br>Âñå ïðàâà çàùèùåíû.<p>Êîìïîçèöèè:<ul><li>Minimal III &#169; 2006 - 2007 SofT MANiAC (CoolPHat).<li>BlitzXMK.XM èç ïðèìåðà Jump2Pat &#169; 2007 Kim (îí æå - norki).</ul></div><table border=0 cellpadding=0 cellspacing=0 width=100%><tr bgcolor=#708090><td height=1><tr bgcolor=#E7E7E7><td height=52 style='color:#708090;font-size:10pt;font-family:Arial,Aerial' align=center>Íàøëè îøèáêó? Æåëàåòå çàäàòü âîïðîñ ðàçðàáîò÷èêàì èëè âûñêàçàòü ïðåäëîæåíèå ïî óëó÷øåíèþ áèáëèîòåêè?<br>Ðàçðàáàòûâàåòå èíòåðåñíûé ïðîåêò ñ èñïîëüçîâàíèåì uFMOD? Âàì ñþäà: <a href='mailto:ufmod@users.sf.net' name='ci'>ufmod@users.sf.net</a></table></body></html>