fix: different audio frame size than 10ms (#72)

This commit is contained in:
Théo Monnom
2023-05-16 08:42:40 +02:00
committed by GitHub
parent 3998dd4a49
commit 97dde044b5
2 changed files with 64 additions and 11 deletions
+8 -3
View File
@@ -12,6 +12,7 @@ struct FrameData {
pub sample_rate: u32,
pub freq: f64,
pub amplitude: f64,
pub phase: u64,
}
impl Default for FrameData {
@@ -20,6 +21,7 @@ impl Default for FrameData {
sample_rate: 48000,
freq: 440.0,
amplitude: 1.0,
phase: 0,
}
}
}
@@ -98,7 +100,7 @@ impl SineTrack {
loop {
interval.tick().await;
let data = frame_options.lock();
let mut data = frame_options.lock();
let samples_count_10ms = (data.sample_rate / 100) as usize;
if samples_10ms.capacity() != samples_count_10ms {
@@ -108,10 +110,13 @@ impl SineTrack {
for i in 0..samples_count_10ms {
let val = data.amplitude
* f64::sin(
std::f64::consts::PI * 2.0 * data.freq * i as f64
/ samples_count_10ms as f64,
std::f64::consts::PI
* 2.0
* data.freq
* (data.phase as f64 / data.sample_rate as f64),
);
data.phase += 1;
// WebRTC uses 16-bit signed PCM
samples_10ms[i] = (val * 32768.0) as i16;
}