Switch to using "opus" and add support for windows

This commit is contained in:
joeyahines committed 2026-09-26 19:27:29 -06:00
1 parent 63477d22a6
commit a9f2951bf0
6 files changed
+55 -47

No files matched your search

+3 -8
View File
@@ -1,11 +1,9 @@
use crate::udp_connection::OpusUdpConnection;
use crate::util::{SAMPLE_RATE, SAMPLE_RATE_RAW, STEREO_FRAME_SIZE, TAP_PACKET_MAX_DATA_LEN};
use anyhow::Error;
use audiopus::coder::Decoder;
use audiopus::packet::Packet;
use audiopus::{Channels, MutSignals};
use chrono::Utc;
use log::{error, warn};
use opus::{Channels, Decoder};
use prost::Message;
use std::io::{ErrorKind, Read};
use std::net::SocketAddr;
@@ -33,7 +31,6 @@ pub fn record(addr: SocketAddr, output_path: &Path, duration_ms: u64) -> Result<
while std::time::Instant::now() < deadline {
let mut packet = vec![0; TAP_PACKET_MAX_DATA_LEN];
let mut output_buffer = vec![0.0; STEREO_FRAME_SIZE];
let signals = MutSignals::try_from(&mut output_buffer)?;
let new_packet = match udp_connection.read(&mut packet) {
Ok(data_len) => Some(&packet[0..data_len]),
@@ -67,11 +64,9 @@ pub fn record(addr: SocketAddr, output_path: &Path, duration_ms: u64) -> Result<
(seq_count, _) = tap_message.seq.overflowing_add(1);
let packet = Packet::try_from(&tap_message.audio_data)?;
decoder.decode_float(Some(packet), signals, false)?
decoder.decode_float(&packet, &mut output_buffer, false)?
} else {
decoder.decode_float(None, signals, false)?
decoder.decode_float(&[], &mut output_buffer, false)?
} * 2;
for samples in output_buffer[..data_size].chunks(2) {
+2 -3
View File
@@ -1,13 +1,12 @@
use std::io::{stdin, Read};
use crate::tx_thread::TxThread;
use crate::udp_connection::OpusUdpConnection;
use crate::util::{SAMPLE_RATE, SAMPLE_RATE_RAW, STEREO_FRAME_SIZE, ThreadMessage};
use anyhow::Error;
use audiopus::coder::Encoder;
use audiopus::{Application, Bitrate, Channels, Signal};
use cpal::traits::{DeviceTrait, HostTrait, StreamTrait};
use cpal::{BufferSize, FromSample, Host, Sample, SampleRate, StreamConfig};
use log::{error, info};
use opus::{Application, Bitrate, Channels, Encoder, Signal};
use std::io::{Read, stdin};
use std::net::SocketAddr;
use std::sync::mpsc::{Sender, channel};
use std::thread;
+2 -2
View File
@@ -1,10 +1,10 @@
use crate::udp_connection::OpusUdpConnection;
use crate::util::STEREO_FRAME_SIZE;
use crate::util::{CIRC_BUFFER_SIZE, TAP_PACKET_MAX_DATA_LEN, ThreadMessage};
use audiopus::coder::Encoder;
use chrono::Utc;
use circular_buffer::FixedCircularBuffer;
use log::{error, info, warn};
use opus::Encoder;
use prost::Message;
use std::io::Write;
use std::sync::mpsc::{Receiver, RecvError};
@@ -18,7 +18,7 @@ pub enum Error {
#[error("IO error on offload: {0}")]
IoFailure(#[from] std::io::Error),
#[error("Encode error: {0}")]
EncodeFailure(#[from] audiopus::Error),
EncodeFailure(#[from] opus::Error),
}
pub struct TxThread {
+3 -2
View File
@@ -1,7 +1,8 @@
use audiopus::SampleRate;
use cpal::SampleRate;
pub const SAMPLE_RATE: SampleRate = SampleRate::Hz48000;
pub const SAMPLE_RATE_RAW: usize = 48_000;
pub const SAMPLE_RATE: SampleRate = SAMPLE_RATE_RAW as u32;
pub const AUDIO_FRAME_RATE: usize = 50;
pub const MONO_FRAME_SIZE: usize = SAMPLE_RATE_RAW / AUDIO_FRAME_RATE;
pub const STEREO_FRAME_SIZE: usize = 2 * MONO_FRAME_SIZE;