[Flac-dev] FLAC__metadata_simple_iterator_set_block corrupting
Flac (ogg) stream?
Josh Coalson
xflac at yahoo.com
Wed Sep 6 18:30:13 PDT 2006
two unfortunate problems:
1. ID3 is illegal on Ogg files; that will probably always be
2. the metadata editing API currently only works for native FLAC,
not Ogg FLAC yet; eventually I will get to fixing that
Josh
--- Marc Wan <marcwanlists at gmail.com> wrote:
> Hey!
>
> So, I'm clearly doing something wrong, because I've written a
> program to
> view and modify the comment tags in a FLAC file, which appears to be
> embedded an Ogg stream. This particular file also has ID3 headers at
> the
> beginning, but I was planning on ignoring those and fixing them up
> using
> some ID3 code later on ...
>
> Now, to read the comments is quite simple:
>
> FLAC__metadata_get_tags(fileName, &tagData);
> ...
> ..
> .
> FLAC__metadata_object_delete(tagData);
>
>
>
> For writing to the file, however, I do something along the
> following lines
> (error code stripped out to keep things shorter), this is pretty much
> as the
> flac documentation suggests:
>
> result = FLAC__metadata_simple_iterator_init(iterator,
> fileName,
> FALSE, FALSE);
>
> /**
> * Zip through the file for the vorbis comment section.
> */
> while
> (FLAC__metadata_simple_iterator_get_block_type(iterator) !=
> FLAC__METADATA_TYPE_VORBIS_COMMENT)
> {
> result = FLAC__metadata_simple_iterator_next(iterator);
> }
>
> /**
> * Get the current block and write out the new values for it.
> */
> metaData =
> FLAC__metadata_simple_iterator_get_block(iterator);
>
> /**
> * Save the strings out.
> */
> [self saveCommentsToIterator: metaData];
>
> /**
> * Now, save out the block.
> */
> result = FLAC__metadata_simple_iterator_set_block(iterator,
> metaData, TRUE);
>
> FLAC__metadata_simple_iterator_delete(metaData);
>
>
> the saveCommentsToIterator method just updates the "entry" and
> "length"
> fields of those comment entries in the vorbis_comments that have
> changed.
> (is that perhaps not correct?) .... hexdumping the file after writing
> seems
> to show a new comment block with the appropriate new values in it ...
>
> The problem, which the docs hinted at:
>
> - if the comments are shorter or not much longer: everything works
> great
> - if the comments are much longer: the file appears to be
> rewritten.
> hexdump -C shows that the ID3 header is destroyed (not a problem,
> really)
> and the file now has a 'fLaC' binary signature at the top. (again,
> no
> problem -- other FLAC files appear to have this).
>
> This new file, however, cannot be read in by the above code using
> FLAC__metadata_get_tags. It barfs internally while trying to read
> some
> metadata chunks from the file (not the first one, either).
>
> Any idea why the newly written file cannot be read by my program
> any
> more? Programs that play audio, such as VLC, can still play the FLAC
> file
> just fine ....
>
> Any pointers to what I'm doing wrong would be greatly appreciated.
>
> Thanks,
> marc.
> > _______________________________________________
> Flac-dev mailing list
> Flac-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/flac-dev
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
More information about the Flac-dev
mailing list