Well, I'm quite frankly stumped. I'm writing a program that recurses into directories and reads (among others) FLAC files and should be able to read the vorbis comments ARTIST and TITLE from the file.
A while back, I was popen()ing to metaflac, because I didn't want to
mess with libFLAC. But now, it's the weekend, so I can mess around with
this. Here's the code in question:
bool getflac (struct Song* flac, const char* path)
{
FLAC__StreamMetadata *md = FLAC__metadata_object_new
(FLAC__METADATA_TYPE_STREAMINFO);
if (FLAC__metadata_get_streaminfo(path, md))
{
unsigned nc = 0, i;
FLAC::Metadata::VorbisComment vc (md);
nc = vc.get_num_comments();
for (i = 0; i <= nc; i++)
{
FLAC::Metadata::VorbisComment::Entry e;
e = vc.get_comment(i);
if (!strcmp(e.get_field_name(), "ARTIST"))
flac->artist = e.get_field_value();
else if (!strcmp(e.get_field_name(), "TITLE"))
flac->title = e.get_field_value();
}
return true;
}
else
return false;
}
When I run this code, I get a SEGV during get_comment because
object_->data.vorbis_comment.comments is junk. Must I initialize it
somewhere? Note that vc.get_num_comments returns 14, which I imagine is
a correct number. The documentation isn't overly clear about how this works
and it would be cooler if some basic examples could be provided.
Thanks in advance for any help that can be provided. Excuse my
ignorance! :(
--
Joshua Kwan
signature.asc
Description: Digital signature
