Add audio processing docs
Signed-off-by: Aron Heinecke <aron.heinecke@t-online.de>
This commit is contained in:
parent
4bb9f7d848
commit
db8a3ec796
1 changed files with 6 additions and 3 deletions
|
@ -253,9 +253,11 @@ async fn process_discord_audio(voice_buffer: &AudioBufferDiscord, encoder: &Arc<
|
||||||
}
|
}
|
||||||
let mut encoded = [0; 1024];
|
let mut encoded = [0; 1024];
|
||||||
let encoder_c = encoder.clone();
|
let encoder_c = encoder.clone();
|
||||||
|
// don't block the async runtime
|
||||||
let res = task::spawn_blocking(move || {
|
let res = task::spawn_blocking(move || {
|
||||||
let start = std::time::Instant::now();
|
let start = std::time::Instant::now();
|
||||||
let mut data: Vec<i16> = Vec::with_capacity(STEREO_20MS);
|
let mut data: Vec<i16> = Vec::with_capacity(STEREO_20MS);
|
||||||
|
// merge all audio buffers (clients) to one
|
||||||
for buffer in buffer_map.values_mut() {
|
for buffer in buffer_map.values_mut() {
|
||||||
//buffer.truncate(STEREO_20MS);
|
//buffer.truncate(STEREO_20MS);
|
||||||
for i in 0..buffer.len() {
|
for i in 0..buffer.len() {
|
||||||
|
@ -268,7 +270,7 @@ async fn process_discord_audio(voice_buffer: &AudioBufferDiscord, encoder: &Arc<
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// encode back to opus
|
||||||
let lock = encoder_c.try_lock().expect("Can't reach encoder!");
|
let lock = encoder_c.try_lock().expect("Can't reach encoder!");
|
||||||
let length = match lock.encode(&data, &mut encoded) {
|
let length = match lock.encode(&data, &mut encoded) {
|
||||||
Err(e) => {eprintln!("Failed to encode voice: {}",e); return None;},
|
Err(e) => {eprintln!("Failed to encode voice: {}",e); return None;},
|
||||||
|
@ -276,11 +278,12 @@ async fn process_discord_audio(voice_buffer: &AudioBufferDiscord, encoder: &Arc<
|
||||||
};
|
};
|
||||||
//println!("Data size: {}/{} enc-length: {}",data.len(),STEREO_20MS,length);
|
//println!("Data size: {}/{} enc-length: {}",data.len(),STEREO_20MS,length);
|
||||||
//println!("length size: {}",length);
|
//println!("length size: {}",length);
|
||||||
|
// warn on high encoding times
|
||||||
let duration = start.elapsed().as_millis();
|
let duration = start.elapsed().as_millis();
|
||||||
if duration > 15 {
|
if duration > 5 {
|
||||||
eprintln!("Took too {}ms for processing audio!",duration);
|
eprintln!("Took too {}ms for processing audio!",duration);
|
||||||
}
|
}
|
||||||
|
// package into teamspeak audio structure
|
||||||
Some(OutAudio::new(&AudioData::C2S { id: 0, codec: CodecType::OpusMusic, data: &encoded[..length] }))
|
Some(OutAudio::new(&AudioData::C2S { id: 0, codec: CodecType::OpusMusic, data: &encoded[..length] }))
|
||||||
}).await.expect("Join error for audio processing thread!");
|
}).await.expect("Join error for audio processing thread!");
|
||||||
res
|
res
|
||||||
|
|
Loading…
Reference in a new issue