more improvements, still choppy tbh
This commit is contained in:
+19
-9
@@ -1,11 +1,14 @@
|
||||
use crate::output_buffer::OutputBuffer;
|
||||
use crate::udp_connection::OpusUdpConnection;
|
||||
use crate::{CIRC_BUFFER_SIZE, SAMPLE_RATE, SAMPLE_RATE_RAW, STEREO_FRAME_SIZE};
|
||||
use crate::{
|
||||
CIRC_BUFFER_SIZE, SAMPLE_RATE, SAMPLE_RATE_RAW,
|
||||
STEREO_FRAME_SIZE,
|
||||
};
|
||||
use anyhow::Error;
|
||||
use audiopus::coder::Encoder;
|
||||
use audiopus::{Application, Channels};
|
||||
use audiopus::{Application, Bitrate, Channels, Signal};
|
||||
use cpal::traits::{DeviceTrait, HostTrait, StreamTrait};
|
||||
use cpal::{FromSample, Host, Sample, StreamConfig};
|
||||
use cpal::{BufferSize, FromSample, Host, Sample, StreamConfig};
|
||||
use log::{error, info};
|
||||
use std::net::SocketAddr;
|
||||
use std::sync::{Arc, Mutex};
|
||||
@@ -33,11 +36,19 @@ pub fn tap(
|
||||
|
||||
let mut stream_config = StreamConfig::from(config.clone());
|
||||
stream_config.sample_rate = cpal::SampleRate(SAMPLE_RATE_RAW as u32);
|
||||
stream_config.buffer_size = BufferSize::Fixed(STEREO_FRAME_SIZE as u32);
|
||||
|
||||
for cfg in device.supported_input_configs()? {
|
||||
info!("{:?}", cfg)
|
||||
}
|
||||
|
||||
info!("Stream config: {stream_config:?}");
|
||||
|
||||
let udp_connection = OpusUdpConnection::new(src_addr, dest_addr)?;
|
||||
let encoder = Encoder::new(SAMPLE_RATE, Channels::Stereo, Application::Audio)?;
|
||||
let mut encoder = Encoder::new(SAMPLE_RATE, Channels::Stereo, Application::Audio)?;
|
||||
encoder.set_bitrate(Bitrate::Max)?;
|
||||
encoder.set_complexity(10)?;
|
||||
encoder.set_signal(Signal::Music)?;
|
||||
|
||||
let sound_buffer = Arc::new(Mutex::new(OutputBuffer::new(
|
||||
STEREO_FRAME_SIZE,
|
||||
@@ -98,11 +109,10 @@ fn write_input_data<const N: usize, T>(
|
||||
T: Sample,
|
||||
f32: FromSample<T>,
|
||||
{
|
||||
if let Ok(mut ctx) = ctx.try_lock() {
|
||||
let sample: Vec<f32> = input.iter().map(|s| f32::from_sample(*s)).collect();
|
||||
let mut ctx = ctx.lock().expect("Mutex poisoned");
|
||||
let sample: Vec<f32> = input.iter().map(|s| f32::from_sample(*s)).collect();
|
||||
|
||||
if let Err(err) = ctx.write_data(&sample) {
|
||||
error!("Got error when writing data to sound buffer: {err}")
|
||||
}
|
||||
if let Err(err) = ctx.write_data(&sample) {
|
||||
error!("Got error when writing data to sound buffer: {err}")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user