ogg123

Solapas principales

Índice

 

1. Introducción.

 

Ogg123 es un reproductor de audio tipo Ogg Vorbis y FLAC para la línea de comandos. ogg123 lee los ficheros de audio del tipo .ogg vorbis, decodifica sus contenidos y los envía a la salida estándar, generalmente los altavoces o auriculares, aunque si desvías la salida de sonido por defecto puede ser enviado a cualquier otro dispositivo.
 

Es parte del paquete vorbis-tools, que reune las herramientas para manipulación y creación de estos. El fichero a reproducir puede ser local, remoto, o incluso de un streaming. También se puede reproducir un archivo suelto, varios o todo un subdirectorio.

El paquete vorbis-tools contiene las siguientes herramientas: oggenc,oggdec, ogginfo,vcut,vorbiscomment y ogg123; del que profundizaremos en esta entrada.

 

ogg123-en-accion

 

2. Instalación.

 

Para poder usar a ogg123 tenemos que instalar primero el paquete vorbis-tools. En este caso, haremos esto con APT:

 

apt install vorbis-tools

 

3. Uso básico.

 

Para reproducir un archivo Vorbis o FLAC, basta con poner su nombre después de la orden ogg123, por ejemplo:

ogg123 archivo.ogg

O bien:

ogg123 archivo.flac

Si se le indica que reproduzca una carpeta, se reproducirán los archivos de audio contenidos dentro de la misma y de sus sub-carpetas, por lo tanto, la orden usada será esta:

 

ogg123 /home/usuario/carpeta/

 

Por otro lado, si sólo queremos reproducir una carpeta en especial, supongamos, de un sólo género o artista, o un disco. Digitamos:

 

ogg123 /home/usuario/carpeta/algo/

Para reproducir URLS, basta con proporcionarle el enlace completo, parecido al de a continuación, entonces:

 

ogg123 http://stream.algo.org:números/archivo.ogg

Si tenemos una lista de reproducción hecha con nuestra colección de música, podemos reproducirla con la opción --list o -@. El nombre de la lista debe ser uno solo, o un solo subdirectorio, ya que el programa ve los directorios y subdirectorios de la misma manera que el interprete de comandos. Entonces:

 

ogg123 -@ mi-música.m3u

 

Pero, en caso de no tener una, podemos crearla usando el comando find.

 

find /home/usuario/algo/carpeta-con-música/ -iname "*.ogg" > mi_lista.m3u

 

Pero, ¿y sí queremos repetir una lista de reproducción o un archivo en específico?, opción -r o --repeat.

 

ogg123 -r canción-favorita.ogg

 

Ahora que, si quieres interrumpir la reproducción, puedes hacerlo en cualquier instante pulsando ctrl-c. Si estás en una lista de reproducción esto cortará la pieza que suena y saltará a la siguiente. Si lo pulsas dentro del primer segundo de una pieza obtendrás un 'stop'.  Por supuesto, no hay que ser impaciente, el audio seguirá sonando hasta que se vacíe el buffer de salida. Depende del sistema, pero puede ser de 1 a 2 segundos.

 

4. Opciones avanzadas.

 

Durante la reproducción se usan unas áreas llamadas buffer, (ver abajo), tanto de entrada como de salida. Si deseas que este buffer tenga un tamaño concreto, dentro de lo razonable, claro, usa:

 

Para el buffer de entrada:

-b n o bien --buffer n

 

Donde “n” es la cantidad de kilobytes deseados.
 

Para el buffer de salida:

--audio-buffer n

 

Donde “n” es la cantidad de kilobytes que le asignas.

Una curiosidad es que este programa tiene una rutina de prebuffer, que es la cantidad del buffer de entrada que ha de estar llena de datos antes de que el programa empiece la reproducción.

Para cambiar este margen, usa

-p n o bien --prebuffer n

,siendo “n” el porcentaje a llenar antes de empezar a sonar.

 

Pues ya lo tenemos a punto para sonar, pero ¿donde queremos que suene, o que vaya ?. Ya dijimos que la salida puede ser redireccionada.

 

-d device o bien --device device

sirve para ello, (siendo “device” el dispositivo de salida elegido), (ver lista de abajo), y pueden ser uno o varios.

La salida no siempre es "para consumo inmediato", en estos tiempos que corren, hasta la música puede ser "para llevar". Esto significa que también se pueden volcar los datos decodificados a un fichero, y ogg puede hacerlo adaptándose a varios estándares y formatos. (ver abajo en devices).

 

Para escoger uno concreto,

-f archivo o  --file archivo

. Si le damos solo un guión "-" lo entregará en la salida por defecto, sea la que sea, (normalmente la tarjeta de sonido).

 

También relacionada con los devices o dispositivos de destino, está la posibilidad de poderles hacer llegar una opción o un valor para su funcionamiento, (en los casos así previstos). Para ello podemos usar

-o option:valor o bien --device-option option:valor

 

Cambiamos de tema. Si vamos a escuchar una pieza larga, o muy larga, (tal vez una sinfonía), entonces quizá nos interese ir directos a un punto concreto. (Nos han dicho: "no te pierdas el solo del minuto 16:32").

 

 

Podemos ir con

-k n o bien --skip n

siendo n los segundos. La forma minutos:segundos, o horas:minutos:segundos, también está aceptada, pudiera ser que se tratase de todo un festival.

 

 

De la misma manera podemos saltarnos la parte del presentador, anuncios, agradecimientos, etc. Con la función

--skip o -K n o bien  --end n

siendo n como antes los segundos que hay que avanzar. También admite como se menciono antes el formato “mm:ss” y “hh:mm:ss”

¿Te has perdido?, la opción

-h o bien --help

te ayudara.

 

La opción -v nos mostrará más información acerca de la URL o archivo en reproducción:

ogg123 -v algo.ogg

 

En cambio la opción

-V o --version

nos mostrara información sobre la versión de ogg123 que estemos usando.
 

 

Por el contrario,

-q o bien --quiet

hará que se ejecute en modo “silencioso” , es decir, que no muestre nada en pantalla.
 

-z o --shuffle

le hará reproducir en orden pseudo-aleatorio.

 

 

Velocidad variable:
 

x n o bien --nth

reproduce cada 'n'º bloque de datos, resultando en una reproducción a “n” veces más velocidad.
 

-y n o bien --ntimes

reproduce cada bloque de datos 'n' veces, resultando en una reproducción '”n” (número) veces más lenta.

Tal como lo explican, parece que es como el vídeo, que avanzas a cámara rápida a base de comerte los frames intermedios, o a cámara lenta a base de repetir una y otra vez el mismo cuadro, para que el tv o monitor tenga algo que pintar en la pantalla.

 

Si ajustas /etc/libao.conf puedes hacer que cada vez que usas la libao se elijan unos devices determinados, por encima de los predefinidos por el sistema.
 

5. Sección devices.

 

Un "device" es algún tipo de dispositivo o sitio de destino a donde se dirige el flujo de datos. Pueden ser "de tipo físico" como por ejemplo un port o un chip de la tarjeta de sonido, o pueden ser más"etéreos" o "simbólicos", como un fichero o el mismo /dev/null.
 

Mediante la librería libao te puedes dirigir a muchos de ellos. Si el dispositivo en cuestión escribe ficheros se puede usar la opción “-f” como decía mas arriba, en las redirecciones.

Veamos cuales hay disponibles:

 

alsa Advanced Linux Sound Architecture. No hace falta presentarlo ¿verdad?. Opciones:
 

card Número que tenga la tarjeta de sonido en tu sistema. (Por defecto = 0)

 

dev El "Device number" que le haya asignado linux al dispositivo de destino del sonido,
(normalmente léase la tarjeta de sonido). (Por defecto = 0)

 

buf_size Como explicaba, cambia el tamaño del buffer por defecto. (Ponerlo en bytes).

 

oss Open Sound System para Linux y FreeBSD. Opciones:

 

dsp Designa al dispositivo de procesamiento para la tarjeta de sonido. (Por defecto a  /dev/dsp).

 

esd Enlightened Sound Daemon. Este puede funcionar desde fuentes remotas.

Opciones:

 

host Nombre del host donde se está ejecutando esd. Puede incluir un numero de puerto despues del dominio, con ':' entre uno y otro. Como en "whizbang.com:555". (Por defecto = localhost).

 

arts aRts Sound Daemon. Otro conocido, aunque este no parece dar muchas opciones.

wav WAV file output. Es un formato de fichero de sonido sin compresión, lo que permite incluso almacenar varias piezas o cortes en un solo fichero. Wav no tiene, en cambio, ningún sistema de búsqueda de un trozo en concreto. Para eso es mejor usar el formato au.

 

El encadenamiento de wav's puede a veces causar comportamientos extraños en otros programas, ya que la cantidad de datos del fichero se guarda en la cabecera, sin embargo, mientras está grabando, el driver no tiene ni idea de la cantidad final de datos. Contra eso también puedes usar el formato au, o el raw.

au Sun audio file output. Escribe los paquetes de datos de audio en "formato AU", el cual si suporta la escritura y búsqueda en ficheros, como el standard out. En estos casos, El header o cabecera del AU especifica el formato de las muestras, aunque no la longitud de la grabación.

sun Ya que hablamos de sun, Sun Audio driver para NetBSD, OpenBSD, y Solaris.

Opciones:

 

dev Dispositivo de sonido para la tarjeta.   Por defecto es /dev/audio.

 

irix IRIX audio driver. Sin opciones.

raw Mencionaba antes de formatos sin compresión, aunque inscritos dentro de un cierto formato. Puede que un formato cerrado y estandarizado no sea exactamente lo que buscas, que quieras manejar solo los datos, sin tener que filtrar marcas ni indices ni cabeceras. eso es raw, los datos se escriben al fichero tal cual salen. En crudo.
 

A pesar de su simplicidad, sí tiene opciones:

 

byteorder Puedes elegir entre big endian, little endian o native para el orden en que se escriben los bytes. (Por defecto = native), que significa "ve grabándolos tal como lleguen".

 

null Null driver. Y llegamos al último, y más curioso, de nuestros devices, el ya mencionado /dev/null. Básicamente es ir cogiendo los datos y echándolos a la papelera. Seguro te estas preguntando, ¿y eso qué clase de utilidad tiene?. Puede interesar para hacer pruebas del procesado y/o velocidad del mismo, sin llenarte de ficheros que no vas a usar y sin que el tiempo de acceso y grabado al disco o a la ram interfieran en las marcas de tiempo que estás buscando, (benchmark).

Como curiosidad, en este caso concreto ni tan solo llegan a direccionarse al /dev/null. Una vez obtenidos los datos simplemente son descartados.

 

6. Apéndice: El buffer:

 

¿Qué es un buffer?, veamos una explicación simple y corta del concepto:

Un buffer, de entrada o de salida, es un área de memoria donde se guardan temporalmente
los datos en espera de ser procesados. Uno de los ejemplos más antiguos directos y claros es el del buffer de la impresora, (spool).

El ordenador le da un conjunto de datos, imposible de seguirles el ritmo para la mecánica de la impresora, (sin contar que desde el abandono de la mecánica de teletipo en favor de la matricial tiene que decidir además que puntos se pintarán y en que sitio para cada carácter.

Como el ordenador no puede estar bloqueado esperando a que termine de imprimir la linea, le deja los datos que sean en un sito convenido, y la impresora los va tomando a su ritmo.

Otro ejemplo claro sería el buffer de grabación de los cd/dvd. Ahora ya no hay problema, normalmente podría hacerse incluso "en directo", digamos "on the fly", pero cuando aparecieron, los ordenadores no eran lo bastante rápidos para garantizar el flujo sostenido de datos que exige una grabación.

¿La solución?, el ordenador empezaba a servir datos a lo mejor 1 minutos o 2 antes de enviar la orden de empezar a grabar, y asi se aseguraba una reserva de datos disponibles para mantener el flujo.

Y así es como funciona un buffer.

 

7. Agradecimientos.

 

Primeramente a Kenneth Arnold y Stan Seibert por haber creado a ogg123, y al usuario Percontator por la traducción y adaptación al español de las opciones avanzadas, sugerencias para explicar mejor algunas opciones, la sección Devices, y el Apendice del Buffer. Sin ellos esto no sería posible. Gracias a todos.