Age | Commit message (Collapse) | Author |
|
audio-related functions and put them in files named sio_<backend>.c
No behaviour changes.
|
|
|
|
is available for the stream. As we're at it, remove macros and
functions that are neither used nor documented.
|
|
|
|
AMSG_xxx macros, which in turns simplifies the code
|
|
and don't generate clock ticks (ie don't invoke the sio_onmove(3)
call-back).
|
|
fix NULL vs 0, etc. No behaviour change.
|
|
now), play and record directons may be out of sync, and since the play
direction is used as clock source, we may end up with data ariving
_before_ the time it was recorded. This breaks the sndio ``device
model'' and most full-duplex apps relying on it, starting with aucat
in its default mode.
Workaround this by using the direction that's ahead as clock source,
ensuring that recorded data never arrives before the clock tick it was
recorded. This prevents apps from crashing but won't fix stuttering
caused by missed interrupts.
ok deraadt@
|
|
from Remco <remco at d-compu.dyndns.org>, thanks!
|
|
for both structs, the new members are 'bps' and 'msb', which
describe the number of bytes per sample and data alignment in the
sample, respectively. drivers must properly set these fields in
the 'query_encoding', 'set_parameters' and 'get_default_params'
hardware interface methods.
discussed with ratchov, deraadt
|
|
difference between audio files and client connections. Clean up
the way command line options are handled and clarify this in the
manual page: stream parameters (-Ccehjmrtvx) must precede stream
definitions (-ios) and per-device parameters (-abz) and stream
definitions (-ios) must precede device definitions (-f). Since
there's no ``server'' and ``non-server'' modes anymore, make the
-l option just detach the process.
ok and help from jakemsr and jmc
|
|
complicated. Instead, request clients to provide enough samples
and start with buffers full.
|
|
|
|
Add a new ``initial position'' message which is simpler. No bahaviour
change, except effects of the protocol version crank.
|
|
|
|
full-duplex, we may detect a xrun in the play direction and discard
the clock tick, this would cause sio_revents() to return POLLIN
without the clock being advanced, causing apps relying on the clock
for flow control to enter a busy loop.
|
|
requested sample rate, scale the block/buffer sizes so the block/
buffer sizes the hardware will use are the same amount of *time*
as the requested block/buffer sizes.
ok ratchov@
|
|
already paused (by either sio_open or sio_stop)
from Alexandr Shadchin, thanks!
|
|
changed until after sio_stop() is called
ok ratchov@, jmc@
|
|
descriptor is closed. Fix from Alexandr Shadchin, together with
various simplifications.
|
|
From Alexandr Shadchin <alexandr.shadchin at gmail.com>
Good catch!
|
|
play parameters are set only if playback is enabled, and record
parameters are set only if recording is enabled. Fixes
sun_getcap() on devices whose play and record parameters are not
independent.
|
|
set record precision.
|
|
|
|
run by root, it binds a shared address to the socket, cranks the
process priority and drops privileges. sio_open(3) will try to
connect to the private socket first (if any), then to the shared
socket. Only one user may have connections to aucat at a given
time.
based on discussions with henning, pyr and others
ok jacek, deraadt
|
|
started immediately after it's opened in record only mode.
Pause it in sio_open() and sio_stop(), since libsndio requires
an explicit call to sio_start().
discussed with jakemsr
|
|
- make the ``-m mode'' option per subdevice, allowing
subdevices to be play-only or rec-only even if the
server is full-duplex
- add ``monitoring'' mode (with ``-m mon''). This is a
record-only stream from which played streams can be
recorded (kind of ``record what you hear'').
- allow MIDI devices to be subscribed to the controlling
MIDI port of the server, ie what midicat does (with -f
option), but using the -q option.
- add flow control to the protocol, and serialize clock
ticks (sio_onmove() calls) and data chunks. This should
fix certain full-duplex programs, broken with ``magic''
block/buffer size combinations.
- enable 3 block latency which is the minimum theoretical.
Make -z and -b options correspond to device parameters.
- make sio_getcap(3) the same for aucat and sun backends,
ie return whatever is supported (``everything'' in the
aucat case, since everything is actulally supported).
aucat (player):
- enable ``-m mode'' option to select between monitoring
and recording when ``-o file'' is used.
- plug MIDI code to non-server codepath. The MIDI control
device is specified with the ``-q device'' option, as in
server mode.
- impliment lseek()'ing within files (controlled
through MIDI). Necessary to use aucat with a MIDI
sequencer.
midicat (thrubox):
- rename ``-f'' flag to ``-q'', so it has the
same name as in aucat (-f is still working)
ok jakemsr@, tweaks from jmc@
|
|
with precision other than 8, 16 or 32 bits.
Found by Jan Stary <hans at stare.cz>, thanks!
|
|
ok ratchov
|
|
can return POLLOUT (if requested), even the handle was not writable when
sio_pollfd() was called but become writable somewhere in the code path
of sio_revents().
This should improve stability of programs using very small buffers.
|
|
called. Since sio_onmove() callback doesn't return negative deltas
anymore, slightly simplify related paragraphs.
siggested by espie@, ok jakemsr@
|
|
don't call the sio_onmove() call-back with negative argument.
|
|
precision / 8. Fixes sio_setpar() requesting smaller block sizes
on 24-bit devices.
|
|
entering a busy loop
|
|
stream in a way that the pause never occurs in the middle of data
chunks. Beside being more natural, this allows the client to send
non-data messages during the pause (set the volume, stop playback...),
rather than delaying them until the end of the pause. It's about
few milliseconds only.
|
|
control connections.
|
|
instead of ``appbufsz'', which violates the flow control mechanism.
Fix this longstanding bug by enabling negative values in AMSG_MOVE
messages, this way the client is notified when its stream is
attached to the mixer, and can update its max transfer limit.
Since this fix changes the AMSG_MOVE message format, we crank the
protocol version, and thus remove code specific to the old protocol.
|
|
but later, it will permit aucat to reject connections from
clients statically linked to a unsupported version of libsndio.
idea from kittenis, otto and sthen
|
|
is actually linear
|
|
AUDIO_SETINFO() to set the initial parameters, since AUDIO_SETINFO()
can fail.
|
|
by the device, we may end up with different recording and playback
parameters, which will break almost all full duplex apps on such
devices. For instance, this should fix full-duplex apps not working
on devices that can record at any sample rate but can play
at 48kHz only.
|
|
as a programming error. At any stage the program should be alble to
cleanly free resources and close the device.
|
|
on sio_close()
|
|
free resources and drop the connection. This allows the client
to ensuire that at any time it's using only one connection, thus
only one MIDI control channel.
|
|
of volume changes
|
|
realtime. For now only the playback volume of individual streams can be
changed/monitored. To each stream is assigned a MIDI channel; the volume
is changed/monitored using the standard controller number 7.
|
|
eating 100% CPU while trying to use blocking i/o.
ok jakemsr
|
|
|
|
|
|
strings. suggested by Thomas Pfaff
|