[Gambas-user] reading files

Gianluigi bagonergi at ...626...
Wed Jul 19 23:06:49 CEST 2017


A very interesting work 👍

Regards
Gianluigi

2017-07-19 14:34 GMT+02:00 Tony Morehen <tmorehen at ...3602...>:

> 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 <buster6seven at ...626...>:
>>>
>>> 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, nando_f at ...951... 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 <buster6seven at ...626...>
>>>>> To: gambas-user at 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, nando_f at ...951... 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.davidson at ...626...>
>>>>>>> To: gambas-user at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user
>
>



More information about the User mailing list