Commit graph

222 commits

Author SHA1 Message Date
Andrew Kelley 7238d29666 sample rate is exposed as a list of min/max pairs 2015-08-08 14:44:31 -07:00
Andrew Kelley eb7308d992 CoreAudio: microphone example works 2015-08-08 11:45:21 -07:00
Andrew Kelley 29d55f59f7 CoreAudio: ability to open an input device 2015-08-07 15:28:22 -07:00
Andrew Kelley 48d927d8e3 CoreAudio: ability to set buffer duration 2015-08-07 13:40:25 -07:00
Andrew Kelley cdb02e2b46 CoreAudio: underflow test passes 2015-08-07 13:13:10 -07:00
Andrew Kelley c263a29b52 os: fix cond timed wait crash on large timeout 2015-08-06 21:28:02 -07:00
Andrew Kelley bdb604cc45 PulseAudio: handle error instead of panicking 2015-08-04 22:20:07 -07:00
Andrew Kelley 753673b194 CoreAudio: fix build 2015-08-04 22:15:43 -07:00
Andrew Kelley c381526205 callbacks supply min and max frame count parameters
This changes the semantics of the callbacks so that instead of
a single `requested_frame_count` or `available_frame_count`,
the callbacks get a minimum frame count and maximum frame count.

The callback must write at least the minimum or get an underflow.
The minimum will be 0 on ALSA, PulseAudio, and Dummy, and will
equal the maximum on CoreAudio and JACK.

This ensures optimal behavior regardless of buffer size.
2015-08-04 21:57:46 -07:00
Andrew Kelley 8da5ae0798 PulseAudio: opening out stream populates buffer_duration 2015-08-04 13:09:45 -07:00
Andrew Kelley a378cac92d JACK: fix not setting outstream buffer_duration 2015-08-04 12:25:15 -07:00
Andrew Kelley 29a914ceba no constructors or destructors 2015-08-04 11:03:19 -07:00
Andrew Kelley 28f73ba037 CoreAudio: listen for changes to device properties 2015-08-04 10:40:26 -07:00
Andrew Kelley d00fe4db58 CoreAudio: cleanup 2015-08-04 09:52:48 -07:00
Andrew Kelley f87961275d write and read functions no longer allow setting frame count
CoreAudio and JACK both have this limitation
2015-08-04 00:56:03 -07:00
Andrew Kelley df0ca8a772 CoreAudio: sine wave example works 2015-08-03 22:27:09 -07:00
Andrew Kelley a774a72958 CoreAudio: get the full list of available sample rates 2015-08-03 17:06:38 -07:00
Andrew Kelley c347629c8d CoreAudio: obtain device buffer duration 2015-08-03 15:14:41 -07:00
Andrew Kelley d8aa9dce4d CoreAudio: get the UID for the device id 2015-08-03 14:58:46 -07:00
Andrew Kelley b0f983bd84 CoreAudio: obtain sample rate information for devices 2015-08-03 14:29:57 -07:00
Andrew Kelley c52e76928f fix build on linux 2015-08-01 22:40:55 -07:00
Andrew Kelley f77663399f CoreAudio: obtain most device information 2015-08-01 22:10:43 -07:00
Andrew Kelley 6d185de82c CoreAudio: emit on_backend_disconnecte when service restarts 2015-08-01 13:24:58 -07:00
Andrew Kelley 7371ce5146 Fix kqueue-based cond and signal implementation 2015-08-01 13:01:49 -07:00
Andrew Kelley 4c5742eb29 CoreAudio skeleton 2015-07-31 18:52:51 -07:00
Andrew Kelley 1829fbf073 fix build on OSX 2015-07-31 18:06:11 -07:00
Andrew Kelley 860370d859 rename examples, install them, and correct #include path 2015-07-30 14:16:22 -07:00
Andrew Kelley 2a70bdb745 add a test for underflow handling and expose os API 2015-07-30 12:07:58 -07:00
Andrew Kelley 6a439dffb9 document device pairs 2015-07-30 10:46:25 -07:00
Andrew Kelley e6112b40ed rename purpose to aim 2015-07-30 10:39:10 -07:00
Andrew Kelley 4ba1fd91a1 rename device name and description to id and name 2015-07-30 10:26:36 -07:00
Andrew Kelley 12db5fd970 remove all calls to soundio_panic
Return codes are the way errors are communicated, not
crashing the entire program.
2015-07-30 00:46:13 -07:00
Andrew Kelley 5503072fc8 ALSA: recover from underflow gracefully 2015-07-29 22:39:27 -07:00
Andrew Kelley 2900616e9b flesh out buffer semantics 2015-07-29 21:50:12 -07:00
Andrew Kelley 44569708a0 Delete the concept of prebuffering 2015-07-29 20:55:28 -07:00
Andrew Kelley d3cf8f02db PulseAudio: fix using 100% CPU
soundio_wait_events wasn't blocking but now it is.
2015-07-29 13:12:04 -07:00
Andrew Kelley 0dee34a84e PulseAudio: fix microphone example 2015-07-29 13:02:17 -07:00
Andrew Kelley 0847d727b1 JACK: fix crash when refreshing devices 2015-07-29 12:27:31 -07:00
Andrew Kelley fe29bc4f45 pulseaudio: fix cork logic 2015-07-29 01:27:07 -07:00
Andrew Kelley a5e1c0024d ALSA: detect 'default' (no colon) as default device 2015-07-29 01:15:01 -07:00
Andrew Kelley 97ee72ce5f JACK: fix playback glitchfest 2015-07-28 23:20:30 -07:00
Andrew Kelley 754343bba6 microphone example works with JACK 2015-07-28 18:47:28 -07:00
Andrew Kelley 1eca206a24 follow PulseAudio's lead for default channel layouts 2015-07-28 15:23:08 -07:00
Andrew Kelley 70441184a1 JACK: detect channel layout based on port names 2015-07-28 14:53:54 -07:00
Andrew Kelley eeae08e1a3 JACK emits on_backend_shutdown event 2015-07-28 13:36:31 -07:00
Andrew Kelley 6df84096f3 sine example works with JACK 2015-07-28 11:28:07 -07:00
Andrew Kelley 70decb39f5 SoundIoOutStream, SoundIoInStream: void * -> union
For better cache locality and lower mlock requirements.
2015-07-27 17:06:12 -07:00
Andrew Kelley db1195877a SoundIo, SoundIoDevice: unions instead of void *
for better cache locality
2015-07-27 16:37:45 -07:00
Andrew Kelley 85549b59b7 ring buffer: fewer mallocs during init 2015-07-27 15:29:10 -07:00
Andrew Kelley f37ed6ddd4 JACK: determine channel layouts of devices 2015-07-27 11:27:41 -07:00
Andrew Kelley 42961553d8 JACK: ability to list devices 2015-07-24 22:00:33 -07:00
Andrew Kelley 447a241c2e JACK deal with the global msg callbacks 2015-07-24 19:16:48 -07:00
Andrew Kelley 3dd9e513bc add JACK backend skeleton 2015-07-24 18:43:14 -07:00
Andrew Kelley 5906bc93d9 ALSA implement clear buffer 2015-07-24 14:03:49 -07:00
Andrew Kelley efa7b7cbc0 ALSA input stream: add missing clean up 2015-07-23 21:07:51 -07:00
Andrew Kelley 34039b4858 microphone example working with ALSA 2015-07-23 20:55:36 -07:00
Andrew Kelley 511fcafc3b dummy: implement prebuffering 2015-07-23 16:49:44 -07:00
Andrew Kelley 69764e1afa microphone example working with dummy backend 2015-07-23 15:04:41 -07:00
Andrew Kelley 057f4ea07e avoid linking against ___cxa_guard_acquire
and ___cxa_guard_release. Fixes build with clang on OSX.
2015-07-23 11:59:06 -07:00
Andrew Kelley 8177d2f46d fix extra functions and missing prototype 2015-07-23 11:56:05 -07:00
Andrew Kelley e7dc300cc6 microphone example working with PulseAudio 2015-07-22 15:43:45 -07:00
Andrew Kelley a3388e792a default device index is -1 if no devices available 2015-07-22 12:07:20 -07:00
Andrew Kelley db06391646 ALSA: support non mmap device access 2015-07-22 00:04:17 -07:00
Andrew Kelley eca4bc6074 ALSA: poll instead of async handler 2015-07-21 21:21:00 -07:00
Andrew Kelley f6684a0585 PulseAudio: implement pausing input streams 2015-07-21 17:43:41 -07:00
Andrew Kelley 29dd765aa0 warning not panic on windows when rtprio fails 2015-07-21 11:14:42 -07:00
Andrew Kelley db8eca47ab fix not freeing mirrored memory on Windows 2015-07-21 11:11:32 -07:00
Andrew Kelley 43d33e5a67 don't access device until open() is called
and then check for a probe error.
2015-07-21 02:12:28 -07:00
Andrew Kelley 787a7164e0 PulseAudio: fix invalid value sent to pa_stream_write 2015-07-21 00:48:25 -07:00
Andrew Kelley 1eeeff5a24 PulseAudio works again 2015-07-20 22:55:30 -07:00
Andrew Kelley be2675e551 support stream names (used for PulseAudio) 2015-07-20 20:13:35 -07:00
Andrew Kelley de5bb99d1f ALSA: support mmap complex placement 2015-07-20 17:35:35 -07:00
Andrew Kelley 1e7cd145ad rt prio warning: fix race condition 2015-07-20 16:52:07 -07:00
Andrew Kelley 20f3f76ef3 fix devices race condition 2015-07-20 14:47:51 -07:00
Andrew Kelley 71a365ca1b dummy: implement pause/resume and improve period timing 2015-07-20 13:16:52 -07:00
Andrew Kelley 96c8332246 dummy backend: fix playback 2015-07-20 00:35:46 -07:00
Andrew Kelley 24f466a0a0 list_devices takes arguments to override backend 2015-07-20 00:00:43 -07:00
Andrew Kelley 3d2ca2a610 docs 2015-07-19 22:36:50 -07:00
Andrew Kelley a37825d01a add some documentation 2015-07-18 00:22:36 -07:00
Andrew Kelley 0bc918e2c8 better list_devices behavior 2015-07-16 23:37:17 -07:00
Andrew Kelley 46a6a179b6 build: clean endian ifdefs 2015-07-16 14:11:08 -07:00
Andrew Kelley 3999f57698 ability to pause and resume streams
and some cleanup
2015-07-16 13:37:41 -07:00
Andrew Kelley 5f2581ce2c remove bloat 2015-07-16 00:27:22 -07:00
Andrew Kelley 454fab0ffb period_duration instead of period_count 2015-07-15 23:45:21 -07:00
Andrew Kelley 7045cb3988 ALSA sine example is making noise 2015-07-15 20:57:00 -07:00
Andrew Kelley 1e4d87e608 ALSA: open output device with parameters 2015-07-13 21:30:37 -07:00
Andrew Kelley 59026ccba7 examples are smarter about device parameters 2015-07-13 09:59:42 -07:00
Andrew Kelley 5b3fd175f8 stream API update; expose multiple channel layouts 2015-07-13 09:17:20 -07:00
Andrew Kelley f0c8c68592 detect endianness with cmake 2015-07-10 03:31:51 -07:00
Andrew Kelley 6c2226a6d7 list_devices example: more detailed output 2015-07-10 03:00:29 -07:00
Andrew Kelley 7d45b15036 rename SoundIoOutputDevice to SoundIoOutStream
and SoundIoInputDevice to SoundIoInStream
2015-07-10 02:42:29 -07:00
Andrew Kelley 3b8d896c8e ALSA backend determines what formats a device supports 2015-07-10 02:21:47 -07:00
Andrew Kelley 8887a528ef sample formats: take into account ALSA 2015-07-10 00:46:03 -07:00
Andrew Kelley fe2040da7c ALSA backend determines channel layout of devices 2015-07-09 23:35:58 -07:00
Andrew Kelley c760bc4df7 default sample rate is not as important as I thought 2015-07-08 00:42:17 -07:00
Andrew Kelley c39c1ab9f4 ALSA: expose pcm devices and introduce is_raw 2015-07-07 23:29:09 -07:00
Andrew Kelley fe61322b23 beginning of ALSA support - list_devices works 2015-07-07 02:55:32 -07:00
Andrew Kelley d6fcef468b microphone example: detect incompatible in/out devices 2015-07-06 17:16:03 -07:00
Andrew Kelley 5048d7aa57 ring buffer works on windows 2015-07-06 16:02:20 -07:00
Andrew Kelley 2b0744816f POSIX ring buffer works on OSX and is simpler 2015-07-06 14:10:26 -07:00
Andrew Kelley a69ff6025c add and export a ring buffer implementation 2015-07-06 01:05:22 -07:00
Andrew Kelley 93f288e8b1 sine wave example working with pulseaudio on linux 2015-07-04 14:20:52 -07:00
Andrew Kelley 664c50752a sine example working with dummy 2015-07-04 03:55:00 -07:00
Andrew Kelley 60b731ab4f os: make sure tv_nsec is less than 1,000,000,000 2015-07-04 03:37:50 -07:00
Andrew Kelley a35a2b7e0a add a couple unit tests, fix a couple bugs 2015-07-04 02:57:06 -07:00
Andrew Kelley 39cb1d4fde os: implement cond wait and cond timed wait on windows 2015-07-03 01:24:19 -07:00
Andrew Kelley 1738edeaf9 windows: attempt high priority only when asked for it 2015-07-02 23:18:00 -07:00
Andrew Kelley f57f691068 work around InitOnceExecuteOnce being completely broken
runs on Windows now
2015-07-02 23:12:58 -07:00
Andrew Kelley 15b801c820 building on windows 2015-07-02 19:15:09 -07:00
Andrew Kelley efe95ded36 closer to building on windows 2015-07-02 03:48:27 -07:00
Andrew Kelley a659adebd0 fix build on linux 2015-07-02 02:53:08 -07:00
Andrew Kelley 6378e6afd5 implement conditions and signals with kqueue
now libsoundio builds on OS X and FreeBSD
2015-07-02 02:45:02 -07:00
Andrew Kelley 24557e0ee3 closer to compiling on OS X 2015-07-01 13:24:47 -07:00
Andrew Kelley 46b43356f9 fix name collision in list 2015-07-01 12:56:21 -07:00
Andrew Kelley 70e956abdf refactor connect/disconnect API 2015-07-01 02:53:53 -07:00
Andrew Kelley 6a5db549f5 list_devices example works with dummy backend 2015-07-01 02:37:51 -07:00
Andrew Kelley 18a37da848 implement getting devices 2015-07-01 01:29:35 -07:00
Andrew Kelley 7eaa3d3054 implement getting default device indexes 2015-07-01 01:24:57 -07:00
Andrew Kelley d36493e1fe implement getting audio device counts 2015-07-01 01:20:26 -07:00
Andrew Kelley e409400f04 extracted code from Genesis 2015-07-01 01:02:44 -07:00
Andrew Kelley c40ef12ec6 compile success 2015-06-30 14:13:02 -07:00
Andrew Kelley c2fa8b4b4d skeleton 2015-06-30 14:04:45 -07:00