Commit Graph

431 Commits

Author SHA1 Message Date
Rob Watson c8fc1002cb Add test for cmp_default_heuristics 2020-07-14 22:05:55 +02:00
mitchmindtree b78ff83c03
Merge pull request #401 from JoshuaBatty/buffersize_range
Prototyping an API for getting the supported min and max buffersizes
2020-07-14 14:35:46 +02:00
JoshuaBatty e739dbf32d cargo fmt 2020-07-14 14:11:35 +02:00
JoshuaBatty e854c4e54c added in sniperrifle2004 code from PR 431 2020-07-14 14:10:00 +02:00
JoshuaBatty f285389002 fixed mismatched types in emscipten set_timeout 2020-07-14 13:51:49 +02:00
JoshuaBatty 4ce12a69b9 adds docs for BufferSize and fixes buffersize bugs in emscripten and alsa 2020-07-14 13:19:26 +02:00
Konstantin Baltruschat b177bcdf22
Fix build error when cross compiling to 32bit targets (#430) 2020-06-17 16:21:31 +02:00
JoshuaBatty 271cc34f3f cargo fmt fix for coreaudio 2020-05-27 13:28:18 +02:00
JoshuaBatty 10599ac826 fixed coreaudio buffersize errors 2020-05-27 13:15:44 +02:00
JoshuaBatty 7c1adce330 adds support for buffersizes in webaudio and emscripten 2020-05-27 12:05:55 +02:00
JoshuaBatty 935fa280d3 buffersizes api for wasapi 2020-05-26 14:55:55 +02:00
JoshuaBatty 4cd9d0bcec finished implementing buffersizes for coreaudio 2020-05-26 14:55:55 +02:00
JoshuaBatty 9e660da433 implemented buffersizes for asio 2020-05-26 14:55:55 +02:00
JoshuaBatty 6edee6c6c2 coreaudio buffersize wip 2020-05-26 14:55:55 +02:00
JoshuaBatty d72b546dca gets buffersize range and allows to set buffersize for alsa 2020-05-26 14:55:55 +02:00
JoshuaBatty 7081c3bbd6 wip alsa buffersizes 2020-05-26 14:55:55 +02:00
JoshuaBatty 7eb45bca6f cargo fmt 2020-05-26 14:55:55 +02:00
JoshuaBatty 919722a785 with_sample_rate_and_buffer_size sample_rate is set to self.max_sample_rate 2020-05-26 14:55:55 +02:00
JoshuaBatty f762e5dd8f prototyping an API for getting min and max buffersize 2020-05-26 14:55:55 +02:00
mitchmindtree 5fa5ce593d
Merge pull request #415 from mitchmindtree/webaudio_config
Add implementation of supported stream configs for webaudio
2020-05-26 14:53:37 +02:00
ely-uf d9136708e4 Fix CoreAudio warnings.
1) warning: use of deprecated item 'std::error::Error::description': use the Display impl or to_string()
2) warning: unnecessary `unsafe` block
3) warning: field is never read: `device_id`
2020-05-26 02:29:49 +03:00
mitchmindtree f03fd69b65 [webaudio] Return Err instead of panicking on input device requests
Currently we are yet to implement input stream support for CPAL's
webaudio host. Instead of panicking, we should return an
error, None or empty iterator in order to let the user write well
behaved cross-platform apps and notify the user accordingly rather than
crashing.
2020-05-25 19:26:42 +02:00
mitchmindtree 1dfdeace25 Add implementation of supported stream configs for webaudio
The `supported_stream_configs` method now returns the range of
configurations that are required to be supported for
`BaseAudioContext.createBuffer()` as mentioned here:

https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/createBuffer

That is, valid stream configurations are now considered to be any
configuration that has:

- 1 <= channel_count <= 32 and
- 8khz <= sample_rate <= 96khz
- sample_format == f32

Closes #410.
Closes #411.
2020-05-25 13:19:52 +02:00
mitchmindtree 78e1796ba8 Add callback and playback timestamp implementation for webaudio stream 2020-05-22 14:35:29 +02:00
mitchmindtree 640a1d39ed Rebase/Update webaudio PR for recent breaking changes
This rebases #372, addressing the recent changes introduced by #397, #395, and #371 in the process.

TODO:

- [ ] Complete implementation of `callback` and `playback` timestamps in the output stream callback.
2020-05-21 16:16:23 +02:00
Damian Peckett 6f43fc2b60 Add a wasm-bindgen based generic Web Audio backend. 2020-05-06 13:44:00 +02:00
mitchmindtree fe22704d4a
Merge pull request #397 from mitchmindtree/timestamp
[WIP] Timestamp and `StreamInstant` APIs
2020-05-05 15:33:55 +02:00
mitchmindtree 63db35ed97
Merge pull request #7 from JoshuaBatty/timestamp_coreaudio_fixes
Timestamp coreaudio fixes
2020-05-01 15:24:15 +02:00
JoshuaBatty 590d37b103 fixes compile errors for coreaudio timestamp work 2020-05-01 15:20:37 +02:00
JoshuaBatty 225f441d5b addressed some compilation errors on asio timestamp implementation 2020-05-01 14:05:16 +02:00
mitchmindtree 22eef32898 WIP Add timestamp implementation to ASIO backend
Currently unchecked and untested, though most of the groundwork should
be laid.
2020-05-01 13:10:50 +02:00
Thomas Havlik e4eb7169ef
macOS: fallback to CFStringGetCString if CFStringGetCStringPtr returns nil (#399)
* macOS: fallback to CFStringGetCString if CFStringGetCStringPtr returns nil; fixes #398

* rustfmt

Co-authored-by: Tom Havlik <thomashavlik@Adams-Mac-mini.local>
2020-05-01 09:38:25 +02:00
mitchmindtree 4579daad7b Merge branch 'timestamp_wasapi' into timestamp 2020-04-30 15:45:54 +02:00
mitchmindtree 981507391a Add a table describing the source of StreamTimestamp for each host 2020-04-30 14:08:00 +02:00
mitchmindtree cb95bfd88b alsa - Use status to retrieve avail, delay
This addresses @diwic's [tip][1] about using the pcm status to retrieve
avail and delay, as well as the timestamps, rather than using separate
pcm calls for each.

[1]: https://github.com/mitchmindtree/cpal/pull/5#issuecomment-621526946
2020-04-30 13:38:50 +02:00
mitchmindtree 5813e0f97a Merge branch 'timestamp_emscripten' into timestamp 2020-04-29 15:10:31 +02:00
mitchmindtree cdf23c3c62 Add stream timestamp implementation to WASAPI backend
This was written on Linux and while the code type-checks, it has not yet
been tested.
2020-04-29 14:59:25 +02:00
mitchmindtree 79a0020c88 Add timestamp implementation to emscripten backend 2020-04-29 14:58:08 +02:00
mitchmindtree 54e5e95705 WIP Add timestamp implementation to coreaudio backend
Currently a rough estimate of the required work, not yet tested.
2020-04-28 17:48:25 +02:00
mitchmindtree 163f0cc190 Move reference to timestamp validity bug to more suitable location 2020-04-28 17:43:40 +02:00
mitchmindtree 45977bf837 Add fallback instant source to ALSA backend
Here we use `std::time::Instant` as a fallback source for stream
instants in the case that the device produces invalid timestamps via
`get_htstamp`.
2020-04-28 17:40:40 +02:00
mitchmindtree a49297ec2c WIP - Add ALSA timestamp implementation.
I think this is mostly complete, however there are two major TODOs:

- There seems to be a bug where timestamps are not reported when the
  target device is `pulse`. This causes a `panic!` as the trigger
  timestamp should always precede the timestamp when retrieved while the
  stream is running.
- We need to specify the timestamp type as MONOTONIC_RAW, however the
  `alsa` and `alsa-sys` crates do not yet expose the necessary
  `set_tstamp_type` function.
2020-04-28 17:38:44 +02:00
mitchmindtree 777a6b2bd1 Change `StreamInstant` to use a signed representation
Using an unsigned representation was problematic as some platforms
provide no exact "capture" instant. As a result, we need to calculate
the instant of capture by subtracting the buffer duration from the
callback duration. In some cases this would occasionally cause the
unsigned representation to underflow unnecessarily.
2020-04-28 17:37:48 +02:00
mitchmindtree 4cb50663d8 WIP Begin work on the timestamp and `StreamInstant` APIs 2020-04-27 18:14:29 +02:00
mitchmindtree f032557fb4
Merge pull request #395 from mitchmindtree/callback_info
Add a `CallbackInfo` argument to the stream data callback
2020-04-27 14:32:37 +02:00
mitchmindtree aae44cf3d6 Fix process_callback function signatures in asio backend 2020-04-16 15:30:14 +02:00
mitchmindtree bcf962c447 Add a `CallbackInfo` argument to the stream data callback
I began on an implementation of the timestamp API described in #363 but
quickly realised that it might be best to land the API for providing
extra information to the user's callback first.

This PR adds two new types: `InputCallbackInfo` and `OutputCallbackInfo`.
These types are delivered to the user's data callback as a new, second
argument.

While these types are currently empty, the intention is for these types
to provide information relevant to the current request for or delivery
of data. This includes:

- Timestamp information #363.
- Flags related to the state of the stream (e.g buffer
  underflow/overflow).

In order to maintain flexibility to avoid breaking things, I figure we
can keep the fields of these types private and provide methods for
retrieving this info.

@Ralith, @ishitatsuyuki does this seem OK to you?
2020-04-16 14:50:36 +02:00
Richard Dodd 3c3349f926 Add some comments. 2020-04-15 18:46:54 +01:00
Richard Dodd 290f464330 Cargo fmt 2020-04-15 18:42:43 +01:00
Richard Dodd 86079e6439 Rebase off new alsa-rs impl 2020-04-15 18:41:40 +01:00