A very interesting work 👍 Regards Gianluigi
2017-07-19 14:34 GMT+02:00 Tony Morehen <tmore...@ajmconsulting.ca>: > I've attached an archive containing the code I use to read v1 and v2 MP3 > tags and other MP3 info including bitrates (fixed and VBR), sampling rates > and number of channels. v1 tags are pretty staightforward to read if you > don't try to read the structure directly, but by each element of the > structure at a time. Some tips: > > 1) Numeric elements (bytes, bytearrays, shorts, integers, longs) can be > read directly from the stream. ie (4 byte Integer) = Read #Stream As > Integer. Gambas can handle little endian/big endian issues. > > 2) Fixed length strings must be handled in a two stage process. First, the > required string length number of bytes is read into a byte array. This > byte array is then converted to a string. Sample code: > > Dim Bytes As New Byte[StringLength] > Bytes.Read(Stream) > FixedString = Bytes.ToString() > > Note: Bytes.ToString stops the string conversion at the first null or at > the end of the array. Therfore, you don't have to worry about > null-terminated strings. > > v2 tags are more complicated, particularly since the tags can be ascii, > either kind of utf16, or utf8 encoding. The code I sent has been tested > with over 10,000 mp3 files has seems to have no issues. > > > On 2017-07-19 12:33 AM, Shane wrote: > >> thank you Gian i did take a rest and read but alas it did not help >> >> as far as i see it he is saying don't use binary file for fixed length >> strings >> >> but as this is an mp3 file tag witch i have no control i am doomed >> >> >> >> On 18/07/17 19:22, Gianluigi wrote: >> >>> Why do not you take a moment of rest and read what Tobias Boege recommend >>> me in the discussion [0] I told you here [1]? >>> >>> [0] >>> http://gambas.8142.n7.nabble.com/Random-access-files-with-fi >>> xed-length-string-td50880.html >>> [1] http://gambas.8142.n7.nabble.com/vb-code-td59764.html >>> >>> 2017-07-18 9:04 GMT+02:00 Shane <buster6se...@gmail.com>: >>> >>> I am very confused from the docs >>>> >>>> _Variable_ *= READ* [ *#* _Stream_ ] *AS* _Datatype_ >>>> >>>> _Variable_ *= READ* [ *#* _Stream_ *,* ] _Length_ >>>> >>>> so wouldn't it be_ >>>> _ >>>> >>>> IDtag = read #hfile as ID3v1_TAG ? >>>> >>>> with doesn't work by the way >>>> >>>> >>>> >>>> On 18/07/17 12:44, nand...@nothingsimple.com wrote: >>>> >>>> I think >>>>> Read #hfile, IDtag, ID3v1_TAG >>>>> should be >>>>> Read #hfile, IDtag as ID3v1_TAG >>>>> >>>>> >>>>> -- >>>>> Open WebMail Project (http://openwebmail.org) >>>>> >>>>> >>>>> ---------- Original Message ----------- >>>>> From: Shane <buster6se...@gmail.com> >>>>> To: gambas-user@lists.sourceforge.net >>>>> Sent: Tue, 18 Jul 2017 10:50:43 +1000 >>>>> Subject: Re: [Gambas-user] reading files >>>>> >>>>> i don't know what i am doing wrong >>>>> >>>>>> Public Struct ID3v1_TAG '(128 bytes) >>>>>> Tag[3] As String 'always TAG >>>>>> Title[30] As String 'title, 30 characters >>>>>> Artist[30] As String 'artist, 30 characters >>>>>> Album[30] As String 'album, 30 characters >>>>>> Year[4] As String 'year, 4 characters >>>>>> Comment[30] As String 'comment, 30 characters (or 28 >>>>>> if >>>>>> track# included) >>>>>> Genre As Byte 'genre, 255 for none defined >>>>>> End Struct >>>>>> >>>>>> Private Sub GetID3v1(File As String) >>>>>> Dim IDtag As ID3v1_TAG >>>>>> Dim hfile As File >>>>>> >>>>>> hfile = Open File For Read >>>>>> >>>>>> ' >>>>>> 'read the tag >>>>>> ' seek to end of less tag size >>>>>> >>>>>> Read #hfile, IDtag, ID3v1_TAG >>>>>> >>>>>> here i get IDtag is NULL >>>>>> >>>>>> On 18/07/17 05:05, nand...@nothingsimple.com wrote: >>>>>> >>>>>> Yes it is possible, I do it. here is some code (incomplete) >>>>>>> >>>>>>> -Nando (Canada) >>>>>>> >>>>>>> >>>>>>> >>>>>>> ' top of class file >>>>>>> Public Struct recstruc >>>>>>> _a as integer >>>>>>> _b as integer >>>>>>> _c as integer >>>>>>> end struct >>>>>>> >>>>>>> >>>>>>> ' a function >>>>>>> public function openAfile(filename as string) as file >>>>>>> >>>>>>> dim hfile as file >>>>>>> dim arec as recstruc >>>>>>> >>>>>>> hfile = open filename for read write create >>>>>>> >>>>>>> with arec 'some values to write. >>>>>>> ._a = 1 >>>>>>> ._b = 22 >>>>>>> ._c = 333 >>>>>>> end with >>>>>>> >>>>>>> write #hfile, arec as recstruc >>>>>>> >>>>>>> 'if you position the hfile pointer back to zero, you can... >>>>>>> read #hfile, arec as recstruc >>>>>>> >>>>>>> close #hfile >>>>>>> >>>>>>> end >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Open WebMail Project (http://openwebmail.org) >>>>>>> >>>>>>> >>>>>>> ---------- Original Message ----------- >>>>>>> From: T Lee Davidson <t.lee.david...@gmail.com> >>>>>>> To: gambas-user@lists.sourceforge.net >>>>>>> Sent: Sun, 16 Jul 2017 12:42:35 -0400 >>>>>>> Subject: Re: [Gambas-user] reading files >>>>>>> >>>>>>> On 07/16/2017 06:57 AM, Shane wrote: >>>>>>> >>>>>>>> given this example >>>>>>>>> >>>>>>>>> PRIVATE SUB BinaryRead(FilePath AS String) >>>>>>>>> DIM binaryFile AS File >>>>>>>>> DIM i AS Integer >>>>>>>>> DIM b AS Byte >>>>>>>>> DIM s AS Short >>>>>>>>> DIM s1 AS String >>>>>>>>> DIM s2 AS String >>>>>>>>> ' Read binary file >>>>>>>>> binaryFile = OPEN FilePath FOR READ >>>>>>>>> READ #binaryFile, i >>>>>>>>> READ #binaryFile, b >>>>>>>>> READ #binaryFile, s >>>>>>>>> READ #binaryFile, s1 >>>>>>>>> READ #binaryFile, s2 >>>>>>>>> CLOSE #binaryFile >>>>>>>>> ' Display results >>>>>>>>> PRINT i >>>>>>>>> PRINT b >>>>>>>>> PRINT s >>>>>>>>> PRINT s1 >>>>>>>>> PRINT s2 >>>>>>>>> END >>>>>>>>> >>>>>>>>> >>>>>>>>> is there a way for gambas to read a struct of all these variables >>>>>>>>> in one read ? >>>>>>>>> >>>>>>>>> You may have hinted at the solution within your question. Have you >>>>>>>>> >>>>>>>> considered >>>>>>>> using a Structure? >>>>>>>> >>>>>>>> http://gambaswiki.org/wiki/lang/read : >>>>>>>> "... reads the stream Stream as binary data whose type is specified >>>>>>>> by >>>>>>>> the >>>>>>>> Datatype argument." >>>>>>>> >>>>>>>> "The returned datatype can be one of the following: NULL, Boolean, >>>>>>>> Byte, Short, >>>>>>>> Integer, Long, Pointer, Single, Float, Date, String, Variant, >>>>>>>> any >>>>>>>> Array, >>>>>>>> Collection or structure." >>>>>>>> >>>>>>>> http://gambaswiki.org/wiki/lang/structdecl >>>>>>>> >>>>>>>> -- >>>>>>>> Lee >>>>>>>> >>>>>>>> ------------------------------------------------------------ >>>>>>>> ------------------ >>>>>>>> Check out the vibrant tech community on one of the world's most >>>>>>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>>>>>>> _______________________________________________ >>>>>>>> Gambas-user mailing list >>>>>>>> Gambas-user@lists.sourceforge.net >>>>>>>> https://lists.sourceforge.net/lists/listinfo/gambas-user >>>>>>>> >>>>>>>> ------- End of Original Message ------- >>>>>>> >>>>>>> >>>>>>> ------------------------------------------------------------ >>>>>>> ------------------ >>>>>>> Check out the vibrant tech community on one of the world's most >>>>>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>>>>>> _______________________________________________ >>>>>>> Gambas-user mailing list >>>>>>> Gambas-user@lists.sourceforge.net >>>>>>> https://lists.sourceforge.net/lists/listinfo/gambas-user >>>>>>> >>>>>>> ------------------------------------------------------------ >>>>>> ------------------ >>>>>> Check out the vibrant tech community on one of the world's most >>>>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>>>>> _______________________________________________ >>>>>> Gambas-user mailing list >>>>>> Gambas-user@lists.sourceforge.net >>>>>> https://lists.sourceforge.net/lists/listinfo/gambas-user >>>>>> >>>>>> ------- End of Original Message ------- >>>>> >>>>> >>>>> ------------------------------------------------------------ >>>>> ------------------ >>>>> Check out the vibrant tech community on one of the world's most >>>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>>>> _______________________________________________ >>>>> Gambas-user mailing list >>>>> Gambas-user@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/gambas-user >>>>> >>>>> ------------------------------------------------------------ >>>> ------------------ >>>> Check out the vibrant tech community on one of the world's most >>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>>> _______________________________________________ >>>> Gambas-user mailing list >>>> Gambas-user@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/gambas-user >>>> >>>> ------------------------------------------------------------------------------ >>> >>> Check out the vibrant tech community on one of the world's most >>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>> _______________________________________________ >>> Gambas-user mailing list >>> Gambas-user@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/gambas-user >>> >> >> >> ------------------------------------------------------------------------------ >> >> Check out the vibrant tech community on one of the world's most >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >> _______________________________________________ >> Gambas-user mailing list >> Gambas-user@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/gambas-user >> > > > ------------------------------------------------------------ > ------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > Gambas-user mailing list > Gambas-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/gambas-user > > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user