diff --git a/crates/audio/src/audio.rs b/crates/audio/src/audio.rs index 1478afa0c2b8bf5b5d633b11442f7038198109b0..44f2d5e07d5e7ddb9bbb18925bb8bdbe7581e903 100644 --- a/crates/audio/src/audio.rs +++ b/crates/audio/src/audio.rs @@ -1,24 +1,26 @@ use anyhow::{Context as _, Result}; use collections::HashMap; -use gpui::{App, AsyncApp, BackgroundExecutor, BorrowAppContext, Global}; -use libwebrtc::native::apm; -use log::info; -use parking_lot::Mutex; +use gpui::{App, BackgroundExecutor, BorrowAppContext, Global}; + +#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))] +mod non_windows_and_freebsd_deps { + pub(super) use gpui::AsyncApp; + pub(super) use libwebrtc::native::apm; + pub(super) use log::info; + pub(super) use parking_lot::Mutex; + pub(super) use rodio::cpal::Sample; + pub(super) use rodio::source::{LimitSettings, UniformSourceIterator}; + pub(super) use std::sync::Arc; +} + +#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))] +use non_windows_and_freebsd_deps::*; + use rodio::{ - Decoder, OutputStream, OutputStreamBuilder, Source, - cpal::Sample, - mixer::Mixer, - nz, - source::{Buffered, LimitSettings, UniformSourceIterator}, + Decoder, OutputStream, OutputStreamBuilder, Source, mixer::Mixer, nz, source::Buffered, }; use settings::Settings; -use std::{ - io::Cursor, - num::NonZero, - path::PathBuf, - sync::{Arc, atomic::Ordering}, - time::Duration, -}; +use std::{io::Cursor, num::NonZero, path::PathBuf, sync::atomic::Ordering, time::Duration}; use util::ResultExt; mod audio_settings; @@ -76,6 +78,7 @@ impl Sound { pub struct Audio { output_handle: Option, output_mixer: Option, + #[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))] pub echo_canceller: Arc>, source_cache: HashMap>>>>, replays: replays::Replays, @@ -86,6 +89,10 @@ impl Default for Audio { Self { output_handle: Default::default(), output_mixer: Default::default(), + #[cfg(not(any( + all(target_os = "windows", target_env = "gnu"), + target_os = "freebsd" + )))] echo_canceller: Arc::new(Mutex::new(apm::AudioProcessingModule::new( true, false, false, false, ))), @@ -110,7 +117,16 @@ impl Audio { mixer.add(rodio::source::Zero::new(CHANNEL_COUNT, SAMPLE_RATE)); self.output_mixer = Some(mixer); + // The webrtc apm is not yet compiling for windows & freebsd + #[cfg(not(any( + any(all(target_os = "windows", target_env = "gnu")), + target_os = "freebsd" + )))] let echo_canceller = Arc::clone(&self.echo_canceller); + #[cfg(not(any( + any(all(target_os = "windows", target_env = "gnu")), + target_os = "freebsd" + )))] let source = source.inspect_buffer::(move |buffer| { let mut buf: [i16; _] = buffer.map(|s| s.to_sample()); echo_canceller @@ -139,6 +155,7 @@ impl Audio { self.replays.replays_to_tar(executor) } + #[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))] pub fn open_microphone(voip_parts: VoipParts) -> anyhow::Result { let stream = rodio::microphone::MicrophoneBuilder::new() .default_device()? @@ -248,11 +265,13 @@ impl Audio { } } +#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))] pub struct VoipParts { echo_canceller: Arc>, replays: replays::Replays, } +#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))] impl VoipParts { pub fn new(cx: &AsyncApp) -> anyhow::Result { let (apm, replays) = cx.try_read_default_global::(|audio, _| {