Bienvenido el 2026
Hola de nuevo a todos. El día de hoy solo escribo para hacer lo que usualmente hago cada fin de año. Es cierto que el blog ha disminuido en la cantidad de post que se publican, pero si de algo estoy seguro, es que este es mi lugar. Ahora mas que nunca, debemos de crear conocimiento y que sea la mente humana la que predomine sobre la máquina.
Por el momento es todo y al igual que cada año, nos seguiremos leyendo por acá. Que el 2026 sea un año bueno para todas las personas que se toman la molestia de leer.
Los leo luego
Vamos a programar #106 - Agregando imagenes a archivos FLAC parte 2.
Hola de nuevo a todos, el día de hoy vamos a continuar con mas de los archivos FLAC.
En el post anterior vimos cómo es que esta estructurado la parte que conforma la imagen en un archivo FLAC. Hoy, al igual que en otras ocasiones, antes de escribir el programa en c#, vamos a insertar la imagen "a mano" solo usando un editor Hexadecimal; el que siempre uso es XVI32 que puedes descargar de su sitio oficial. Cómo archivo de prueba voy a usar una canción en formato FLAC, para que sea sencillo seguir los pasos, te recomiendo usar el mismo archivo que puedes descargar aquí. Pero al igual que las otras canciones, si no posees el original, debes de eliminarlo al terminar de hacer las pruebas. La caratula del álbum también la puedes descargar de aquí.Una vez todo listo, procederemos a abrir el archivo FLAC con XVI32. Hay que tomar en cuenta que a partir de este momento, cuando escribamos un numero en decimal simplemente será el numero, cuando hagamos referencia a un numero en binario, será bxxxxxxxx y en hexadecimal sera 0xXX
Una vez abierto, vamos a desplazarnos por el archivo. Si hacemos memoria, los primeros cuatro bytes, corresponden al identificador del archivo que es "fLaC" inmediatamente después de este, viene el bloque con la información del stream. este tiene un tamaño fijo de 34 bytes (en bits son: 16+16+24+24+20+3+5+36+128 = 272 bits = 34 bytes), que es lo que nos indica el byte en la dirección 0x05 hasta 0x07 que es la secuencia 0x00, 0x00, 0x22 que al convertirlo a decimal nos da treinta y cuatro, hay que recordar que en el tamaño no se incluye el encabezado. En XVI32, nos podemos desplazar cierto numero de bytes. Al terminar de leer el encabezado del bloque con la información del stream, deberíamos de estar en la dirección 0x07 posicionamos el cursor en el byte siguiente y presionamos la tecla de "control" y la tecla "b", eso le indicará a XVI32 que estamos marcando el inicio de lo que queremos seleccionar, luego vamos al menú "edit>>block <n> chars" e introducimos tantos bytes cómo nos dijo el encabezado del bloque, en este caso fueron treinta y cuatro.
Con esto estará resaltado todo el bloque. Esto solo lo hacemos con el fin de que todo resulte mas claro, pero este bloque no lo vamos a modificar, asi que avanzamos al siguiente.
![]() | ||
| Se puede apreciar todo el bloque. |
Inmediatamente después de la selección, viene el siguiente bloque. Por ahora los que nos interesan son o el bloque de la imagen (aunque en este ejemplo no existe) o el bloque de "padding". De cualquier forma vamos a leer los bloques hasta que encontremos alguno. Para eso simplemente repetimos el paso anterior.
En nuestra secuencia, leemos 0x04, 0x00, 0x01 y 0x58 (el tamaño es 0x0158) que al convertirlo a decimal nos da 344, el primer byte nos dice que este es el bloque "Vorbis Comment", nuevamente marcamos esa cantidad de bytes después del encabezado.
Algo importante que debemos de recordar, es que debemos de repetir todo hasta que encontremos el marcador del ultimo bloque. Si continuamos leyendo, tenemos la secuencia 0x81, 0x00, 0x1E y 0xD0, esta es relevante porque al convertir el primer byte a binario, nos da b10000001 y justamente el primer bit (de izquierda a derecha) nos dice que este es el último bloque y además que es del tipo "padding" y que tiene una longitud de 7,888 bytes, procedemos a marcarlos.
Con esto ya tenemos toda la información que necesitamos. antes que nada, necesitamos ver si el tamaño reservado (padding) es suficiente para nuestra imagen, si descargaste la imagen al inicio, estas deben de ser sus propiedades.
Para poder inscrustar la imagen necesitamos un espacio 180,677 bytes mas el encabezado, el espacio que tenemos es de 7,888 y claramente es insuficiente, por lo que vamos a reemplazar el bloque en su totalidad.
Preparando la imagen.
Vamos a usar Xvi32 para crear el bloque completo. Primero preparamos el bit que describe el bloque. EN este caso, va a ser el ultimo bloque, pero ademas sera del tipo "PICTURE", el primer bit es b1, seguido de la descripción que es b110, al unirlos para formar el byte tenemos b10000110 que es 134 en decimal o 0x86. En XVI32 podemos insertar directamente los dígitos hexadecimales en el panel de lado izquierdo, si queremos insertar 134 decimal simplemente lo convertimos a hexadecimal y lo escribimos tal cual. Antes de continuar, guardamos lo que llevamos con el nombre de "Picture block.bin".
para calcular el tamaño total, primero vamos a construir al bloque APIC.
- Tipo de imagen por ahora usaremos 0x03 (cubierta frontal del disco) usa 4 bytes.
- 0x00, 0x00, 0x00, 0x03, en XVI32 vamos al menú "Edit>>Inser string"
- El tamaño del tipo MIME , usaremos "image/jpeg" que tiene una longitud de 10 bytes.
- 0x00, 0x00, 0x00, 0x0A.
- La cadena de texto "image/jpeg".
- Usando el comando insertar escribimos literal image/jpeg.
- El tamaño de la descripción , usaremos la misma secuencia "image/jpeg" que tiene una longitud de 10 bytes.
- 0x00, 0x00, 0x00, 0x0A.
- La cadena de texto "image/jpeg".
- Usando el comando insertar escribimos literal image/jpeg.
- El ancho de la imagen
- 0x00, 0x00, 0x00, 0x00
- El alto de la imagen
- 0x00, 0x00, 0x00, 0x00
- La profundidad de color
- 0x00, 0x00, 0x00, 0x00
- El indice de colores
- 0x00, 0x00, 0x00, 0x00
- El tamaño de la imagen en bytes de la imagen
- la imagen pesa 180,677 bytes que es 0x02C1C5 que queda para insertarlo cómo 0x00, 0x02, 0xC1, 0xC5
- Los datos de la imagen.
- Abrimos la imagen con XVI32, seleccionamos todos los bytes, los copiamos y los pegamos inmediatamente después de nuestro último byte.
![]() | |
| Así debería de lucir nuestra secuencia antes de insertar los datos de la imagen. |
Guardamos el archivo como APIC.bin e inspeccionamos sus propiedades para obtener el tamaño.
Volvemos a abrir "Picture block.bin" e insertamos el tamaño de "APIC.bin", en este caso 180,729 es 0x02C1F9 y en la secuencia es: 0x02, 0xC1, 0xF9. Una vez escrito, Abrimos "APIC.bin" y seleccionamos todos los datos, los copiamos y pegamos en "picture block.bin" inmediatamente después de la secuencia actual.
Con esto ya tenemos todo listo para unir las partes.Para eso, seleccionaremos y copiaremos todos los datos previos al bloque que vamos a sustituir (en nuestro archivo FLAC). Los copiamos y pegamos, luego el bloque que creamos y finalmente el resto del archivo FLAC.
Para simplifica un tanto las cosas, y si quieres ir directo al grano, de nuestro archivo original, primero seleccionaremos los primeros 390 bytes, los copiamos y los pegamos en un nuevo archivo, luego abrimos "picture block.bin", seleccionamos todo y lo insertamos en el archivo que creamos, luego en nuestro archivo original, nos desplazamos a la posición 8,282, usando el comando "go to" en el menú "address" y de ahí seleccionamos todo el resto del archivo, lo copiamos y lo insertamos en el nuevo, si todo fue bien deberíamos de tener nuestro archivo FLAC con su caratula.
Al inspeccionarlo tenemos que todo fue como es debido.
Y bien, por ahora es todo, el objetivo de hacer los pasos a mano, es para ayudar a comprender que es lo que el programa va a hacer. En el siguiente post escribiremos el código en C# que nos ayudara.
Los leo luego.
Vamos a programar #105 - Agregando imagenes a archivos FLAC parte 1.
Hola de nuevo a todos. Tiempo ha pasado desde la última vez que un post se publicó. Cómo no es bueno dejar cosas pendiente, el día de hoy vamos a continuar con mas programación.
En alguno de los post anterior, vimos cómo leer los metadatos de los archivos FLAC, vimos cómo recuperar información importante: álbum, artista, título de la canción (solo por mencionar algunos), pero además, vimos cómo leer la imagen del archivo; eso si contiene una. El día de hoy, nos concentraremos en cómo está estructurado solo esta parte y servirá de preámbulo para hacer un programa en c# que escriba la imagen en el archivo.
Antes que nada, recordemos cómo esta estructurada la imagen. Hay que recordar que sigue los lineamientos de la etiqueta APIC de las etiquetas ID3v2. Desde este momento, toda la notación estará en bytes (al menos que se indique lo contrario).
- <4> El tipo de imagen que va a representar.
- 0 - Other
- 1 - 32x32 pixels 'file icon' (PNG only)
- 2 - Other file icon
- 3 - Cover (front)
- 4 - Cover (back)
- 5 - Leaflet page
- 6 - Media (e.g. label side of CD)
- 7 - Lead artist/lead performer/soloist
- 8 - Artist/performer
- 9 - Conductor
- 10 - Band/Orchestra
- 11 - Composer
- 12 - Lyricist/text writer
- 13 - Recording Location
- 14 - During recording
- 15 - During performance
- 16 - Movie/video screen capture
- 17 - A bright coloured fish
- 18 - Illustration
- 19 - Band/artist logotype
- 20 - Publisher/Studio logotype
- <4> El tamaño de el tipo de archivo (MIME Type).
- <N> La cadena de texto con el tipo de archivo (Solo usaremos "image/jpeg" o "image/png" ).
- <4> El tamaño de la descripción de la imagen.
- <N> La cadena de texto con la descripción de la imagen.
- <4> El ancho de la imagen en píxeles.
- <4> El alto de la imagen en píxeles.
- <4> La profundidad de colo de la imagen.
- <4> Para imágenes con indice de color, el número de colores a usar.
- <4> El tamaño de la imagen en bytes
- <N> Los datos de la imagen.
![]() |
| En esta imagen se puede apreciar cada apartado (si no se ve bien hay que darle zoom). |
Lo relevante de todo esto, y si miras bien la imagen, es los apartados cuatro, cinco, seis, siete; son totalmente innecesarios y se pueden dejar en cero o 0x00, 0x00, 0x00, 0x00; aun sin se establecen estas propiedades, en la documentacion oficial, no se aconseja hacer uso de ellas al momento de mostrar la imagen.
Habiendo descrito lo anterior, solo queda escribir código en c# para agregar la imagen.
Y bien, por ahora es todo. cómo de costumbre, hago la promesa de que trataré de publicar mas seguido. realmente agradezco a todos los que se toman la molestia de darse una vuelta por acá.
Los sigo leyendo.
Cumplimos 9 años.
Hola de nuevo a todos. Un día cómo hoy pero de hace nueve años nació el blog de Xwork.
Si bien la actividad del blog ha bajado a un nivel de cero. Eso no implica que me haya olvidado de el, afortunadamente para mi, he llegado a una etapa nueva de mi vida y por ahora es a lo que le dedico mi atención. Eso no implica que el blog haya muerto, simplemente estoy disfrutando el momento.
Eso no quiere decir que me haya olvidado que este sitio lo cree en primer lugar para pasar las situaciones complicadas, por eso, ahora con una nueva compañera, es cuestión de retomarlo (ahora con compañía).
Sin mas que decir, espero que los artículos ya disponibles, sean de utilidad sin importar que el mas viejo tenga nueve años (el conocimiento es atemporal). En algún momento continuaremos, pero por ahora solo me queda agradecer a aquellos que expectantes se dan una vuelta de vez en vez.
Sin mas que decir. Gracias y cómo siempre los sigo leyendo.
Att: XWork (y ahora con EV).


















No hay comentarios. :
Publicar un comentario