Here's a rough patch to make the --t* options work with the vorbis
encoder. I just read the id3tag_spec structure directly, but the vorbis
comment header is a lot more flexible than the id3 stuff, so I'd really
want to write a general token-value interface to the metadata if I were
"doing it right." Maybe some other time.

bugs: 

Doesn't support track number of genre. The second is easy to add; the
first requires that the vorbis people settle on a standard form for it.

Ogg encoding doesn't actually work for me; it prints a lot of:

*********
decoded bytes=0  16384

And generates a 128 byte file. This happens without my patch as well.

Oops, on further investigation those 128 bytes are an id3 tag, so we need
an interlock of some sort. I'll take a look at this later.

Cheers, 
 -ralph

--
[EMAIL PROTECTED]
Ahh, the joys of tracking cvs!

Index: parse.c
===================================================================
RCS file: /cvsroot/lame/lame/parse.c,v
retrieving revision 1.68
diff -u -r1.68 parse.c
--- parse.c     2000/07/04 03:28:43     1.68
+++ parse.c     2000/07/06 23:34:44
@@ -180,6 +180,9 @@
   PRINTF1("    characters), or the `--add-id3v2' or `--id3v2-only' options are 
used,\n");
   PRINTF1("    or output is redirected to stdout.\n");
   PRINTF1("\n");
+  PRINTF1("    The --t* options will work with the Ogg encoder, but the 
+id3-specific\n");
+  PRINTF1("    features will be ignored. Genre and tracknumber are currently 
+ignored.\n");
+  PRINTF1("\n");
 #ifdef HAVEGTK
   PRINTF1("    -g              run graphical analysis on <infile>\n");
 #endif
@@ -832,6 +835,3 @@
   }
 
 }
-
-
-
Index: vorbis_interface.c
===================================================================
RCS file: /cvsroot/lame/lame/vorbis_interface.c,v
retrieving revision 1.10
diff -u -r1.10 vorbis_interface.c
--- vorbis_interface.c  2000/06/30 14:25:53     1.10
+++ vorbis_interface.c  2000/07/06 23:34:50
@@ -93,7 +93,7 @@
      set up the Vorbis decoder */
   
   /* The next two packets in order are the comment and codebook headers.
-     They're likely large and may span multiple pages.  Thus we reead
+     They're likely large and may span multiple pages.  Thus we read
      and submit data until we get our two pacakets, watching that no
      pages are missing.  If a page is missing, error out; losing a
      header page is the only place where missing data is fatal. */
@@ -225,11 +225,6 @@
       break;
     }    
 
-
-
-
-
-
     result=ogg_sync_pageout(&oy,&og);
       
     if(result==0) {
@@ -300,15 +295,6 @@
 
 
 
-
-
-
-
-
-
-
-
-
 ogg_stream_state os2; /* take physical pages, weld into a logical
                        stream of packets */
 ogg_page         og2; /* one Ogg bitstream page.  Vorbis packets are inside */
@@ -320,13 +306,13 @@
 vorbis_dsp_state vd2; /* central working state for the packet->PCM decoder */
 vorbis_block     vb2; /* local working space for packet->PCM decode */
 
-
 
+#define vorbis_comment_size 256
 
 int lame_encode_ogg_init(lame_global_flags *gfp)
 {
   lame_internal_flags *gfc=gfp->internal_flags;
-
+  char comment[vorbis_comment_size];
   
   /********** Encode setup ************/
   
@@ -337,10 +323,43 @@
   vi2.rate = gfp->out_samplerate;
 
   
-  /* add a comment */
+  /* fill out the comments header */
   vorbis_comment_init(&vc2);
   vorbis_comment_add(&vc2,"Track encoded using L.A.M.E. libvorbis interface.");
-  
+
+  /* these fields are marked "private data members" in the header, so
+     'twould be better to add id3tag_get_*() functions instead. However,
+     the vorbis comment fields are much more flexible than the id3 stuff
+     so I'll just do this in anticipation of (another) metatag rewrite */
+  
+  if(gfp->tag_spec.title) {
+       snprintf(comment,vorbis_comment_size,
+               "TITLE=%s",gfp->tag_spec.title);
+       vorbis_comment_add(&vc2,comment);
+  }
+  if(gfp->tag_spec.artist) {
+       snprintf(comment,vorbis_comment_size,
+               "ARTIST=%s",gfp->tag_spec.artist);
+       vorbis_comment_add(&vc2,comment);
+  }
+  if(gfp->tag_spec.album) {
+       snprintf(comment,vorbis_comment_size,
+               "ALBUM=%s",gfp->tag_spec.album);
+       vorbis_comment_add(&vc2,comment);
+  }
+  /* pretend these are equivalent */
+  if(gfp->tag_spec.comment) {
+       snprintf(comment,vorbis_comment_size,
+               "DESCRIPTION=%s",gfp->tag_spec.comment);
+       vorbis_comment_add(&vc2,comment);
+  }
+  if(gfp->tag_spec.year) {
+       snprintf(comment,vorbis_comment_size,
+               "DATE=%d",gfp->tag_spec.year);
+       vorbis_comment_add(&vc2,comment);
+  }
+  /* FIXME: we drop the track number and genre for now */
+
   /* set up the analysis state and auxiliary encoding storage */
   vorbis_analysis_init(&vd2,&vi2);
   vorbis_block_init(&vd2,&vb2);
@@ -375,6 +394,7 @@
   return 0;
 }
 
+#undef vorbis_comment_size
 
 
 int lame_encode_ogg_finish(lame_global_flags *gfp,

Reply via email to