BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

¿Grabar sonidos de radio online en ubuntu?

BocaDePez
BocaDePez

Hola a todos, llevo bastante tiempo siguiendo este weblog y me parece muy interesante lo que estoy aprendiendo aqui (los usuarios de este sitio teneis la culpa de que ahora mismo este intentando aprender linux jajaja). Ahora que he visto los comentarios de la noticia del Ubago, vi que hablaban de BoomBox, lo probé para bajar musica de Digitally Imported y va genial, ahora mi pregunta es, ¿hay algún programa parecido disponible para linux?

Salu2.

Este tema está cerrado a nuevas respuestas. Abre un nuevo tema para retomar la conversación.
migtei

¿Podrías poner el enlace a la noticia de la que hablas, boombox?

Usa:
(link roto)

Necesitas también sox.
El autor lo ha dejado porque en Australia es ilegal tener programas que graben contenido con derechos de autor. ¿Y los radiocassettes? En fín, gilipolleces.

Te lo bajas, lo compilas fácil, y lo que hace es capturar com intermediario lo que va a la tarjeta de sonido (/dev/dsp). Uso:
(link roto)

vsound --help
vsound [options] program arguments

options:
-f, --file=FILE output file name
-v, --verbose set to verbose output
-k, --keep-temps don't delete temporary files
-h, --help this help message
-V, --version show program version
-r, --resample resample the output file to the given sample rate
eg. vsound -r 44100 realplay file.rm
-d, --dspout enable simulateous output to /dev/dsp and file
(may be required for some programs)
-s, --stdout write the intermediate (Sun AU format) file to stdout
(no other output file is generated)
-n, --no-convert do not convert the AU file to WAV
-t, --timing add timing delays to allow recording of streaming data
-a, --autostop=SEC kill the player after 'SEC' seconds of inactivity.

Te lo graba en wav o Sun AU, aunque tengo que intentar (ya que graba en tiempo real) hacer una tubería a lame para pasarlo a mp3 diréctamente. Quizás con un fifo (file in file out) para que siempre haya buffer de datos.

¿Hay alguien por ahí que lo haya hecho ya y me ahorra tiempo?

Gracias y suerte...

🗨️ 3
BocaDePez
BocaDePez

Gracias, pero para lo que lo quiero es shoutcast radio, asi que me parece mas sencilla la solución de abajo, la probaré primero la otra xD.

Y la noticia que te digo es la que está aqui en portada, hablan del comentario de ubago, pues alguien en los comentarios nombró un programa llamado boombox que servía para grabar lo que reproducían las shoutcast radios...

Salu2.

migtei

Hace tiempo que no probaba vsound, la compilo e instalo, reciclo las librerías con ldconfig y no va ni como root:

vsound realplay (link roto)
About to start the application. The output will not be available
until the application exits.
ERROR: ld.so: object '/usr/lib/vsound/libvsound.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/usr/lib/vsound/libvsound.so' from LD_PRELOAD cannot be preloaded: ignored.
Warning: LD_PRELOAD="/usr/lib/vsound/libvsound.so"
ERROR: ld.so: object '/usr/lib/vsound/libvsound.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/usr/lib/vsound/libvsound.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/usr/lib/vsound/libvsound.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/usr/lib/vsound/libvsound.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/usr/lib/vsound/libvsound.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/usr/lib/vsound/libvsound.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/usr/lib/vsound/libvsound.so' from LD_PRELOAD cannot be preloaded: ignored.
Missing file ./vsound32027.au.
This means that the libvsound wrapper did not work correctlty.
Here are some the possible reasons :
- You are trying to record a stream (RTSP or PNM protocol) from
the internet. You will need to use the --timing option.
- The program you are trying to run is setuid. You will need to
run vsound as root.
- Vsound was not properly installed and hence won't work at all.

La versión 0.6 es de 2004. Quizás como es para oss los drivers de alsa (tengo alsa-1.0.10) ya no son compatibles. He intentado arrancarlo con aoss y tampoco. Veo que hay una versión para ubuntu dapper (0.64) y un rpm para mandrake. Sustituyo la librería libvsound.so por la de la mandrake y tampoco, la escupe como un sapo. Una puñeta porque era un programa cojonudo.

¿Sigue funcionando?
¿Hay alguna alternativa que capture con alsa?

Gracias

🗨️ 1
migtei

Me he picado con el tema y recuerdo que con el driver alsa se puede hacer. Os cuento mis intentos. Mi tarjeta usa el driver snd_via82xx pero tiene que funcionar con todas.
La idea es capturar lo que vaya a pcm, he probado con lastfm.

Listo todos los devices y tarjetas:
arecord -L

Y veo el plug tee que debe ser un bifurcador como su comando en bash:
...
tee {
@args.0 SLAVE
@args.1 FILE
@args.2 FORMAT
@args.SLAVE {
type string
}
@args.FILE {
type string
}
@args.FORMAT {
type string
default raw
}
type file
slave.pcm $SLAVE
file $FILE
format $FORMAT

Hay un plug llamado file que también debería grabar pero necesita darle permisos de lectura a /dev/full o hacerlo como root (sucio).
Pongo el pcm del mezclador al 60% y activo capture a la mitad y grabo 10 segundos:
arecord -d 10 -D "tee:hw,'/home/migtei/test/mifile.raw',raw" > /dev/null
Recording WAVE 'stdout' : Unsigned 8 bit, Rate 8000 Hz, Mono

Si no lo mandas a /dev/null la consola se escojoncia. El formato es una caca pero es un pincipio. No consigo otro formato mejor, no parece que acepte otro. Lo que sale:
l -h
-rw------- 1 migtei users 46K 2006-08-29 03:54 mifile.raw

Le digo a Sam que la toque y va bien:
aplay -v mifile.raw
Playing raw data 'mifile.raw' : Unsigned 8 bit, Rate 8000 Hz, Mono
Plug PCM: Rate conversion PCM (44100, sformat=U8)
Its setup is:
stream : PLAYBACK
access : RW_INTERLEAVED
format : U8
subformat : STD
channels : 1
rate : 8000
exact rate : 8000 (8000/1)
msbits : 8
buffer_size : 4000
period_size : 1000
period_time : 125011
tick_time : 4000
tstamp_mode : NONE
period_step : 1
sleep_min : 0
avail_min : 1000
xfer_align : 1000
start_threshold : 4000
stop_threshold : 4000
silence_threshold: 0
silence_size : 0
boundary : 262144000
Slave: Hardware PCM card 0 'VIA 8235' device 0 subdevice 1

--------------------------------------------------------------------

Otra manera es crear el archivo /home/usuario/.asoundrc con el contenido:
pcm.copy {
type plug
slave {
pcm hw
}
route_policy copy
}

Y luego grabo (poniendo los niveles adecuadamente) con:
arecord -d 15 -D copy copy.wav
Recording WAVE 'copy.wav' : Unsigned 8 bit, Rate 8000 Hz, Mono

Va bien. Ahora con mas calidad:
arecord -d 15 -f cd -D copy copy.wav
Recording WAVE 'copy.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

Mucho mejor, pero 1 minuto son 5 megas y solo escucho el canal izquierdo. A lo mejor cada canal de captura es un device, el izquierdo es el 0.0 y el derecho el 0.1, o uno es la captura analógica y la otra la IEC958, nusé:
cat /proc/asound/devices
17: [0- 1]: digital audio playback
25: [0- 1]: digital audio capture
16: [0- 0]: digital audio playback
24: [0- 0]: digital audio capture
0: [0- 0]: ctl
1: : sequencer
33: : timer

Lo bueno es que graba cualquier cosa que salga por pcm, pero era mucho mas fácil con vsound. Lo que no sé es si capturo directamente el pcm, o paso de pcm a analógico y luego reconvierto a pcm. Si consiguiera 2 canales me daría por satisfecho.

Suerte...

DaHooL

streamtuner + streamripper

En Debian están los paquetes (apt-get,aptitude,synaptic..). En Ubuntu debería estar también.

Más sencillo, imposible ^^
Imagen original en http://img209.imageshack.us/img209/8784/screenshot1vl7.th.png

🗨️ 2
migtei

¿Graba todo? Quiero decir que para escuchar radio y dependiendo de la emisora uso o realplayer, o mplayer o xmms, o amarok (que funciona con todo). En tu pantallazo veo todo tipo de emisoras pero en la descripción de streamripper dice que solo las compatibles con shoutcast. Ya sé que me lo puedo instalar y verlo (y que te ponga los tags es cojonudo) pero quiero saber hasta donde llega.

Disculpa por preguntar antes de mirar:
streamripper.sourceforge.net/faq.php

Gracias

BocaDePez
BocaDePez

Lo he estado probando y funciona genial, gracias.

Salu2.

Say0nar4

Si lo que quieres es grabar de la radio, yo uso el mplayer mondo y lirondo

Más o menos esto es un extracto para grabar de una radio

  • mkfifo /tmp/radio_pipe
  • lame /tmp/radio_pipe MiPrograma.mp3 2>/dev/null 1>/dev/null &
  • mplayer -ao pcm:file=/tmp/radio_pipe -playlist mms://direccion/radio

Osea creo un archivo FIFO. Dejo al lame diciendo que convierta a mp3 todo lo que le entre por ese archivo. Y luego enchufo el mplayer diciendo que en vez de oirse quiero que lo mande a tal archivo en formato wav.
Al final tengo un archivo mp3 muy aseado.

Yo esto lo uso mucho. Tengo un script para grabar progrmas de la radio que está muy apañado. Además así es muy fácil crear un trabajo cron y que se te grabe ese programa que tanto te gusta pero que nunca puedes oir.
Si queréis pongo el script

🗨️ 3
migtei

Se agradece que pongas el script para la colección. Un forero puso uno para acceder eligiendo la emisora usando mplayer y leyendo un archivo con las emisoras que es bueno.
El problema que intento solucionar es encontrar un sustituto de vsound que capturaba cualquier cosa que fuese a la tarjeta de sonido (/dev/dsp) independientemente de como llegara (webcam, flash, skype, lastfm, etc). Era una solución sencilla y de calidad. Me extraña que no haya (el último es de 2004) un sustituto. Con alsa se puede hacer, pero alsa es un mundo oscuro y dependes de las características de la tarjeta. Yo lo consigo como posteo arriba pero con calidad cacosa.
No sé si vsound no funciona en mi equipo o es que ya no va por ser obsoleto. Al compilarlo todo va correcto pero la librería dinámica no entra aunque (trabaja con los antiguos drivers oss) alsa tiene módulos para oss que sea compatible.
¿Hay alguien por ahí al que hoy le funcione vsound?

Gracias

🗨️ 2
Say0nar4

Bueno pues como no cuesta nada te pongo aquí el script, ya me dirás si te gusta.
Este ejemplo de script está pensado para grabar el programa "No somos nadie" de m80 y que dura 3 horas. Como yo solo puedo escuchar la primera hora me lo suelo grabar. Ahí va:

#!/bin/bash

#emisora
emisora='mms://www.los40.com/nuevo_player/m80.asx'

#duracion minutos
minutos=185

#Nombre del programa
programa=No_somos_nadie

#Directorio donde grabarlo
dir=$HOME/musica/radio

# Nombre del fichero
nombre=${dir}/${programa}_`date +%y_%m_%d`.mp3

#Creamos un pipe
[ -e /tmp/radio_pipe ] && rm /tmp/radio_pipe
mkfifo /tmp/radio_pipe

#Lame para pasar a mp3
lame /tmp/radio_pipe $nombre 1>/dev/null 2&>1 &

#Esperamos el tiempo marcado y matamos el mplayer
(sleep $(($minutos * 60+30));killall mplayer)&

#mplayer
#Si la emisora es del tipo http://.. quitar la opcion -playlist
#mplayer -ao pcm:file=/tmp/radio_pipe $emisora
#Si la emisora es del tipo mms://.. añadir la opcion -playlist
#mplayer -ao pcm:file=/tmp/radio_pipe -playlist $emisora

mplayer -ao pcm:file=/tmp/radio_pipe -playlist $emisora

#Cuando se mate al mplayer se borrara el pipe
rm /tmp/radio_pipe

Luego me pongo añado un trabajo cron para que empiece a grabar a partir de las 7:00 solo de lunes a viernes.

Lo he probado con emisoras shoutcast y se oye de lujo luego :-P

🗨️ 1
migtei

Comentado como a mi me gusta. Gracias