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 discover_plugins_safe, get_detailed_plugin_info, probe_plugin_info_isolated, BusInfo,
86 BusLayout, ClassInfo, DetailedPluginInfo, FactoryInfo, PluginReport, SafeDiscoveryReport,
87 SafeDiscoverySkip, DEFAULT_PROBE_TIMEOUT,
88};
89#[cfg(feature = "egui-widgets")]
90pub use embed::{EditorRect, EmbeddedEditor};
91pub use error::{Error, Result};
92pub use host::{DiscoveryProgress, ProbeResult, Vst3Host, Vst3HostBuilder};
93pub use midi::{cc, MidiChannel, MidiEvent, NoteExpressionInfo, NoteExpressionType, NoteId};
94pub use parameters::{Parameter, ParameterAutomation, ParameterChange};
95pub use playback::{
96 play_realtime_with_backend, play_with_backend, play_with_input_backend, AudioHandle,
97 RtAudioHandle,
98};
99pub use plugin::{Plugin, PluginInfo, PluginPreset, PluginUnit, ProcessMode, WindowHandle};
100pub use realtime::{RealtimePluginRunner, RtControl};
101pub use window::PluginWindow;
102
103pub mod prelude {
105 pub use crate::{
106 audio::{
107 AudioBackend, AudioBuffers, AudioConfig, AudioLevels, AudioStream, BusArrangements,
108 ChannelLevel, InputSource, PeakMeter, RmsWindow, SignalSource, SpeakerArrangement,
109 },
110 error::Error,
114 host::{DiscoveryProgress, Vst3Host, Vst3HostBuilder},
115 midi::{cc, MidiChannel, MidiEvent, NoteExpressionInfo, NoteExpressionType, NoteId},
116 parameters::{Parameter, ParameterAutomation},
117 playback::{play_with_backend, AudioHandle},
118 plugin::{Plugin, PluginInfo, ProcessMode, WindowHandle},
119 window::PluginWindow,
120 };
121
122 #[cfg(feature = "cpal-backend")]
123 pub use crate::backends::CpalBackend;
124}
125
126#[cfg(test)]
127mod tests {
128 use super::*;
129
130 #[test]
131 fn test_host_creation() {
132 let host = Vst3Host::new();
133 assert!(host.is_ok());
134 }
135
136 #[test]
137 fn new_scans_default_paths_like_default() {
138 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}