NAME
bfr, bfp - nonblocking 8-bit-clean pipe
buffer
SYNOPSIS
bfr
[-v[v]] [-t0] [-T0]
[-b100] [-p<arg>]
[-m0]
[-T
90] [-C0] [<input file or ->
...]
bfp [-v[v]] [-t0]
[-T0] [-b100]
[-p<arg>] [-m0]
[-T
90] [-s44100] [-S[y|n]]
[-c2] [-B2]
[-C0]
[<input
file or -> ...]
[see OPTIONS for the --long equivelants
to these]
DESCRIPTION
bfr's purpose is to
buffer data. (I hope this is obvious. =)) It buffers from its
standard input and/or a list of files of your choosing, and allows
this data to flow to its standard output at whatever rate that end
can handle. Its useful for any situation in which its beneficial to
have I/O occur in a detached yet smooth fashion... possible
applications:
- *
- - CD burning. A user in Spain was using
this in front of cdrecord, apparently the CPU couldn't keep up with the 8x burner, so 30 megs
(cdrecord's limit) wasn't enough.
- *
- - Backups. bfr can be configured to release its data in
large chunks, rather than small flowing increments, which reduces
tape seek. bfr also has a speedcap option, which ensures
bfr will never output more than a certain amount (which you
specify) of data per second. This makes it useful for network
backups without saturating your backbone or T1.
- *
- - Multimedia. Since bfr does its best to yield data to
its output at whatever pace the other side can handle (essentially
keeping the output stuffed full), it reduces skips. This helps both
movies (the pr0n must go on!) and audio (ditto mp3!). The
bfp program, included in this package, is an extension to
bfr whose primary purpose is to aid skipless audio playback,
by properly configuring and writing to /dev/dsp.
OPTIONS
- *
- -h | --help
-
- *
- display a (hopefully) helpful message.
- *
- -v | --verbose
-
- *
- enable verbosity (use twice for pedantic verbosity)
- *
- -p | --progress (*)
-
- *
- Enables ``progress mode'', with an optional arg specifying how
to display the data. The optional arg should take the form of a
letter and another part... the letter being ``k'', ``b'', ``m'' or
``p'', specifying whether bfr filledness should be displayed
in Kilobytes, bytes, megabytes or as a percentage. The second, if a
number, should be the multiplier by which throughput is measured.
Otherwise, it may be ``CD'' for CD data (150K/sec) or ``CA'' for
CD audio (176K/sec). If either is omitted,
they default is kilobytes and 1k, respectively. Typical values:
``k1k'', to monitor data at the kilobyte level, and ``pCD'' and
``pCA'' to show meaningful values for CD
data and CD audio (and total buffer usage as
a percentage) , respectively. The default is ``k1k'' for bfr,
``pCA'' for bfp.
- *
- -m | --minimum (*)
-
- *
- Set the amount of buffer to reach before output begins (to
ensure a full stream even at start). The default is 10%.
- *
- -i | --initial (*)
-
- *
- Initial is a special case of --minimum, which takes effect only
for initial prebuffering before output starts the first time. If
unspecified, it defaults to whatever --minimum is set to.
- *
- -t | --timeout (*)
-
- *
- Time, in seconds, to wait before aborting if both input and
output are locked. A value of 0 means it will wait forever. The
default is 0.
- *
- -T | --throttle (*)
-
- *
- After filling the buffer, bfr will allow the level of
onhand data to go down to this amount before accepting more input.
The default is 98%.
- *
- -b | --buffersize (*)
-
- *
- Full size of memory buffer. The default is 5m.
- *
- -C | --speedcap (*)
-
- *
- If set to a non-zero value, bfr will allow only this
many bytes to be output per second.
BUFPLAY SPECIFIC
OPTIONS
- *
- -s | --speed
-
- *
- Sound samples per second. The default is 44100.
- *
- -S | --signed
-
- *
- Is the sound data signed (y) or unsigned (n)? The default is
y.
- *
- -c | --channels
-
- *
- Number of channels (1 = mono, 2 = stereo). The default is
2.
- *
- -B | --bytes
-
- *
- Bytes per sound sample (1=8bit, 2=16bit). The default is 2
(16bit).
DEBUG SPECIFIC
OPTIONS
- *
- -d | --debug
-
- *
- enable debugging - only valid for the bfrdebug and bfpdebug
executables, not built or in dist packages by default.
NOTES
Options marked with a ``(*)''
can take their argument in simpler notation: You can use letters
'k' and 'm' can be used to specify kilobytes and megabytes.
Decimals are not allowed, use '6500k' instead of '6.5M'. '1k' means
1024, and '1m' means 1048576. '80%' means, literally, 80 percent of
buffersize. Percentages are mostly useful for the various threshold
settings - using it with --buffersize or --timeout is a bit silly.
Full list of qualifiers:
- *
- t - 1000 (1 thousand)
- *
- K or k - 1024 (1 kilobyte)
- *
- M - 1000000 (1 million)
- *
- m - 1048576 (1 megabyte)
- *
- b - 1000000000 (1 billion (either you're insane, or I want your
hardware))
- *
- G or g - 1073741824 (1 gigabyte (either you're insane, or I
want your hardware))
BUGS
If you find an inconsistency,
whether its an unexpected or undocumented ``feature'' or something
missing, please let me know!
THANKS
First of all, thank you for
using it. =)
Thanks also to the various people who have helped me at various
stages of the way, through ideas, notes, suggestions, bugfixes and
death threats, including but not limited to: miponme, Samuli
Karkkainen, Scott Gifford, Sam Phillips, Andreas Metzler, Arnd
Bergmann, Rob Ekl
AUTHOR
Mark Glines <mark@glines.org>
http://www.glines.org/software/bfr.html
SEE ALSO
bag, dog