Dan Sully
2004-Sep-28 00:22 UTC
[Flac-dev] Finding start of audio data using metadata level 2 interface.
* Josh Coalson <xflac@yahoo.com> shaped the electrons to say...>yep, that will work too. but just writing skipping code is >pretty simple: > >is_last=0 >read 'fLaC' string >while (!is_last) { > read 1 byte metadata block type > read 3 byte metadata block length > is_last = type & 0x80 > fseek(file,length,SEEK_CUR) >} >last_offset=ftell(file) > >see also: > http://flac.sourceforge.net/format.html#metadata_block_header >'length' is big-endianShould type be of FLAC__byte, and length of FLAC__uint32? I'm not having much luck here.. (not a C programmer by nature). -D -- This movie has warped my fragile little mind.
Josh Coalson
2004-Sep-28 10:34 UTC
[Flac-dev] Finding start of audio data using metadata level 2 interface.
--- Dan Sully <daniel@electricrain.com> wrote:> * Josh Coalson <xflac@yahoo.com> shaped the electrons to say... > > >yep, that will work too. but just writing skipping code is > >pretty simple: > > > >is_last=0 > >read 'fLaC' string > >while (!is_last) { > > read 1 byte metadata block type > > read 3 byte metadata block length > > is_last = type & 0x80 > > fseek(file,length,SEEK_CUR) > >} > >last_offset=ftell(file) > > > >see also: > > http://flac.sourceforge.net/format.html#metadata_block_header > >'length' is big-endian > > Should type be of FLAC__byte, and length of FLAC__uint32? I'm not > having much > luck here.. (not a C programmer by nature).better: #include <stdio.h> #include <string.h> long get_offset(FILE *f) { unsigned int is_last=0; unsigned char buf[4]; long len; if(fread(buf,4,1,f)!=1) return -1; if(memcmp(buf,"fLaC",4)) return -1; while (!is_last) { if(fread(buf,4,1,f)!=1) return -1; is_last=(unsigned int)(buf[0]&0x80); len=(long)((buf[1]<<16)|(buf[2]<<8)|(buf[3])); fseek(f,len,SEEK_CUR); } return ftell(f); } __________________________________ Do you Yahoo!? Yahoo! Mail - 50x more storage than other providers! http://promotions.yahoo.com/new_mail