1#![deny(missing_docs)]
56
57pub mod audio;
58pub mod error;
59pub mod host;
60pub mod midi;
61pub mod parameters;
62pub mod playback;
63pub mod plugin;
64pub mod realtime;
65pub mod simple;
66pub mod window;
67
68pub mod discovery;
69
70#[cfg(feature = "egui-widgets")]
71pub mod embed;
72
73#[cfg(feature = "cpal-backend")]
74pub mod backends;
75
76pub mod process_isolation;
77
78mod internal;
79
80pub use audio::{
81 read_wav, AudioBackend, AudioBuffers, AudioConfig, AudioLevels, AudioStream, BusArrangements,
82 ChannelLevel, InputSource, PeakMeter, RmsWindow, SignalSource, SpeakerArrangement,
83};
84pub use discovery::{
85 get_detailed_plugin_info, BusInfo, BusLayout, ClassInfo, DetailedPluginInfo, FactoryInfo,
86 PluginReport,
87};
88#[cfg(feature = "egui-widgets")]
89pub use embed::{EditorRect, EmbeddedEditor};
90pub use error::{Error, Result};
91pub use host::{DiscoveryProgress, ProbeResult, Vst3Host, Vst3HostBuilder};
92pub use midi::{cc, MidiChannel, MidiEvent};
93pub use parameters::{Parameter, ParameterAutomation, ParameterChange};
94pub use playback::{
95 play_realtime_with_backend, play_with_backend, play_with_input_backend, AudioHandle,
96 RtAudioHandle,
97};
98pub use plugin::{Plugin, PluginInfo, PluginPreset, PluginUnit, ProcessMode, WindowHandle};
99pub use realtime::{RealtimePluginRunner, RtControl};
100pub use window::PluginWindow;
101
102pub mod prelude {
104 pub use crate::{
105 audio::{
106 AudioBackend, AudioBuffers, AudioConfig, AudioLevels, AudioStream, BusArrangements,
107 ChannelLevel, InputSource, PeakMeter, RmsWindow, SignalSource, SpeakerArrangement,
108 },
109 error::Error,
113 host::{DiscoveryProgress, Vst3Host, Vst3HostBuilder},
114 midi::{cc, MidiChannel, MidiEvent},
115 parameters::{Parameter, ParameterAutomation},
116 playback::{play_with_backend, AudioHandle},
117 plugin::{Plugin, PluginInfo, ProcessMode, WindowHandle},
118 window::PluginWindow,
119 };
120
121 #[cfg(feature = "cpal-backend")]
122 pub use crate::backends::CpalBackend;
123}
124
125#[cfg(test)]
126mod tests {
127 use super::*;
128
129 #[test]
130 fn test_host_creation() {
131 let host = Vst3Host::new();
132 assert!(host.is_ok());
133 }
134
135 #[test]
136 fn new_scans_default_paths_like_default() {
137 let via_new = Vst3Host::new().unwrap();
140 assert!(
141 via_new.scan_default_paths,
142 "Vst3Host::new() should scan standard system paths"
143 );
144 assert_eq!(
145 via_new.scan_default_paths,
146 Vst3Host::default().scan_default_paths
147 );
148 }
149
150 #[test]
151 fn test_host_builder() {
152 let host = Vst3Host::builder()
153 .sample_rate(48000.0)
154 .block_size(1024)
155 .build();
156 assert!(host.is_ok());
157
158 let host = host.unwrap();
159 assert_eq!(host.config().sample_rate, 48000.0);
160 assert_eq!(host.config().block_size, 1024);
161 }
162}