meadowlarkdaw / rainout Goto Github PK
View Code? Open in Web Editor NEWCross-platform audio and MIDI IO
License: Other
Cross-platform audio and MIDI IO
License: Other
Hi,
is the project still alive?
As of 705d2f
Config
makes sense for JACK though, because the port names can also be customized, same as the client name.Set this to
None
to automatically select the default port layout for the device.
I think there should be an option to skip input/output functionality. Or is that indicated by an empty vector?
The MIDI part of the API probably needs more fleshing out still.
Variant(u32, u32)
?
TryNextBestWithMinMaxSR((u32, u32)),
TryNextBestWithMinMaxSize((u32, u32)),
Doing input and output syncrhonized in the same callback prevents a certain feature that may or may not be desired.
When recording, it is often more important that the recording is flawless, while the live playback (through effects and such) is less important and if it does have dropouts, there's not much that can be done about it. If input and output are instead run asynchronous of each other, it is possible to always keep recording without dropouts regardless of how slowly the effects chain is running.
More specifically, we could have it so that the input side runs on schedule and sends data to be stored on disk (or memory), and also sends it to the output side for further processing. The output side can then slow down and drop out as much as it likes without affecting the input side.
Something akin to this is provided by JACK2 asynchronous mode, though the recording would have to happen in a separate client from the effects. With JACK, it is explicitly stated that asynchronous mode increases latency by one period. Some additional latency is inevitable, so I suppose this should be configurable.
Earlier I thought this might be a common feature in DAWs, but my experience might have been incidental. Even with synchronized I/O, there is some room for the output to drop out before any input data is lost. From what I was able to test (and read code), none of Bitwig, Ardour or Reaper have this feature. So I guess we can happily ignore it.
rusty-daw-io
currently doesn't build for me.
Steps to reproduce:
cargo build
PS Code\rusty-daw\rusty-daw-io> cargo build
Compiling rusty-daw-io v0.0.0 (C:\Users\qbgee\Documents\Code\rusty-daw\rusty-daw-io)
error[E0432]: unresolved imports `super::AudioServerConfig`, `super::BufferSizeInfo`, `super::MidiServerConfig`, `super::StreamError`
--> src\windows\mod.rs:4:5
|
4 | AudioServerConfig, AudioServerInfo, BufferSizeInfo, MidiServerConfig, MidiServerInfo,
| ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ no `MidiServerConfig` in the root
| | |
| | no `BufferSizeInfo` in the root
| no `AudioServerConfig` in the root
5 | OsDevicesInfo, OsStreamHandle, RtProcessHandler, SpawnRtThreadError, StreamError, StreamInfo,
| ^^^^^^^^^^^ no `StreamError` in the root
|
help: a similar name exists in the module
|
4 | AudioServerInfo, AudioServerInfo, BufferSizeInfo, MidiServerConfig, MidiServerInfo,
| ~~~~~~~~~~~~~~~
help: a similar name exists in the module
|
4 | AudioServerConfig, AudioServerInfo, BufferSizeRange, MidiServerConfig, MidiServerInfo,
| ~~~~~~~~~~~~~~~
help: a similar name exists in the module
|
4 | AudioServerConfig, AudioServerInfo, BufferSizeInfo, MidiServerInfo, MidiServerInfo,
| ~~~~~~~~~~~~~~
error[E0407]: method `default_midi_config` is not a member of trait `OsDevicesInfo`
--> src\windows\mod.rs:78:5
|
78 | fn default_midi_config(&self) -> String {
| ^ ------------------- help: there is an associated function with a similar name: `default_midi_server`
| _____|
| |
79 | | if self.midi_servers_info[0].available {
80 | | String::from("ALSA")
81 | | } else {
82 | | String::from("Jack")
83 | | }
84 | | }
| |_____^ not a member of trait `OsDevicesInfo`
error[E0283]: type annotations needed
--> src\windows\mod.rs:22:5
|
22 | type E = E;
| ^^^^^^^^^^^ cannot infer type for type parameter `E`
|
= note: cannot satisfy `E: FatalErrorHandler`
note: required by a bound in `OsStreamHandle::E`
--> src\lib.rs:114:13
|
114 | type E: FatalErrorHandler;
| ^^^^^^^^^^^^^^^^^ required by this bound in `OsStreamHandle::E`
error[E0053]: method `default_audio_server` has an incompatible type for trait
--> src\windows\mod.rs:71:39
|
71 | fn default_audio_server(&self) -> String {
| ^^^^^^
| |
| expected `&String`, found struct `String`
| help: change the output type to match the trait: `&String`
|
::: src\lib.rs:126:39
|
126 | fn default_audio_server(&self) -> &String;
| ------- type in trait
|
= note: expected fn pointer `fn(&WindowsDevicesInfo) -> &String`
found fn pointer `fn(&WindowsDevicesInfo) -> String`
error[E0046]: not all trait items implemented, missing: `default_midi_server`
--> src\windows\mod.rs:52:1
|
52 | impl OsDevicesInfo for WindowsDevicesInfo {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `default_midi_server` in implementation
|
::: src\lib.rs:127:5
|
127 | fn default_midi_server(&self) -> &String;
| ----------------------------------------- `default_midi_server` from trait
error[E0609]: no field `buffer_size` on type `AudioDeviceInfo`
--> src\windows\mod.rs:94:64
|
94 | &self.audio_servers_info[0].devices[0].buffer_size
| ^^^^^^^^^^^ unknown field
|
= note: available fields are: `name`, `in_ports`, `out_ports`, `sample_rates`, `buffer_size_range` ... and 5 others
error[E0061]: this function takes 5 arguments but 4 arguments were supplied
--> src\lib.rs:156:24
|
156 | os_handle: windows::spawn_rt_thread(
| ^^^^^^^^^^^^^^^^^^^^^^^^ expected 5 arguments
157 | config,
| ------
158 | use_client_name,
| ---------------
159 | rt_process_handler,
| ------------------
160 | fatal_error_hanlder,
| ------------------- supplied 4 arguments
|
note: function defined here
--> src\windows\mod.rs:123:8
|
123 | pub fn spawn_rt_thread<P: RtProcessHandler, E>(
| ^^^^^^^^^^^^^^^
124 | audio_config: &AudioServerConfig,
| --------------------------------
125 | midi_config: Option<&MidiServerConfig>,
| --------------------------------------
126 | use_client_name: Option<String>,
| -------------------------------
127 | rt_process_handler: P,
| ---------------------
128 | error_callback: E,
| -----------------
error[E0277]: `WindowsDevicesInfo` doesn't implement `std::fmt::Debug`
--> src\lib.rs:73:5
|
67 | #[derive(Debug)]
| ----- in this derive macro expansion
...
73 | os_info: WindowsDevicesInfo,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `WindowsDevicesInfo` cannot be formatted using `{:?}`
|
= help: the trait `std::fmt::Debug` is not implemented for `WindowsDevicesInfo`
= note: add `#[derive(Debug)]` to `WindowsDevicesInfo` or manually `impl std::fmt::Debug for WindowsDevicesInfo`
= note: this error originates in the derive macro `Debug` (in Nightly builds, run with -Z macro-backtrace for more info)
Some errors have detailed explanations: E0046, E0053, E0061, E0277, E0283, E0407, E0432, E0609.
For more information about an error, try `rustc --explain E0046`.
error: could not compile `rusty-daw-io` due to 8 previous errors
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.