Ben tornato Pastrank ! :)
E be', non sono mai andato, ho sempre letto, anche se ho commentato zero!
Rispondo alla prima questione.
Avevo visto quello, del resto reputo la wiki una delle migliori parti del sito, pero' il mio problema e' che non conosco il nome dell'immagine. Potrei provare a scontornarla con Imagemagick, appunto, anche se mi dispiacerebbe aggiungere una dipendenza. Alla fine pero' ho fatto una cialtronata delle mia, rammentando un suggerimento che hai dato. In questa form ho messo delle variabili private, che poi mi saranno necessarie.
Private myhtml As String = ""
Private ht As New HttpClient As "MyHttp"
Sono stato costretto a scrivere qualcosa per l'evento Mousedown() del webview, perche' avevo bisogno di usare HitTest(). Se il mouse va giu' dove c'e' un immagine, mi prende il pezzo che lo gestisce e lo mette in myhtml
Public Sub wv_MouseDown()
Dim v As WebHitTest = wv.HitTest(Mouse.x, Mouse.y)
If v.Image Then
myhtml = v.Element.HTML
Endif
End
a questo punto, visto che volevo usare, forzosamente, un menu contestuale col right click, devo ripulire myhtml, e estrarre il path dell'immagine (sperando che non rifacciano il sito cambiando tutto). A quel punto lo scarico nella cartella, dandogli il nome che preferisco
Public Sub mnuSaveCover_Click()
Dim ss As String[]
Dim s As String
If InStr(myhtml, "src=") > 0 Then
s = Mid(myhtml, InStr(myhtml, "src=") + 5)
s = Left(s, InStr(s, "\"") - 1)
With ht
.URL = s
.Timeout = 15
.Get(Null, FMain.DirChooser.Current &/ "cover.jpg")
End With
Endif
End
Ho tolto un po' di cose per scriverle qui sopra, ma il principio e' quello. Che vergogna :-)
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.zip
Aprendolo 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
Ahime', mi sono rassegnato a usare altro per leggere perche' la lettura dei tag, anche nei soli file flac, e' molto varia: se nom ho inteso male, ci possono essere tag (id3 1.1, 2.3, 2.4, vorbis) normali stringhe, o formate da array. Poi ci sono, solo tra quelli che uso, anche gli mp3 e i dsf
Alla fine sto iniziando a usare Mediainfo, per ora in shell, che legge praticamente tutto e di piu'. Via shell ha pure l'output formattabile, cosa che permette di rileggerlo senza acrobazie anche non volendo usare JSON o XML: per esempio, e' facile trasformare l'output in un file tipo ".ini". Le prime prove (si possono aggiungere anche le virgolette, volendo, e le tag che non si vedono e' perche' ancora non le ho implementate/non ne ho bisogno):
me@debsrv:~/tmp/test$ mediainfo --Output=file://template2.txt *.flac *.dsf *.mp3 *.ogg *.wv
[01.flac]
ALBU = Abbalati, abballati!
ARTS = Al Qantarah
GENR =
NAME = Surat Mariam
SIZE = 19437193
TRCK = 1
BITR = 678725
BITD = 16
BITS = 44100
CHAN = 2
COMP = Lossless
LENG = 229000
TYPE = FLAC
[01.dsf]
ALBU = Sessions from the 17th Ward
ARTS = Amber Rubarth
GENR = Folk
NAME = Sneak
SIZE = 192110584
TRCK = 11
BITR = 11290105
BITD =
BITS = 5644800
CHAN = 2
COMP = Lossless
LENG = 135999
TYPE = DSD
[01.mp3]
ALBU = Gun Song / Days "The Clubmixes"
ARTS = Alphawezen
GENR = House
NAME = Days (The Timewriter Remix)
SIZE = 10513372
TRCK = 2
BITR = 203226
BITD =
BITS = 44100
CHAN = 2
COMP = Lossy
LENG = 413753
TYPE = MPEG Audio