Tornando sul file audio di formato FLAC, va detto che i TAG utilizzati sono analoghi a quelli usati nei formati MP3 e OGG.
Essendo individuati come stringhe di caratteri, è molto agevole anche usando le sole risorse di Gambas estrapolarli dal file audio.
Riguardo all'eventuale immagine, con la quale il file FLAC può mostrarsi sul desktop, va detto che il file FLAC contiene i dati completi dell'immagine che l'accompagna.
Ho preso come esempio il file audio FLAC che può essere scaricato da questo indirizzo web:
https://helpguide.sony.net/high-res/sample1/v1/data/Sample_BeeMoved_96kHz24bit.flac.zipAprendolo con un editor esadecimale, è facile riscontrare il gruppo di TAG a cominciare dal byte all'offset 96.
Riguardo invece all'immagine contenuta, essa è un file jpeg, come da informazione contenuta nel byte di offset 207.
Verifichiamo infatti che poco dopo sono presenti i seguenti byte: FF D8 FF E0 00 10 4A 46 49 46, i quali definiscono l'inizio proprio di una particolare e molto comune versione di file immagine JPG, che ha sempre come byte terminali i valori FF D9.
Così, adoperando ad esempio il seguente codice, possiamo estrarre da quel file FLAC i soli dati dell'immagine in esso contenuta e salvarla in un file JPG autonomo:
Public Sub Main()
Dim s As String
Dim ini, fin As Integer
Dim fl As File
Dim bb As Byte[]
s = "/percorso/ove/è/stato/scaricato/il/file/Sample_BeeMoved_96kHz24bit.flac"
ini = InStr(File.Load(s), "JFIF") - 7
fin = InStr(File.Load(s), "\xFF\xD9")
fl = Open s For Read
bb = New Byte[(fin - ini) + 1]
Seek #fl, ini
bb.Read(fl, 0, bb.Count)
File.Save("/tmp/immagine.jpg", bb.ToString(0, bb.Count))
fl.Close
End
Oppure più brevemente, ma utilizzando solo funzioni Stringa:
Public Sub Main()
Dim s As String
Dim ini, fin As Integer
s = File.Load("/percorso/ove/è/stato/scaricato/il/file/Sample_BeeMoved_96kHz24bit.flac")
ini = InStr(s, "JFIF") - 6
fin = InStr(s, "\xFF\xD9")
s = Mid(s, ini, (fin - ini) + 1)
File.Save("/tmp/imm.jpg", s)
End