[ English | Español | Pyccκuú ]

μFMOD v1.25.2 para Win32

uFMOD es una librería para reproducir música en formato XM, desarrollada completamente en lenguaje ensamblador. Es perfecta para aplicaciones de tamaño y tiempo crítico, libre de defectos audibles, altamente confiable, fácil de usar, de código fuente abierto y multiplataforma. Permite reproducir ficheros, recursos y arreglos estáticos en memoria. Es capaz de reproducir inclusive ficheros corruptos y/o modificados. Ejemplos de uso disponibles para muchos de los siguientes compiladores: Visual C++, C#, Visual Basic, PureBasic, FreeBASIC, BlitzMax, Emergence BASIC, Delphi, Borland C++ Builder, Dev-C++ (MingW), FreePascal, MASM32, FASM, NASM y TASM.

 
¿WINMM, DirectSound u OpenAL?

uFMOD para Win32 soporta WINMM, DirectX® DirectSound y OpenAL. Los tres tienen pros y contras. DirectSound ofrece efectos de sonido avanzados, administra automáticamente el mezclado de multiples canales y hasta permite generar ambientación en 3D. También es considerado ser mas confiable que WINMM. En cambio, WINMM es soportado hasta en los PC mas "viejitos" con Windows 95. OpenAL es multiplataforma (disponible en Windows, Linux, Macintosh, etc.), soporta efectos de ambientación acelerados en hardware, lo cual es muy útil en el desarrollo de juegos. Sin embargo, OpenAL no viene preinstalado en Windows XP y anteriores, excepto en algunos equipos OEM con tarjetas de sonido Creative de gama alta. Siendo así, es probable que Ud. tenga que descargar e instalar OpenAL, si desea usar este sistema en el desarrollo de sus aplicaciones. Dependiendo del hardware y los controladores, WINMM a veces puede sonar mejor que DirectSound y viceversa. De todas formas, las diferencias generalmente no son notorias para la mayoria de los usuarios. Si no está seguro de cual escoger, es probable que la versión clásica de uFMOD para WINMM corresponda mejor con sus necesidades. Por lo menos, es mas fácil de usar: tan sólo un par de lineas de código hacen que su aplicación comience a reproducir audio.

 
Herramientas

Hay 2 herramientas gratuitas para usar con uFMOD: XMStrip y Eff. Ambas ofrecen una interfaz dual: consola y gráfica (GUI). Cuando se ejecutan con parametros de linea de comandos, se activa el modo de consola. El modo GUI es bastante intuitivo. Vamos a exponer el modo de consola.

 SVN  Código fuente completo disponible 

XMStrip recibe un fichero XM como entrada, modifica su contenido para minimizar el tamaño, sin que esto afecte la calidad del sonido. Concretamente, XMStrip elimina los datos no utilizados (instrumentos y patrones redundantes, comentarios, etc.) y agrupa los patrones de notas para optimizar el tiempo de lectura y procesamiento del XM. Al ingresar xmstrip /h obtenemos la siguiente respuesta:

 uFMOD XMSTRIP
 USAGE:  xmstrip [options] file [output]
         file   - input file name, which can
                  contain wildcards (* and ?)         
                  for batch processing.
         output - optional output file name
 options:
  /c - clean only (don't strip)
 When [output] is not specified, XMSTRIP
 attempts to overwrite the input. If file
 name contains spaces, enclose it in "".

Si no especifica el nombre del fichero de salida, XMStrip intentará sobreescribir el fichero de entrada. Si el nombre del fichero contiene espacios, enciérrelo entre comillas dobles (""). XMStrip admite el uso de comodines (* y ?) para procesamiento por lotes.

Tenga presente, que otros reproductores de XM, probablemente, rechacen los ficheros producidos por XMStrip. Especifique /c para 'recuperar' un fichero así o símplemente para procesar un fichero normal que desea poder usar en otros reproductores de XM.

Eff es útil para los usuarios avanzados, que desean ahorrar hasta el último byte en sus aplicaciones. La idea es extraer sólo aquellas opciones que realmente se van a usar en la aplicación, recompilar la librería uFMOD y obtener el menor tamaño posible. Comencemos abriendo la consola y escribiendo eff /h para obtener el siguiente resúmen:

 uFMOD XM effects extractor
 USAGE:  eff file [options]
         file - input file name
         options:
          /Dm - generate a masm32/tasm dump
          /Dd - generate a Pascal (Delphi) dump
          /Dc - generate a C/C++ dump
          /Ds - generate an RCDATA resource dump
          /Di - disable infoAPI:
                    uFMOD_GetStats, uFMOD_GetRowOrder,
                    uFMOD_GetTitle and uFMOD_GetTime
          /Dp - disable uFMOD_Pause, uFMOD_Resume
                    and XM_SUSPENDED
          /Dv - disable volume control
          /Dj - disable Jump2Pattern
          /Df - disable loading XM from file
          /Dr - disable loading XM from resource
          /Dl - disable XM_NOLOOP
          /M  - mark & clear unused chunks of
                data in a masm32/tasm compatible dump

Como puede ver, el último parámetro es el nombre del fichero XM que se va a usar con la aplicación. Opciones adicionales:

Si no se presenta error alguno, Eff debe generar un fichero EFF.INC y un volcado hexadecimal, si éste fue solicitado. Algunos ejemplos (todos son correctos):

eff /Dmpvjfrl /M ejemplo.xm
eff /M /Dm /Dp /Dv /Dj /Df /Dr /Dl ejemplo.xm
eff -M -Dmpvjfrl ejemplo.xm

Cualquiera de estas sentencias produce un volcado para MASM32/TASM con todos los 'huecos' delimitados y rellenos con ceros por defecto. El fichero de cabecera EFF.INC recopila los efectos XM que realmente se utilizan en el fichero XM dado, más algunas banderas adicionales para deshabilitar las funciones de pausar/reanudar, control de volumen, Jump2Pattern, soporte para ficheros y recursos y XM_NOLOOP. Copie EFF.INC en ufmodlib\src\ y recompile la librería. Consulte la siguiente sección para mayor información sobre cómo recompilar uFMOD. Acaba de compilar su propia versión ultraoptimizada de uFMOD, pero recuerde que ésta contiene un subconjunto de efectos XM. Entonces, ¡sólo servirá para reproducir correctamente el fichero XM especificado como parámetro!

 
Compilando la librería

Es necesario volver a compilar la librería luego de usar Eff y para habilitar ciertas funciones especiales (ver tabla Opciones mas adelante). Algunas personas querrán modificar el código fuente de la librería, para poner a prueba sus conocimientos en lenguaje ensamblador o por cualquier otra razón. Bueno, la siguiente información les podrá servir.

El código fuente completo se encuentra en la subcarpeta ufmodlib\src\:

ufmodlib\import\ contiene el código fuente usado para compilar todas las librerías de importación que se usan conjuntamente con uFMOD. Algunas de estas se usan para generar las librerías uFMOD para Visual Basic 6 y FreePascal. Dichas librerías de importación se encuentran precompiladas en la subcarpeta ufmodlib\lib\. Las librerías de importación para DirectSound y OpenAL para diferentes compiladores también se encuentran aquí. Todas estas librerías se pueden recompilar con el ImpLib SDK. ufmodlib\import\buildall.bat es un fichero de procesamiento por lotes. Sirve para recompilar todas las librerías anteriormente mencionadas.

Hay una herramienta adicional en ufmodlib\bin\. Esta se utiliza para hacer un código objeto en formato OMF compatible con Delphi. No es tan sofisticada como OMF2D de EliCZ, pero tiene la capacidad necesaria para lograr una versión de la librería uFMOD para Delphi. Cuando se compila uFMOD en formato OMF con NASM, o4delphi entra en acción.

 SVN  Código fuente completo disponible 

Una vez terminada la modificación del código fuente, lo que hace falta es compilarlo. Seleccione uno de los ficheros de procesamiento por lotes (BAT) en ufmodlib\, según el compilador para el cual se desea generar la librería. La siguiente tabla le ayudará a escoger el fichero apropiado:

BATCompilador(es) soportado(s)Comentarios
mk_coffVisual C/C++, Dev-C++ (MingW), FASM, NASM, MASM32, FreeBASICEl ensamblador más recomendado para generar uFMOD en formato COFF es FASM.
mk_omfBorland Delphi, Borland C++ Builder, TASMLos usuarios de Borland C++ Builder y TASM deberán asignar LIB a la opción UF_FMT. Los usuarios de Delphi deberán asignarle OBJ.
mk_vb6Visual Basic 6
mk_pbasPureBasic
mk_bmaxBlitzMax
mk_fpasFreePascal
mk_ebasEmergence BASIC

Abra el fichero de procesamiento por lotes en un editor de texto plano. Todo lo contenido entre las siguientes líneas:

rem *** CONFIG START
y
rem *** CONFIG END
es configurable. Primero, verifique los valores en la sección Pathes. Puede encontrar la siguiente opción:
SET UF_MASM=C:\masm32
Si Ud. tiene instalado MASM32, asegúrese de que el camino allí especificado apunte exactamente a la ubicación de MASM32. Supongamos que MASM32 se encuentra instalado en D:\TOOLS\MASM32. Entonces, vamos a modificar el camino de la siguiente forma:
SET UF_MASM=D:\TOOLS\MASM32
No todos los caminos deben ser configurados correctamente para recompilar las librerías. Por ejemplo, si Ud. prefiere usar FASM como el ensamblador por defecto, no es necesario configurar el camino de MASM32. Algunos caminos incluyen nombres de fichero. Por ejemplo:
SET UF_ARCH=ar
ar.exe debe estar en una de las carpetas incluidas en la variable de entorno PATH. Si no, es necesario especificar el camino completo. Supongamos que el camino correcto es C:\Archivos de programa\BlitzMax\bin\ar.exe. Entonces, modifiquemos el valor de UF_ARCH:
SET UF_ARCH=C:\Archivos de programa\BlitzMax\bin\ar.exe
Asegúrese de que los demás caminos necesarios para recompilar las librerías sean correctos. Luego, configure las opciones disponibles, de acuerdo con la siguiente tabla:

Opción*DescripciónValores disponibles*
UF_RAMPEsta opción controla el acoplador de volúmen (interpolación). Esto sirve para suprimir cierto tipo de defecto de sonido conocido como clic, común en música sintetizada. Sin embargo, la interpolación en algunos casos puede generar distorsión. STRONG (fuerte) es el valor por defecto, recomendado para la mayoría de las aplicaciones. En este modo, el acoplador detecta variaciones de volúmen y las suaviza mediante interpolación lineal de 32 etapas. En modo WEAK (débil) hay sólo 16 etapas. WEAK es menos efectivo que STRONG, pero la probabilidad de distorsión también es menor. NONE deshabilita el acoplador. Si no hay interpolación, no puede haber distorsión, pero los clics quedarían al descubierto, a menos que el contenido del XM se encuentre perfectamente balanceado.NONE, WEAK, STRONG
UF_FREQFrecuencia de muestreo (en Hz). 44100 era el valor por defecto hasta uFMOD v1.20. 48KHz produce mejores resultados en la mayoría de las tarjetas de sonido y consume menos recursos del sistema. Por eso, 48000 es el nuevo valor por defecto, recomendado para la mayoría de las aplicaciones. 22050 es para los que aún sienten nostalgia por los tiempos de Amiga...22050, 44100, 48000
UF_UFSCodificación de texto. Las aplicaciones Unicódigo deben usar el valor UNICODE, excepto en BlitzMax, PureBasic y Visual Basic 6, donde la opción UNICODE no es soportada. Recuerde que las aplicaciones Unicódigo corren más rápido sobre NT/XP. Es obligatorio usar UNICODE al compilar uFMOD para .NET.ANSI, UNICODE
UF_FMTIndica si los ficheros se deben generar en formato de librería estática, en formato de código objeto plano o en modo de DLL con librerías de importación. Por ejemplo, Delphi no soporta ficheros lib, por lo cual se debe usar la opción OBJ para compatibilidad con Delphi. C/C++ y todos los ensambladores soportan tanto libs como objs. Algunos compiladores no soportan enlace estático. En ese caso la única opción es DLL, aunque eso le resta elegancia a la aplicación de uFMOD.OBJ, LIB, DLL
UF_ASMEnsamblador. Las librerías uFMOD se pueden compilar con diferentes ensambladores. Escoja su favorito :)MASM, NASM, FASM, TASM
UF_MODENORMAL es el valor por defecto. No tiene nada de especial. UNSAFE deshabilida la comprobación de validez del formato XM a la hora de cargar el fichero. Si Ud. está seguro de que todos los ficheros XM están correctos (puede verificarlos con Eff o con XMStrip), puede recompilar uFMOD en modo UNSAFE para reducir el tamaño de la librería y el tiempo de carga. Tenga en cuenta que ¡Un XM corrupto podría ocasionar un fallo en modo UNSAFE! Al compilar uFMOD en modo BENCHMARK se habilita un indicador de rendimiento, el cual registra el número exacto de ciclos de reloj que cuesta generar poco más de 21 ms de audio a 48 KHz. Este modo es útil para comparar el rendimiento de diferentes versiones de uFMOD. Consulte los ejemplos de C y la bandera BENCHMARK para mayor información. El modo BENCHMARK se encuentra disponible sólo en C, MASM, FASM, NASM y TASM.NORMAL, UNSAFE, BENCHMARK
* Cada fichero de procesamiento por lotes utiliza un subconjunto de estas opciones y valores.

Ejecute el BAT para generar las librerías para todas las plataformas de audio soportadas: WINMM, OpenAL y DirectX DIrectSound. ¡Eso es todo!

 
Ejemplos

Ejemplos de uso para cada compilador se encuentran en carpetas separadas. Cada carpeta contiene tanto la versión para WINMM, como para DirectX. La mayoría también incluye ejemplos para OpenAL. Algunos de los ejemplos mas representativos vienen acompañados de ejecutables precompilados para mostrar el menor tamaño de ejecutable conseguido hasta el momento. Nótese que los ejecutables no estan comprimidos, ni empaquetados.

CarpetaCompiladorAutor(es)Comentarios
BCBBorland C++ Builderdododo
DelphiBorland Delphi*Los usuarios de Delphi 5 - 7 pueden compilar los ejemplos con los ficheros de procesamiento por lotes incluidos para reducir al máximo los ejecutables. Los usuarios de Delphi 9 o posterior sólo podrán compilar los ejemplos desde el IDE, ya que ciertas características del compilador utilizadas en los BATs han cambiado en las últimas versiones.

Además, encontrará unidades completas y actualizadas para DirectSound y OpenAL para Delphi. Las librerías uFMOD para DirectX DirectSound y OpenAL dependen de estas unidades. También puede usarlas por separado en sus proyectos.

FasmFlat Assemblerbogrus, *Ejemplos para FASM puro (sin linker) y con linker de MS o Polink, con el ánimo de mostrar ambas formas de construir un ejecutable usando FASM.
Masm32MASM32*Los ejemplos mas complejos. La idea es ubicar el código ejecutable y datos del programa en el interior de la pista XM para ahorrar unos cuantos bytes. ¡Sólo para verdaderos guru de la optimización! Proyectos para RadASM IDE incluidos.
NasmNetwide Assembler*Usando linker de MS o Polink.
TasmBorland Turbo Assembler*Proyectos para RadASM IDE incluidos.
PureBasicPureBasicflaith, chris_bEstos ejemplos requieren de PureBasic versión 3.50 o posterior. Copie las librerias PureLibrary (Ufmod y DSUfmod) en [PureBasic]\PureLibraries\UserLibraries antes de compilar los proyectos. El fichero de ayuda se encuentra en la subcarpeta HELP. Puede copiarlo en [PureBasic]\Help si desea usarlo directamente desde el entorno de desarrollo (IDE).

El ejemplo de uso con OpenAL requiere del PureBasic OpenAL SDK, el cual se puede encontrar en el sitio web del proyecto ImpLib SDK.

VisualBasic6Visual Basic 6*¡Lea atentamente las instrucciones en el documento adjunto antes de compilar!
CVisual C/C++, Dev-C++*Ejemplos de reproductores XM en C puro. Cargar / detener, pausar / reanudar, silencio, control de volumen, indicador de progreso, medidor VU, arrastrar-y-soltar y hasta algunos efectos DX ¡en 15Kb! Ambos ejemplos soportan Unicódigo y el modo especial BENCHMARK (requiere recompilar la librería en este modo primero). Se pueden compilar con Visual C++ 6.0, Visual C++ 2005/2008 Express Edition y Dev-C++ 4.9.9.2.

También encontrará aquí un ejemplo de uso de la función Jump2Pattern. Utiliza un XM compuesto de varias pistas, proporcionado por Kim (también conocido como norki). Consulte la sección siguiente para mayor información sobre pistas compuestas y la función Jump2Pattern.

Además, hay un ejemplo de uso de OpenAL con enlace dinámico, el cual se puede ejecutar aún si la DLL de OpenAL no se encuentra disponible.

BlitzMaxBlitzMax*, flaithDocumentación (en inglés).

Además, encontrará módulos completos y actualizados para DirectSound y OpenAL para BlitzMax. Las librerías uFMOD para DirectX DirectSound y OpenAL dependen de estos módulos. También puede usarlos por separado en sus proyectos.

FreeBASICFreeBASICvoodooattack, antarmanUtiliza una visualización basada en el Torus de rel. Proyectos para FbEdit IDE incluidos.
FreePascalFreePascal*Probado con FPC v2.0.4.

Además, encontrará unidades completas y actualizadas para DirectSound y OpenAL para FreePascal. Las librerías uFMOD para DirectX DirectSound y OpenAL dependen de estas unidades. También puede usarlas por separado en sus proyectos.

EBASICEmergence BASICts-soft
C#.NET SDK*Algunos ejemplos en C# probados sobre .NET Framework 2.0. Combinan código CLI y nativo en el mismo ejecutable. Para poder usar la API de uFMOD en C# se implementó una envoltura en C++ para que sirva de puente entre el código CLI y el nativo. Código fuente completo incluido.
* Quantum, Asterix

 
Cómo lograr un ejecutable más compacto

Utilice Eff para optimizar la librería uFMOD y hacerla mas pequeña.

Si desea embeber la pista XM directamente en el ejecutable o anexarla como recurso binario, puede intentar primero optimizar el fichero XM. Modplug Player permite comprimir un fichero XM usando ADPCM, ¡pero es un tipo de compresión con pérdidas! Utilice XMStrip para optimización sin pérdidas (en términos de calidad del sonido.)

Si tiene plena certeza de que todos los XM que va a reproducir la aplicación son válidos (ninguno puede estar corrupto o modificado), recompile la librería en modo UNSAFE.

Utilice el comando no documentado /opt:nowin98 en la línea de comandos del linker de VC++ o MASM32 para reducir al mínimo la alineación de secciones. Las secciones .rdata (datos de sólo lectura, donde se encuentran la IAT y otras constantes) y .text (generalmente contiene código ejecutable) se pueden combinar en una. Adicione el siguiente comando en las opciones de MS LINK.EXE o POLINK.EXE: /MERGE:.rdata=.text

Hay otro asunto interesante relacionado con el linker de MS. link.exe introduce cierta información innecesaria entre el DOS stub y el inicio de la cabecera PE. Resulta sencillo localizar estos datos en un editor hexa, porque empiezan con la palabra 'Rich'. A continuación de esta palabra se encuentra el compid codificado de su PC. Si no desea que sus aplicaciones resulten firmadas de esta manera o simplemente prefiere no gastar unos cuantos bytes extra (en realidad, ¡medio Kb!) en la firma, existen 2 formas de evitarlo. En primer lugar, puede cambiar de linker. Como alternativa, puede buscar el la red un artículo sobre cómo modificar link.exe. Por cierto, el artículo en ruso se puede encontrar en wasm.ru.

Delphi acostumbra incluir una sección extra con fixups (.reloc) en cada ejecutable. Las DLL requieren de fixups, pero los ejecutables no. Entonces, intente eliminar la sección .reloc para ahorrar en el tamaño del ejecutable. Las herramientas StripReloc de Jordan Russel, PE Optimizer de Dr. Golova o cualquier otra aplicación similar sirven para este propósito, en caso de que no sepa cómo eliminar los fixups manualmente.

Visual Basic y Delphi suelen crear una sección de recursos (.rsrc) aún cuando su contenido no represente utilidad alguna. Entonces, por lo general, resulta seguro eliminar la sección completa .rsrc, siempre y cuando no contenga plantillas, pistas XM o cualquier otro recurso que su aplicación en verdad necesite. La misma observación tiene validez para la sección .flat en un ejecutable generado con PureBasic. ¡Tenga mucho cuidado al realizar esta clase de operaciones con el ejecutable!

Empaquetadores y compresores, como FSG y UPX, logran reducir el tamaño del ejecutable. Sin embargo, para mayor objetividad, los ejecutables de ejemplo ¡no estan comprimidos!

Al usar librerías de importación en formato MS-COFF (como kernel32.lib, libkernel32.a, etc.) se desperdicia algo de espacio en el ejecutable para almacenar las tablas de thunks originales. Estas tablas sólo se usan al hacer binding. Si Ud. no tiene pensado hacer binding con su ejecutable, puede prescindir de estas tablas y ahorrar hasta 512 bytes o hasta un par de kilobytes, si está usando muchas funciones externas (funciones que se encuentran en DLLs). Para ello debe reemplazar las librerías de importación que vienen con el SDK de su compilador (Visual Studio, masm32, etc.) por versiones modificadas. Dichas versiones modificadas se pueden construir con el ImpLib SDK.

Eso era prácticamente todo lo que se debe saber sobre la optimización del tamaño de un ejecutable. Ahora veamos otra técnica interesante para minimizar el tamaño de los ficheros XM:

Es posible unir varias pistas XM en un solo fichero compuesto. Ya que es posible compartir los instrumentos entre las pistas en el fichero compuesto, el tamaño resultante de este fichero puede ser mucho menor que la suma de los tamaños de los ficheros por separado. Aún sin compartir los instrumentos el tamaño debe ser menor, puesto que sólo se usa un único ejemplar de cabecera XM. Veamos un ejemplo con 3 ficheros XM:

Fichero 1 : CABECERA_XM1 P11 P12 P13     I11 I12
Fichero 2 : CABECERA_XM2 P21 P22 P23 P24 I21 I22 I23 I24
Fichero 3 : CABECERA_XM3 P31             I31
Leyenda: CABECERA_XMn es la cabecera del n-ésimo fichero. Pni es el i-ésimo patrón del n-ésimo fichero. Ini es el i-ésimo instrumento del n-ésimo fichero.

Primero, vamos a unir los 3 ficheros en uno solo sin compartir los instrumentos:

Fichero 4 : CABECERA_XM4 P11 P12 P13 P21 P22 P23 P24 P31 I11 I12 I21 I22 I23 I24 I31
Supongamos que I12 es muy similar o identico a I23 y que I24 es igual que I31. Podemos modificar P2n para hacer que utilicen I12 en vez de I23 y enlazar P31 con I24. Entonces, podremos eliminar I23 e I31:
Fichero 4 : CABECERA_XM4 P11 P12 P13 P21 P22 P23 P24 P31 I11 I12 I21 I22 I24
Al final tendrá que modificar los comandos de ciclos y saltos de patrones y las referencias a instrumentos en los "ficheros" 2 y 3. Obviamente, también es posible unir apenas 2 o más de 3 ficheros, aunque el formato XM establece límites para el número máximo de patrones e instrumentos en un fichero. Esa es, en general, la idea. Es necesario saber usar un tracker para realizar todas estas operaciones sobre un fichero XM. Una vez unidas todas las pistas en un fichero compuesto, podrá iniciar la reproducción con un único llamado a uFMOD_PlaySong y "activar" las pistas por separado con llamados a uFMOD_Jump2Pattern. Por ejemplo, uFMOD_Jump2Pattern(3) pasaria a reproducir la segunda pista, uFMOD_Jump2Pattern(7) saltaria a la tercera y uFMOD_Jump2Pattern(0) regresaria a la primera. Los indices exactos en cada caso dependen de los patrones asignados con el tracker. En C\WINMM\ hay un ejemplo practico.

El uso de Jump2Pattern tiene otra ventaja: la conmutación de pistas se realiza mucho más rápido (casi de inmediato) que el proceso habitual de parar la pista actual y cargar una pista nueva. Por lo tanto, puede usar esta técnica cuando necesite conmutar las pistas de audio de la manera más rápida posible.

 
Preguntas frecuentes

P: ¿Es uFMOD gratis para cualquier tipo de uso, incluido el comercial?
R: Si, actualmente así es.

P: ¿En donde puedo conseguir música en formato XM?
R: En The Mod Archive hay un enorme archivo de música gratis en formatos XM, IT, S3M y MOD. Puede usar el Open Modplug Tracker para convertir ficheros IT, S3M y MOD a formato XM sin perder la calidad. Hay muchos compositores talentosos en la red dispuestos a compartir su música de manera gratuita. ¡Pero no olvide el copyright!

P: ¿Existe alguna relación entre el proyecto uFMOD y las librerías FMOD y/o miniFMOD de Firelight Technologies®?
R: Ya no. Hasta el año 2004 uFMOD se basó en el código fuente abierto de la librería miniFMOD. Desde ese entonces, el código fuente de uFMOD fue completamente reescrito, optimizado y depurado. También fueron agregadas muchas funciones nuevas. Por lo tanto, la versión actual de uFMOD no tiene relación alguna con FMOD o miniFMOD.

P: Algunas librerías aseguran incrementar el tamaño del ejecutable en N kilobytes. ¿En cuanto se incrementa el tamaño de un ejecutable con uFMOD?
R: No es posible establecer un valor exacto, ya que el tamaño depende de muchos factores, a saber: funciones usadas (en especial, si se utiliza la herramienta EFF), código de la aplicación principal, tamaño del fichero XM (cuando el XM es embebido en el ejecutable). También depende de las opciones del linker. El ejemplo MASM32\minimal.exe ocupa únicamente 5.632 bytes sin compresión, sin alterar la estructura del ejecutable, ni otros trucos "sucios" para reducir el tamaño.

P: ¿En dónde puedo conseguir la especificación oficial del formato XM?
R: No existe especificación oficial actualizada. En cambio, puede estudiar el documento "The Unofficial XM File Format Specification: FastTracker II, ADPCM and Stripped Module Subformats" (sólo en inglés). Este documento describe la mayoría de los aspectos relevantes del formato XM original, al igual que todas las extensiones extraoficiales actualmente soportadas por uFMOD. Los códigos fuente de ModPlug (en C++) sirven de referencia sobre formatos derivados del MOD, XM, IT, S3M y muchos otros.

 
Agradecemos a

antarman, Barracuda, bogrus, chris_b, cresta, dododo, flaith, Four-F, GL#0M, norki, q_q, SofT MANiAC, S_T_A_S_, ts-soft, voodooattack y yoxola por reportar errores, sugerir nuevas ideas, aportar ejemplos de uso y de otras formas ayudarnos a mejorar uFMOD.

[WASM.RU] y SourceForge.net por el soporte y hosting.

 
Copyright

Los códigos fuente y ficheros binarios de uFMOD © 2005 - 2008 Asterix y Quantum.
Todos los derechos reservados.

Pistas de ejemplo:

¿Desea reportar un error? ¿Tiene preguntas o sugerencias?
¿Está desarrollando un gran proyecto usando uFMOD? Por favor, mantenganos al tanto: ufmod@users.sf.net