Navegando por
Categoría: Herramienta

PAQCompress v0.3.47 ya está disponible

PAQCompress v0.3.47 ya está disponible

Hola a todos,

Hoy he publicado la versión 0.3.47 de PAQCompress:

PAQCompress v0.3.47

Esta versión arregla los siguientes problemas:

  • Arreglado un problema en donde el programa no funcionaba si la opción «Show Command Prompt» estaba marcada y el programa estaba puesta en una localización que contenía espacios.
  • Arreglado la generación de los «Batch files» si el programa estaba puesto en una localización que contenía espacios.

Puedes descargar esta nueva versión en GitHub haciendo click aquí.

¡Disfruten!

Opus GUI v1.16 ya está disponible

Opus GUI v1.16 ya está disponible

Hola a todos,

Hoy he publicado la versión 1.16 de Opus GUI:

Opus GUI v1.16

Esta versión añade un nuevo archivo llamado audioformats.txt. Aquí puedes especificar las extensiones de los archivos que quieras que el GUI procese:

Puedes añadir extensiones que ffmpeg soporte. Si no tienes ffmpeg en tu sistema, sólamente se procesarán archivos WAV.

Esta versión también ofrece algunos arreglos y mejoras internas y actualiza los APIs de Google a sus versiones más recientes.

Puedes descargar esta versión en GitHub haciendo click aquí.

¡Disfruten!

Colaborando en el proyecto exhale – Parte 2

Colaborando en el proyecto exhale – Parte 2

Hola a todos,

Ayer, comencé a trabajar en mi segunda colaboración para el proyecto exhale, el cual convierte archivos al codec xHE-AAC USAC. Esta vez, trabajé en añadir una opción para mostrar la versión del programa en la consola.

exhale-V-argument-main-software

La imagen de arriba muestra la salida del programa al no pasar ningún argument o al pasar un argumento incorrecto.

No existía una opción que imprima únicamente la versión. Idealmente, quería una manera de que el programa imprima la versión como por ejemplo exhale version 1.0.3 ..... para poder capturarla así como hago con otras herramientas como Opusenc y Flac. Debido a esto, comencé a trabajar en añadir esta funcionalidad.

El programa verifica si solo hay un argumento (en realidad hay 2 argumentos: el ejecutable del programa y el segundo que sería la de imprimir la versión). Luego, verifica si el argumento pasado es -v o -V. Si esto es cierto, imprimimos la versión del programa al usuario:

Este es el resultado:

La salida es muy simple. Gracias a esto, puedo capturarla y pasarla a mi herramienta en desarrollo exchale GUI:

Este «Merge Request» fue aprobado y fusionado al código fuente, y está disponible para el uso de todo el mundo. Sobre mi interfaz gráfica, pronto la publicaré.

Haz click aquí para ver el «Merge Request» en GitLab.

Mi primera contribución en GitLab: Convertidor exhale

Mi primera contribución en GitLab: Convertidor exhale

Hola a todos,

Ayer, estuve colaborando con el proyecto exhale para añadir compatibilidad para compilarlo usando MinGW en Windows.

Este proyecto es un convertidor de audio de código abierto que nos permite convertir archivos de audio WAV al codec xHE-AAC bajo el contenedor M4A.

Originalmente, el proyecto compila en Windows usando Visual Studio, pero al intentar compilarlo usando MSYS2/MinGW, nos daba problemas, específicamente esto:

H:/repos/media-autobuild_suite/build/exhale-git/src/app/../../src/app/exhaleApp.cpp: In function 'int main(int, char**)':
H:/repos/media-autobuild_suite/build/exhale-git/src/app/../../src/app/exhaleApp.cpp:246:85: error: '_SH_DENYWR' was not declared in this scope
  246 |     if (_sopen_s (&inFileHandle, inFileName, _O_RDONLY | _O_SEQUENTIAL | _O_BINARY, _SH_DENYWR, _S_IREAD) != 0)
      |                                                                                     ^~~~~~~~~~
H:/repos/media-autobuild_suite/build/exhale-git/src/app/../../src/app/exhaleApp.cpp:320:100: error: '_SH_DENYRD' was not declared in this scope
  320 |     if (_sopen_s (&outFileHandle, outFileName, i | _O_SEQUENTIAL | _O_CREAT | _O_EXCL | _O_BINARY, _SH_DENYRD, _S_IWRITE) != 0)
      |                                                                                                    ^~~~~~~~~~
make[1]: *** [../makefile.base:112: ../../build/exhaleApp.d.o] Error 1
make[1]: Leaving directory '/build/exhale-git/src/app'
make: *** [makefile:18: all] Error 2

También nos daba problemas por una definición de fprintf_s. Unos cambios tuvieron que hacerse en el código.

Para resolver el problema de que _SH_DENYRD no estaba declarado, tuvimos que añadir el header share.h:

Para resolver el problema de fprintf_s, cambié el bloque #ifndef a #if !defined para verificar adicionalmente si estamos compilando bajo MinGW. Si esto es cierto, no declaramos esta variable que apunta a la función fprintf:

Luego de realizar estos cambios, el programa compiló exitosamente.

Lo proximo que hice fue hacer unos cambios al archivo makefile.base para que el proyecto Media Autobuild Suite pasara las variables CXXFLAGS y LDFLAGS a exhale:

Estos cambios fueron aprobados y fusionados al proyecto.

Mi inspiración para añadir esta herramienta al Media Autobuild Suite fue debido a que un usuario pidió que esta herramienta fuese añadido. Trabajé para añadirlo y abrí un «Pull Request», el cual refiné aplicando unas recomendaciones.

Este «Pull Request» fue fusionado al suite y ahora todos los usuarios pueden compilar y usar esta herramienta.

Contribuciones

PAQ8PX ahora corre en procesadores ARM

PAQ8PX ahora corre en procesadores ARM

Hola a todos,

En los pasados días, trabajé para lograr que el compresor PAQ8PX funcione en procesadores ARM. Inicialmente el programa no quería compilar porque dependía de unas instrucciones SSE2/SSSE3 que no existen en la arquitectura ARM. Esto requirió de añadir código NEON, que es el equivalente para esta arquitectura. Una vez logrado, el programa compiló y ejecutó sin problemas en los procesadores Snapdragon 845 y 865 CPU’s de mis celulares Samsung Galaxy S9+ y S20 Ultra:

paq8px_v187
paq8px_v186fix1 running on ARM

Probé el programa usando la aplicación Termux y corriendo ubuntu del proyecto AndroNix.

Los cambios que fueron hechos incluyeron añadir unas directrices #elif para ver si estabamos compilando en procesadores ARM. Esto fue añadido debajo de la directríz #id que verifica si estamos compilando en un procesador i386 o x86_64. Estas directrices verifican y añaden los archivos immintrin.h y arm_neon.h, respectivamente.

Hubieron 2 archivos principales que requirieron portar el código de SSE3/SSSE3 a NEON. En realidad, estos cambios no eran necesarios, pero al hacerlos, nos permite usar el procesador al máximo, usando estas instrucciones nativas.

Comencé modificando el archivo Mixer.hpp, que ya tenía código para SSE2 y AVX2.

Podemos ver que añadí 2 funciones principales y 2 de ayuda de la traducción:

Los archivos SimdMixer.hpp y MixerFactory.cpp requirieron añadir unos else if y otra condición para soportar los nuevos cambios:

SimdMixer.hpp

MixerFactory.cpp

El otro archivo que requirió portar código fue Bucket.hpp. También refactoricé el código para que ejecute código correspondiente a la arquitectura que estamos usando y que es especificada o detectada al ejecutar el programa:

También porté el código de SSSE3 a AVX2:

La función que tenía el código SSSE3 ahora se llama findSsse3:

Y aquí tenemos el código NEON:

Si no se detecta ningun SIMD o se especifica uno al ejecutar el programa, se ejecuta el código de la función findNone:

Finalmente, aquí está la función find original. Esta fue extendida para aceptar un segundo argumento con el SIMD a usar:

Este cambió también requirió modificar la función find en los archivos ContextMap.cpp y ContextMap2.cpp para que acepten este argumento.

simd.hpp

Este archivo requirió añadir unas directrices #ifdef:

Y si estamos compilando en ARM, devolvemos el valor 11:

Finalmente, en el archivo paq8px.cpp, actualicé el parametro -simd para que acepte el argumento neon:

Y esos fueron los cambios que realicé.

La última versión en estos momentos es paq8px v187. Esta versión es complatible con procesadores ARM e incluyen algunos arreglos.

Puedes seguir el progreso del programa en el foro encode.su haciendo click aquí.