summaryrefslogtreecommitdiff
path: root/usr.bin/aucat/aucat.c
AgeCommit message (Collapse)Author
2011-12-09fix usage string: remove -M from aucat and -l from aucat and sndiodAlexandre Ratchov
from jmc
2011-12-09add a new sndiod audio/midi daemon and hide aucat server-specificAlexandre Ratchov
options.
2011-12-02don't use a "server" flag, just check if we expose sub-devicesAlexandre Ratchov
2011-12-02reuse midi-control code to implement midi thru boxes and removeAlexandre Ratchov
the old midithru implementation; less code, less bugs. As a side effect, midi output doesn't implement running status "compression" any more.
2011-11-20Move mmc/mtc and volume control bits from struct aproc to structAlexandre Ratchov
dev. Allows volume settings to be saved while the device is kept closed. Besides that, no behabiour changes.
2011-11-15Add a "device number" component in sndio(7) device names, allowing aAlexandre Ratchov
single aucat instance to handle all audio and MIDI services. Since this partially breaks compatibility, this is a opportunitiy to fix few other design mistakes (eg ':' being used by inet6, type name vs api name confusion, etc..). This leads to the following names: type[@hostname][,unit]/devnum[.option] The device number is the minor device number for direct hardware access (ie the 'N' in /dev/audioN). For aucat, this is the occurence number of the -f (or -M) option. There's a compatibility hook to keep old names working if only one aucat server is running.
2011-10-18keep the device closed by default (when not used)Alexandre Ratchov
2011-10-18remove duplicate options in getopt() stringAlexandre Ratchov
2011-10-17Remove midicat since aucat can now be used instead of midicatAlexandre Ratchov
with almost the same syntax (roughly an extra -M option). Thru boxes are created with aucat, and corresponding MIDI port names have the "aucat" prefix instead of "midithru". The old device name will still work some time for backward compatibility. ok deraadt
2011-10-12- avoid line wrapping an exampleJason McIntyre
- sort usage() for midicat - tweak a bit of unclear wording ok ratchov
2011-10-12Simplify and improve the way options are parsed and remove ~300 linesAlexandre Ratchov
of code that becomes unused. Few command line arguments changes are required though: - stream definitions (-ios) now must follow devices definitions they are attached to (-fMn) - the -n option is now a special "loopback" device and is thus used like -f, eg it must precede streams - in midicat, midi thru boxes are not created automatically anymore, the new "-M" option must be used for that - channel numbers (-Cc options) correspond always to channel numbers of the hardware. - the -u option isn't needed anymore - increase the log verbosity so user errors are logged without using -d tested by many, help from jmc
2011-06-29make -u flag per-device similarly to -a and -wAlexandre Ratchov
2011-06-20Make -aoff option apply to MIDI ports (-q) as well, ensuring the deviceAlexandre Ratchov
stays closed also if -q is used. As we're at it, add -a to midicat so it behaves like aucat.
2011-06-03Allow device encoding to be set if -u is also used. Useful to degradeAlexandre Ratchov
quality to save bandwith when a remote audio device is used.
2011-06-03Reorganize the way command line options are parsed and stored.Alexandre Ratchov
No behaviour change.
2011-05-26add a new -w flag to control whether master volume is automaticallyAlexandre Ratchov
adjusted when new streams are connected and disconnected. Disabling automatic volume adjustment makes sense if all streams are recorded with properly lowered volumes.
2011-05-10fix option handling and enable TCP in midicatAlexandre Ratchov
from peters at schwertfisch.de, thanks!
2011-04-28Implement a new authentication method allowing aucat and midicat toAlexandre Ratchov
work over TCP, for instance, to expose the sound card of one machine with other machines of the network. The first client generates a 128-bit random number (aka the session cookie), saves it in $HOME/.aucat_cookie and sends it to the server. Successive clients load the cookie from $HOME/.aucat_cookie and send it to the server but the server accepts only clients whose cookie matches the session cookie. When all clients are gone, the session is over, and another cookie could start a new session, and so on. TCP is enabled on the server with the new -L option, and on the client side hostnames are specified with a new optional component in the device name. hints from damien, dlg and deraadt, tweaks from jmc
2011-04-27move amsg.h containing protocol defs from aucat side to libsndio side.Alexandre Ratchov
requested by deraadt
2011-04-27use more volatile sig_atomic_t in signal handlersTheo de Raadt
ok ratchov
2011-04-19don't hold a pointer to "listen" structure. Instead, when it mustAlexandre Ratchov
be free()ed, iterate over the file_list, and find the structure to free. This is safer and simpler. No behaviour change
2011-04-16for unix domain socket addresses use AUCAT_PATH and MIDICAT_PATHAlexandre Ratchov
macros instead of hardcoded strings. No object change
2011-03-17use a DEFAULT_RATE macro instead of hardcoding 44100, no object changeAlexandre Ratchov
2010-11-05unbreak compilation without DEBUG definedAlexandre Ratchov
2010-10-21use MODE_xxx and XRUN_xxx macros everywhere, and zap correspondingAlexandre Ratchov
AMSG_xxx macros, which in turns simplifies the code
2010-09-08aucat: getpwnam: No such file or directoryTheo de Raadt
is not a proper error message.
2010-08-20polish the code: remove few unused #includes, add missing ones,Alexandre Ratchov
fix NULL vs 0, etc. No behaviour change.
2010-08-19fix NULL pointer deref in midicat option parsing when ``-'' isAlexandre Ratchov
used as filename
2010-07-31remove 2 years old compatibility modeAlexandre Ratchov
2010-07-10In midi server mode, don't terminate the midi thru box if there areAlexandre Ratchov
no connections anymore.
2010-07-10fix parameter handling: don't try to open a ``default'' midi portAlexandre Ratchov
if no files are given on the command line
2010-07-06various tweaks to previous; ok ratchovJason McIntyre
2010-07-06Handle all streams the same way because there's no actualAlexandre Ratchov
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
2010-06-29If the device isn't opened yet (as can be the case with '-a off'),Jacob Meuser
don't check if the midi control interface is idle from ratchov
2010-06-25don't attempt to drain devices after they are destroyed, whichAlexandre Ratchov
results in a use after free(). Catched by jakemsr@ with MALLOC_OPTIONS=J
2010-06-20fix midicat(1) device mode when only -i or only -o is used (ieAlexandre Ratchov
open the device input-only if -o is used, and output-only if -i is used).
2010-06-05don't prime server buffers, because it's ugly and conceptuallyAlexandre Ratchov
complicated. Instead, request clients to provide enough samples and start with buffers full.
2010-06-05Don't send the initial position as a clock tick with a negative delta.Alexandre Ratchov
Add a new ``initial position'' message which is simpler. No bahaviour change, except effects of the protocol version crank.
2010-06-04Allow the audio device to be opened only while it's actually used.Alexandre Ratchov
This is necessary for uaudio devices, for instance to start aucat before the device is plugged. Or to unplug a device whithout having to restart aucat when another device is plugged. This is controlled with the new -a option. Allow multiple audio devices to be used concurently, i.e. multiple ``-f devname'' options to be used; -f options must follow per-device options, which is what we do for other options.
2010-05-08prime play buffers as soon as the device is opened, otherwise aAlexandre Ratchov
midi client could start it with empty buffers, in turn hurting audio clients.
2010-05-02Clean up device handling code to clarify different initialization phasesAlexandre Ratchov
and different device states. Split initialization in two phases: first global variables are initialized then the audio hardware is opened. Allow devices that don't support full-duplex to work in play-only or record-only mode, even if ``-m play'' or ``-m rec'' are not specified.
2010-05-02Don't systematically fill with silence the mixer output. ThisAlexandre Ratchov
might result in extra samples being written to the device when the mixer is closed.
2010-04-24if there are no files to play in legacy mode, print the usage messageAlexandre Ratchov
2010-04-24rename ibuflist/obuflist -> ins/outs to cut long linesAlexandre Ratchov
from Thomas Pfaff, thanks
2010-04-22Allow multiple users to share the same aucat server. If aucat isAlexandre Ratchov
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
2010-04-21when creating the ``default'' subdevice, use last parameters of theAlexandre Ratchov
command line, instead of the device parameters.
2010-04-21adds the necessary bits to join channels (ex stereo->mono) orAlexandre Ratchov
expand channels (ex mono->stereo). It's switched on/off with the ``-j'' option, (default is "on").
2010-04-06aucat (server):Alexandre Ratchov
- 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@
2010-04-03backout last change, committed by mistake, sorry...Alexandre Ratchov
2010-04-03doc fixes from jmcAlexandre Ratchov