Age | Commit message (Collapse) | Author |
|
|
|
adjusted when new streams are connected and disconnected. Disabling
automatic volume adjustment makes sense if all streams are recorded
with properly lowered volumes.
|
|
from Michael W. Bombardieri <mb at ii.net>, thanks!
|
|
audio samples and cleanup ADATA_XXX macros. This allows easilly
switching to 24 bit fixed point arithmetic by simply redefining
the adata_t typedef to int and updating ADATA_XXX macros. No
object change.
|
|
possibly blocked streams are processed. If during this phase the end
of another stream is reached then stop the processing because the job
will be already finished by the second stream. Otherwise we may end up
running a destroyed stream.
help from Edward Wandasiewicz <w13ntd at googlemail.com>, thanks
|
|
|
|
AMSG_xxx macros, which in turns simplifies the code
|
|
rec direction use the same clock, there's no need to maintain their
absolute position.
|
|
inputs, i.e. don't way that the output requests it.
|
|
might result in extra samples being written to the device
when the mixer is closed.
|
|
the first sample of the next block in advance.
|
|
amount of samples to commit to ``maxwrite''. Overwise uncommitted
samples are accounted as idle, in turn causing the device to be
stopped too early, possibly truncating few blocks at the end of
streams being drained.
subtle bug spotted and analysed by Thomas Pfaff, thanks
|
|
from Thomas Pfaff, thanks
|
|
expand channels (ex mono->stereo). It's switched on/off with
the ``-j'' option, (default is "on").
|
|
the device channel range. This makes the channel mapping code
no longer usefuli, so remove it. No behaviour change.
|
|
- 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@
|
|
|
|
|
|
is blocked don't start processing input. Similarly don't
produce output if input is blocked. This is to ensure that
to each output block corresponds exactly one input block.
This is necessary for full-duplex clients using block-based
i/o and very small buffers.
|
|
|
|
|
|
when resampling is involved. Removes single sample jitter, which
could confuse programs expecting fixed block size.
|
|
bugs in device drivers.
|
|
otherwise the client would underrun by more than its own buffer
size, which currently is not allowed (causes the client to
deadlock).
Set the minimum client buffer size to two blocks. Single block
buffers don't work properly yet.
with help from jakemsr
|
|
underuns and overruns; such bugs are hard to debug with ktrace
or a debugger. They are also handy to debug or monitor code
using aucat.
To enable traces, compile aucat with ``make DEBUG=-DDEBUG'' and
use the -d option multiple times.
ok jakemsr
|
|
handled, which is conceptually simpler. No behaviour changes.
|
|
then don't reduce their dynamic range to ``share the volume''.
|
|
before deleting the writer (reader) otherwise the later
could trigger rpipe_done again.
|
|
transparently. Multiple audio applications can be started
synchronously from external software/hardware supporting the
standard Start/Stop/Relocate messages. The server clock is exposed
through MTC, allowing non-audio software/hardware to be
synchronized to audio applications.
|
|
destroy reader when writer terminates and destroy writer when
reader terminates. This simplifies a lot the way we drain
audio devices and will help simplifying other parts.
|
|
- put aproc-specific parameters into unions since they are never
used together
- remove constant ``data'' pointer always pointing the end of the
abuf structure
|
|
for now but will be used in future code.
|
|
|
|
from Thomas Pfaff
|
|
cannot cooperate with other programs. The aim of this change is
to allow any program to send midi data to other programs as they
were midi hardware. For instance, this change should solve the
longstanding problem of using a midi sequencer with software
synthesizers. More precisely:
- new midicat(1) utility (actually hardlink to aucat(1)).
it creates software midi thru boxes, allowing programs
to send midi messages to other programs as they were
midi(4) hardware.
- new midi api in libsndio (see mio_open(3)), to access
midi(4) devices and midicat(1) sockets in a uniform way.
- new device naming scheme <service>:<unit>[.<option>],
common to audio and midi.
- new sndio(7) manual describing concepts and naming
The current audio device naming still works, but people having
scripts or configuration files containing device names could read
the sndio(7) man page and slowly start updating device names.
discussed with jakemsr@ and deraadt@, help form jmc@
|
|
|
|
structures so we can keep a pointer to the device. Beside some
simplifications, this allows to easily handle the situation
where the audio device desappears. No change in the behaviour.
|
|
high frequency attenuation, intruduced in aproc.c rev 1.27.
Hints from Alf Schlichting <a.schlichting(at)lemarit.com>, thanks!
|
|
behaviour. This also, fixes incorrect constructs that are currently
harmless
|
|
This partially removes the ``metallic'' noise audible
especially when upsampling 8k -> 44.1k.
|
|
This removes the arithmetic constraint between the sample frequency
and the block size and all the associated code. Now aucat can work
in server mode with any block size.
ok jakemsr
|
|
|
|
server mode. It gives the maximum volume a client may have. This wastes
dynamic range, but allows volume to stay constant when other clients
connect or disconnect.
|
|
The code will be useful later for the volume knob in the sndio API.
|
|
way, when in server mode, it consumes no CPU if there are no clients.
Later, this will allow to start aucat(1) at session or system startup.
|
|
and thus remove the ugly rate <-> block-size table from
sio_setpar(3). Handle the block size negociation in aucat(1), since
it has few constrains the code is overally simpler.
ok jakemsr@, major crank suggested by deraadt@
|
|
device number of channels are not the same. The bug was hidden until
now, because mixer and demux input and outputs used to have the same
frame size.
|
|
native->any and one to decode any->native. It is simpler and
faster this way.
|
|
As a side effect, reduce CPU usage by ~10% on envy(4) devices.
|
|
channel range (based on the encoding conversion code). Will allow to
unentangle channel mapping from encoding conversion. As a side effect,
greatly reduces CPU usage for channel mapping. No functionnal change.
|