realplay outputWhen you use realplay, sometimes you would like
to save the sound that you hear, to be able to listen to it later
in time. But realplay doesn't have a save
or export button, so how to do it?
It seems hard, if not impossible.
So I decided to kick some code for a very tiny utility that would do this kind of things.
libreplay will save the output of realplay in
a raw format, so you can do what you want with this uncompressed data later
in time.
June 1 2006:
libreplay-0.5.1.tar.gz (very small file)
Fixing minor stuff (turning stuff into static, removing
the including of bfd.h).
May 29 2006:
libreplay-0.5.tar.gz (very small file)
David Decotigny
(david decotigny free fr, with dots betweens these words,
except the second hole which gets an at-sign) added an emulation mode.
The lib won't be aggressive while downloading the stream but won't output
any sound (in 0.3 we output to the sound card to slow down the download).
He also provided the possibility to write audio in other directories than
/tmp.
Feb 26 2003:
libreplay-0.3.tar.gz (very small file)
Peter Gober (peter gober fokus fraunhofer de, with dots between
all those strings, except the second hole, which receives an
at-sign) (if your
addresses' seeker gets this one, it is surely not a computer :-)) had
troubles with a live stream, and added support for it. After some
hacks, here is the release. It was not very tested, if you have
troubles, tell me.
Dec 19 2002: libreplay-0.2.tar.gz (very small file)
Nov 29 2002: libreplay-0.1.tar.gz (very small file)
libreplay is in the public domain.
Just do a make in the directory, should be alright.
There will be the file libreplay.so which contains
everything usefull.
This works on linux with oss. It may work somewhere else, but it was not tested. If you can't use it, try to contact me.
This documentation is only valid for version 0.5 of
libreplay. Avoid using 0.1, it crashes too much realplay.
(Version 0.2 does not have LIBREPLAY_AUDIO support.)
(Version 0.3 does not have LIBREPLAY_EMULATE nor
LIBREPLAY_DIRPATH support.)
You must set the variable LIBC_PATH
to the place where your libc is (something like
/lib/libc.so.6). If you are under bash,
just do
export LIBC_PATH=/lib/libc.so.6
(replace /lib/libc.so.6 by your libc of course).
Do
LD_PRELOAD=./libreplay.so realplay
in the directory where libreplay is.
realplay will create
realplayer_stream_XX_speed_YY_channels_ZZ_format_AA.raw
for each stream you play. It will create these files in the
/tmp directory by default (can be changed by
setting the LIBREPLAY_DIRPATH environment variable).
XX will be replaced by the
stream number (from 0 to whatever the number of streams you download).
YY will
be the speed of the stream (44100 if the stream is at
44100Hz, for instance).
ZZ will be the number of channels
of the stream (1 for mono, 2 for stereo).
AA will be the size of each sample of the stream (I only
saw 16 for it, meaning: 16 bits, signed, little endian).
Some streams may be
empty, because realplay sometimes opens and closes the soundcard
whitout outputting any sound.
The output is a raw file, use sox or you favorite
conversion program to transform it into a format you like more.
For instance, using sox, you would do
sox -t raw -s -w -c 2 -r 44100 realplayer_stream_6_speed_44100_channels_1_format_16.raw out.wav copy
-t raw for saying it's a raw file,
-s -w for saying it's 16b signed,
-c 2 for saying there are 2 channels,
-r 44100 for saying it's a 44100Hz stream.
It has been tested against realplayer 8.
By setting the environment variable LIBREPLAY_AUDIO,
you can save live streams. Some streams create problems when they are
saved faster than they are played; the server will send again some
audio data, and the result is bad. With this option, the stream
is played and saved at the same time. If you have problems with
your saved streams, try this option.
There is also the environment variable LIBREPLAY_EMULATE
which also adds some delay in the downloading, but does not output
audio to the sound card (the sound card might be in use, rendering
the use of LIBREPLAY_AUDIO impossible). You set it
to 1 for an almost exact emulation of delay. You may set it to
higher values to speed up a bit the download. Default value is 4
which means the download has 1/4 of realtime delay (the stream is
downloaded at speed x4).
You also may set LIBREPLAY_DIRPATH and the files
will be saved in the indicated directory. The default directory
is /tmp.
You may use the scripts realplay.dump and
realplay.dump_live, which include all the necessary to
let realplay be used with libreplay.
realplay.dump will only save the stream.
realplay.dump_live will save it and play it.
There is also realplay.dump_emulate_live that
uses the LIBREPLAY_EMULATE environment variable.
You may need to edit these scripts, to adapt the paths, for
them to fit your system. These scripts are only here to help you;
if they don't work, you still will need to read the documentation
(this file) and understand it.
You may also need to modify the value of LIBREPLAY_EMULATE
in realplay.dump_emulate_live if it is too high or too low,
depending on the stream (setting it to 1 should be safe for all streams).
Gregory did
a little perl utility to, maybe, facilitate the usage of this
little tool. realexport.tar.gz
realexport.sh something.rm is the way to use it,
according to Gregory. (It may work, it may fail, not tested.) You
will need sox and lame available on your system.
Note that realexport.sh was developed with the 0.3
version of libreplay. It may not work with the 0.5 version
(LIBREPLAY_EMULATE is not supported I guess).
Take also a look at realdump.sh
by David Decotigny. He does the sox conversion and
ogg encoding on the fly. (Maybe I should include it − after
cleaning − in the main release...)
Contact me so I can help you.
If you crash realplay, please include the url
of the stream you tried to save, so I can try to reproduce the
problem here.
It should be very easy to read the code and know what's going on.
To be quick, we use the preload facility to catch open,
close and ioctl to let realplay think it
is talking to /dev/dsp where in fact it outputs sound
into a regular file. (With the 0.3 version and above, we catch
write too, since we may really open the audio device and
when realplay does 1 write, we do 2 writes.)
ptrace(This was added March, 21st, 2005.)
realplay could be a static program, this would
make things a little harder, and render libreplay
unusable. But we simply could patch the linux kernel to let it
save every output to /dev/dsp into a regular file.
Or, without entering kernel world, we could use ptrace too.
Dario thought this idea was
nice. He made some shell scripts, using the wonderful
strace. Here they are.
realplay uses file descriptor 12). It's shell with
some Perl.
rpldump.sh,
but watching file descriptor 10 to 14, just in case realplay
would use something else than 12. Dario justifies it by saying that
file descriptors 0, 1 and 2 are always used, up to 9 are used by the shell,
so we have 10 up to what we want for realplay. Anyway,
still a hack. We should trace the open syscalls and
wait for realplay to open /dev/dsp or
similar (and take care of dup and dup2).
These scripts do more or less the same job as libreplay.
You don't get the type of audio (44100Hz, 16b, etc.) but we could
get this information from strace. Well, just
a demonstration of the easiness of the job... You may need some hacks
to let them work. Thanks Dario!
Could it be easy for realplay to know it is not
talking to /dev/dsp? Well, I don't know... and
I don't care. I want to control what happens inside my computer.
To protect from libreplay or the ptrace
stuff, we could create a "trust" computer, that would not run with such
hacks. Some are thinking about this solution. We'll see
if we can defeat them or not if such a computer is released one day
and adopted by users. I bet we can, but it's just a bet.
If we can't, well, simply play the sound and record it from the speaker with old-fashioned hardware.
Forbid people to record and share is impossible. Humans are hardwired to communicate with each others. The world of Money is trying to put its own rules in the process, and it will lose. (If it could destroy itself in the meantime, this would not be bad, but we are entering the world of off-topicness here.) That's only a bet, though...
Copyrights are definitly a bad thing.
I just saw (November, 14th, 2003) that there existed vsound, which exists for several years, as it seems. You think you make something original, and you get doomed... (You may need to search the web for vsound, since the original website of it is this one, done by an Australian, but because of legal matters, he took it away from the Internet, so maybe the link I give does not exist anymore at the time you click it; I love the world I live in, really.)
Contact: sed@free.fr
Creation time: Fri, 29 Nov 2002 22:08:22 +0100
Last update:
Mon, 14 Apr 2008 13:20:31 +0200
Powered by a human brain, best viewed with your eyes (or your fingers if you are blind).