Linux HOWTOs

About | Home | Search


HOWTO: oggvorbis
Description: An open, free (both kinds) audio format (an excellent mp3 alternative)
Click here for ChangeLog
NOTE: I use GNU tar >= 1.13.25 so it's -j for .tar.bz2 files,
it's safe to assume that make, gcc, binutils, fileutils/coreutils, gawk, sed, and grep are prerequisites for almost everything


# Ogg Vorbis
# ==========
# Ogg Vorbis is a collection of libraries and tools including libao, libogg,
# libvorbis, and the vorbis-tools.  Slackware 9.0 and 9.1's 'oggutils' package
# includes libao 0.8.3, libogg 1.0, libvorbis 1.0, and vorbis-tools 1.0
# Slackware 10.0 and up include separate packages for each one.  See below for
# included versions.  At the bottom of this howto are python bindings and
# codecs.

# Before you begin with anything else, run this:
mkdir -p -m 0700 ~/installed/oggvorbis ~/src/oggvorbis
su -c "test -x /sbin/removepkg && /sbin/removepkg oggutils"


# libao 0.8.8
# ===========
# Slackware 10.0's 'libao' package includes version 0.8.4, 10.1's includes
# 0.8.5, 10.2's, 11.0's, and 12.0's include 0.8.6

# Prerequisites:
# EsounD >= 0.2.8
# ALSA >= 0.9.0
# aRts >= 0.9.5 (Analog RealTime Synthesizer - KDE's sound server)
# XFree86 or X.org
# audiofile's libaudio
# pkg-config
# polypaudio >= 0.6

cd
test -f installed/oggvorbis/libao-0.8.8.tar.gz &&
 mv installed/oggvorbis/libao-0.8.8.tar.gz .
test ! -f libao-0.8.8.tar.gz &&
 wget http://downloads.xiph.org/releases/ao/libao-0.8.8.tar.gz

# Verify tarball w/ md5sum:
echo "b92cba3cbcf1ee9bc221118a85d23dcd  libao-0.8.8.tar.gz" | md5sum -c

# Verify tarball w/ sha1sum:
echo "d6e867bbfc4361346db8e505c51271e4162ae7c4  libao-0.8.8.tar.gz" | \
 sha1sum -c

cd src/oggvorbis
find -maxdepth 1 -type d -name "libao-*" -exec rm -r {} \;
tar xzvf ~/libao-0.8.8.tar.gz
cd libao-0.8.8
test $UID = 0 && chown -R root:root .
./configure --prefix=/usr
make

# Become root to install it
su

test -x /sbin/removepkg && /sbin/removepkg libao
find /usr/doc -maxdepth 1 -type d -name "libao-*" -exec rm -r {} \;
rm -f /usr/lib/libao.*
make install
ldconfig
chown -R $USER .
chmod -R u+w .

# Become yourself again
exit

cd
rm -f installed/oggvorbis/libao-*.tar.*
mv libao-0.8.8.tar.gz installed/oggvorbis/


# libogg 1.1.3
# ============
# Slackware 10.0 and 10.1's 'libogg' packages include version 1.1, 10.2's
# includes 1.1.2, 11.0's and 12.0's include 1.1.3

cd
test -f installed/oggvorbis/libogg-1.1.3.tar.gz &&
 mv installed/oggvorbis/libogg-1.1.3.tar.gz .
test ! -f libogg-1.1.3.tar.gz &&
 wget http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz

# Verify tarball w/ md5sum:
echo "eaf7dc6ebbff30975de7527a80831585  libogg-1.1.3.tar.gz" | md5sum -c

# Verify tarball w/ sha1sum:
echo "a3e495a8baf6939efad7e0bd11cc0e466838c3db  libogg-1.1.3.tar.gz" | \
 sha1sum -c

cd src/oggvorbis
find -maxdepth 1 -type d -name "libogg-*" -exec rm -r {} \;
tar xzvf ~/libogg-1.1.3.tar.gz
cd libogg-1.1.3
test $UID = 0 && chown -R root:root .
./configure --prefix=/usr
make

# Become root to install it
su

test -x /sbin/removepkg && /sbin/removepkg libogg
find /usr/doc -maxdepth 1 -type d -name "libogg-*" -exec rm -r {} \;
rm -f /usr/lib/libogg.*
make install
ldconfig
chmod -R u+w .

# Become yourself again
exit

cd
rm -f installed/oggvorbis/libogg-*.tar.*
mv libogg-1.1.3.tar.gz installed/oggvorbis/


# libvorbis 1.2.0
# ===============
# Slackware 10.0 and 10.1's 'libvorbis' packages include version 1.0.1,
# 10.2's includes 1.1.1, 11.0's and 12.0's include 1.1.2

# Prerequisites (beyond those listed above):
# libogg (above)

cd
test -f installed/oggvorbis/libvorbis-1.2.0.tar.bz2 &&
 mv installed/oggvorbis/libvorbis-1.2.0.tar.bz2 .
test ! -f libvorbis-1.2.0.tar.bz2 &&
 wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.0.tar.bz2

# Verify tarball w/ md5sum:
echo "7c6e409d7aa1fa8a5481dea571d5bde0  libvorbis-1.2.0.tar.bz2" | md5sum -c

# Verify tarball w/ sha1sum:
echo "fd10558c7dc297887caf20f3ac2601e084715a6a  libvorbis-1.2.0.tar.bz2" | \
 sha1sum -c

cd src/oggvorbis
find -maxdepth 1 -type d -name "libvorbis-*" -exec rm -r {} \;
tar xjvf ~/libvorbis-1.2.0.tar.bz2
cd libvorbis-1.2.0
test $UID = 0 && chown -R root:root .
./configure --prefix=/usr
make

# Become root to install it
su

test -x /sbin/removepkg && /sbin/removepkg libvorbis
find /usr/doc -maxdepth 1 -type d -name "libvorbis-*" -exec rm -r {} \;
( cd /usr/lib ; rm -f libvorbis.* libvorbisfile.* libvorbisenc.* )
make install
ldconfig
chown -R $USER .

# Become yourself again
exit

cd
rm -f installed/oggvorbis/libvorbis-*.tar.*
mv libvorbis-1.2.0.tar.bz2 installed/oggvorbis/


## Codecs
## ======
# Create directories for tarball and extracted source
mkdir -p -m 0700 ~/installed/oggvorbis/codecs ~/src/oggvorbis/codecs


# Ogg Theora 1.0beta2
# ====================
# Prerequisites (beyond those listed above):
# doxygen
# Python (optional?)
# libogg >= 1.1 (above)
# libvorbis >= 1.0.1 (above)
# SDL >= 0.11.0
# libpng
# Valgrind (optional for 'make check' if you pass --enable-valgrind-testing)

# This is a video codec intended for use with Ogg.  Here are some apps
# that I know of that use it:
# gstreamer
# mplayer
# transcode
# xine

cd
test -f installed/oggvorbis/codecs/libtheora-1.0beta2.tar.bz2 &&
 mv installed/oggvorbis/codecs/libtheora-1.0beta2.tar.bz2 .
test ! -f libtheora-1.0beta2.tar.bz2 &&
 wget http://downloads.xiph.org/releases/theora/libtheora-1.0beta2.tar.bz2

# Verify tarball w/ md5sum:
echo "6ed9f998a982e996ad53d3686d655cfe  libtheora-1.0beta2.tar.bz2" | \
 md5sum -c

# Verify tarball w/ sha1sum:
echo "d58490cc507e1840fbdb432a1dd12433644cc04b  libtheora-1.0beta2.\
tar.bz2" | sha1sum -c

cd src/oggvorbis/codecs
find -maxdepth 1 -type d -name "libtheora-*" -exec rm -r {} \;
tar xjvf ~/libtheora-1.0beta2.tar.bz2
cd libtheora-1.0beta2
test $UID = 0 && chown -R root:root .
./configure
make
make check

# Become root to install it
su

find /usr/local/doc /usr/local/share/doc -maxdepth 1 -type d \
 -name "libtheora-*" -exec rm -r {} \;
make install
ldconfig

# Become yourself again
exit

cd
rm -f installed/oggvorbis/codecs/libtheora-*.tar.*
mv libtheora-1.0beta2.tar.bz2 installed/oggvorbis/codecs/


# Speex 1.0.5
# ===========
# As I write this, 1.0.5 is the latest "stable" release and 1.2beta3 is
# the latest "unstable" one

cd
test -f installed/oggvorbis/codecs/speex-1.0.5.tar.gz &&
 mv installed/oggvorbis/codecs/speex-1.0.5.tar.gz .
test ! -f speex-1.0.5.tar.gz &&
 wget http://downloads.us.xiph.org/releases/speex/speex-1.0.5.tar.gz

# Verify tarball w/ md5sum:
echo "01d6a2de0a88a861304bf517615dea79  speex-1.0.5.tar.gz" | md5sum -c

cd src/oggvorbis/codecs
find -maxdepth 1 -type d -name "speex-*" -exec rm -r {} \;
tar xzvf ~/speex-1.0.5.tar.gz
cd speex-1.0.5
test $UID = 0 && chown -R root:root .
./configure
make

# Become root to install it
su

rm -f /usr/local/lib/libspeex.*
find /usr/local/doc /usr/local/share/doc -maxdepth 1 -type d \
 -name "speex-*" -exec rm -r {} \;
make install
ldconfig

# Become yourself again
exit

cd
rm -f installed/oggvorbis/codecs/speex-*.tar.*
mv speex-1.0.5.tar.gz installed/oggvorbis/codecs/


# vorbis-tools 1.1.1
# ==================
# Slackware 10.0 and 10.1's 'vorbis-tools' packages include version 1.0.1,
# 10.2's, 11.0's, and 12.0's include 1.1.1

# Prerequisites (beyond those listed above):
# iconv
# bison
# libao (above)
# libogg (above)
# libvorbis (above)
# curl (http support for ogg123)
# FLAC
# Speex (install it above, then come back here)

cd
test -f installed/oggvorbis/vorbis-tools-1.1.1.tar.gz &&
 mv installed/oggvorbis/vorbis-tools-1.1.1.tar.gz .
test ! -f vorbis-tools-1.1.1.tar.gz &&
 wget http://downloads.xiph.org/releases/vorbis/vorbis-tools-1.1.1.tar.gz

# Verify tarball w/ md5sum:
echo "47845fd76f5f2354a3619c4097575487  vorbis-tools-1.1.1.tar.gz" | \
 md5sum -c

# Verify tarball w/ sha1sum:
echo "a1394b39905b389d72f12c2a9f0c86a33d07a487  vorbis-tools-1.1.1.tar.gz" \
 | sha1sum -c

cd src/oggvorbis
find -maxdepth 1 -type d -name "vorbis-tools-*" -exec rm -r {} \;
tar xzvf ~/vorbis-tools-1.1.1.tar.gz
cd vorbis-tools-1.1.1
test $UID = 0 && chown -R root:root .

# Patch the source so it will work with FLAC >= 1.1.3 (1.2.1 is current)
wget -nc http://englanders.cc/pub/linux/patches/notmine/\
vorbis-tools-1.1.1-flac_gt_1.1.3_support.patch &&
 patch -p1 < vorbis-tools-1.1.1-flac_gt_1.1.3_support.patch
autoconf

# Remove or comment out the CURLOPT_MUTE line in ogg123/http_transport.c
# or it will fail to build ogg123 with modern versions of curl
# https://trac.xiph.org/ticket/1101
# http://curl.haxx.se/mail/lib-2001-05/0067.html

# Build it
./configure --prefix=/usr --disable-nls
make

## If make fails with an error like this:
# /usr/bin/ld: cannot find -lssl
## re-run it like this:
# make LDFLAGS=-L/usr/local/ssl/lib

# Become root to install it
su

# Remove Slackware package if there is one, old docs
test -x /sbin/removepkg && /sbin/removepkg vorbis-tools
find /usr/doc -maxdepth 1 -type d -name "vorbis-tools-*" -exec rm -r {} \;

# Install it
make install

# Become yourself again
exit

cd
rm -f installed/oggvorbis/vorbis-tools-*.tar.*
mv vorbis-tools-1.1.1.tar.gz installed/oggvorbis/


## Python bindings
## ===============
# These will allow you to use or develop Ogg Vorbis software in
# Python.  These all obviously require Python (and everything above).

# Create directories for tarball and extracted source
mkdir -p -m 0700 ~/installed/oggvorbis/python ~/src/oggvorbis/python


# pyao 0.82
# =========
# To get version 0.8 to build with gcc 3.3.x, I had to change all of
# the multi-line definitions in src/aomodule.h into single lined ones.
# Since then I haven't had any trouble with version >= 0.81 and gcc 3.4.x,
# 0.82 and gcc 3.3.6, and 0.82 with gcc 4.0.3

cd
test -f installed/oggvorbis/python/pyao-0.82.tar.gz &&
 mv installed/oggvorbis/python/pyao-0.82.tar.gz .
test ! -f pyao-0.82.tar.gz &&
 wget http://ekyo.nerim.net/software/pyogg/pyao-0.82.tar.gz
cd src/oggvorbis/python
find -maxdepth 1 -type d -name "pyao-*" -exec rm -r {} \;
tar xzvf ~/pyao-0.82.tar.gz
cd pyao-0.82
test $UID = 0 && chown -R root:root .
python config_unix.py
python setup.py build
su -c "python setup.py install"
cd
rm -f installed/oggvorbis/python/pyao-*.tar.*
mv pyao-0.82.tar.gz installed/oggvorbis/python/


# pyogg 1.3
# =========
cd
test -f installed/oggvorbis/python/pyogg-1.3.tar.gz &&
 mv installed/oggvorbis/python/pyogg-1.3.tar.gz .
test ! -f pyogg-1.3.tar.gz &&
 wget http://ekyo.nerim.net/software/pyogg/pyogg-1.3.tar.gz
cd src/oggvorbis/python
find -maxdepth 1 -type d -name "pyogg-*" -exec rm -r {} \;
tar xzvf ~/pyogg-1.3.tar.gz
cd pyogg-1.3
test $UID = 0 && chown -R root:root .
python config_unix.py
python setup.py build
su -c "python setup.py install"
cd
rm -f installed/oggvorbis/python/pyogg-*.tar.*
mv pyogg-1.3.tar.gz installed/oggvorbis/python/


# pyvorbis 1.4
# ============
# To get version 1.0 to build with gcc 3.3.x, I had to change all of
# the multi-line definitions in src/pyvorbiscodec.c into single lined ones.
# Since then I haven't had any trouble with version >= 1.3 and gcc 3.4.x

cd
test -f installed/oggvorbis/python/pyvorbis-1.4.tar.gz &&
 mv installed/oggvorbis/python/pyvorbis-1.4.tar.gz .
test ! -f pyvorbis-1.4.tar.gz &&
 wget http://ekyo.nerim.net/software/pyogg/pyvorbis-1.4.tar.gz
cd src/oggvorbis/python
find -maxdepth 1 -type d -name "pyvorbis-*" -exec rm -r {} \;
tar xzvf ~/pyvorbis-1.4.tar.gz
cd pyvorbis-1.4
test $UID = 0 && chown -R root:root .
python config_unix.py
python setup.py build
su -c "python setup.py install"
cd
rm -f installed/oggvorbis/python/pyvorbis-*.tar.*
mv pyvorbis-1.4.tar.gz installed/oggvorbis/python/

Back to the list


Last updated: Tue, 07 Aug 2018 12:06:17 -0400
Jason Englander <jason at englanders dot us>