fix: multiple audio channels (#73)
This commit is contained in:
@@ -98,16 +98,18 @@ impl SineTrack {
|
|||||||
let mut samples_10ms = Vec::<i16>::new();
|
let mut samples_10ms = Vec::<i16>::new();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
|
const NUM_CHANNELS: usize = 2;
|
||||||
|
|
||||||
interval.tick().await;
|
interval.tick().await;
|
||||||
|
|
||||||
let mut data = frame_options.lock();
|
let mut data = frame_options.lock();
|
||||||
let samples_count_10ms = (data.sample_rate / 100) as usize;
|
let samples_count_10ms = (data.sample_rate / 100) as usize * NUM_CHANNELS;
|
||||||
|
|
||||||
if samples_10ms.capacity() != samples_count_10ms {
|
if samples_10ms.capacity() != samples_count_10ms {
|
||||||
samples_10ms.resize(samples_count_10ms, 0i16);
|
samples_10ms.resize(samples_count_10ms, 0i16);
|
||||||
}
|
}
|
||||||
|
|
||||||
for i in 0..samples_count_10ms {
|
for i in (0..samples_count_10ms).step_by(NUM_CHANNELS) {
|
||||||
let val = data.amplitude
|
let val = data.amplitude
|
||||||
* f64::sin(
|
* f64::sin(
|
||||||
std::f64::consts::PI
|
std::f64::consts::PI
|
||||||
@@ -117,14 +119,17 @@ impl SineTrack {
|
|||||||
);
|
);
|
||||||
|
|
||||||
data.phase += 1;
|
data.phase += 1;
|
||||||
// WebRTC uses 16-bit signed PCM
|
|
||||||
samples_10ms[i] = (val * 32768.0) as i16;
|
for c in 0..NUM_CHANNELS {
|
||||||
|
// WebRTC uses 16-bit signed PCM
|
||||||
|
samples_10ms[i + c] = (val * 32768.0) as i16;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rtc_source.capture_frame(&AudioFrame {
|
rtc_source.capture_frame(&AudioFrame {
|
||||||
data: samples_10ms.clone(),
|
data: samples_10ms.clone(),
|
||||||
sample_rate: data.sample_rate as u32,
|
sample_rate: data.sample_rate as u32,
|
||||||
num_channels: 1,
|
num_channels: NUM_CHANNELS as u32,
|
||||||
samples_per_channel: samples_count_10ms as u32,
|
samples_per_channel: samples_count_10ms as u32,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ impl NativeAudioSource {
|
|||||||
data.as_ptr(),
|
data.as_ptr(),
|
||||||
frame.sample_rate as i32,
|
frame.sample_rate as i32,
|
||||||
frame.num_channels as usize,
|
frame.num_channels as usize,
|
||||||
samples_10ms,
|
samples_10ms / frame.num_channels as usize,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user