mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-03-18 10:41:03 +03:00
156
src/common.rs
156
src/common.rs
@@ -273,7 +273,7 @@ pub fn resample_channels(
|
||||
}
|
||||
|
||||
#[cfg(feature = "use_dasp")]
|
||||
pub fn resample_channels(
|
||||
pub fn audio_resample(
|
||||
data: &[f32],
|
||||
sample_rate0: u32,
|
||||
sample_rate: u32,
|
||||
@@ -309,7 +309,7 @@ pub fn resample_channels(
|
||||
}
|
||||
|
||||
#[cfg(feature = "use_samplerate")]
|
||||
pub fn resample_channels(
|
||||
pub fn audio_resample(
|
||||
data: &[f32],
|
||||
sample_rate0: u32,
|
||||
sample_rate: u32,
|
||||
@@ -326,6 +326,158 @@ pub fn resample_channels(
|
||||
.unwrap_or_default()
|
||||
}
|
||||
|
||||
pub fn audio_rechannel(
|
||||
input: Vec<f32>,
|
||||
in_hz: u32,
|
||||
out_hz: u32,
|
||||
in_chan: u16,
|
||||
output_chan: u16,
|
||||
) -> Vec<f32> {
|
||||
if in_chan == output_chan {
|
||||
return input;
|
||||
}
|
||||
let mut input = input;
|
||||
input.truncate(input.len() / in_chan as usize * in_chan as usize);
|
||||
match (in_chan, output_chan) {
|
||||
(1, 2) => audio_rechannel_1_2(&input, in_hz, out_hz),
|
||||
(1, 3) => audio_rechannel_1_3(&input, in_hz, out_hz),
|
||||
(1, 4) => audio_rechannel_1_4(&input, in_hz, out_hz),
|
||||
(1, 5) => audio_rechannel_1_5(&input, in_hz, out_hz),
|
||||
(1, 6) => audio_rechannel_1_6(&input, in_hz, out_hz),
|
||||
(1, 7) => audio_rechannel_1_7(&input, in_hz, out_hz),
|
||||
(1, 8) => audio_rechannel_1_8(&input, in_hz, out_hz),
|
||||
(2, 1) => audio_rechannel_2_1(&input, in_hz, out_hz),
|
||||
(2, 3) => audio_rechannel_2_3(&input, in_hz, out_hz),
|
||||
(2, 4) => audio_rechannel_2_4(&input, in_hz, out_hz),
|
||||
(2, 5) => audio_rechannel_2_5(&input, in_hz, out_hz),
|
||||
(2, 6) => audio_rechannel_2_6(&input, in_hz, out_hz),
|
||||
(2, 7) => audio_rechannel_2_7(&input, in_hz, out_hz),
|
||||
(2, 8) => audio_rechannel_2_8(&input, in_hz, out_hz),
|
||||
(3, 1) => audio_rechannel_3_1(&input, in_hz, out_hz),
|
||||
(3, 2) => audio_rechannel_3_2(&input, in_hz, out_hz),
|
||||
(3, 4) => audio_rechannel_3_4(&input, in_hz, out_hz),
|
||||
(3, 5) => audio_rechannel_3_5(&input, in_hz, out_hz),
|
||||
(3, 6) => audio_rechannel_3_6(&input, in_hz, out_hz),
|
||||
(3, 7) => audio_rechannel_3_7(&input, in_hz, out_hz),
|
||||
(3, 8) => audio_rechannel_3_8(&input, in_hz, out_hz),
|
||||
(4, 1) => audio_rechannel_4_1(&input, in_hz, out_hz),
|
||||
(4, 2) => audio_rechannel_4_2(&input, in_hz, out_hz),
|
||||
(4, 3) => audio_rechannel_4_3(&input, in_hz, out_hz),
|
||||
(4, 5) => audio_rechannel_4_5(&input, in_hz, out_hz),
|
||||
(4, 6) => audio_rechannel_4_6(&input, in_hz, out_hz),
|
||||
(4, 7) => audio_rechannel_4_7(&input, in_hz, out_hz),
|
||||
(4, 8) => audio_rechannel_4_8(&input, in_hz, out_hz),
|
||||
(5, 1) => audio_rechannel_5_1(&input, in_hz, out_hz),
|
||||
(5, 2) => audio_rechannel_5_2(&input, in_hz, out_hz),
|
||||
(5, 3) => audio_rechannel_5_3(&input, in_hz, out_hz),
|
||||
(5, 4) => audio_rechannel_5_4(&input, in_hz, out_hz),
|
||||
(5, 6) => audio_rechannel_5_6(&input, in_hz, out_hz),
|
||||
(5, 7) => audio_rechannel_5_7(&input, in_hz, out_hz),
|
||||
(5, 8) => audio_rechannel_5_8(&input, in_hz, out_hz),
|
||||
(6, 1) => audio_rechannel_6_1(&input, in_hz, out_hz),
|
||||
(6, 2) => audio_rechannel_6_2(&input, in_hz, out_hz),
|
||||
(6, 3) => audio_rechannel_6_3(&input, in_hz, out_hz),
|
||||
(6, 4) => audio_rechannel_6_4(&input, in_hz, out_hz),
|
||||
(6, 5) => audio_rechannel_6_5(&input, in_hz, out_hz),
|
||||
(6, 7) => audio_rechannel_6_7(&input, in_hz, out_hz),
|
||||
(6, 8) => audio_rechannel_6_8(&input, in_hz, out_hz),
|
||||
(7, 1) => audio_rechannel_7_1(&input, in_hz, out_hz),
|
||||
(7, 2) => audio_rechannel_7_2(&input, in_hz, out_hz),
|
||||
(7, 3) => audio_rechannel_7_3(&input, in_hz, out_hz),
|
||||
(7, 4) => audio_rechannel_7_4(&input, in_hz, out_hz),
|
||||
(7, 5) => audio_rechannel_7_5(&input, in_hz, out_hz),
|
||||
(7, 6) => audio_rechannel_7_6(&input, in_hz, out_hz),
|
||||
(7, 8) => audio_rechannel_7_8(&input, in_hz, out_hz),
|
||||
(8, 1) => audio_rechannel_8_1(&input, in_hz, out_hz),
|
||||
(8, 2) => audio_rechannel_8_2(&input, in_hz, out_hz),
|
||||
(8, 3) => audio_rechannel_8_3(&input, in_hz, out_hz),
|
||||
(8, 4) => audio_rechannel_8_4(&input, in_hz, out_hz),
|
||||
(8, 5) => audio_rechannel_8_5(&input, in_hz, out_hz),
|
||||
(8, 6) => audio_rechannel_8_6(&input, in_hz, out_hz),
|
||||
(8, 7) => audio_rechannel_8_7(&input, in_hz, out_hz),
|
||||
_ => input,
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! audio_rechannel {
|
||||
($name:ident, $in_channels:expr, $out_channels:expr) => {
|
||||
fn $name(input: &[f32], in_hz: u32, out_hz: u32) -> Vec<f32> {
|
||||
use fon::{chan::Ch32, Audio, Frame};
|
||||
let mut in_audio =
|
||||
Audio::<Ch32, $in_channels>::with_silence(in_hz, input.len() / $in_channels);
|
||||
for (x, y) in input.chunks_exact($in_channels).zip(in_audio.iter_mut()) {
|
||||
let mut f = Frame::<Ch32, $in_channels>::default();
|
||||
let mut i = 0;
|
||||
for c in f.channels_mut() {
|
||||
*c = x[i].into();
|
||||
i += 1;
|
||||
}
|
||||
*y = f;
|
||||
}
|
||||
Audio::<Ch32, $out_channels>::with_audio(out_hz, &in_audio)
|
||||
.as_f32_slice()
|
||||
.to_owned()
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
audio_rechannel!(audio_rechannel_1_2, 1, 2);
|
||||
audio_rechannel!(audio_rechannel_1_3, 1, 3);
|
||||
audio_rechannel!(audio_rechannel_1_4, 1, 4);
|
||||
audio_rechannel!(audio_rechannel_1_5, 1, 5);
|
||||
audio_rechannel!(audio_rechannel_1_6, 1, 6);
|
||||
audio_rechannel!(audio_rechannel_1_7, 1, 7);
|
||||
audio_rechannel!(audio_rechannel_1_8, 1, 8);
|
||||
audio_rechannel!(audio_rechannel_2_1, 2, 1);
|
||||
audio_rechannel!(audio_rechannel_2_3, 2, 3);
|
||||
audio_rechannel!(audio_rechannel_2_4, 2, 4);
|
||||
audio_rechannel!(audio_rechannel_2_5, 2, 5);
|
||||
audio_rechannel!(audio_rechannel_2_6, 2, 6);
|
||||
audio_rechannel!(audio_rechannel_2_7, 2, 7);
|
||||
audio_rechannel!(audio_rechannel_2_8, 2, 8);
|
||||
audio_rechannel!(audio_rechannel_3_1, 3, 1);
|
||||
audio_rechannel!(audio_rechannel_3_2, 3, 2);
|
||||
audio_rechannel!(audio_rechannel_3_4, 3, 4);
|
||||
audio_rechannel!(audio_rechannel_3_5, 3, 5);
|
||||
audio_rechannel!(audio_rechannel_3_6, 3, 6);
|
||||
audio_rechannel!(audio_rechannel_3_7, 3, 7);
|
||||
audio_rechannel!(audio_rechannel_3_8, 3, 8);
|
||||
audio_rechannel!(audio_rechannel_4_1, 4, 1);
|
||||
audio_rechannel!(audio_rechannel_4_2, 4, 2);
|
||||
audio_rechannel!(audio_rechannel_4_3, 4, 3);
|
||||
audio_rechannel!(audio_rechannel_4_5, 4, 5);
|
||||
audio_rechannel!(audio_rechannel_4_6, 4, 6);
|
||||
audio_rechannel!(audio_rechannel_4_7, 4, 7);
|
||||
audio_rechannel!(audio_rechannel_4_8, 4, 8);
|
||||
audio_rechannel!(audio_rechannel_5_1, 5, 1);
|
||||
audio_rechannel!(audio_rechannel_5_2, 5, 2);
|
||||
audio_rechannel!(audio_rechannel_5_3, 5, 3);
|
||||
audio_rechannel!(audio_rechannel_5_4, 5, 4);
|
||||
audio_rechannel!(audio_rechannel_5_6, 5, 6);
|
||||
audio_rechannel!(audio_rechannel_5_7, 5, 7);
|
||||
audio_rechannel!(audio_rechannel_5_8, 5, 8);
|
||||
audio_rechannel!(audio_rechannel_6_1, 6, 1);
|
||||
audio_rechannel!(audio_rechannel_6_2, 6, 2);
|
||||
audio_rechannel!(audio_rechannel_6_3, 6, 3);
|
||||
audio_rechannel!(audio_rechannel_6_4, 6, 4);
|
||||
audio_rechannel!(audio_rechannel_6_5, 6, 5);
|
||||
audio_rechannel!(audio_rechannel_6_7, 6, 7);
|
||||
audio_rechannel!(audio_rechannel_6_8, 6, 8);
|
||||
audio_rechannel!(audio_rechannel_7_1, 7, 1);
|
||||
audio_rechannel!(audio_rechannel_7_2, 7, 2);
|
||||
audio_rechannel!(audio_rechannel_7_3, 7, 3);
|
||||
audio_rechannel!(audio_rechannel_7_4, 7, 4);
|
||||
audio_rechannel!(audio_rechannel_7_5, 7, 5);
|
||||
audio_rechannel!(audio_rechannel_7_6, 7, 6);
|
||||
audio_rechannel!(audio_rechannel_7_8, 7, 8);
|
||||
audio_rechannel!(audio_rechannel_8_1, 8, 1);
|
||||
audio_rechannel!(audio_rechannel_8_2, 8, 2);
|
||||
audio_rechannel!(audio_rechannel_8_3, 8, 3);
|
||||
audio_rechannel!(audio_rechannel_8_4, 8, 4);
|
||||
audio_rechannel!(audio_rechannel_8_5, 8, 5);
|
||||
audio_rechannel!(audio_rechannel_8_6, 8, 6);
|
||||
audio_rechannel!(audio_rechannel_8_7, 8, 7);
|
||||
|
||||
pub fn test_nat_type() {
|
||||
let mut i = 0;
|
||||
std::thread::spawn(move || loop {
|
||||
|
||||
Reference in New Issue
Block a user