As far as I could find, nowhere in the documentation or even source does it actually explain how to use vorbiscomment. Just a simple "vorbiscomment reads TAG=VALUE pairs on separate lines from stdin" would save people a lot of time. Of course, this is still a painful tool to use, and since I had some .ogg's lying around with broken comments (from my first ogg vorbis patch to grip), I wrote a little Perl script (attached) to behave like mp3info. It has short and long command options for all of the suggested vorbis comment fields, and can act on multiple files listed on the command line. BTW, is anyone working on a vorbis Perl module? If not, I'll probably put one together. -- Alex #!/usr/bin/perl -w ## ogginfo -- Ogg Vorbis Comment Editor ## Created: <Sun Oct 15 02:57:05 EDT 2000> ## Time-stamp: <Sun Oct 15 12:44:08 EDT 2000> ## Author: Alex Shinn <foof@debian.org> # Modules use strict; use Getopt::Long; # Variables my $version = '0.1'; my %opt; my %old; my %new; # Parse Options GetOptions(\%opt, 'h!','help!','V!','ogg-version!','t:s','title:s', 'v:s','version:s','l:s','album:s','a:s','artist:s', 'o:s','organization:s','D:s','description:s','g:s','genre:s', 'd:s','date:s','p:s','location:s','c:s','copyright:s') or usage(); usage() if $opt{h} || $opt{help}; version() if $opt{V} || $opt{'ogg-version'}; # Translate short options $opt{title} = $opt{t} if exists $opt{t}; $opt{version} = $opt{v} if exists $opt{v}; $opt{album} = $opt{l} if exists $opt{l}; $opt{artist} = $opt{a} if exists $opt{a}; $opt{organization} = $opt{o} if exists $opt{o}; $opt{description} = $opt{D} if exists $opt{D}; $opt{genre} = $opt{g} if exists $opt{g}; $opt{date} = $opt{d} if exists $opt{d}; $opt{location} = $opt{p} if exists $opt{p}; $opt{copyright} = $opt{c} if exists $opt{c}; # Read comment options $new{title} = $opt{title} if exists $opt{title}; $new{version} = $opt{version} if exists $opt{version}; $new{album} = $opt{album} if exists $opt{album}; $new{artist} = $opt{artist} if exists $opt{artist}; $new{organization} = $opt{organization} if exists $opt{organization}; $new{description} = $opt{description} if exists $opt{description}; $new{genre} = $opt{genre} if exists $opt{genre}; $new{date} = $opt{date} if exists $opt{date}; $new{location} = $opt{location} if exists $opt{location}; $new{copyright} = $opt{copyright} if exists $opt{copyright}; # Act on each remaining arg foreach my $ogg (@ARGV) { # Get existing comments %old = map { my ($tag, $value) = split(/=/,$_,2); chop($value); "\L$tag", $value } `vorbiscomment -l $ogg 2>/dev/null`; next if $?; # Merge new comments while (my ($k, $v) = each(%new)) { $old{$k} = $v; } if (%new) { # Set new comments open(OUTPUT, "| vorbiscomment $ogg 2>/dev/null") || next; while (my ($k, $v) = each(%old)) { if ($v) { print OUTPUT "\U$k", "=$v\n"; } } close(OUTPUT); } else { while (my ($k, $v) = each(%old)) { print "\U$k", "=$v\n"; } } } # Print a usage summary sub usage { print <<EOF; usage: $0 [options] [file ...] -h, --help display this message -V, --ogg-version print version info -t, --title=TITLE set title -v, --version=VER set title version -l, --album=ALBUM set album -a, --artist=artist set artist -o, --organization=ORG set organization/record label -D, --description=DESC set brief contents description -g, --genre=GENRE set short genre description -d, --date=DATE set date -p, --location=PLACE set recording location info -c, --copyright=COPY set copyright info EOF exit 0; } # Print version info sub version { print "$0 $version\n"; exit 0; } --- >8 ---- List archives: http://www.xiph.org/archives/ Ogg project homepage: http://www.xiph.org/ogg/ To unsubscribe from this list, send a message to 'vorbis-dev-request@xiph.org' containing only the word 'unsubscribe' in the body. No subject is needed. Unsubscribe messages sent to the list will be ignored/filtered.
On Sun, Oct 15, 2000 at 01:17:01PM -0400, Alex Shinn wrote: Content-Description: message body and .signature> > As far as I could find, nowhere in the documentation or even source > does it actually explain how to use vorbiscomment. Just a simple > "vorbiscomment reads TAG=VALUE pairs on separate lines from stdin" > would save people a lot of time. Of course, this is still a painful > tool to use, and since I had some .ogg's lying around with broken > comments (from my first ogg vorbis patch to grip), I wrote a little > Perl script (attached) to behave like mp3info. It has short and long > command options for all of the suggested vorbis comment fields, and > can act on multiple files listed on the command line.That was _exactly_ why I made vorbiscomment with that simplistic interface, so others can go write more complex wrapper programs for it. Very nice :) Add this to the CVS tree, anyone?> BTW, is anyone working on a vorbis Perl module? If not, I'll probably > put one together.not afaik. It would be useful, and pretty easy if libvorbisfile could write as well as read (can it yet? I've been too busy to keep up with things). See comments inline. Content-Description: ogginfo perl script> #!/usr/bin/perl -w# If your Perl implementation resides somewhere other than /usr/bin/perl, # change the above line to reflect that.> > ## ogginfo -- Ogg Vorbis Comment Editor > > ## Created: <Sun Oct 15 02:57:05 EDT 2000> > ## Time-stamp: <Sun Oct 15 12:44:08 EDT 2000> > ## Author: Alex Shinn <foof@debian.org> > > # Modules > use strict; > use Getopt::Long; > > > # Variables > my $version = '0.1'; > my %opt; > my %old; > my %new; > > > # Parse Options > GetOptions(\%opt, 'h!','help!','V!','ogg-version!','t:s','title:s', > 'v:s','version:s','l:s','album:s','a:s','artist:s', > 'o:s','organization:s','D:s','description:s','g:s','genre:s', > 'd:s','date:s','p:s','location:s','c:s','copyright:s') > or usage(); > usage() if $opt{h} || $opt{help}; > version() if $opt{V} || $opt{'ogg-version'}; > # Translate short options > $opt{title} = $opt{t} if exists $opt{t}; > $opt{version} = $opt{v} if exists $opt{v}; > $opt{album} = $opt{l} if exists $opt{l}; > $opt{artist} = $opt{a} if exists $opt{a}; > $opt{organization} = $opt{o} if exists $opt{o}; > $opt{description} = $opt{D} if exists $opt{D}; > $opt{genre} = $opt{g} if exists $opt{g}; > $opt{date} = $opt{d} if exists $opt{d}; > $opt{location} = $opt{p} if exists $opt{p}; > $opt{copyright} = $opt{c} if exists $opt{c};It would seem like there should be an easier way to implement that... Don't ask me, though.> # Read comment options > $new{title} = $opt{title} if exists $opt{title}; > $new{version} = $opt{version} if exists $opt{version}; > $new{album} = $opt{album} if exists $opt{album}; > $new{artist} = $opt{artist} if exists $opt{artist}; > $new{organization} = $opt{organization} if exists $opt{organization}; > $new{description} = $opt{description} if exists $opt{description}; > $new{genre} = $opt{genre} if exists $opt{genre}; > $new{date} = $opt{date} if exists $opt{date}; > $new{location} = $opt{location} if exists $opt{location}; > $new{copyright} = $opt{copyright} if exists $opt{copyright}; > > > # Act on each remaining arg > foreach my $ogg (@ARGV) { > # Get existing comments > %old = map { my ($tag, $value) = split(/=/,$_,2); chop($value); > "\L$tag", $value } > `vorbiscomment -l $ogg 2>/dev/null`; > next if $?; > # Merge new comments > while (my ($k, $v) = each(%new)) { > $old{$k} = $v; > } > if (%new) { > # Set new comments > open(OUTPUT, "| vorbiscomment $ogg 2>/dev/null") || next; > while (my ($k, $v) = each(%old)) { > if ($v) { > print OUTPUT "\U$k", "=$v\n"; > } > } > close(OUTPUT); > } > else { > while (my ($k, $v) = each(%old)) { > print "\U$k", "=$v\n"; > } > } > } > > > > # Print a usage summary > sub usage { > print <<EOF; > usage: $0 [options] [file ...] > > -h, --help display this message > -V, --ogg-version print version info > -t, --title=TITLE set title > -v, --version=VER set title version > -l, --album=ALBUM set album > -a, --artist=artist set artist > -o, --organization=ORG set organization/record label > -D, --description=DESC set brief contents description > -g, --genre=GENRE set short genre description > -d, --date=DATE set date > -p, --location=PLACE set recording location info > -c, --copyright=COPY set copyright info > EOF > exit 0; > }How about custom comments? The script should provide a means to insert, delete, and move these around. Also, it is possible (and indeed useful) to have multiple artist, description, title, location, etc. tags. Maybe you need to rethink the interface just a little.> > # Print version info > sub version { > print "$0 $version\n"; > exit 0; > }-- Kenneth Arnold <ken@arnoldnet.net> / kcarnold / Linux user #180115 http://arnoldnet.net/~kcarnold/ --- >8 ---- List archives: http://www.xiph.org/archives/ Ogg project homepage: http://www.xiph.org/ogg/ To unsubscribe from this list, send a message to 'vorbis-dev-request@xiph.org' containing only the word 'unsubscribe' in the body. No subject is needed. Unsubscribe messages sent to the list will be ignored/filtered.
As of today, I am brand spanking new to this list. Having stumbled across Vorbis on a generic search, I cant believe what I have found. This is just what I have been looking for and should get me that promotion I so deserve. Anyway, I hope this is the correct forum to field the following questions. If am posting to the wrong list, I merely ask that you take a deep breath, count to ten and point me in the right direction. At first glance it appears that Vorbis will not encode content that has been captured below 44.1kHz. It also appears that only 16 bit samples can be accepted as input. Is this true? I am building Windows apps that will be linking with LibVorbis. I am currently trying to get LibVorbis to compile, but MSVC is complaining about pthread.h. Where can I get this header file? Also, is this not a Unix file? Will it work under the Window OS? Is anybody else aware that the included Vorbis VC6 project and workspace files are empty? Or is my inferior intellect getting in the way once again? Thanks in advance for any help. Ron (I cannot aptly express my frustrations with the legal mess that is MP3 and AAC. Ogg appears too good to be true. Is it true? If so, I am naming my next child "Monty") --- >8 ---- List archives: http://www.xiph.org/archives/ Ogg project homepage: http://www.xiph.org/ogg/ To unsubscribe from this list, send a message to 'vorbis-dev-request@xiph.org' containing only the word 'unsubscribe' in the body. No subject is needed. Unsubscribe messages sent to the list will be ignored/filtered.