Fix audio encoder
Signed-off-by: Aron Heinecke <aron.heinecke@t-online.de>
This commit is contained in:
parent
8a8c21bdca
commit
b4bbf5e777
2 changed files with 12 additions and 11 deletions
|
@ -394,7 +394,7 @@ impl VoiceEventHandler for Receiver {
|
||||||
let time = std::time::Instant::now();
|
let time = std::time::Instant::now();
|
||||||
let mut lock = self.sink.lock().await;
|
let mut lock = self.sink.lock().await;
|
||||||
let dur = time.elapsed();
|
let dur = time.elapsed();
|
||||||
if dur > Duration::from_nanos(500) {
|
if dur.as_millis() > 1 {
|
||||||
eprintln!("Akquiring lock took {}ms",dur.as_millis());
|
eprintln!("Akquiring lock took {}ms",dur.as_millis());
|
||||||
}
|
}
|
||||||
if let Some(buffer) = lock.get_mut(&packet.ssrc) {
|
if let Some(buffer) = lock.get_mut(&packet.ssrc) {
|
||||||
|
|
21
src/main.rs
21
src/main.rs
|
@ -153,7 +153,12 @@ async fn main() -> Result<()> {
|
||||||
// a2t.set_volume(config.volume);
|
// a2t.set_volume(config.volume);
|
||||||
// a2t.set_playing(true);
|
// a2t.set_playing(true);
|
||||||
// }
|
// }
|
||||||
|
let encoder = audiopus::coder::Encoder::new(
|
||||||
|
audiopus::SampleRate::Hz48000,
|
||||||
|
audiopus::Channels::Stereo,
|
||||||
|
audiopus::Application::Voip)
|
||||||
|
.expect("Can't construct encoder!");
|
||||||
|
let encoder = Arc::new(Mutex::new(encoder));
|
||||||
let mut interval = tokio::time::interval(Duration::from_millis(TICK_TIME));
|
let mut interval = tokio::time::interval(Duration::from_millis(TICK_TIME));
|
||||||
|
|
||||||
// tokio::spawn(async {
|
// tokio::spawn(async {
|
||||||
|
@ -207,14 +212,13 @@ async fn main() -> Result<()> {
|
||||||
//eprintln!("Tick took {}ms",dur.as_millis());
|
//eprintln!("Tick took {}ms",dur.as_millis());
|
||||||
}
|
}
|
||||||
let start = std::time::Instant::now();
|
let start = std::time::Instant::now();
|
||||||
if let Some(processed) = process_audio(&voice_buffer).await {
|
if let Some(processed) = process_audio(&voice_buffer,&encoder).await {
|
||||||
con.send_audio(processed)?;
|
con.send_audio(processed)?;
|
||||||
let dur = start.elapsed();
|
let dur = start.elapsed();
|
||||||
if dur >= Duration::from_millis(1) {
|
if dur >= Duration::from_millis(1) {
|
||||||
eprintln!("Audio pipeline took {}ms",dur.as_millis());
|
eprintln!("Audio pipeline took {}ms",dur.as_millis());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
_ = tokio::signal::ctrl_c() => { break; }
|
_ = tokio::signal::ctrl_c() => { break; }
|
||||||
r = events => {
|
r = events => {
|
||||||
|
@ -233,7 +237,7 @@ async fn main() -> Result<()> {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async fn process_audio(voice_buffer: &AudioBufferDiscord) -> Option<OutPacket> {
|
async fn process_audio(voice_buffer: &AudioBufferDiscord, encoder: &Arc<Mutex<Encoder>>) -> Option<OutPacket> {
|
||||||
let mut buffer_map;
|
let mut buffer_map;
|
||||||
{
|
{
|
||||||
let mut lock = voice_buffer.lock().await;
|
let mut lock = voice_buffer.lock().await;
|
||||||
|
@ -243,6 +247,7 @@ async fn process_audio(voice_buffer: &AudioBufferDiscord) -> Option<OutPacket> {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
let mut encoded = [0; 1024];
|
let mut encoded = [0; 1024];
|
||||||
|
let encoder_c = encoder.clone();
|
||||||
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);
|
||||||
|
@ -258,13 +263,9 @@ async fn process_audio(voice_buffer: &AudioBufferDiscord) -> Option<OutPacket> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let encoder = audiopus::coder::Encoder::new(
|
|
||||||
audiopus::SampleRate::Hz48000,
|
|
||||||
audiopus::Channels::Stereo,
|
|
||||||
audiopus::Application::Voip)
|
|
||||||
.expect("Can't construct encoder!");
|
|
||||||
|
|
||||||
let length = match encoder.encode(&data, &mut encoded) {
|
let lock = encoder_c.try_lock().expect("Can't reach encoder!");
|
||||||
|
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;},
|
||||||
Ok(size) => size,
|
Ok(size) => size,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue