summaryrefslogtreecommitdiff
path: root/usr.bin/aucat
AgeCommit message (Collapse)Author
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-31remove forgotten debug messageAlexandre Ratchov
2010-07-10When a file is created, initialize its ``busy cycles'' counter to zero.Alexandre 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-06Try to detect busy loops caused by misbehaving audio driversAlexandre Ratchov
or hardware. If a busy loop is found, then close the device that caused the loop.
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-29explicitely initialize members of struct dev in dev_open()Jacob Meuser
fixes crash found by nicm ok ratchov
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-05Take into account wav ``riff'' header when calculating the offsetAlexandre Ratchov
of the data chuck returned in ``startpos''. Fixes MMC relocate being off by few samples.
2010-06-05when parsing wav headers, check that a data chuck actually existsAlexandre Ratchov
2010-06-05in dev_close(), first terminate streams recording from the hardware,Alexandre Ratchov
then terminate streams recording from the monitor (if any). Otherwise, dev_close() would try to check if a stream is recording from the hardware or the monitor, and, if there's no monitor, would dereference a NULL pointer.
2010-06-05When closing the device, request clients using a midi control slotAlexandre Ratchov
to quit. Otherwise streams that are not attached to the device are not closed.
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-04when attaching files to play or record to the device, check thatAlexandre Ratchov
the device supports play or record modes respectively. spotted by jakemsr
2010-06-04midi control aproc structure is can be destroyed before any streamAlexandre Ratchov
referencing it (for instance while a recording stream drains buffers of a closed device). So, don't abort() if this happen.
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-27include stdint.hAlexandre Ratchov
2010-05-25enable support for ``extended'' .wav files since certain programsAlexandre Ratchov
use this format instead of the non-extended one (ex. audio/libao) spotted/suggested by naddy
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-08Fix sign in dev_getpos(). Indeed, positive device playback latencyAlexandre Ratchov
is accounted as negative start position offset.
2010-05-08don't take into account recording latency in dev_getpos(), sinceAlexandre Ratchov
dev_sync() always discards any recorded samples
2010-05-07remove ``abspos'' counters, from the pre-libsndio era. Since play andAlexandre Ratchov
rec direction use the same clock, there's no need to maintain their absolute position.
2010-05-07Since aucat uses libsndio, play and rec clocks are the same, soAlexandre Ratchov
use play and rec latencies counters to calculate the offset between play and rec direction. Greatly simplifies stream attaching code.
2010-05-07don't prime audio buffers if the device is only started to serveAlexandre Ratchov
as clock source for MIDI clients.
2010-05-06allow volumes of uninitialized slots to be setAlexandre Ratchov
2010-05-04make the mixer process data as soon as it's pushed by one of itsAlexandre Ratchov
inputs, i.e. don't way that the output requests it.
2010-05-04if the ``device'' is in loopback mode (ie no audio device), thenAlexandre Ratchov
disable overruns/underruns since aucat must pause when an input or an output blocks. This is a theoretical fix, since the start/stop code is never reached in loopback mode
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-05-02use clock_gettime() and interval timers instead of gettimeofday()Alexandre Ratchov
and poll()'s timeout. Simpler and more accurate, from midish
2010-05-02in the resampling code, handle the case ``diff == 0'', to avoid producingAlexandre Ratchov
the first sample of the next block in advance.
2010-04-24if there are no files to play in legacy mode, print the usage messageAlexandre Ratchov
2010-04-24don't increment mixer's ``idle'' counter before truncating theAlexandre Ratchov
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
2010-04-24rename ibuflist/obuflist -> ins/outs to cut long linesAlexandre Ratchov
from Thomas Pfaff, thanks
2010-04-22zap trailing whitespace;Jason McIntyre
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-17Allow the mixer to handle inputs with channel ranges outsideAlexandre Ratchov
the device channel range. This makes the channel mapping code no longer usefuli, so remove it. No behaviour change.
2010-04-07tweak previous; ok ratchovJason McIntyre
2010-04-06bump (private) protocol version numberAlexandre Ratchov
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-05fix playback of .au files on big-endian machinesJacob Meuser