Commit Graph

2950 Commits

Author SHA1 Message Date
David Reid 3a1072e30f Update example in readme. 2016-10-21 13:24:33 +10:00
David Reid 596a3ef966 Add onStop callback which is called when a device is stopped either explicitly or internally as a result of an error. 2016-10-21 12:54:14 +10:00
David Reid 26ccabc834 Add examples. 2016-10-21 12:53:38 +10:00
David Reid bfc4d3ffc5 DirectSound: Add back notifications to better handle waking up the worker thread based on periods. 2016-10-21 10:59:25 +10:00
David Reid 46aaa53f2c Update documentation and add support for default buffer sizes and periods. 2016-10-21 10:33:13 +10:00
David Reid 5cbbf0b988 Have the onSend and onRecv callbacks work on frames rather than samples.
The rationale for this change is to keep it consistent with the rest of the library.
2016-10-21 08:34:14 +10:00
David Reid 6ec93e902e DirectSound: Improve rewind latency. 2016-10-21 08:19:18 +10:00
David Reid d984e39e1b Improve the main loop for DirectSound by making better use of periods. 2016-10-21 08:08:30 +10:00
David Reid 3180cadb4a Fix ALSA build. 2016-10-20 21:47:30 +10:00
David Reid bf093f22db Remove unnecessary notifications from the DirectSound backend. 2016-10-20 21:40:08 +10:00
David Reid 05c85e5bd2 Fix some thread-safety issues with callbacks. 2016-10-20 21:22:11 +10:00
David Reid 6ed399d57b Remove the notion of fragments and use a simplified buffer size and periods concept instead. 2016-10-20 21:16:49 +10:00
David Reid 08db9fbda8 Rename mal_device__read_samples_from_client() to mal_device__read_frames_from_client() and mal_device__send_samples_to_client() to mal_device__send_frames_to_client().
Rationale for this is to keep it consistent with the rest of the library.
2016-10-20 13:18:20 +10:00
David Reid 7039d4c9bf Add support for rewinding to the DirectSound backend. 2016-10-20 12:58:55 +10:00
David Reid 59feeafc03 Add some infrastructure for better thread-safety. 2016-10-19 21:42:43 +10:00
David Reid 9698068d3e ALSA: Have the id of enumerated devices be returned in "hw:%d,%d" format.
The rationale for this change is that during testing I noticed that
snd_pcm_open() would sometimes fail with "Invalid value for card"
when using the "NAME" hint returned by snd_device_name_get_hint()
verbatim. Using "hw:%d,%d" seems to fix this problem.
2016-10-19 21:14:20 +10:00
David Reid 916328c550 ALSA: Add a fallback for when snd_pcm_open() fails for "default" and "pulse" devices. 2016-10-19 19:27:17 +10:00
David Reid 1617261be1 ALSA: Fix a bug with timers for non-Windows platforms. 2016-10-19 19:00:33 +10:00
David Reid f9130d74c1 ALSA: Make device initialization a bit more robust.
- The buffer size is now set with set_buffer_size_near()
 - The size of the buffer is now independant of periods
 - snd_pcm_sw_params_set_avail_min() is now called with the previous
   power of 2 rather than the next.
 - The start threshold is now called with the previous power of 2
   rather than the next.
2016-10-19 18:38:33 +10:00
David Reid e2c93382f8 ALSA: Remove some old device iteration code. 2016-10-19 17:45:45 +10:00
David Reid a18a38f74e Add initial implementation of the null device. 2016-10-19 16:29:20 +10:00
David Reid 56b9101cfd Add placeholder APIs for rewinding:
- mal_device_get_available_rewind_amount()
  - mal_device_rewind()
2016-10-19 12:00:32 +10:00
David Reid f7a825d9de Fix build for the DirectSound backend. 2016-10-18 12:35:26 +10:00
David Reid bf67d5a3f0 ALSA: Experiment with a more user-friendly device enumeration. 2016-10-18 11:11:03 +10:00
David Reid 4094293cdf ALSA: Add support for mal_format_s24. 2016-10-18 06:57:58 +10:00
David Reid 6cf9ee7cb2 Fix C++ build for GCC/ALSA. 2016-10-18 06:47:28 +10:00
David Reid 91fbc1b0da Fix a few typos. 2016-10-18 06:31:01 +10:00
David Reid 183fdd0d16 Fix platform detection for non-MSVC compilers. 2016-10-18 06:23:22 +10:00
David Reid f630a0153c Fix C++ build for MSVC and DirectSound. 2016-10-18 06:17:56 +10:00
David Reid 3c4e46bcb9 DirectSound: Add support for mal_format_s24. 2016-10-18 06:15:13 +10:00
David Reid 98046e0a4f ALSA: Address an issue where it was possible for some samples to get dropped when a capture device is closed. 2016-10-17 19:23:08 +10:00
David Reid cc98c7efff Have mal_device_init() take a callback for log message. 2016-10-17 17:42:31 +10:00
David Reid 2cb9a8c632 Experimental work on MMAP mode for ALSA. 2016-10-16 20:45:43 +10:00
David Reid fd85d5ac53 Improve the DirectSound backend by not using notifications exclusively to manage data retrieval and submission. 2016-10-16 13:56:23 +10:00
David Reid af5e5d4846 Properly initialize-to-zero device info for null and ALSA backends. 2016-10-16 11:04:26 +10:00
David Reid be2167709d Minor consistency fix. 2016-10-16 10:48:23 +10:00
David Reid be95c67dc6 Clean up #includes. 2016-10-16 10:36:10 +10:00
David Reid 44a6be1e7d Remove an unnecessary #include. 2016-10-16 10:23:55 +10:00
David Reid 907a8fc5dc Clean up old documentation. 2016-10-16 10:21:24 +10:00
David Reid 74ea3f8381 ALSA: Don't ask the client for more data when the device is closing. 2016-10-16 08:20:14 +10:00
David Reid 8c34bbbcb7 Clean up. 2016-10-16 08:13:04 +10:00
David Reid 6f11e64689 Clean up some old unused code. 2016-10-16 08:01:51 +10:00
David Reid 9d007e9f09 Use snd_pcm_hw/sw_params_alloca() instead of *malloc() 2016-10-16 07:53:22 +10:00
David Reid 0e927cf7da Fixes for GCC and ALSA
- Fix error with usleep() being undefined.
 - Add support for 64-bit floating point formats for ALSA.
2016-10-16 07:47:24 +10:00
David Reid 5e9657aa60 Add basic logging and improve error reporting. 2016-10-16 07:23:57 +10:00
David Reid 1301af97ee Clean up. 2016-10-15 23:03:25 +10:00
David Reid 58989ea134 Update documentation. 2016-10-15 22:42:46 +10:00
David Reid a752a49cdb Fix an issue with the DirectSound backend where there'd be some leftover samples that are not sent to the application when a capture device is stopped. 2016-10-15 21:24:37 +10:00
David Reid aab6cde982 Lots of work on improving synchronization and thread-safety:
- Use binary semaphores as the synchronization primitive for the worker thread
  - Generalize the worker thread so as to avoid having different worker thread
    for each backend.
  - Make state changes atomic

General improvements bug fixing:
  - Fix an error where the DirectSound backend would immediately send the
    application a bunch of invalid audio data.
  - Have the ALSA backend request more audio data only immediately before it's
    ready to write it to the device.
  - General improvements on documentation.
  - Update readme.
2016-10-15 21:02:46 +10:00
David Reid d2920b1812 Initial commit. 2016-10-14 16:10:34 +10:00